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

Commit 84fb58bd authored by Eric Laurent's avatar Eric Laurent Committed by Android Git Automerger
Browse files

am bdb5e497: Merge "DO NOT MERGE - audio flinger: fix fuzz test crash" into lmp-dev

* commit 'bdb5e497':
  DO NOT MERGE - audio flinger: fix fuzz test crash
parents 25c00122 bdb5e497
Loading
Loading
Loading
Loading
+17 −6
Original line number Diff line number Diff line
@@ -750,8 +750,12 @@ status_t AudioFlinger::setMasterVolume(float value)
    // assigned to HALs which do not have master volume support will apply
    // master volume during the mix operation.  Threads with HALs which do
    // support master volume will simply ignore the setting.
    for (size_t i = 0; i < mPlaybackThreads.size(); i++)
    for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
        if (mPlaybackThreads.valueAt(i)->isDuplicating()) {
            continue;
        }
        mPlaybackThreads.valueAt(i)->setMasterVolume(value);
    }

    return NO_ERROR;
}
@@ -862,8 +866,12 @@ status_t AudioFlinger::setMasterMute(bool muted)
    // assigned to HALs which do not have master mute support will apply master
    // mute during the mix operation.  Threads with HALs which do support master
    // mute will simply ignore the setting.
    for (size_t i = 0; i < mPlaybackThreads.size(); i++)
    for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
        if (mPlaybackThreads.valueAt(i)->isDuplicating()) {
            continue;
        }
        mPlaybackThreads.valueAt(i)->setMasterMute(muted);
    }

    return NO_ERROR;
}
@@ -1795,11 +1803,10 @@ status_t AudioFlinger::closeOutput_nonvirtual(audio_io_handle_t output)

        if (thread->type() == ThreadBase::MIXER) {
            for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
                if (mPlaybackThreads.valueAt(i)->type() == ThreadBase::DUPLICATING) {
                if (mPlaybackThreads.valueAt(i)->isDuplicating()) {
                    DuplicatingThread *dupThread =
                            (DuplicatingThread *)mPlaybackThreads.valueAt(i).get();
                    dupThread->removeOutputTrack((MixerThread *)thread.get());

                }
            }
        }
@@ -1826,7 +1833,7 @@ status_t AudioFlinger::closeOutput_nonvirtual(audio_io_handle_t output)
    // The thread entity (active unit of execution) is no longer running here,
    // but the ThreadBase container still exists.

    if (thread->type() != ThreadBase::DUPLICATING) {
    if (!thread->isDuplicating()) {
        closeOutputFinish(thread);
    }

@@ -2272,6 +2279,9 @@ AudioFlinger::PlaybackThread *AudioFlinger::primaryPlaybackThread_l() const
{
    for (size_t i = 0; i < mPlaybackThreads.size(); i++) {
        PlaybackThread *thread = mPlaybackThreads.valueAt(i).get();
        if(thread->isDuplicating()) {
            continue;
        }
        AudioStreamOut *output = thread->getOutput();
        if (output != NULL && output->audioHwDev == mPrimaryHardwareDev) {
            return thread;
@@ -2585,7 +2595,8 @@ status_t AudioFlinger::moveEffectChain_l(int sessionId,
    // Check whether the destination thread has a channel count of FCC_2, which is
    // currently required for (most) effects. Prevent moving the effect chain here rather
    // than disabling the addEffect_l() call in dstThread below.
    if (dstThread->mChannelCount != FCC_2) {
    if ((dstThread->type() == ThreadBase::MIXER || dstThread->isDuplicating()) &&
            dstThread->mChannelCount != FCC_2) {
        ALOGW("moveEffectChain_l() effect chain failed because"
                " destination thread %p channel count(%u) != %u",
                dstThread, dstThread->mChannelCount, FCC_2);
+4 −1
Original line number Diff line number Diff line
@@ -4761,10 +4761,13 @@ void AudioFlinger::DuplicatingThread::removeOutputTrack(MixerThread *thread)
            mOutputTracks[i]->destroy();
            mOutputTracks.removeAt(i);
            updateWaitTime_l();
            if (thread->getOutput() == mOutput) {
                mOutput = NULL;
            }
            return;
        }
    }
    ALOGV("removeOutputTrack(): unkonwn thread: %p", thread);
    ALOGV("removeOutputTrack(): unknown thread: %p", thread);
}

// caller must hold mLock
+2 −0
Original line number Diff line number Diff line
@@ -229,6 +229,8 @@ public:

                // static externally-visible
                type_t      type() const { return mType; }
                bool isDuplicating() const { return (mType == DUPLICATING); }

                audio_io_handle_t id() const { return mId;}

                // dynamic externally-visible