From bee62948131d8f1fe92fae720c9b6f07aba97048 Mon Sep 17 00:00:00 2001 From: olly Date: Wed, 13 Nov 2019 09:31:07 +0000 Subject: [PATCH] Add clear methods for VideoDecoderOutputBufferRenderer Also add some missing Nullable annotations. PiperOrigin-RevId: 280150512 --- .../com/google/android/exoplayer2/Player.java | 26 ++++++--- .../android/exoplayer2/SimpleExoPlayer.java | 53 +++++++++++++------ 2 files changed, 57 insertions(+), 22 deletions(-) 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 fa0caeb92d..a29851fefc 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 @@ -217,7 +217,7 @@ public interface Player { * * @param surface The surface to clear. */ - void clearVideoSurface(Surface surface); + void clearVideoSurface(@Nullable Surface surface); /** * Sets the {@link Surface} onto which video will be rendered. The caller is responsible for @@ -240,7 +240,7 @@ public interface Player { * * @param surfaceHolder The surface holder. */ - void setVideoSurfaceHolder(SurfaceHolder surfaceHolder); + void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder); /** * Clears the {@link SurfaceHolder} that holds the {@link Surface} onto which video is being @@ -248,7 +248,7 @@ public interface Player { * * @param surfaceHolder The surface holder to clear. */ - void clearVideoSurfaceHolder(SurfaceHolder surfaceHolder); + void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder); /** * Sets the {@link SurfaceView} onto which video will be rendered. The player will track the @@ -256,7 +256,7 @@ public interface Player { * * @param surfaceView The surface view. */ - void setVideoSurfaceView(SurfaceView surfaceView); + void setVideoSurfaceView(@Nullable SurfaceView surfaceView); /** * Clears the {@link SurfaceView} onto which video is being rendered if it matches the one @@ -264,7 +264,7 @@ public interface Player { * * @param surfaceView The texture view to clear. */ - void clearVideoSurfaceView(SurfaceView surfaceView); + void clearVideoSurfaceView(@Nullable SurfaceView surfaceView); /** * Sets the {@link TextureView} onto which video will be rendered. The player will track the @@ -272,7 +272,7 @@ public interface Player { * * @param textureView The texture view. */ - void setVideoTextureView(TextureView textureView); + void setVideoTextureView(@Nullable TextureView textureView); /** * Clears the {@link TextureView} onto which video is being rendered if it matches the one @@ -280,7 +280,7 @@ public interface Player { * * @param textureView The texture view to clear. */ - void clearVideoTextureView(TextureView textureView); + void clearVideoTextureView(@Nullable TextureView textureView); /** * Sets the video decoder output buffer renderer. This is intended for use only with extension @@ -293,6 +293,18 @@ public interface Player { */ 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 c0a45249e6..6bea81cd49 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 @@ -329,6 +329,7 @@ public class SimpleExoPlayer extends BasePlayer @Nullable private Format videoFormat; @Nullable private Format audioFormat; + @Nullable private VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer; @Nullable private Surface surface; private boolean ownsSurface; private @C.VideoScalingMode int videoScalingMode; @@ -520,7 +521,7 @@ public class SimpleExoPlayer extends BasePlayer } @Override - public void clearVideoSurface(Surface surface) { + public void clearVideoSurface(@Nullable Surface surface) { verifyApplicationThread(); if (surface != null && surface == this.surface) { setVideoSurface(null); @@ -537,7 +538,7 @@ public class SimpleExoPlayer extends BasePlayer } @Override - public void setVideoSurfaceHolder(SurfaceHolder surfaceHolder) { + public void setVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) { verifyApplicationThread(); removeSurfaceCallbacks(); this.surfaceHolder = surfaceHolder; @@ -559,7 +560,7 @@ public class SimpleExoPlayer extends BasePlayer } @Override - public void clearVideoSurfaceHolder(SurfaceHolder surfaceHolder) { + public void clearVideoSurfaceHolder(@Nullable SurfaceHolder surfaceHolder) { verifyApplicationThread(); if (surfaceHolder != null && surfaceHolder == this.surfaceHolder) { setVideoSurfaceHolder(null); @@ -567,17 +568,17 @@ public class SimpleExoPlayer extends BasePlayer } @Override - public void setVideoSurfaceView(SurfaceView surfaceView) { + public void setVideoSurfaceView(@Nullable SurfaceView surfaceView) { setVideoSurfaceHolder(surfaceView == null ? null : surfaceView.getHolder()); } @Override - public void clearVideoSurfaceView(SurfaceView surfaceView) { + public void clearVideoSurfaceView(@Nullable SurfaceView surfaceView) { clearVideoSurfaceHolder(surfaceView == null ? null : surfaceView.getHolder()); } @Override - public void setVideoTextureView(TextureView textureView) { + public void setVideoTextureView(@Nullable TextureView textureView) { verifyApplicationThread(); removeSurfaceCallbacks(); this.textureView = textureView; @@ -602,7 +603,7 @@ public class SimpleExoPlayer extends BasePlayer } @Override - public void clearVideoTextureView(TextureView textureView) { + public void clearVideoTextureView(@Nullable TextureView textureView) { verifyApplicationThread(); if (textureView != null && textureView == this.textureView) { setVideoTextureView(null); @@ -614,14 +615,22 @@ public class SimpleExoPlayer extends BasePlayer @Nullable VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer) { verifyApplicationThread(); setVideoSurface(null); - for (Renderer renderer : renderers) { - if (renderer.getTrackType() == C.TRACK_TYPE_VIDEO) { - player - .createMessage(renderer) - .setType(C.MSG_SET_VIDEO_DECODER_OUTPUT_BUFFER_RENDERER) - .setPayload(videoDecoderOutputBufferRenderer) - .send(); - } + setVideoDecoderOutputBufferRendererInternal(videoDecoderOutputBufferRenderer); + } + + @Override + public void clearVideoDecoderOutputBufferRenderer() { + verifyApplicationThread(); + setVideoDecoderOutputBufferRendererInternal(/* videoDecoderOutputBufferRenderer= */ null); + } + + @Override + public void clearVideoDecoderOutputBufferRenderer( + @Nullable VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer) { + verifyApplicationThread(); + if (videoDecoderOutputBufferRenderer != null + && videoDecoderOutputBufferRenderer == this.videoDecoderOutputBufferRenderer) { + setVideoDecoderOutputBufferRendererInternal(/* videoDecoderOutputBufferRenderer= */ null); } } @@ -1486,6 +1495,20 @@ public class SimpleExoPlayer extends BasePlayer this.ownsSurface = ownsSurface; } + private void setVideoDecoderOutputBufferRendererInternal( + @Nullable VideoDecoderOutputBufferRenderer videoDecoderOutputBufferRenderer) { + for (Renderer renderer : renderers) { + if (renderer.getTrackType() == C.TRACK_TYPE_VIDEO) { + player + .createMessage(renderer) + .setType(C.MSG_SET_VIDEO_DECODER_OUTPUT_BUFFER_RENDERER) + .setPayload(videoDecoderOutputBufferRenderer) + .send(); + } + } + this.videoDecoderOutputBufferRenderer = videoDecoderOutputBufferRenderer; + } + private void maybeNotifySurfaceSizeChanged(int width, int height) { if (width != surfaceWidth || height != surfaceHeight) { surfaceWidth = width;