Add clear methods for VideoDecoderOutputBufferRenderer

Also add some missing Nullable annotations.

PiperOrigin-RevId: 280150512
This commit is contained in:
olly 2019-11-13 09:31:07 +00:00 committed by Oliver Woodman
parent 7ca77c6002
commit bee6294813
2 changed files with 57 additions and 22 deletions

View File

@ -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}. */

View File

@ -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;