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 506e6dd2cf..518954d123 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 @@ -144,6 +144,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer private final Context context; private final VideoSinkProvider videoSinkProvider; + private final boolean ownsVideoSinkProvider; private final EventDispatcher eventDispatcher; private final int maxDroppedFramesToNotify; private final boolean deviceNeedsNoPostProcessWorkaround; @@ -393,9 +394,11 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer this.maxDroppedFramesToNotify = maxDroppedFramesToNotify; this.context = context.getApplicationContext(); eventDispatcher = new EventDispatcher(eventHandler, eventListener); + ownsVideoSinkProvider = videoSinkProvider == null; if (videoSinkProvider == null) { videoSinkProvider = new CompositingVideoSinkProvider.Builder(this.context).build(); } + if (videoSinkProvider.getVideoFrameReleaseControl() == null) { @SuppressWarnings("nullness:assignment") VideoFrameReleaseControl.@Initialized FrameTimingEvaluator thisRef = this; @@ -730,7 +733,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer @Override protected void onRelease() { super.onRelease(); - if (videoSinkProvider.isInitialized()) { + if (ownsVideoSinkProvider && videoSinkProvider.isInitialized()) { videoSinkProvider.release(); } }