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

Commit eca08fb8 authored by Praveen Chavan's avatar Praveen Chavan Committed by Dichen Zhang
Browse files

NuPlayer: Call video flush on audio teardown

when audio tear down happens, audio gets flushed and seek is issued.
If video is not flushed before seek, previous video buffers will be
rendered and leads to A/V sync issue. Hence call video flush.

Author: Cong Jiajia <jcong@codeaurora.org>

Bug: 70919418
Test: MediaPlayerTest
Change-Id: I01f744c1eae99a1d0f81ca84f536d493a2a54b01
parent 0d8553c9
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -1818,10 +1818,20 @@ void NuPlayer::restartAudio(
    closeAudioSink();
    mRenderer->flush(true /* audio */, false /* notifyComplete */);
    if (mVideoDecoder != NULL) {
        mRenderer->flush(false /* audio */, false /* notifyComplete */);
    }

        mDeferredActions.push_back(
                new FlushDecoderAction(FLUSH_CMD_NONE /* audio */,
                                       FLUSH_CMD_FLUSH /* video */));
        mDeferredActions.push_back(
                new SeekAction(currentPositionUs,
                MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC /* mode */));
        // After a flush without shutdown, decoder is paused.
        // Don't resume it until source seek is done, otherwise it could
        // start pulling stale data too soon.
        mDeferredActions.push_back(new ResumeDecoderAction(false));
        processDeferredActions();
    } else {
        performSeek(currentPositionUs, MediaPlayerSeekMode::SEEK_PREVIOUS_SYNC /* mode */);
    }

    if (forceNonOffload) {
        mRenderer->signalDisableOffloadAudio();