summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pjlib/src/pj/os_info.c14
-rw-r--r--pjsip/src/pjsua-lib/pjsua_core.c15
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;