From ecfddb9aebcb8ca0fc27784162f0997ef10e3804 Mon Sep 17 00:00:00 2001 From: christosts Date: Mon, 2 Oct 2023 04:00:45 -0700 Subject: [PATCH] MediaCodeVideoRenderer: flush video sink before codec When seeking, we must first flush the video sink so it stops using any SurfaceTextures before flushing MediaCodec. #minor-release PiperOrigin-RevId: 570015998 (cherry picked from commit 144bd7223626a2936368cbcb3bf3f7004ebe5e45) --- .../media3/exoplayer/video/MediaCodecVideoRenderer.java | 4 +++- 1 file changed, 3 insertions(+), 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 66b39392b0..37c6f8ed82 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 @@ -655,10 +655,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer implements Video @Override protected void onPositionReset(long positionUs, boolean joining) throws ExoPlaybackException { - super.onPositionReset(positionUs, joining); + // Flush the video sink first to ensure it stops reading textures that will be owned by + // MediaCodec once the codec is flushed. if (videoSink != null) { videoSink.flush(); } + super.onPositionReset(positionUs, joining); if (videoSinkProvider.isInitialized()) { videoSinkProvider.setStreamOffsetUs(getOutputStreamOffsetUs());