summaryrefslogtreecommitdiff
path: root/pjsip/src/pjsua-lib
diff options
context:
space:
mode:
authorBenny Prijono <bennylp@teluu.com>2006-10-11 16:03:41 +0000
committerBenny Prijono <bennylp@teluu.com>2006-10-11 16:03:41 +0000
commitcfbc67a632b845289647f542a4dd0c3a38ea3d73 (patch)
treef03a3bcba551db8c28771607103513e873fe073f /pjsip/src/pjsua-lib
parenta4aaa7f498c2c1d1dfc6f7e532f513fd87d0667a (diff)
Changed pjsua_media.c to try different clock rates when opening sound device
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@763 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjsip/src/pjsua-lib')
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c
index 13ff542c..fabd08ca 100644
--- a/pjsip/src/pjsua-lib/pjsua_media.c
+++ b/pjsip/src/pjsua-lib/pjsua_media.c
@@ -44,9 +44,6 @@ pj_status_t pjsua_media_subsys_init(const pjsua_media_config *cfg)
pj_memcpy(&pjsua_var.media_cfg, cfg, sizeof(*cfg));
/* Normalize configuration */
-#if defined(PJ_DARWINOS) && PJ_DARWINOS!=0
- pjsua_var.media_cfg.clock_rate = 44100;
-#endif
if (pjsua_var.media_cfg.has_ioqueue &&
pjsua_var.media_cfg.thread_cnt == 0)
@@ -972,7 +969,9 @@ 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;
- pj_status_t status;
+ unsigned clock_rates[] = { 0, 22050, 44100, 48000, 11025, 32000, 8000};
+ unsigned i;
+ pj_status_t status = -1;
/* Close existing sound port */
close_snd_dev();
@@ -981,16 +980,31 @@ PJ_DEF(pj_status_t) pjsua_set_snd_dev( int capture_dev,
cap_info = pjmedia_snd_get_dev_info(capture_dev);
play_info = pjmedia_snd_get_dev_info(playback_dev);
- PJ_LOG(4,(THIS_FILE, "Opening %s sound playback device and "
- "%s sound capture device..",
- play_info->name, cap_info->name));
+ /* Set default clock rate */
+ clock_rates[0] = pjsua_var.media_cfg.clock_rate;
+
+ /* Attempts to open the sound device with different clock rates */
+ for (i=0; i<PJ_ARRAY_SIZE(clock_rates); ++i) {
+ char errmsg[PJ_ERR_MSG_SIZE];
+
+ PJ_LOG(4,(THIS_FILE,
+ "pjsua_set_snd_dev(): attempting to open devices "
+ "@%d Hz", clock_rates[i]));
+
+ /* Create the sound device. Sound port will start immediately. */
+ status = pjmedia_snd_port_create(pjsua_var.pool, capture_dev,
+ playback_dev,
+ clock_rates[i], 1,
+ clock_rates[i]/FPS,
+ 16, 0, &pjsua_var.snd_port);
+
+ if (status == PJ_SUCCESS)
+ break;
+
+ pj_strerror(status, errmsg, sizeof(errmsg));
+ PJ_LOG(4, ("..failed: %s", errmsg));
+ }
- /* Create the sound device. Sound port will start immediately. */
- status = pjmedia_snd_port_create(pjsua_var.pool, capture_dev,
- playback_dev,
- pjsua_var.media_cfg.clock_rate, 1,
- pjsua_var.media_cfg.clock_rate/FPS,
- 16, 0, &pjsua_var.snd_port);
if (status != PJ_SUCCESS) {
pjsua_perror(THIS_FILE, "Unable to open sound device", status);
return status;