summaryrefslogtreecommitdiffstats
path: root/services
diff options
context:
space:
mode:
authorEric Laurent <elaurent@google.com>2014-09-05 18:32:54 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-09-05 18:32:54 +0000
commit615080f60725ae5bc52d20950e2ca61b54bd8600 (patch)
treef689e74f183857c8debbdc785f6b68ebf6e4ee95 /services
parent25dc053bd80856b4fb07bf702531f6b94debd00d (diff)
parent03a9ef73dd1059c92740c271d300b899b7030498 (diff)
downloadframeworks_av-615080f60725ae5bc52d20950e2ca61b54bd8600.zip
frameworks_av-615080f60725ae5bc52d20950e2ca61b54bd8600.tar.gz
frameworks_av-615080f60725ae5bc52d20950e2ca61b54bd8600.tar.bz2
am 03a9ef73: am f2a2d0d6: Merge "audio policy service: filter out delayed audio patch commands if needed." into lmp-dev
* commit '03a9ef73dd1059c92740c271d300b899b7030498': audio policy service: filter out delayed audio patch commands if needed.
Diffstat (limited to 'services')
-rw-r--r--services/audiopolicy/AudioPolicyService.cpp36
1 files changed, 35 insertions, 1 deletions
diff --git a/services/audiopolicy/AudioPolicyService.cpp b/services/audiopolicy/AudioPolicyService.cpp
index 7f14960..50bb8c7 100644
--- a/services/audiopolicy/AudioPolicyService.cpp
+++ b/services/audiopolicy/AudioPolicyService.cpp
@@ -765,7 +765,16 @@ void AudioPolicyService::AudioCommandThread::insertCommand_l(sp<AudioCommand>& c
sp<AudioCommand> command2 = mAudioCommands[i];
// commands are sorted by increasing time stamp: no need to scan the rest of mAudioCommands
if (command2->mTime <= command->mTime) break;
- if (command2->mCommand != command->mCommand) continue;
+
+ // create audio patch or release audio patch commands are equivalent
+ // with regard to filtering
+ if ((command->mCommand == CREATE_AUDIO_PATCH) ||
+ (command->mCommand == RELEASE_AUDIO_PATCH)) {
+ if ((command2->mCommand != CREATE_AUDIO_PATCH) &&
+ (command2->mCommand != RELEASE_AUDIO_PATCH)) {
+ continue;
+ }
+ } else if (command2->mCommand != command->mCommand) continue;
switch (command->mCommand) {
case SET_PARAMETERS: {
@@ -817,6 +826,31 @@ void AudioPolicyService::AudioCommandThread::insertCommand_l(sp<AudioCommand>& c
// command status as the command is now delayed
delayMs = 1;
} break;
+
+ case CREATE_AUDIO_PATCH:
+ case RELEASE_AUDIO_PATCH: {
+ audio_patch_handle_t handle;
+ if (command->mCommand == CREATE_AUDIO_PATCH) {
+ handle = ((CreateAudioPatchData *)command->mParam.get())->mHandle;
+ } else {
+ handle = ((ReleaseAudioPatchData *)command->mParam.get())->mHandle;
+ }
+ audio_patch_handle_t handle2;
+ if (command2->mCommand == CREATE_AUDIO_PATCH) {
+ handle2 = ((CreateAudioPatchData *)command2->mParam.get())->mHandle;
+ } else {
+ handle2 = ((ReleaseAudioPatchData *)command2->mParam.get())->mHandle;
+ }
+ if (handle != handle2) break;
+ ALOGV("Filtering out %s audio patch command for handle %d",
+ (command->mCommand == CREATE_AUDIO_PATCH) ? "create" : "release", handle);
+ removedCommands.add(command2);
+ command->mTime = command2->mTime;
+ // force delayMs to non 0 so that code below does not request to wait for
+ // command status as the command is now delayed
+ delayMs = 1;
+ } break;
+
case START_TONE:
case STOP_TONE:
default: