summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorHaynes Mathew George <hgeorge@codeaurora.org>2014-10-16 00:49:40 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-10-16 00:49:40 +0000
commite9bf7a5d944bf3375da4a6da1b0c0059443b58f7 (patch)
treee31200367daa8baa7e849aac4cfe5365609c39aa /services
parent8265ba01c66eece3c8a0851a4724e6e637866ae0 (diff)
parenta2d4a6dac432f0c4f543d79b9a63c55ae91f81d6 (diff)
downloadframeworks_av-e9bf7a5d944bf3375da4a6da1b0c0059443b58f7.zip
frameworks_av-e9bf7a5d944bf3375da4a6da1b0c0059443b58f7.tar.gz
frameworks_av-e9bf7a5d944bf3375da4a6da1b0c0059443b58f7.tar.bz2
am a2d4a6da: audio policy: Fix for voice call audio loss
* commit 'a2d4a6dac432f0c4f543d79b9a63c55ae91f81d6': audio policy: Fix for voice call audio loss
Diffstat (limited to 'services')
-rw-r--r--services/audiopolicy/AudioPolicyService.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/services/audiopolicy/AudioPolicyService.cpp b/services/audiopolicy/AudioPolicyService.cpp
index 06a7e84..dd4067f 100644
--- a/services/audiopolicy/AudioPolicyService.cpp
+++ b/services/audiopolicy/AudioPolicyService.cpp
@@ -839,18 +839,38 @@ void AudioPolicyService::AudioCommandThread::insertCommand_l(sp<AudioCommand>& c
case CREATE_AUDIO_PATCH:
case RELEASE_AUDIO_PATCH: {
audio_patch_handle_t handle;
+ struct audio_patch patch;
if (command->mCommand == CREATE_AUDIO_PATCH) {
handle = ((CreateAudioPatchData *)command->mParam.get())->mHandle;
+ patch = ((CreateAudioPatchData *)command->mParam.get())->mPatch;
} else {
handle = ((ReleaseAudioPatchData *)command->mParam.get())->mHandle;
}
audio_patch_handle_t handle2;
+ struct audio_patch patch2;
if (command2->mCommand == CREATE_AUDIO_PATCH) {
handle2 = ((CreateAudioPatchData *)command2->mParam.get())->mHandle;
+ patch2 = ((CreateAudioPatchData *)command2->mParam.get())->mPatch;
} else {
handle2 = ((ReleaseAudioPatchData *)command2->mParam.get())->mHandle;
}
if (handle != handle2) break;
+ /* Filter CREATE_AUDIO_PATCH commands only when they are issued for
+ same output. */
+ if( (command->mCommand == CREATE_AUDIO_PATCH) &&
+ (command2->mCommand == CREATE_AUDIO_PATCH) ) {
+ bool isOutputDiff = false;
+ if (patch.num_sources == patch2.num_sources) {
+ for (unsigned count = 0; count < patch.num_sources; count++) {
+ if (patch.sources[count].id != patch2.sources[count].id) {
+ isOutputDiff = true;
+ break;
+ }
+ }
+ if (isOutputDiff)
+ break;
+ }
+ }
ALOGV("Filtering out %s audio patch command for handle %d",
(command->mCommand == CREATE_AUDIO_PATCH) ? "create" : "release", handle);
removedCommands.add(command2);