Loading services/audiopolicy/managerdefault/AudioPolicyManager.cpp +12 −10 Original line number Diff line number Diff line Loading @@ -770,7 +770,7 @@ status_t AudioPolicyManager::updateCallRoutingInternal( } muteWaitMs = setOutputDevices(__func__, mPrimaryOutput, rxDevices, true, delayMs); } else { // create RX path audio patch connectTelephonyRxAudioSource(); connectTelephonyRxAudioSource(delayMs); // If the TX device is on the primary HW module but RX device is // on other HW module, SinkMetaData of telephony input should handle it // assuming the device uses audio HAL V5.0 and above Loading Loading @@ -807,7 +807,7 @@ bool AudioPolicyManager::isDeviceOfModule( return false; } void AudioPolicyManager::connectTelephonyRxAudioSource() void AudioPolicyManager::connectTelephonyRxAudioSource(uint32_t delayMs) { const auto aa = mEngine->getAttributesForStreamType(AUDIO_STREAM_VOICE_CALL); Loading Loading @@ -835,7 +835,7 @@ void AudioPolicyManager::connectTelephonyRxAudioSource() audio_port_handle_t portId = AUDIO_PORT_HANDLE_NONE; status_t status = startAudioSourceInternal(&source, &aa, &portId, 0 /*uid*/, true /*internal*/, true /*isCallRx*/); true /*internal*/, true /*isCallRx*/, delayMs); ALOGE_IF(status != OK, "%s: failed to start audio source (%d)", __func__, status); mCallRxSourceClient = mAudioSources.valueFor(portId); ALOGV("%s portdID %d between source %s and sink %s", __func__, portId, Loading Loading @@ -5884,13 +5884,14 @@ status_t AudioPolicyManager::startAudioSource(const struct audio_port_config *so audio_port_handle_t *portId, uid_t uid) { return startAudioSourceInternal(source, attributes, portId, uid, false /*internal*/, false /*isCallRx*/); false /*internal*/, false /*isCallRx*/, 0 /*delayMs*/); } status_t AudioPolicyManager::startAudioSourceInternal(const struct audio_port_config *source, const audio_attributes_t *attributes, audio_port_handle_t *portId, uid_t uid, bool internal, bool isCallRx) uid_t uid, bool internal, bool isCallRx, uint32_t delayMs) { ALOGV("%s", __FUNCTION__); *portId = AUDIO_PORT_HANDLE_NONE; Loading Loading @@ -5925,14 +5926,15 @@ status_t AudioPolicyManager::startAudioSourceInternal(const struct audio_port_co mEngine->getProductStrategyForAttributes(*attributes), toVolumeSource(*attributes), internal, isCallRx, false); status_t status = connectAudioSource(sourceDesc); status_t status = connectAudioSource(sourceDesc, delayMs); if (status == NO_ERROR) { mAudioSources.add(*portId, sourceDesc); } return status; } status_t AudioPolicyManager::connectAudioSource(const sp<SourceClientDescriptor>& sourceDesc) status_t AudioPolicyManager::connectAudioSource(const sp<SourceClientDescriptor>& sourceDesc, uint32_t delayMs) { ALOGV("%s handle %d", __FUNCTION__, sourceDesc->portId()); Loading @@ -5958,7 +5960,7 @@ status_t AudioPolicyManager::connectAudioSource(const sp<SourceClientDescriptor> audio_patch_handle_t handle = AUDIO_PATCH_HANDLE_NONE; return connectAudioSourceToSink( sourceDesc, sinkDevice, patchBuilder.patch(), handle, mUidCached, 0 /*delayMs*/); sourceDesc, sinkDevice, patchBuilder.patch(), handle, mUidCached, delayMs); } status_t AudioPolicyManager::stopAudioSource(audio_port_handle_t portId) Loading Loading @@ -7305,7 +7307,7 @@ void AudioPolicyManager::checkAudioSourceForAttributes(const audio_attributes_t if (sourceDesc != nullptr && followsSameRouting(attr, sourceDesc->attributes()) && sourceDesc->getPatchHandle() == AUDIO_PATCH_HANDLE_NONE && !sourceDesc->isCallRx() && !sourceDesc->isInternal()) { connectAudioSource(sourceDesc); connectAudioSource(sourceDesc, 0 /*delayMs*/); } } } Loading Loading @@ -7412,7 +7414,7 @@ void AudioPolicyManager::checkOutputForAttributes(const audio_attributes_t &attr } sp<SourceClientDescriptor> source = getSourceForAttributesOnOutput(srcOut, attr); if (source != nullptr && !source->isCallRx() && !source->isInternal()) { connectAudioSource(source); connectAudioSource(source, 0 /*delayMs*/); } } Loading services/audiopolicy/managerdefault/AudioPolicyManager.h +5 −3 Original line number Diff line number Diff line Loading @@ -707,7 +707,7 @@ protected: void updateCallAndOutputRouting(bool forceVolumeReeval = true, uint32_t delayMs = 0, bool skipDelays = false); void connectTelephonyRxAudioSource(); void connectTelephonyRxAudioSource(uint32_t delayMs); void disconnectTelephonyAudioSource(sp<SourceClientDescriptor> &clientDesc); Loading Loading @@ -932,7 +932,8 @@ protected: status_t hasPrimaryOutput() const { return mPrimaryOutput != 0; } status_t connectAudioSource(const sp<SourceClientDescriptor>& sourceDesc); status_t connectAudioSource(const sp<SourceClientDescriptor>& sourceDesc, uint32_t delayMs); status_t disconnectAudioSource(const sp<SourceClientDescriptor>& sourceDesc); status_t connectAudioSourceToSink(const sp<SourceClientDescriptor>& sourceDesc, Loading Loading @@ -975,7 +976,8 @@ protected: audio_port_handle_t *portId, uid_t uid, bool internal, bool isCallRx); bool isCallRx, uint32_t delayMs); const uid_t mUidCached; // AID_AUDIOSERVER sp<const AudioPolicyConfig> mConfig; EngineInstance mEngine; // Audio Policy Engine instance Loading Loading
services/audiopolicy/managerdefault/AudioPolicyManager.cpp +12 −10 Original line number Diff line number Diff line Loading @@ -770,7 +770,7 @@ status_t AudioPolicyManager::updateCallRoutingInternal( } muteWaitMs = setOutputDevices(__func__, mPrimaryOutput, rxDevices, true, delayMs); } else { // create RX path audio patch connectTelephonyRxAudioSource(); connectTelephonyRxAudioSource(delayMs); // If the TX device is on the primary HW module but RX device is // on other HW module, SinkMetaData of telephony input should handle it // assuming the device uses audio HAL V5.0 and above Loading Loading @@ -807,7 +807,7 @@ bool AudioPolicyManager::isDeviceOfModule( return false; } void AudioPolicyManager::connectTelephonyRxAudioSource() void AudioPolicyManager::connectTelephonyRxAudioSource(uint32_t delayMs) { const auto aa = mEngine->getAttributesForStreamType(AUDIO_STREAM_VOICE_CALL); Loading Loading @@ -835,7 +835,7 @@ void AudioPolicyManager::connectTelephonyRxAudioSource() audio_port_handle_t portId = AUDIO_PORT_HANDLE_NONE; status_t status = startAudioSourceInternal(&source, &aa, &portId, 0 /*uid*/, true /*internal*/, true /*isCallRx*/); true /*internal*/, true /*isCallRx*/, delayMs); ALOGE_IF(status != OK, "%s: failed to start audio source (%d)", __func__, status); mCallRxSourceClient = mAudioSources.valueFor(portId); ALOGV("%s portdID %d between source %s and sink %s", __func__, portId, Loading Loading @@ -5884,13 +5884,14 @@ status_t AudioPolicyManager::startAudioSource(const struct audio_port_config *so audio_port_handle_t *portId, uid_t uid) { return startAudioSourceInternal(source, attributes, portId, uid, false /*internal*/, false /*isCallRx*/); false /*internal*/, false /*isCallRx*/, 0 /*delayMs*/); } status_t AudioPolicyManager::startAudioSourceInternal(const struct audio_port_config *source, const audio_attributes_t *attributes, audio_port_handle_t *portId, uid_t uid, bool internal, bool isCallRx) uid_t uid, bool internal, bool isCallRx, uint32_t delayMs) { ALOGV("%s", __FUNCTION__); *portId = AUDIO_PORT_HANDLE_NONE; Loading Loading @@ -5925,14 +5926,15 @@ status_t AudioPolicyManager::startAudioSourceInternal(const struct audio_port_co mEngine->getProductStrategyForAttributes(*attributes), toVolumeSource(*attributes), internal, isCallRx, false); status_t status = connectAudioSource(sourceDesc); status_t status = connectAudioSource(sourceDesc, delayMs); if (status == NO_ERROR) { mAudioSources.add(*portId, sourceDesc); } return status; } status_t AudioPolicyManager::connectAudioSource(const sp<SourceClientDescriptor>& sourceDesc) status_t AudioPolicyManager::connectAudioSource(const sp<SourceClientDescriptor>& sourceDesc, uint32_t delayMs) { ALOGV("%s handle %d", __FUNCTION__, sourceDesc->portId()); Loading @@ -5958,7 +5960,7 @@ status_t AudioPolicyManager::connectAudioSource(const sp<SourceClientDescriptor> audio_patch_handle_t handle = AUDIO_PATCH_HANDLE_NONE; return connectAudioSourceToSink( sourceDesc, sinkDevice, patchBuilder.patch(), handle, mUidCached, 0 /*delayMs*/); sourceDesc, sinkDevice, patchBuilder.patch(), handle, mUidCached, delayMs); } status_t AudioPolicyManager::stopAudioSource(audio_port_handle_t portId) Loading Loading @@ -7305,7 +7307,7 @@ void AudioPolicyManager::checkAudioSourceForAttributes(const audio_attributes_t if (sourceDesc != nullptr && followsSameRouting(attr, sourceDesc->attributes()) && sourceDesc->getPatchHandle() == AUDIO_PATCH_HANDLE_NONE && !sourceDesc->isCallRx() && !sourceDesc->isInternal()) { connectAudioSource(sourceDesc); connectAudioSource(sourceDesc, 0 /*delayMs*/); } } } Loading Loading @@ -7412,7 +7414,7 @@ void AudioPolicyManager::checkOutputForAttributes(const audio_attributes_t &attr } sp<SourceClientDescriptor> source = getSourceForAttributesOnOutput(srcOut, attr); if (source != nullptr && !source->isCallRx() && !source->isInternal()) { connectAudioSource(source); connectAudioSource(source, 0 /*delayMs*/); } } Loading
services/audiopolicy/managerdefault/AudioPolicyManager.h +5 −3 Original line number Diff line number Diff line Loading @@ -707,7 +707,7 @@ protected: void updateCallAndOutputRouting(bool forceVolumeReeval = true, uint32_t delayMs = 0, bool skipDelays = false); void connectTelephonyRxAudioSource(); void connectTelephonyRxAudioSource(uint32_t delayMs); void disconnectTelephonyAudioSource(sp<SourceClientDescriptor> &clientDesc); Loading Loading @@ -932,7 +932,8 @@ protected: status_t hasPrimaryOutput() const { return mPrimaryOutput != 0; } status_t connectAudioSource(const sp<SourceClientDescriptor>& sourceDesc); status_t connectAudioSource(const sp<SourceClientDescriptor>& sourceDesc, uint32_t delayMs); status_t disconnectAudioSource(const sp<SourceClientDescriptor>& sourceDesc); status_t connectAudioSourceToSink(const sp<SourceClientDescriptor>& sourceDesc, Loading Loading @@ -975,7 +976,8 @@ protected: audio_port_handle_t *portId, uid_t uid, bool internal, bool isCallRx); bool isCallRx, uint32_t delayMs); const uid_t mUidCached; // AID_AUDIOSERVER sp<const AudioPolicyConfig> mConfig; EngineInstance mEngine; // Audio Policy Engine instance Loading