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

Commit 8bd4d394 authored by Dichen Zhang's avatar Dichen Zhang
Browse files

NuPlayer2: 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.

Bug: 70919418
Test: MediaPlayer2Test
Change-Id: I66b6f8e024f29e797a89e68d52c819cddbf37016
parent eca08fb8
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -1884,11 +1884,21 @@ void NuPlayer2::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 */);
    }

    performSeek(currentPositionUs, MediaPlayer2SeekMode::SEEK_PREVIOUS_SYNC /* mode */);

    if (forceNonOffload) {
        mRenderer->signalDisableOffloadAudio();
        mOffloadAudio = false;