audiopolicy: Fix to close all opened inputs in closeAllInputs
Sound recorder app freezes if device switch happens from usb-mic to
handset-mic during recording
During device switch, closeAllInputs is called and all opened inputs
are closed. But loop is not executed to close all the opened inputs.
Fix the issue by closing the opened inputs in decrement order.
CRs-Fixed: 920308
Change-Id: Ib3ac78fb3d9d20aa42948d25d32d69a897ab5c5b
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index dfe379a..0619a79 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -1873,8 +1873,8 @@
void AudioPolicyManagerCustom::closeAllInputs() {
bool patchRemoved = false;
- for(size_t input_index = 0; input_index < mInputs.size(); input_index++) {
- sp<AudioInputDescriptor> inputDesc = mInputs.valueAt(input_index);
+ for(size_t input_index = mInputs.size(); input_index > 0; input_index--) {
+ sp<AudioInputDescriptor> inputDesc = mInputs.valueAt(input_index-1);
ssize_t patch_index = mAudioPatches.indexOfKey(inputDesc->mPatchHandle);
if (patch_index >= 0) {
sp<AudioPatch> patchDesc = mAudioPatches.valueAt(patch_index);
@@ -1885,8 +1885,8 @@
if ((inputDesc->mIsSoundTrigger) && (mInputs.size() == 1)) {
ALOGD("Do not close sound trigger input handle");
} else {
- mpClientInterface->closeInput(mInputs.keyAt(input_index));
- mInputs.removeItem(mInputs.keyAt(input_index));
+ mpClientInterface->closeInput(mInputs.keyAt(input_index-1));
+ mInputs.removeItem(mInputs.keyAt(input_index-1));
}
}
nextAudioPortGeneration();