From a34c9ce292ea984e92d8f70d2c056e5372c4f452 Mon Sep 17 00:00:00 2001 From: Eric Laurent Date: Fri, 19 Dec 2014 11:16:32 -0800 Subject: audio policy: fix isSourceActive() for hotword Only condider AUDIO_SOURCE_HOTWORD equivalent to AUDIO_SOURCE_VOICE_RECOGNITION if the active capture was triggered by a hardware hotword recognition. Also fix activeInputsCount(). Bug: 18802896. Change-Id: I471aafcae29a76e9c323c6c0c314ef083991476b --- services/audiopolicy/AudioPolicyManager.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) (limited to 'services/audiopolicy') diff --git a/services/audiopolicy/AudioPolicyManager.cpp b/services/audiopolicy/AudioPolicyManager.cpp index be7158f..34c677c 100644 --- a/services/audiopolicy/AudioPolicyManager.cpp +++ b/services/audiopolicy/AudioPolicyManager.cpp @@ -2055,12 +2055,23 @@ bool AudioPolicyManager::isSourceActive(audio_source_t source) const { for (size_t i = 0; i < mInputs.size(); i++) { const sp inputDescriptor = mInputs.valueAt(i); - if ((inputDescriptor->mInputSource == (int)source || - (source == AUDIO_SOURCE_VOICE_RECOGNITION && - inputDescriptor->mInputSource == AUDIO_SOURCE_HOTWORD)) - && (inputDescriptor->mRefCount > 0)) { + if (inputDescriptor->mRefCount == 0) { + continue; + } + if (inputDescriptor->mInputSource == (int)source) { return true; } + // AUDIO_SOURCE_HOTWORD is equivalent to AUDIO_SOURCE_VOICE_RECOGNITION only if it + // corresponds to an active capture triggered by a hardware hotword recognition + if ((source == AUDIO_SOURCE_VOICE_RECOGNITION) && + (inputDescriptor->mInputSource == AUDIO_SOURCE_HOTWORD)) { + // FIXME: we should not assume that the first session is the active one and keep + // activity count per session. Same in startInput(). + ssize_t index = mSoundTriggerSessions.indexOfKey(inputDescriptor->mSessions.itemAt(0)); + if (index >= 0) { + return true; + } + } } return false; } @@ -5296,7 +5307,7 @@ uint32_t AudioPolicyManager::activeInputsCount() const for (size_t i = 0; i < mInputs.size(); i++) { const sp desc = mInputs.valueAt(i); if (desc->mRefCount > 0) { - return count++; + count++; } } return count; -- cgit v1.1