From ec897ae3d61a3bc9b524c35a8f4cc427e6c4b79e Mon Sep 17 00:00:00 2001 From: Benny Prijono Date: Wed, 11 Oct 2006 21:56:16 +0000 Subject: Fixed bug in pjsua_media.c: when sound device is created with different sampling rate than the clock rate configuration, resampling port needs to be created. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@765 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsua-lib/pjsua_media.c | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) (limited to 'pjsip') diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index fabd08ca..63527f71 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -970,6 +970,7 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev, pjmedia_port *conf_port; const pjmedia_snd_dev_info *cap_info, *play_info; unsigned clock_rates[] = { 0, 22050, 44100, 48000, 11025, 32000, 8000}; + unsigned selected_clock_rate = 0; unsigned i; pj_status_t status = -1; @@ -998,11 +999,13 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev, clock_rates[i]/FPS, 16, 0, &pjsua_var.snd_port); - if (status == PJ_SUCCESS) + if (status == PJ_SUCCESS) { + selected_clock_rate = clock_rates[i]; break; + } pj_strerror(status, errmsg, sizeof(errmsg)); - PJ_LOG(4, ("..failed: %s", errmsg)); + PJ_LOG(4, (THIS_FILE, "..failed: %s", errmsg)); } if (status != PJ_SUCCESS) { @@ -1019,6 +1022,23 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev, pjsua_var.media_cfg.ec_tail_len, pjsua_var.media_cfg.ec_options); + /* If there's mismatch between sound port and conference's port, + * create a resample port to bridge them. + */ + if (selected_clock_rate != pjsua_var.media_cfg.clock_rate) { + pjmedia_port *resample_port; + + status = pjmedia_resample_port_create(pjsua_var.pool, conf_port, + selected_clock_rate, 0, + &resample_port); + if (status != PJ_SUCCESS) { + pjsua_perror("Error creating resample port", THIS_FILE, status); + return status; + } + + conf_port = resample_port; + } + /* Connect sound port to the bridge */ status = pjmedia_snd_port_connect(pjsua_var.snd_port, conf_port ); -- cgit v1.2.3