diff options
author | Haynes Mathew George <hgeorge@codeaurora.org> | 2014-10-16 00:49:40 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-10-16 00:49:40 +0000 |
commit | e9bf7a5d944bf3375da4a6da1b0c0059443b58f7 (patch) | |
tree | e31200367daa8baa7e849aac4cfe5365609c39aa /services | |
parent | 8265ba01c66eece3c8a0851a4724e6e637866ae0 (diff) | |
parent | a2d4a6dac432f0c4f543d79b9a63c55ae91f81d6 (diff) | |
download | frameworks_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.cpp | 20 |
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); |