summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2014-01-21 10:59:25 +0000
committerNanang Izzuddin <nanang@teluu.com>2014-01-21 10:59:25 +0000
commit8c5296fba455adc138bce1d8c643659db575c7b1 (patch)
tree09c96130d5afa86746f4582f69e873b510ecfdc3
parent0703ebd85dd35f119bc5ca2554b1e98da1ab1dad (diff)
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
-rw-r--r--pjsip-apps/src/samples/pjsua2_demo.cpp41
-rw-r--r--pjsip/src/pjsua2/media.cpp20
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,