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

Commit c73c64a6 authored by Glenn Kasten's avatar Glenn Kasten Committed by Gerrit Code Review
Browse files

Merge "audioflinger: clear mMixerBuffer if frame is not ready"

parents 1eb3cb03 ae9a5f1f
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -334,6 +334,11 @@ void FastMixer::onWork()

    if ((command & FastMixerState::MIX) && (mMixer != NULL) && mIsWarm) {
        ALOG_ASSERT(mMixerBuffer != NULL);

        // AudioMixer::mState.enabledTracks is undefined if mState.hook == process__validate,
        // so we keep a side copy of enabledTracks
        bool anyEnabledTracks = false;

        // for each track, update volume and check for underrun
        unsigned currentTrackMask = current->mTrackMask;
        while (currentTrackMask != 0) {
@@ -392,11 +397,13 @@ void FastMixer::onWork()
                    underruns.mBitFields.mPartial++;
                    underruns.mBitFields.mMostRecent = UNDERRUN_PARTIAL;
                    mMixer->enable(name);
                    anyEnabledTracks = true;
                }
            } else {
                underruns.mBitFields.mFull++;
                underruns.mBitFields.mMostRecent = UNDERRUN_FULL;
                mMixer->enable(name);
                anyEnabledTracks = true;
            }
            ftDump->mUnderruns = underruns;
            ftDump->mFramesReady = framesReady;
@@ -407,9 +414,14 @@ void FastMixer::onWork()
            pts = AudioBufferProvider::kInvalidPTS;
        }

        if (anyEnabledTracks) {
            // process() is CPU-bound
            mMixer->process(pts);
            mMixerBufferState = MIXED;
        } else if (mMixerBufferState != ZEROED) {
            mMixerBufferState = UNDEFINED;
        }

    } else if (mMixerBufferState == MIXED) {
        mMixerBufferState = UNDEFINED;
    }