diff options
Diffstat (limited to 'pjmedia')
-rw-r--r-- | pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp | 12 | ||||
-rw-r--r-- | pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp | 37 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/codec.c | 6 |
3 files changed, 39 insertions, 16 deletions
diff --git a/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp b/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp index b544f9cd..1d818b7e 100644 --- a/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp +++ b/pjmedia/src/pjmedia-audiodev/symb_aps_dev.cpp @@ -1034,14 +1034,20 @@ static void PlayCb(TAPSCommBuffer &buf, void *user_data) buf.iBuffer.Append((TUint8*)sf->data, len); } else { - buf.iBuffer.Append(0); + enum {NO_DATA_FT = 15 }; + pj_uint8_t amr_header = 4 || (NO_DATA_FT << 3); + + buf.iBuffer.Append(amr_header); } pjmedia_frame_ext_pop_subframes(frame, 1); } else { /* PJMEDIA_FRAME_TYPE_NONE */ - buf.iBuffer.Append(0); - + enum {NO_DATA_FT = 15 }; + pj_uint8_t amr_header = 4 || (NO_DATA_FT << 3); + + buf.iBuffer.Append(amr_header); + frame->samples_cnt = 0; frame->subframe_cnt = 0; } diff --git a/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp b/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp index ae9b43c6..08e36fe9 100644 --- a/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp +++ b/pjmedia/src/pjmedia-audiodev/symb_vas_dev.cpp @@ -415,7 +415,7 @@ TInt CPjAudioEngine::InitRec() TInt CPjAudioEngine::StartPlay() { - TInt err; + TInt err = KErrNone; pj_assert(iVoIPDnlink); pj_assert(dn_state_ == STATE_READY); @@ -428,7 +428,6 @@ TInt CPjAudioEngine::StartPlay() dec_fmt_if; err = g711dec_if->SetMode((CVoIPFormatIntfc::TG711CodecMode) setting_.mode); - pj_assert(err == KErrNone); } break; @@ -438,20 +437,28 @@ TInt CPjAudioEngine::StartPlay() dec_fmt_if; err = ilbcdec_if->SetMode((CVoIPFormatIntfc::TILBCCodecMode) setting_.mode); - pj_assert(err == KErrNone); } break; + case EAMR_NB: + /* Ticket #1008: AMR playback issue on few devices, e.g: E72, E52 */ + err = dec_fmt_if->SetFrameMode(ETrue); + break; + default: break; } + + if (err != KErrNone) + goto on_return; /* Configure audio routing */ ActivateSpeaker(setting_.loudspk); /* Start player */ err = iVoIPDnlink->Start(); - + +on_return: if (err == KErrNone) { dn_state_ = STATE_STREAMING; TRACE_((THIS_FILE, "Downlink started")); @@ -464,7 +471,7 @@ TInt CPjAudioEngine::StartPlay() TInt CPjAudioEngine::StartRec() { - TInt err; + TInt err = KErrNone; pj_assert(iVoIPUplink); pj_assert(up_state_ == STATE_READY); @@ -477,7 +484,6 @@ TInt CPjAudioEngine::StartRec() enc_fmt_if; err = g711enc_if->SetMode((CVoIPFormatIntfc::TG711CodecMode) setting_.mode); - pj_assert(err == KErrNone); } break; @@ -487,24 +493,27 @@ TInt CPjAudioEngine::StartRec() enc_fmt_if; err = ilbcenc_if->SetMode((CVoIPFormatIntfc::TILBCCodecMode) setting_.mode); - pj_assert(err == KErrNone); } break; case EAMR_NB: - enc_fmt_if->SetBitRate(setting_.mode); + err = enc_fmt_if->SetBitRate(setting_.mode); break; default: break; } + if (err != KErrNone) + goto on_return; + /* Configure general codec setting */ enc_fmt_if->SetVAD(setting_.vad); /* Start recorder */ err = iVoIPUplink->Start(); - + +on_return: if (err == KErrNone) { up_state_ = STATE_STREAMING; TRACE_((THIS_FILE, "Uplink started")); @@ -1112,13 +1121,19 @@ static void PlayCb(CVoIPDataBuffer *buf, void *user_data) buffer.Append((TUint8*)sf->data, len); } else { - buffer.Append(0); + enum {NO_DATA_FT = 15 }; + pj_uint8_t amr_header = 4 || (NO_DATA_FT << 3); + + buffer.Append(amr_header); } pjmedia_frame_ext_pop_subframes(frame, 1); } else { /* PJMEDIA_FRAME_TYPE_NONE */ - buffer.Append(0); + enum {NO_DATA_FT = 15 }; + pj_uint8_t amr_header = 4 || (NO_DATA_FT << 3); + + buffer.Append(amr_header); frame->samples_cnt = 0; frame->subframe_cnt = 0; diff --git a/pjmedia/src/pjmedia/codec.c b/pjmedia/src/pjmedia/codec.c index d65ede4e..39d77834 100644 --- a/pjmedia/src/pjmedia/codec.c +++ b/pjmedia/src/pjmedia/codec.c @@ -85,10 +85,12 @@ PJ_DEF(pj_status_t) pjmedia_codec_mgr_destroy (pjmedia_codec_mgr *mgr) } /* Destroy mutex */ - pj_mutex_destroy(mgr->mutex); + if (mgr->mutex) + pj_mutex_destroy(mgr->mutex); /* Release pool */ - pj_pool_release(mgr->pool); + if (mgr->pool) + pj_pool_release(mgr->pool); /* Just for safety, set codec manager states to zero */ pj_bzero(mgr, sizeof(pjmedia_codec_mgr)); |