Loading services/audiopolicy/managerdefault/AudioPolicyManager.cpp +28 −3 Original line number Diff line number Diff line Loading @@ -209,7 +209,26 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(audio_devices_t deviceT return BAD_VALUE; } checkForDeviceAndOutputChanges([&]() { // No need to evaluate playback routing when connecting a remote submix // output device used by a dynamic policy of type recorder as no // playback use case is affected. bool doCheckForDeviceAndOutputChanges = true; if (device->type() == AUDIO_DEVICE_OUT_REMOTE_SUBMIX && strncmp(device_address, "0", AUDIO_DEVICE_MAX_ADDRESS_LEN) != 0) { for (audio_io_handle_t output : outputs) { sp<SwAudioOutputDescriptor> desc = mOutputs.valueFor(output); if (desc->mPolicyMix != nullptr && desc->mPolicyMix->mMixType == MIX_TYPE_RECORDERS && strncmp(device_address, desc->mPolicyMix->mDeviceAddress.string(), AUDIO_DEVICE_MAX_ADDRESS_LEN) == 0) { doCheckForDeviceAndOutputChanges = false; break; } } } auto checkCloseOutputs = [&]() { // outputs must be closed after checkOutputForAllStrategies() is executed if (!outputs.isEmpty()) { for (audio_io_handle_t output : outputs) { Loading @@ -226,7 +245,13 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(audio_devices_t deviceT return true; } return false; }); }; if (doCheckForDeviceAndOutputChanges) { checkForDeviceAndOutputChanges(checkCloseOutputs); } else { checkCloseOutputs(); } if (mEngine->getPhoneState() == AUDIO_MODE_IN_CALL && hasPrimaryOutput()) { DeviceVector newDevices = getNewOutputDevices(mPrimaryOutput, false /*fromCache*/); Loading Loading
services/audiopolicy/managerdefault/AudioPolicyManager.cpp +28 −3 Original line number Diff line number Diff line Loading @@ -209,7 +209,26 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(audio_devices_t deviceT return BAD_VALUE; } checkForDeviceAndOutputChanges([&]() { // No need to evaluate playback routing when connecting a remote submix // output device used by a dynamic policy of type recorder as no // playback use case is affected. bool doCheckForDeviceAndOutputChanges = true; if (device->type() == AUDIO_DEVICE_OUT_REMOTE_SUBMIX && strncmp(device_address, "0", AUDIO_DEVICE_MAX_ADDRESS_LEN) != 0) { for (audio_io_handle_t output : outputs) { sp<SwAudioOutputDescriptor> desc = mOutputs.valueFor(output); if (desc->mPolicyMix != nullptr && desc->mPolicyMix->mMixType == MIX_TYPE_RECORDERS && strncmp(device_address, desc->mPolicyMix->mDeviceAddress.string(), AUDIO_DEVICE_MAX_ADDRESS_LEN) == 0) { doCheckForDeviceAndOutputChanges = false; break; } } } auto checkCloseOutputs = [&]() { // outputs must be closed after checkOutputForAllStrategies() is executed if (!outputs.isEmpty()) { for (audio_io_handle_t output : outputs) { Loading @@ -226,7 +245,13 @@ status_t AudioPolicyManager::setDeviceConnectionStateInt(audio_devices_t deviceT return true; } return false; }); }; if (doCheckForDeviceAndOutputChanges) { checkForDeviceAndOutputChanges(checkCloseOutputs); } else { checkCloseOutputs(); } if (mEngine->getPhoneState() == AUDIO_MODE_IN_CALL && hasPrimaryOutput()) { DeviceVector newDevices = getNewOutputDevices(mPrimaryOutput, false /*fromCache*/); Loading