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

Commit c74b93fd authored by Marco Nelissen's avatar Marco Nelissen
Browse files

Keep effects sessions active when the caller dies.

Don't remove effects until the session they are in goes away or all
AudioEffects have been explicitly released. This allows the control
panel process to die without stopping the effects.

Change-Id: I4496e5df080230ca1af149dec95c1309ab8ea888
parent a4418e0f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -108,6 +108,8 @@ public:
    static unsigned int  getInputFramesLost(audio_io_handle_t ioHandle);

    static int newAudioSessionId();
    static void acquireAudioSessionId(int audioSession);
    static void releaseAudioSessionId(int audioSession);

    // types of io configuration change events received with ioConfigChanged()
    enum io_config_event {
+3 −0
Original line number Diff line number Diff line
@@ -139,6 +139,9 @@ public:

    virtual int newAudioSessionId() = 0;

    virtual void acquireAudioSessionId(int audioSession) = 0;
    virtual void releaseAudioSessionId(int audioSession) = 0;

    virtual status_t queryNumberEffects(uint32_t *numEffects) = 0;

    virtual status_t queryEffect(uint32_t index, effect_descriptor_t *pDescriptor) = 0;
+3 −0
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ AudioRecord::~AudioRecord()
        }
        mAudioRecord.clear();
        IPCThreadState::self()->flushCommands();
        AudioSystem::releaseAudioSessionId(mSessionId);
    }
}

@@ -233,6 +234,7 @@ status_t AudioRecord::set(
    mInputSource = (uint8_t)inputSource;
    mFlags = flags;
    mInput = input;
    AudioSystem::acquireAudioSessionId(mSessionId);

    return NO_ERROR;
}
@@ -465,6 +467,7 @@ status_t AudioRecord::openRecord_l(
                                                       ((uint16_t)flags) << 16,
                                                       &mSessionId,
                                                       &status);

    if (record == 0) {
        LOGE("AudioFlinger could not create record track, status: %d", status);
        return status;
+14 −0
Original line number Diff line number Diff line
@@ -356,6 +356,20 @@ int AudioSystem::newAudioSessionId() {
    return af->newAudioSessionId();
}

void AudioSystem::acquireAudioSessionId(int audioSession) {
    const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
    if (af != 0) {
        af->acquireAudioSessionId(audioSession);
    }
}

void AudioSystem::releaseAudioSessionId(int audioSession) {
    const sp<IAudioFlinger>& af = AudioSystem::get_audio_flinger();
    if (af != 0) {
        af->releaseAudioSessionId(audioSession);
    }
}

// ---------------------------------------------------------------------------

void AudioSystem::AudioFlingerClient::binderDied(const wp<IBinder>& who) {
+2 −0
Original line number Diff line number Diff line
@@ -134,6 +134,7 @@ AudioTrack::~AudioTrack()
        }
        mAudioTrack.clear();
        IPCThreadState::self()->flushCommands();
        AudioSystem::releaseAudioSessionId(mSessionId);
    }
}

@@ -259,6 +260,7 @@ status_t AudioTrack::set(
    mNewPosition = 0;
    mUpdatePeriod = 0;
    mFlags = flags;
    AudioSystem::acquireAudioSessionId(mSessionId);

    return NO_ERROR;
}
Loading