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

Commit b51766e8 authored by Andy Hung's avatar Andy Hung Committed by Gerrit Code Review
Browse files

Merge "AudioPolicy: Use audio mutexes" into main

parents 48379757 6a0fbd95
Loading
Loading
Loading
Loading
+12 −12
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ status_t AudioPolicyEffects::addInputEffects(audio_io_handle_t input,
    audio_source_t aliasSource = (inputSource == AUDIO_SOURCE_HOTWORD) ?
                                    AUDIO_SOURCE_VOICE_RECOGNITION : inputSource;

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);
    ssize_t index = mInputSources.indexOfKey(aliasSource);
    if (index < 0) {
        ALOGV("addInputEffects(): no processing needs to be attached to this source");
@@ -156,7 +156,7 @@ status_t AudioPolicyEffects::releaseInputEffects(audio_io_handle_t input,
{
    status_t status = NO_ERROR;

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);
    ssize_t index = mInputSessions.indexOfKey(audioSession);
    if (index < 0) {
        return status;
@@ -179,7 +179,7 @@ status_t AudioPolicyEffects::queryDefaultInputEffects(audio_session_t audioSessi
{
    status_t status = NO_ERROR;

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);
    size_t index;
    for (index = 0; index < mInputSessions.size(); index++) {
        if (mInputSessions.valueAt(index)->mSessionId == audioSession) {
@@ -212,7 +212,7 @@ status_t AudioPolicyEffects::queryDefaultOutputSessionEffects(audio_session_t au
{
    status_t status = NO_ERROR;

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);
    size_t index;
    for (index = 0; index < mOutputSessions.size(); index++) {
        if (mOutputSessions.valueAt(index)->mSessionId == audioSession) {
@@ -245,7 +245,7 @@ status_t AudioPolicyEffects::addOutputSessionEffects(audio_io_handle_t output,
{
    status_t status = NO_ERROR;

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);
    // create audio processors according to stream
    // FIXME: should we have specific post processing settings for internal streams?
    // default to media for now.
@@ -309,7 +309,7 @@ status_t AudioPolicyEffects::releaseOutputSessionEffects(audio_io_handle_t outpu
    (void) output; // argument not used for now
    (void) stream; // argument not used for now

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);
    ssize_t index = mOutputSessions.indexOfKey(audioSession);
    if (index < 0) {
        ALOGV("releaseOutputSessionEffects: no output processing was attached to this stream");
@@ -370,7 +370,7 @@ status_t AudioPolicyEffects::addSourceDefaultEffect(const effect_uuid_t *type,
        return BAD_VALUE;
    }

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);

    // Find the EffectDescVector for the given source type, or create a new one if necessary.
    ssize_t index = mInputSources.indexOfKey(source);
@@ -435,7 +435,7 @@ status_t AudioPolicyEffects::addStreamDefaultEffect(const effect_uuid_t *type,
        return BAD_VALUE;
    }

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);

    // Find the EffectDescVector for the given stream type, or create a new one if necessary.
    ssize_t index = mOutputStreams.indexOfKey(stream);
@@ -475,7 +475,7 @@ status_t AudioPolicyEffects::removeSourceDefaultEffect(audio_unique_id_t id)
        return BAD_VALUE;
    }

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);

    // Check each source type.
    size_t numSources = mInputSources.size();
@@ -506,7 +506,7 @@ status_t AudioPolicyEffects::removeStreamDefaultEffect(audio_unique_id_t id)
        return BAD_VALUE;
    }

    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);

    // Check each stream type.
    size_t numStreams = mOutputStreams.size();
@@ -948,7 +948,7 @@ status_t AudioPolicyEffects::loadAudioEffectConfig(
    loadProcessingChain(processings->postprocess, mOutputStreams);

    {
        Mutex::Autolock _l(mLock);
        audio_utils::lock_guard _l(mMutex);
        loadDeviceProcessingChain(processings->deviceprocess, mDeviceEffects);
    }

@@ -985,7 +985,7 @@ status_t AudioPolicyEffects::loadAudioEffectConfigLegacy(const char *path)

void AudioPolicyEffects::initDefaultDeviceEffects()
{
    Mutex::Autolock _l(mLock);
    audio_utils::lock_guard _l(mMutex);
    for (const auto& deviceEffectsIter : mDeviceEffects) {
        const auto& deviceEffects =  deviceEffectsIter.second;
        for (const auto& effectDesc : deviceEffects->mEffectDescriptors->mEffects) {
+6 −5
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@
#include <future>

#include <android-base/thread_annotations.h>
#include <audio_utils/mutex.h>
#include <cutils/misc.h>
#include <media/AudioEffect.h>
#include <media/audiohal/EffectsFactoryHalInterface.h>
@@ -59,7 +60,7 @@ public:
    virtual ~AudioPolicyEffects();

    // NOTE: methods on AudioPolicyEffects should never be called with the AudioPolicyService
    // main mutex (mLock) held as they will indirectly call back into AudioPolicyService when
    // main mutex (mMutex) held as they will indirectly call back into AudioPolicyService when
    // managing audio effects.

    // Return a list of effect descriptors for default input effects
@@ -204,7 +205,7 @@ private:
        void setProcessorEnabled(bool enabled);

        const audio_session_t mSessionId;
        // AudioPolicyManager keeps mLock, no need for lock on reference count here
        // AudioPolicyManager keeps mMutex, no need for lock on reference count here
        int mRefCount;
        Vector< sp<AudioEffect> >mEffects;
    };
@@ -263,9 +264,9 @@ private:
                         size_t *totSize);

    // protects access to mInputSources, mInputSessions, mOutputStreams, mOutputSessions
    // never hold AudioPolicyService::mLock when calling AudioPolicyEffects methods as
    // never hold AudioPolicyService::mMutex when calling AudioPolicyEffects methods as
    // those can call back into AudioPolicyService methods and try to acquire the mutex
    Mutex mLock;
    mutable audio_utils::mutex mMutex{audio_utils::MutexOrder::kAudioPolicyEffects_Mutex};
    // Automatic input effects are configured per audio_source_t
    KeyedVector< audio_source_t, EffectDescVector* > mInputSources;
    // Automatic input effects are unique for audio_io_handle_t
@@ -279,7 +280,7 @@ private:
    /**
     * @brief mDeviceEffects map of device effects indexed by the device address
     */
    std::map<std::string, std::unique_ptr<DeviceEffects>> mDeviceEffects GUARDED_BY(mLock);
    std::map<std::string, std::unique_ptr<DeviceEffects>> mDeviceEffects GUARDED_BY(mMutex);

    /**
     * Device Effect initialization must be asynchronous: the audio_policy service parses and init
+93 −93

File changed.

Preview size limit exceeded, changes collapsed.

+104 −105

File changed.

Preview size limit exceeded, changes collapsed.

+31 −29

File changed.

Preview size limit exceeded, changes collapsed.

Loading