From e1f6e2c436a7ff660c91810a8e0baff70664cc96 Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Fri, 21 Mar 2008 08:56:02 +0000 Subject: More ticket #61: bug in pjsua-lib with SRTP. If call is hold and resumed, SRTP transports will use itself as the underlying transport git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@1883 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsua-lib/pjsua_media.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) (limited to 'pjsip') diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 7917c558..d50667ce 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -169,7 +169,7 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg) /* Save additional conference bridge parameters for future * reference. */ - pjsua_var.mconf_cfg.channel_count = 1; + pjsua_var.mconf_cfg.channel_count = pjsua_var.media_cfg.channel_count; pjsua_var.mconf_cfg.bits_per_sample = 16; pjsua_var.mconf_cfg.samples_per_frame = pjsua_var.media_cfg.clock_rate * pjsua_var.mconf_cfg.channel_count * @@ -785,6 +785,12 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, /* Stop media transport (for good measure!) */ pjmedia_transport_media_stop(call->med_tp); + /* Close upper entry of transport stack */ + if (call->med_orig && (call->med_tp != call->med_orig)) { + pjmedia_transport_close(call->med_tp); + call->med_tp = call->med_orig; + } + #if defined(PJMEDIA_HAS_SRTP) && (PJMEDIA_HAS_SRTP != 0) /* Check if SRTP requires secure signaling */ if (acc->cfg.use_srtp != PJMEDIA_SRTP_DISABLED) { @@ -925,7 +931,7 @@ pj_status_t pjsua_media_channel_deinit(pjsua_call_id call_id) pjmedia_transport_media_stop(call->med_tp); - if (call->med_tp != call->med_orig) { + if (call->med_orig && call->med_tp != call->med_orig) { pjmedia_transport_close(call->med_tp); call->med_tp = call->med_orig; } @@ -1022,6 +1028,12 @@ pj_status_t pjsua_media_channel_update(pjsua_call_id call_id, /* No need because we need keepalive? */ + /* Close upper entry of transport stack */ + if (call->med_orig && (call->med_tp != call->med_orig)) { + pjmedia_transport_close(call->med_tp); + call->med_tp = call->med_orig; + } + } else { /* Start media transport */ status = pjmedia_transport_media_start(call->med_tp, @@ -1822,8 +1834,10 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev, fps = 1000 / pjsua_var.media_cfg.audio_frame_ptime; status = pjmedia_snd_port_create(pjsua_var.pool, capture_dev, playback_dev, - clock_rates[i], 1, - clock_rates[i]/fps, + clock_rates[i], + pjsua_var.media_cfg.channel_count, + clock_rates[i]/fps * + pjsua_var.media_cfg.channel_count, 16, 0, &pjsua_var.snd_port); if (status == PJ_SUCCESS) { -- cgit v1.2.3