From 4be30bb3083c2c1b923791e773f2031db6960f89 Mon Sep 17 00:00:00 2001 From: claincly Date: Fri, 26 Apr 2024 06:04:24 -0700 Subject: [PATCH] Support seeking when playing back a composition PiperOrigin-RevId: 628382976 --- .../exoplayer/video/MediaCodecVideoRenderer.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) 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 4c03f5e9c2..d1fa900146 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 @@ -645,11 +645,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer @Override protected void onPositionReset(long positionUs, boolean joining) throws ExoPlaybackException { + // When this renderer doesn't own the VideoSinkProvider, it's possible that the VideoSink is + // already initialized by another renderer, before this renderer is enabled. // 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(); - } + videoSinkProvider.getSink().flush(); super.onPositionReset(positionUs, joining); videoFrameReleaseControl.reset(); if (joining) { @@ -1471,9 +1471,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer super.onProcessedStreamChange(); videoFrameReleaseControl.onProcessedStreamChange(); maybeSetupTunnelingForFirstFrame(); - if (videoSink != null) { - videoSink.setStreamOffsetUs(getOutputStreamOffsetUs()); - } + // If the renderer does not own the VideoSinkProvider, it's possible the VideoSink is null when + // this method is invoked, that is when transitioning from another renderer. + videoSinkProvider.getSink().setStreamOffsetUs(getOutputStreamOffsetUs()); } /**