Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b579bc70 authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "delay rx-telephony patch creation to avoid playing ringtone" into main

parents 08160fd9 f85c5e3d
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -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
@@ -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);

@@ -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,
@@ -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;
@@ -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());

@@ -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)
@@ -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*/);
        }
    }
}
@@ -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*/);
            }
        }

+5 −3
Original line number Diff line number Diff line
@@ -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);

@@ -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,
@@ -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