diff options
-rw-r--r-- | pjlib/src/pj/os_info.c | 14 | ||||
-rw-r--r-- | pjsip/src/pjsua-lib/pjsua_core.c | 15 |
2 files changed, 24 insertions, 5 deletions
diff --git a/pjlib/src/pj/os_info.c b/pjlib/src/pj/os_info.c index dfa486c5..514ff242 100644 --- a/pjlib/src/pj/os_info.c +++ b/pjlib/src/pj/os_info.c @@ -57,6 +57,8 @@ #if defined(PJ_DARWINOS) && PJ_DARWINOS != 0 && TARGET_OS_IPHONE +# include <sys/types.h> +# include <sys/sysctl.h> void pj_iphone_os_get_sys_info(pj_sys_info *si, pj_str_t *si_buffer); #endif @@ -151,16 +153,20 @@ PJ_DEF(const pj_sys_info*) pj_get_sys_info(void) (!defined TARGET_IPHONE_SIMULATOR || TARGET_IPHONE_SIMULATOR == 0) { pj_str_t buf = {si_buffer + PJ_SYS_INFO_BUFFER_SIZE - left, left}; - pj_str_t machine = {"arm", 3}; + pj_str_t machine = {"arm-", 4}; pj_str_t sdk_name = {"iOS-SDK", 7}; + size_t size = PJ_SYS_INFO_BUFFER_SIZE - machine.slen; char tmp[PJ_SYS_INFO_BUFFER_SIZE]; - + int name[] = {CTL_HW,HW_MACHINE}; + pj_iphone_os_get_sys_info(&si, &buf); left -= si.os_name.slen + 1; si.os_ver = parse_version(si.machine.ptr); - - si.machine = machine; + + pj_memcpy(tmp, machine.ptr, machine.slen); + sysctl(name, 2, tmp+machine.slen, &size, NULL, 0); + ALLOC_CP_STR(tmp, machine); si.sdk_name = sdk_name; #ifdef PJ_SDK_NAME diff --git a/pjsip/src/pjsua-lib/pjsua_core.c b/pjsip/src/pjsua-lib/pjsua_core.c index d170b664..bc0cc406 100644 --- a/pjsip/src/pjsua-lib/pjsua_core.c +++ b/pjsip/src/pjsua-lib/pjsua_core.c @@ -309,10 +309,23 @@ PJ_DEF(void) pjsua_buddy_config_default(pjsua_buddy_config *cfg) PJ_DEF(void) pjsua_media_config_default(pjsua_media_config *cfg) { + const pj_sys_info *si = pj_get_sys_info(); + pj_str_t dev_model = {"iPhone5", 7}; + pj_bzero(cfg, sizeof(*cfg)); cfg->clock_rate = PJSUA_DEFAULT_CLOCK_RATE; - cfg->snd_clock_rate = 0; + /* It is reported that there may be some media server resampling problem + * with iPhone 5 devices running iOS 7, so we set the sound device's + * clock rate to 44100 to avoid resampling. + */ + if (pj_stristr(&si->machine, &dev_model) && + ((si->os_ver & 0xFF000000) >> 24) >= 7) + { + cfg->snd_clock_rate = 44100; + } else { + cfg->snd_clock_rate = 0; + } cfg->channel_count = 1; cfg->audio_frame_ptime = PJSUA_DEFAULT_AUDIO_FRAME_PTIME; cfg->max_media_ports = PJSUA_MAX_CONF_PORTS; |