From 2e3c3eb678ecb17f0d2497cda5de634bba9c4bba Mon Sep 17 00:00:00 2001 From: claincly Date: Thu, 2 May 2024 07:27:06 -0700 Subject: [PATCH] Fix wrong output timestamp in seeking Set `VideoSink`'s offset during seeking in `MCVR.onPositionReset()` This one is necessary in some cases, where `onProcessedStreamChange()` is not invoked during a seek. For example, when seeking when playback has ended. PiperOrigin-RevId: 630056723 --- .../media3/exoplayer/video/MediaCodecVideoRenderer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index bdf1f41d41..c077813d70 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -652,6 +652,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer // Flush the video sink first to ensure it stops reading textures that will be owned by // MediaCodec once the codec is flushed. videoSink.flush(); + videoSink.setStreamOffsetUs(getOutputStreamOffsetUs()); super.onPositionReset(positionUs, joining); videoFrameReleaseControl.reset(); if (joining) { @@ -1098,7 +1099,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer // Pass a direct executor since the callback handling involves posting on the app looper // again, so there's no need to do two hops. directExecutor()); - videoSink.setStreamOffsetUs(getOutputStreamOffsetUs()); } hasInitializedPlayback = true; }