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

Commit 549d5f50 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "audio policy: fix remote submix capture concurrency"

parents 40f3cc30 2dc962bf
Loading
Loading
Loading
Loading
+21 −9
Original line number Diff line number Diff line
@@ -450,7 +450,7 @@ void AudioPolicyService::updateUidStates_l()
    for (size_t i =0; i < mAudioRecordClients.size(); i++) {
        sp<AudioRecordClient> current = mAudioRecordClients[i];
        if (!current->active) continue;
        if (isPrivacySensitive(current->attributes.source)) {
        if (isPrivacySensitiveSource(current->attributes.source)) {
            if (current->startTimeNs > latestSensitiveStartNs) {
                latestSensitiveActive = current;
                latestSensitiveStartNs = current->startTimeNs;
@@ -489,7 +489,10 @@ void AudioPolicyService::updateUidStates_l()
        bool isLatest = current == latestActive;
        bool isLatestSensitive = current == latestSensitiveActive;
        bool forceIdle = true;
        if (mUidPolicy->isAssistantUid(current->uid)) {

        if (isVirtualSource(source)) {
            forceIdle = false;
        } else if (mUidPolicy->isAssistantUid(current->uid)) {
            if (isA11yOnTop) {
                if (source == AUDIO_SOURCE_HOTWORD || source == AUDIO_SOURCE_VOICE_RECOGNITION) {
                    forceIdle = false;
@@ -505,10 +508,6 @@ void AudioPolicyService::updateUidStates_l()
                (source == AUDIO_SOURCE_VOICE_RECOGNITION || source == AUDIO_SOURCE_HOTWORD)) {
                forceIdle = false;
            }
        } else if (source == AUDIO_SOURCE_VOICE_DOWNLINK ||
                   source == AUDIO_SOURCE_VOICE_CALL ||
                   (source == AUDIO_SOURCE_VOICE_UPLINK)) {
            forceIdle = false;
        } else {
            if (!isAssistantOnTop && (isOnTop || isLatest) &&
                (!isSensitiveActive || isLatestSensitive)) {
@@ -542,14 +541,27 @@ app_state_t AudioPolicyService::apmStatFromAmState(int amState) {
}

/* static */
bool AudioPolicyService::isPrivacySensitive(audio_source_t source)
bool AudioPolicyService::isPrivacySensitiveSource(audio_source_t source)
{
    switch (source) {
        case AUDIO_SOURCE_CAMCORDER:
        case AUDIO_SOURCE_VOICE_COMMUNICATION:
            return true;
        default:
            break;
    }
    return false;
}

/* static */
bool AudioPolicyService::isVirtualSource(audio_source_t source)
{
    switch (source) {
        case AUDIO_SOURCE_VOICE_UPLINK:
        case AUDIO_SOURCE_VOICE_DOWNLINK:
        case AUDIO_SOURCE_VOICE_CALL:
        case AUDIO_SOURCE_CAMCORDER:
        case AUDIO_SOURCE_VOICE_COMMUNICATION:
        case AUDIO_SOURCE_REMOTE_SUBMIX:
        case AUDIO_SOURCE_FM_TUNER:
            return true;
        default:
            break;
+2 −1
Original line number Diff line number Diff line
@@ -327,7 +327,8 @@ private:

    void silenceAllRecordings_l();

    static bool isPrivacySensitive(audio_source_t source);
    static bool isPrivacySensitiveSource(audio_source_t source);
    static bool isVirtualSource(audio_source_t source);

    // If recording we need to make sure the UID is allowed to do that. If the UID is idle
    // then it cannot record and gets buffers with zeros - silence. As soon as the UID