diff options
author | Liong Sauw Ming <ming@teluu.com> | 2012-04-24 10:26:07 +0000 |
---|---|---|
committer | Liong Sauw Ming <ming@teluu.com> | 2012-04-24 10:26:07 +0000 |
commit | 9683edf167e5ba635e4c0e9355757c830f36f4ff (patch) | |
tree | c4553cecd8e4eb5fc6ca5f9b153f53c674cb97f0 /pjmedia/src | |
parent | 4a1a62eeeaeff0ed21f856d1955925bcc4d916aa (diff) |
Fixed #1494: Use EC options to determine whether to use device/software EC
git-svn-id: http://svn.pjsip.org/repos/pjproject/branches/1.x@4079 74dad513-b988-da41-8d7b-12977e46ad98
Diffstat (limited to 'pjmedia/src')
-rw-r--r-- | pjmedia/src/pjmedia-audiodev/coreaudio_dev.c | 5 | ||||
-rw-r--r-- | pjmedia/src/pjmedia/sound_port.c | 19 |
2 files changed, 18 insertions, 6 deletions
diff --git a/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c b/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c index c5a3e621..d0718979 100644 --- a/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c +++ b/pjmedia/src/pjmedia-audiodev/coreaudio_dev.c @@ -1964,6 +1964,11 @@ static pj_status_t ca_stream_set_cap(pjmedia_aud_stream *s, strm->cf->io_comp = io_comp; strm->param.ec_enabled = *(pj_bool_t*)pval; + PJ_LOG(4, (THIS_FILE, "Using %s audio unit", + (desc.componentSubType == + kAudioUnitSubType_RemoteIO? "RemoteIO": + "VoiceProcessingIO"))); + return PJ_SUCCESS; } #endif diff --git a/pjmedia/src/pjmedia/sound_port.c b/pjmedia/src/pjmedia/sound_port.c index 35f91dc9..b1bfa965 100644 --- a/pjmedia/src/pjmedia/sound_port.c +++ b/pjmedia/src/pjmedia/sound_port.c @@ -225,11 +225,14 @@ static pj_status_t start_sound_device( pj_pool_t *pool, pj_memcpy(¶m_copy, &snd_port->aud_param, sizeof(param_copy)); if (param_copy.flags & PJMEDIA_AUD_DEV_CAP_EC) { /* EC is wanted */ - if (snd_port->aud_caps & PJMEDIA_AUD_DEV_CAP_EC) { + if ((snd_port->prm_ec_options & PJMEDIA_ECHO_USE_SW_ECHO) == 0 && + snd_port->aud_caps & PJMEDIA_AUD_DEV_CAP_EC) + { /* Device supports EC */ /* Nothing to do */ } else { - /* Device doesn't support EC, remove EC settings from + /* Application wants to use software EC or device + * doesn't support EC, remove EC settings from * device parameters */ param_copy.flags &= ~(PJMEDIA_AUD_DEV_CAP_EC | @@ -261,11 +264,13 @@ static pj_status_t start_sound_device( pj_pool_t *pool, (snd_port->clock_rate / snd_port->samples_per_frame); - /* Create software EC if parameter specifies EC but device - * doesn't support EC. Only do this if the format is PCM! + /* Create software EC if parameter specifies EC and + * (app specifically requests software EC or device + * doesn't support EC). Only do this if the format is PCM! */ if ((snd_port->aud_param.flags & PJMEDIA_AUD_DEV_CAP_EC) && - (snd_port->aud_caps & PJMEDIA_AUD_DEV_CAP_EC)==0 && + ((snd_port->aud_caps & PJMEDIA_AUD_DEV_CAP_EC)==0 || + (snd_port->prm_ec_options & PJMEDIA_ECHO_USE_SW_ECHO) != 0) && param_copy.ext_fmt.id == PJMEDIA_FORMAT_PCM) { if ((snd_port->aud_param.flags & PJMEDIA_AUD_DEV_CAP_EC_TAIL)==0) { @@ -505,7 +510,9 @@ PJ_DEF(pj_status_t) pjmedia_snd_port_set_ec( pjmedia_snd_port *snd_port, PJ_EINVALIDOP); /* Determine whether we use device or software EC */ - if (snd_port->aud_caps & PJMEDIA_AUD_DEV_CAP_EC) { + if ((snd_port->prm_ec_options & PJMEDIA_ECHO_USE_SW_ECHO) == 0 && + snd_port->aud_caps & PJMEDIA_AUD_DEV_CAP_EC) + { /* We use device EC */ pj_bool_t ec_enabled; |