From 8c5296fba455adc138bce1d8c643659db575c7b1 Mon Sep 17 00:00:00 2001 From: Nanang Izzuddin Date: Tue, 21 Jan 2014 10:59:25 +0000 Subject: Re #1519 [into SVN trunk]: AudioMedia objects must not be destroyed before unregistered from conf bridge. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4708 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip-apps/src/samples/pjsua2_demo.cpp | 41 ++++++++++++++++++++++++++++++---- pjsip/src/pjsua2/media.cpp | 20 +++++++++++++++-- 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/pjsip-apps/src/samples/pjsua2_demo.cpp b/pjsip-apps/src/samples/pjsua2_demo.cpp index 65a6a45f..7e9ea34a 100644 --- a/pjsip-apps/src/samples/pjsua2_demo.cpp +++ b/pjsip-apps/src/samples/pjsua2_demo.cpp @@ -91,6 +91,8 @@ public: void MyCall::onCallState(OnCallStateParam &prm) { + PJ_UNUSED_ARG(prm); + CallInfo ci = getInfo(); std::cout << "*** Call: " << ci.remoteUri << " [" << ci.stateText << "]" << std::endl; @@ -204,6 +206,40 @@ void mainProg2() throw(Error) ep.libDestroy(); } + +void mainProg3() throw(Error) +{ + Endpoint ep; + + // Create library + ep.libCreate(); + + // Init library + EpConfig ep_cfg; + ep.libInit( ep_cfg ); + + // Start library + ep.libStart(); + std::cout << "*** PJSUA2 STARTED ***" << std::endl; + + // Create player and recorder + { + AudioMediaPlayer amp; + amp.createPlayer("../../tests/pjsua/wavs/input.16.wav"); + + AudioMediaRecorder amr; + amr.createRecorder("recorder_test_output.wav"); + + amp.startTransmit(ep.audDevManager().getPlaybackDevMedia()); + amp.startTransmit(amr); + + pj_thread_sleep(5000); + } + + ep.libDestroy(); +} + + void mainProg() throw(Error) { Endpoint ep; @@ -271,13 +307,10 @@ int main() */ { Endpoint ep; - ep.natDetectType(); - { - } } try { - mainProg1(); + mainProg3(); std::cout << "Success" << std::endl; } catch (Error & err) { std::cout << "Exception: " << err.info() << std::endl; diff --git a/pjsip/src/pjsua2/media.cpp b/pjsip/src/pjsua2/media.cpp index 175d5987..0c478feb 100644 --- a/pjsip/src/pjsua2/media.cpp +++ b/pjsip/src/pjsua2/media.cpp @@ -247,14 +247,20 @@ AudioMediaPlayer::AudioMediaPlayer() AudioMediaPlayer::~AudioMediaPlayer() { - if (playerId != PJSUA_INVALID_ID) + if (playerId != PJSUA_INVALID_ID) { + unregisterMediaPort(); pjsua_player_destroy(playerId); + } } void AudioMediaPlayer::createPlayer(const string &file_name, unsigned options) throw(Error) { + if (playerId != PJSUA_INVALID_ID) { + PJSUA2_RAISE_ERROR(PJ_EEXISTS); + } + pj_str_t pj_name = str2Pj(file_name); PJSUA2_CHECK_EXPR( pjsua_player_create(&pj_name, @@ -272,6 +278,10 @@ void AudioMediaPlayer::createPlaylist(const StringVector &file_names, unsigned options) throw(Error) { + if (playerId != PJSUA_INVALID_ID) { + PJSUA2_RAISE_ERROR(PJ_EEXISTS); + } + pj_str_t pj_files[MAX_FILE_NAMES]; unsigned i, count = 0; pj_str_t pj_lbl = str2Pj(label); @@ -317,8 +327,10 @@ AudioMediaRecorder::AudioMediaRecorder() AudioMediaRecorder::~AudioMediaRecorder() { - if (recorderId != PJSUA_INVALID_ID) + if (recorderId != PJSUA_INVALID_ID) { + unregisterMediaPort(); pjsua_recorder_destroy(recorderId); + } } void AudioMediaRecorder::createRecorder(const string &file_name, @@ -329,6 +341,10 @@ void AudioMediaRecorder::createRecorder(const string &file_name, { PJ_UNUSED_ARG(max_size); + if (recorderId != PJSUA_INVALID_ID) { + PJSUA2_RAISE_ERROR(PJ_EEXISTS); + } + pj_str_t pj_name = str2Pj(file_name); PJSUA2_CHECK_EXPR( pjsua_recorder_create(&pj_name, -- cgit v1.2.3