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

Commit af457a98 authored by Vlad Popa's avatar Vlad Popa Committed by Android (Google) Code Review
Browse files

Merge "APM: apply volumes when abs volume stream changes" into main

parents 4fdefc48 6319b2d1
Loading
Loading
Loading
Loading
+26 −9
Original line number Diff line number Diff line
@@ -3573,19 +3573,36 @@ status_t AudioPolicyManager::setDeviceAbsoluteVolumeEnabled(audio_devices_t devi
    ALOGI("%s: deviceType 0x%X, enabled %d, streamToDriveAbs %d", __func__, deviceType, enabled,
          streamToDriveAbs);

    if (!enabled) {
        mAbsoluteVolumeDrivingStreams.erase(deviceType);
        return NO_ERROR;
    }

    bool changed = false;
    audio_attributes_t attributesToDriveAbs = mEngine->getAttributesForStreamType(streamToDriveAbs);
    if (enabled) {
        if (attributesToDriveAbs == AUDIO_ATTRIBUTES_INITIALIZER) {
            ALOGW("%s: no attributes for stream %s, bailing out", __func__,
                  toString(streamToDriveAbs).c_str());
            return BAD_VALUE;
        }

        if (mAbsoluteVolumeDrivingStreams[deviceType] != attributesToDriveAbs) {
            mAbsoluteVolumeDrivingStreams[deviceType] = attributesToDriveAbs;
            changed = true;
        }
    } else {
        if (mAbsoluteVolumeDrivingStreams.find(deviceType) != mAbsoluteVolumeDrivingStreams.end()) {
            mAbsoluteVolumeDrivingStreams.erase(deviceType);
            changed = true;
        }
    }

    // if something changed, apply the stream volumes regarding the new absolute mode to all the
    // outputs without any delay
    if (changed) {
        for (size_t i = 0; i < mOutputs.size(); i++) {
            sp<SwAudioOutputDescriptor> desc = mOutputs.valueAt(i);
            ALOGV("%s: apply stream volumes for portId %d", __func__, desc->getId());
            applyStreamVolumes(desc, {deviceType});
        }
    }

    return NO_ERROR;
}