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

Commit c43c58bd authored by Andy Hung's avatar Andy Hung Committed by gitbuildkicker
Browse files

AudioFlinger: Account for frames dropped in suspend mode

These frames must be added to the kernel position in timestamps.

Bug: 30025777
Change-Id: I30c14503c9467059c3782e5c96c01ae1cf3709f6
parent eddfa92a
Loading
Loading
Loading
Loading
+9 −5
Original line number Diff line number Diff line
@@ -1662,6 +1662,7 @@ AudioFlinger::PlaybackThread::PlaybackThread(const sp<AudioFlinger>& audioFlinge
        mEffectBufferValid(false),
        mSuspended(0), mBytesWritten(0),
        mFramesWritten(0),
        mSuspendedFrames(0),
        mActiveTracksGeneration(0),
        // mStreamTypes[] initialized in constructor body
        mOutput(output),
@@ -3055,7 +3056,8 @@ bool AudioFlinger::PlaybackThread::threadLoop()

                // copy over kernel info
                mTimestamp.mPosition[ExtendedTimestamp::LOCATION_KERNEL] =
                        timestamp.mPosition[ExtendedTimestamp::LOCATION_KERNEL];
                        timestamp.mPosition[ExtendedTimestamp::LOCATION_KERNEL]
                        + mSuspendedFrames; // add frames discarded when suspended
                mTimestamp.mTimeNs[ExtendedTimestamp::LOCATION_KERNEL] =
                        timestamp.mTimeNs[ExtendedTimestamp::LOCATION_KERNEL];
            }
@@ -3219,10 +3221,12 @@ bool AudioFlinger::PlaybackThread::threadLoop()

            mBytesRemaining = mCurrentWriteLength;
            if (isSuspended()) {
                mSleepTimeUs = suspendSleepTimeUs();
                // simulate write to HAL when suspended
                mBytesWritten += mSinkBufferSize;
                mFramesWritten += mSinkBufferSize / mFrameSize;
                // Simulate write to HAL when suspended (e.g. BT SCO phone call).
                mSleepTimeUs = suspendSleepTimeUs(); // assumes full buffer.
                const size_t framesRemaining = mBytesRemaining / mFrameSize;
                mBytesWritten += mBytesRemaining;
                mFramesWritten += framesRemaining;
                mSuspendedFrames += framesRemaining; // to adjust kernel HAL position
                mBytesRemaining = 0;
            }

+1 −0
Original line number Diff line number Diff line
@@ -721,6 +721,7 @@ protected:

    int64_t                         mBytesWritten;
    int64_t                         mFramesWritten; // not reset on standby
    int64_t                         mSuspendedFrames; // not reset on standby
private:
    // mMasterMute is in both PlaybackThread and in AudioFlinger.  When a
    // PlaybackThread needs to find out if master-muted, it checks it's local