diff options
author | Eric Laurent <elaurent@google.com> | 2015-04-03 12:13:24 -0700 |
---|---|---|
committer | Eric Laurent <elaurent@google.com> | 2015-04-08 12:38:08 -0700 |
commit | 3bcf8597189c592713675ec58326ecbef0ac4ae9 (patch) | |
tree | 5656987c2e9d6fe9c99bb632865318489432fe36 /services/audiopolicy/managerdefault | |
parent | 322b4d25387a04c9afebe998326d005bbdf17ede (diff) | |
download | frameworks_av-3bcf8597189c592713675ec58326ecbef0ac4ae9.zip frameworks_av-3bcf8597189c592713675ec58326ecbef0ac4ae9.tar.gz frameworks_av-3bcf8597189c592713675ec58326ecbef0ac4ae9.tar.bz2 |
audio flinger: improve device to device audio patches
Allow creation of audio patches between input and output
devices managed by the same audio HW module.
Change-Id: I4b83268a4d5c41f3d5905d7581202cf5193efd32
Diffstat (limited to 'services/audiopolicy/managerdefault')
-rw-r--r-- | services/audiopolicy/managerdefault/AudioPolicyManager.cpp | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp index a7d9fd5..ffa689a 100644 --- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp +++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp @@ -353,6 +353,7 @@ void AudioPolicyManager::updateCallRouting(audio_devices_t rxDevice, int delayMs ALOG_ASSERT(!outputDesc->isDuplicated(), "updateCallRouting() RX device output is duplicated"); outputDesc->toAudioPortConfig(&patch.sources[1]); + patch.sources[1].ext.mix.usecase.stream = AUDIO_STREAM_PATCH; patch.num_sources = 2; } @@ -395,6 +396,7 @@ void AudioPolicyManager::updateCallRouting(audio_devices_t rxDevice, int delayMs ALOG_ASSERT(!outputDesc->isDuplicated(), "updateCallRouting() RX device output is duplicated"); outputDesc->toAudioPortConfig(&patch.sources[1]); + patch.sources[1].ext.mix.usecase.stream = AUDIO_STREAM_PATCH; patch.num_sources = 2; } @@ -2184,8 +2186,12 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, } sinkDeviceDesc->toAudioPortConfig(&newPatch.sinks[i], &patch->sinks[i]); - if (srcDeviceDesc->getModuleHandle() != sinkDeviceDesc->getModuleHandle()) { - // only one sink supported when connected devices across HW modules + // create a software bridge in PatchPanel if: + // - source and sink devices are on differnt HW modules OR + // - audio HAL version is < 3.0 + if ((srcDeviceDesc->getModuleHandle() != sinkDeviceDesc->getModuleHandle()) || + (srcDeviceDesc->mModule->mHalVersion < AUDIO_DEVICE_API_VERSION_3_0)) { + // support only one sink device for now to simplify output selection logic if (patch->num_sinks > 1) { return INVALID_OPERATION; } @@ -2202,6 +2208,7 @@ status_t AudioPolicyManager::createAudioPatch(const struct audio_patch *patch, return INVALID_OPERATION; } outputDesc->toAudioPortConfig(&newPatch.sources[1], &patch->sources[0]); + newPatch.sources[1].ext.mix.usecase.stream = AUDIO_STREAM_PATCH; newPatch.num_sources = 2; } } |