diff --git a/RELEASENOTES.md b/RELEASENOTES.md index cb00692aa7..e47dbef808 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -97,6 +97,8 @@ `MediaItem.playbackProperties.subtitles` ([#8430](https://github.com/google/ExoPlayer/issues/8430)). * Remove `ExoPlaybackException.OutOfMemoryError`. + * Remove `setVideoDecoderOutputBufferRenderer` from Player API. + Clients should use `setOutputSurface` directly instead. * Extractors: * Populate codecs string for H.264/AVC in MP4, Matroska and FLV streams to allow decoder capability checks based on codec profile/level diff --git a/library/core/src/main/java/com/google/android/exoplayer2/Player.java b/library/core/src/main/java/com/google/android/exoplayer2/Player.java index 6fa58ea138..48774d697b 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/Player.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/Player.java @@ -37,7 +37,6 @@ import com.google.android.exoplayer2.trackselection.TrackSelectionArray; import com.google.android.exoplayer2.trackselection.TrackSelectorInterface; import com.google.android.exoplayer2.util.MutableFlags; import com.google.android.exoplayer2.util.Util; -import com.google.android.exoplayer2.video.VideoDecoderOutputBufferRenderer; import com.google.android.exoplayer2.video.VideoFrameMetadataListener; import com.google.android.exoplayer2.video.VideoListener; import com.google.android.exoplayer2.video.spherical.CameraMotionListener; @@ -310,30 +309,6 @@ public interface Player { * @param textureView The texture view to clear. */ void clearVideoTextureView(@Nullable TextureView textureView); - - /** - * Sets the video decoder output buffer renderer. This is intended for use only with extension - * renderers that accept {@link Renderer#MSG_SET_VIDEO_DECODER_OUTPUT_BUFFER_RENDERER}. For most - * use cases, an output surface or view should be passed via {@link #setVideoSurface(Surface)} - * or {@link #setVideoSurfaceView(SurfaceView)} instead. - * - * @param videoDecoderOutputBufferRenderer The video decoder output buffer renderer, or {@code - * null} to clear the output buffer renderer. - */ - void setVideoDecoderOutputBufferRenderer( - @Nullable VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer); - - /** Clears the video decoder output buffer renderer. */ - void clearVideoDecoderOutputBufferRenderer(); - - /** - * Clears the video decoder output buffer renderer if it matches the one passed. Else does - * nothing. - * - * @param videoDecoderOutputBufferRenderer The video decoder output buffer renderer to clear. - */ - void clearVideoDecoderOutputBufferRenderer( - @Nullable VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer); } /** The text component of a {@link Player}. */ diff --git a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java index 44c791778e..caada18f98 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/SimpleExoPlayer.java @@ -60,6 +60,7 @@ import com.google.android.exoplayer2.util.Clock; import com.google.android.exoplayer2.util.Log; import com.google.android.exoplayer2.util.PriorityTaskManager; import com.google.android.exoplayer2.util.Util; +import com.google.android.exoplayer2.video.VideoDecoderGLSurfaceView; import com.google.android.exoplayer2.video.VideoDecoderOutputBufferRenderer; import com.google.android.exoplayer2.video.VideoFrameMetadataListener; import com.google.android.exoplayer2.video.VideoRendererEventListener; @@ -590,7 +591,6 @@ public class SimpleExoPlayer extends BasePlayer @Nullable private Format videoFormat; @Nullable private Format audioFormat; @Nullable private AudioTrack keepSessionIdAudioTrack; - @Nullable private VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer; @Nullable private Surface surface; private boolean ownsSurface; @C.VideoScalingMode private int videoScalingMode; @@ -804,7 +804,7 @@ public class SimpleExoPlayer extends BasePlayer verifyApplicationThread(); removeSurfaceCallbacks(); if (surface != null) { - clearVideoDecoderOutputBufferRenderer(); + setVideoDecoderOutputBufferRenderer(/* videoDecoderOutputBufferRenderer= */ null); } setVideoSurfaceInternal(surface, /* ownsSurface= */ false); int newSurfaceSize = surface == null ? 0 : C.LENGTH_UNSET; @@ -816,7 +816,7 @@ public class SimpleExoPlayer extends BasePlayer verifyApplicationThread(); removeSurfaceCallbacks(); if (surfaceHolder != null) { - clearVideoDecoderOutputBufferRenderer(); + setVideoDecoderOutputBufferRenderer(/* videoDecoderOutputBufferRenderer= */ null); } this.surfaceHolder = surfaceHolder; if (surfaceHolder == null) { @@ -846,12 +846,29 @@ public class SimpleExoPlayer extends BasePlayer @Override public void setVideoSurfaceView(@Nullable SurfaceView surfaceView) { - setVideoSurfaceHolder(surfaceView == null ? null : surfaceView.getHolder()); + verifyApplicationThread(); + if (surfaceView instanceof VideoDecoderGLSurfaceView) { + VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer = + ((VideoDecoderGLSurfaceView) surfaceView).getVideoDecoderOutputBufferRenderer(); + clearVideoSurface(); + surfaceHolder = surfaceView.getHolder(); + setVideoDecoderOutputBufferRenderer(videoDecoderOutputBufferRenderer); + } else { + setVideoSurfaceHolder(surfaceView == null ? null : surfaceView.getHolder()); + } } @Override public void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) { - clearVideoSurfaceHolder(surfaceView == null ? null : surfaceView.getHolder()); + verifyApplicationThread(); + if (surfaceView instanceof VideoDecoderGLSurfaceView) { + if (surfaceView.getHolder() == surfaceHolder) { + setVideoDecoderOutputBufferRenderer(null); + surfaceHolder = null; + } + } else { + clearVideoSurfaceHolder(surfaceView == null ? null : surfaceView.getHolder()); + } } @Override @@ -859,7 +876,7 @@ public class SimpleExoPlayer extends BasePlayer verifyApplicationThread(); removeSurfaceCallbacks(); if (textureView != null) { - clearVideoDecoderOutputBufferRenderer(); + setVideoDecoderOutputBufferRenderer(/* videoDecoderOutputBufferRenderer= */ null); } this.textureView = textureView; if (textureView == null) { @@ -890,32 +907,6 @@ public class SimpleExoPlayer extends BasePlayer } } - @Override - public void setVideoDecoderOutputBufferRenderer( - @Nullable VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer) { - verifyApplicationThread(); - if (videoDecoderOutputBufferRenderer != null) { - clearVideoSurface(); - } - setVideoDecoderOutputBufferRendererInternal(videoDecoderOutputBufferRenderer); - } - - @Override - public void clearVideoDecoderOutputBufferRenderer() { - verifyApplicationThread(); - setVideoDecoderOutputBufferRendererInternal(/* videoDecoderOutputBufferRenderer= */ null); - } - - @Override - public void clearVideoDecoderOutputBufferRenderer( - @Nullable VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer) { - verifyApplicationThread(); - if (videoDecoderOutputBufferRenderer != null - && videoDecoderOutputBufferRenderer == this.videoDecoderOutputBufferRenderer) { - clearVideoDecoderOutputBufferRenderer(); - } - } - @Override public void addAudioListener(AudioListener listener) { // Don't verify application thread. We allow calls to this method from any thread. @@ -1945,13 +1936,12 @@ public class SimpleExoPlayer extends BasePlayer this.ownsSurface = ownsSurface; } - private void setVideoDecoderOutputBufferRendererInternal( + private void setVideoDecoderOutputBufferRenderer( @Nullable VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer) { sendRendererMessage( C.TRACK_TYPE_VIDEO, Renderer.MSG_SET_VIDEO_DECODER_OUTPUT_BUFFER_RENDERER, videoDecoderOutputBufferRenderer); - this.videoDecoderOutputBufferRenderer = videoDecoderOutputBufferRenderer; } private void maybeNotifySurfaceSizeChanged(int width, int height) { diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java index 8208e980ba..b913d32211 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/PlayerView.java @@ -572,8 +572,6 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider oldVideoComponent.clearVideoTextureView((TextureView) surfaceView); } else if (surfaceView instanceof SphericalGLSurfaceView) { ((SphericalGLSurfaceView) surfaceView).setVideoComponent(null); - } else if (surfaceView instanceof VideoDecoderGLSurfaceView) { - oldVideoComponent.setVideoDecoderOutputBufferRenderer(null); } else if (surfaceView instanceof SurfaceView) { oldVideoComponent.clearVideoSurfaceView((SurfaceView) surfaceView); } @@ -600,9 +598,6 @@ public class PlayerView extends FrameLayout implements AdsLoader.AdViewProvider newVideoComponent.setVideoTextureView((TextureView) surfaceView); } else if (surfaceView instanceof SphericalGLSurfaceView) { ((SphericalGLSurfaceView) surfaceView).setVideoComponent(newVideoComponent); - } else if (surfaceView instanceof VideoDecoderGLSurfaceView) { - newVideoComponent.setVideoDecoderOutputBufferRenderer( - ((VideoDecoderGLSurfaceView) surfaceView).getVideoDecoderOutputBufferRenderer()); } else if (surfaceView instanceof SurfaceView) { newVideoComponent.setVideoSurfaceView((SurfaceView) surfaceView); } diff --git a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java index 2856e4bec7..36e4a2ed62 100644 --- a/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java +++ b/library/ui/src/main/java/com/google/android/exoplayer2/ui/StyledPlayerView.java @@ -581,8 +581,6 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro oldVideoComponent.clearVideoTextureView((TextureView) surfaceView); } else if (surfaceView instanceof SphericalGLSurfaceView) { ((SphericalGLSurfaceView) surfaceView).setVideoComponent(null); - } else if (surfaceView instanceof VideoDecoderGLSurfaceView) { - oldVideoComponent.setVideoDecoderOutputBufferRenderer(null); } else if (surfaceView instanceof SurfaceView) { oldVideoComponent.clearVideoSurfaceView((SurfaceView) surfaceView); } @@ -609,9 +607,6 @@ public class StyledPlayerView extends FrameLayout implements AdsLoader.AdViewPro newVideoComponent.setVideoTextureView((TextureView) surfaceView); } else if (surfaceView instanceof SphericalGLSurfaceView) { ((SphericalGLSurfaceView) surfaceView).setVideoComponent(newVideoComponent); - } else if (surfaceView instanceof VideoDecoderGLSurfaceView) { - newVideoComponent.setVideoDecoderOutputBufferRenderer( - ((VideoDecoderGLSurfaceView) surfaceView).getVideoDecoderOutputBufferRenderer()); } else if (surfaceView instanceof SurfaceView) { newVideoComponent.setVideoSurfaceView((SurfaceView) surfaceView); }