Loading services/audiopolicy/AudioPolicyManager.cpp +48 −3 Original line number Diff line number Diff line Loading @@ -1454,19 +1454,31 @@ void AudioPolicyManager::releaseInput(audio_io_handle_t input, return; } mpClientInterface->closeInput(input); mInputs.removeItem(input); nextAudioPortGeneration(); closeInput(input); mpClientInterface->onAudioPortListUpdate(); ALOGV("releaseInput() exit"); } void AudioPolicyManager::closeAllInputs() { bool patchRemoved = false; for(size_t input_index = 0; input_index < mInputs.size(); input_index++) { sp<AudioInputDescriptor> inputDesc = mInputs.valueAt(input_index); ssize_t patch_index = mAudioPatches.indexOfKey(inputDesc->mPatchHandle); if (patch_index >= 0) { sp<AudioPatch> patchDesc = mAudioPatches.valueAt(patch_index); status_t status = mpClientInterface->releaseAudioPatch(patchDesc->mAfPatchHandle, 0); mAudioPatches.removeItemsAt(patch_index); patchRemoved = true; } mpClientInterface->closeInput(mInputs.keyAt(input_index)); } mInputs.clear(); nextAudioPortGeneration(); if (patchRemoved) { mpClientInterface->onAudioPatchListUpdate(); } } void AudioPolicyManager::initStreamVolume(audio_stream_type_t stream, Loading Loading @@ -3497,6 +3509,16 @@ void AudioPolicyManager::closeOutput(audio_io_handle_t output) } } nextAudioPortGeneration(); ssize_t index = mAudioPatches.indexOfKey(outputDesc->mPatchHandle); if (index >= 0) { sp<AudioPatch> patchDesc = mAudioPatches.valueAt(index); status_t status = mpClientInterface->releaseAudioPatch(patchDesc->mAfPatchHandle, 0); mAudioPatches.removeItemsAt(index); mpClientInterface->onAudioPatchListUpdate(); } AudioParameter param; param.add(String8("closing"), String8("true")); mpClientInterface->setParameters(output, param.toString()); Loading @@ -3504,7 +3526,30 @@ void AudioPolicyManager::closeOutput(audio_io_handle_t output) mpClientInterface->closeOutput(output); mOutputs.removeItem(output); mPreviousOutputs = mOutputs; } void AudioPolicyManager::closeInput(audio_io_handle_t input) { ALOGV("closeInput(%d)", input); sp<AudioInputDescriptor> inputDesc = mInputs.valueFor(input); if (inputDesc == NULL) { ALOGW("closeInput() unknown input %d", input); return; } nextAudioPortGeneration(); ssize_t index = mAudioPatches.indexOfKey(inputDesc->mPatchHandle); if (index >= 0) { sp<AudioPatch> patchDesc = mAudioPatches.valueAt(index); status_t status = mpClientInterface->releaseAudioPatch(patchDesc->mAfPatchHandle, 0); mAudioPatches.removeItemsAt(index); mpClientInterface->onAudioPatchListUpdate(); } mpClientInterface->closeInput(input); mInputs.removeItem(input); } SortedVector<audio_io_handle_t> AudioPolicyManager::getOutputsForDevice(audio_devices_t device, Loading services/audiopolicy/AudioPolicyManager.h +3 −0 Original line number Diff line number Diff line Loading @@ -649,6 +649,9 @@ protected: // close an output and its companion duplicating output. void closeOutput(audio_io_handle_t output); // close an input. void closeInput(audio_io_handle_t input); // checks and if necessary changes outputs used for all strategies. // must be called every time a condition that affects the output choice for a given strategy // changes: connected device, phone state, force use... Loading Loading
services/audiopolicy/AudioPolicyManager.cpp +48 −3 Original line number Diff line number Diff line Loading @@ -1454,19 +1454,31 @@ void AudioPolicyManager::releaseInput(audio_io_handle_t input, return; } mpClientInterface->closeInput(input); mInputs.removeItem(input); nextAudioPortGeneration(); closeInput(input); mpClientInterface->onAudioPortListUpdate(); ALOGV("releaseInput() exit"); } void AudioPolicyManager::closeAllInputs() { bool patchRemoved = false; for(size_t input_index = 0; input_index < mInputs.size(); input_index++) { sp<AudioInputDescriptor> inputDesc = mInputs.valueAt(input_index); ssize_t patch_index = mAudioPatches.indexOfKey(inputDesc->mPatchHandle); if (patch_index >= 0) { sp<AudioPatch> patchDesc = mAudioPatches.valueAt(patch_index); status_t status = mpClientInterface->releaseAudioPatch(patchDesc->mAfPatchHandle, 0); mAudioPatches.removeItemsAt(patch_index); patchRemoved = true; } mpClientInterface->closeInput(mInputs.keyAt(input_index)); } mInputs.clear(); nextAudioPortGeneration(); if (patchRemoved) { mpClientInterface->onAudioPatchListUpdate(); } } void AudioPolicyManager::initStreamVolume(audio_stream_type_t stream, Loading Loading @@ -3497,6 +3509,16 @@ void AudioPolicyManager::closeOutput(audio_io_handle_t output) } } nextAudioPortGeneration(); ssize_t index = mAudioPatches.indexOfKey(outputDesc->mPatchHandle); if (index >= 0) { sp<AudioPatch> patchDesc = mAudioPatches.valueAt(index); status_t status = mpClientInterface->releaseAudioPatch(patchDesc->mAfPatchHandle, 0); mAudioPatches.removeItemsAt(index); mpClientInterface->onAudioPatchListUpdate(); } AudioParameter param; param.add(String8("closing"), String8("true")); mpClientInterface->setParameters(output, param.toString()); Loading @@ -3504,7 +3526,30 @@ void AudioPolicyManager::closeOutput(audio_io_handle_t output) mpClientInterface->closeOutput(output); mOutputs.removeItem(output); mPreviousOutputs = mOutputs; } void AudioPolicyManager::closeInput(audio_io_handle_t input) { ALOGV("closeInput(%d)", input); sp<AudioInputDescriptor> inputDesc = mInputs.valueFor(input); if (inputDesc == NULL) { ALOGW("closeInput() unknown input %d", input); return; } nextAudioPortGeneration(); ssize_t index = mAudioPatches.indexOfKey(inputDesc->mPatchHandle); if (index >= 0) { sp<AudioPatch> patchDesc = mAudioPatches.valueAt(index); status_t status = mpClientInterface->releaseAudioPatch(patchDesc->mAfPatchHandle, 0); mAudioPatches.removeItemsAt(index); mpClientInterface->onAudioPatchListUpdate(); } mpClientInterface->closeInput(input); mInputs.removeItem(input); } SortedVector<audio_io_handle_t> AudioPolicyManager::getOutputsForDevice(audio_devices_t device, Loading
services/audiopolicy/AudioPolicyManager.h +3 −0 Original line number Diff line number Diff line Loading @@ -649,6 +649,9 @@ protected: // close an output and its companion duplicating output. void closeOutput(audio_io_handle_t output); // close an input. void closeInput(audio_io_handle_t input); // checks and if necessary changes outputs used for all strategies. // must be called every time a condition that affects the output choice for a given strategy // changes: connected device, phone state, force use... Loading