Loading services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h +10 −0 Original line number Diff line number Diff line Loading @@ -203,6 +203,16 @@ public: */ audio_io_handle_t getA2dpOutput() const; /** * returns true if primary HAL supports A2DP Offload */ bool isA2dpOffloadedOnPrimary() const; /** * returns true if A2DP is supported (either via hardware offload or software encoding) */ bool isA2dpSupported() const; sp<SwAudioOutputDescriptor> getOutputFromId(audio_port_handle_t id) const; sp<SwAudioOutputDescriptor> getPrimaryOutput() const; Loading services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -645,6 +645,29 @@ audio_io_handle_t SwAudioOutputCollection::getA2dpOutput() const return 0; } bool SwAudioOutputCollection::isA2dpOffloadedOnPrimary() const { sp<SwAudioOutputDescriptor> primaryOutput = getPrimaryOutput(); if ((primaryOutput != NULL) && (primaryOutput->mProfile != NULL) && (primaryOutput->mProfile->mModule != NULL)) { sp<HwModule> primaryHwModule = primaryOutput->mProfile->mModule; Vector <sp<IOProfile>> primaryHwModuleOutputProfiles = primaryHwModule->getOutputProfiles(); for (size_t i = 0; i < primaryHwModuleOutputProfiles.size(); i++) { if (primaryHwModuleOutputProfiles[i]->supportDevice(AUDIO_DEVICE_OUT_ALL_A2DP)) { return true; } } } return false; } bool SwAudioOutputCollection::isA2dpSupported() const { return (isA2dpOffloadedOnPrimary() || (getA2dpOutput() != 0)); } sp<SwAudioOutputDescriptor> SwAudioOutputCollection::getPrimaryOutput() const { for (size_t i = 0; i < size(); i++) { Loading services/audiopolicy/enginedefault/src/Engine.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -343,7 +343,7 @@ audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy, // when not in a phone call, phone strategy should route STREAM_VOICE_CALL to A2DP if (!isInCall() && (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA] != AUDIO_POLICY_FORCE_NO_BT_A2DP) && (outputs.getA2dpOutput() != 0)) { outputs.isA2dpSupported()) { device = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP; if (device) break; device = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES; Loading Loading @@ -377,7 +377,7 @@ audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy, // A2DP speaker when forcing to speaker output if (!isInCall() && (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA] != AUDIO_POLICY_FORCE_NO_BT_A2DP) && (outputs.getA2dpOutput() != 0)) { outputs.isA2dpSupported()) { device = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER; if (device) break; } Loading Loading @@ -494,7 +494,7 @@ audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy, } if ((device2 == AUDIO_DEVICE_NONE) && (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA] != AUDIO_POLICY_FORCE_NO_BT_A2DP) && (outputs.getA2dpOutput() != 0)) { outputs.isA2dpSupported()) { device2 = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP; if (device2 == AUDIO_DEVICE_NONE) { device2 = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES; Loading services/audiopolicy/managerdefault/AudioPolicyManager.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -4381,7 +4381,7 @@ void AudioPolicyManager::checkOutputForAllStrategies() void AudioPolicyManager::checkA2dpSuspend() { audio_io_handle_t a2dpOutput = mOutputs.getA2dpOutput(); if (a2dpOutput == 0) { if (a2dpOutput == 0 || mOutputs.isA2dpOffloadedOnPrimary()) { mA2dpSuspended = false; return; } Loading Loading
services/audiopolicy/common/managerdefinitions/include/AudioOutputDescriptor.h +10 −0 Original line number Diff line number Diff line Loading @@ -203,6 +203,16 @@ public: */ audio_io_handle_t getA2dpOutput() const; /** * returns true if primary HAL supports A2DP Offload */ bool isA2dpOffloadedOnPrimary() const; /** * returns true if A2DP is supported (either via hardware offload or software encoding) */ bool isA2dpSupported() const; sp<SwAudioOutputDescriptor> getOutputFromId(audio_port_handle_t id) const; sp<SwAudioOutputDescriptor> getPrimaryOutput() const; Loading
services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp +23 −0 Original line number Diff line number Diff line Loading @@ -645,6 +645,29 @@ audio_io_handle_t SwAudioOutputCollection::getA2dpOutput() const return 0; } bool SwAudioOutputCollection::isA2dpOffloadedOnPrimary() const { sp<SwAudioOutputDescriptor> primaryOutput = getPrimaryOutput(); if ((primaryOutput != NULL) && (primaryOutput->mProfile != NULL) && (primaryOutput->mProfile->mModule != NULL)) { sp<HwModule> primaryHwModule = primaryOutput->mProfile->mModule; Vector <sp<IOProfile>> primaryHwModuleOutputProfiles = primaryHwModule->getOutputProfiles(); for (size_t i = 0; i < primaryHwModuleOutputProfiles.size(); i++) { if (primaryHwModuleOutputProfiles[i]->supportDevice(AUDIO_DEVICE_OUT_ALL_A2DP)) { return true; } } } return false; } bool SwAudioOutputCollection::isA2dpSupported() const { return (isA2dpOffloadedOnPrimary() || (getA2dpOutput() != 0)); } sp<SwAudioOutputDescriptor> SwAudioOutputCollection::getPrimaryOutput() const { for (size_t i = 0; i < size(); i++) { Loading
services/audiopolicy/enginedefault/src/Engine.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -343,7 +343,7 @@ audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy, // when not in a phone call, phone strategy should route STREAM_VOICE_CALL to A2DP if (!isInCall() && (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA] != AUDIO_POLICY_FORCE_NO_BT_A2DP) && (outputs.getA2dpOutput() != 0)) { outputs.isA2dpSupported()) { device = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP; if (device) break; device = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES; Loading Loading @@ -377,7 +377,7 @@ audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy, // A2DP speaker when forcing to speaker output if (!isInCall() && (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA] != AUDIO_POLICY_FORCE_NO_BT_A2DP) && (outputs.getA2dpOutput() != 0)) { outputs.isA2dpSupported()) { device = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER; if (device) break; } Loading Loading @@ -494,7 +494,7 @@ audio_devices_t Engine::getDeviceForStrategyInt(routing_strategy strategy, } if ((device2 == AUDIO_DEVICE_NONE) && (mForceUse[AUDIO_POLICY_FORCE_FOR_MEDIA] != AUDIO_POLICY_FORCE_NO_BT_A2DP) && (outputs.getA2dpOutput() != 0)) { outputs.isA2dpSupported()) { device2 = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP; if (device2 == AUDIO_DEVICE_NONE) { device2 = availableOutputDevicesType & AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES; Loading
services/audiopolicy/managerdefault/AudioPolicyManager.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -4381,7 +4381,7 @@ void AudioPolicyManager::checkOutputForAllStrategies() void AudioPolicyManager::checkA2dpSuspend() { audio_io_handle_t a2dpOutput = mOutputs.getA2dpOutput(); if (a2dpOutput == 0) { if (a2dpOutput == 0 || mOutputs.isA2dpOffloadedOnPrimary()) { mA2dpSuspended = false; return; } Loading