mirror of
https://github.com/androidx/media.git
synced 2025-04-29 22:36:54 +08:00
Share some code for setting video output
The code for setting the video output is almost the same across both places, with one callsite supporting less types of video output. I think it's still better to share the code, to minimize the margin for mistake later. PiperOrigin-RevId: 751423005
This commit is contained in:
parent
8bf658cd79
commit
09ce64ec21
@ -400,6 +400,7 @@ public final class CompositionPlayer extends SimpleBasePlayer
|
|||||||
* @param composition The {@link Composition} to play. Every {@link EditedMediaItem} in the {@link
|
* @param composition The {@link Composition} to play. Every {@link EditedMediaItem} in the {@link
|
||||||
* Composition} must have its {@link EditedMediaItem#durationUs} set.
|
* Composition} must have its {@link EditedMediaItem#durationUs} set.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("FutureReturnValueIgnored")
|
||||||
public void setComposition(Composition composition) {
|
public void setComposition(Composition composition) {
|
||||||
verifyApplicationThread();
|
verifyApplicationThread();
|
||||||
checkArgument(!composition.sequences.isEmpty());
|
checkArgument(!composition.sequences.isEmpty());
|
||||||
@ -412,20 +413,9 @@ public final class CompositionPlayer extends SimpleBasePlayer
|
|||||||
}
|
}
|
||||||
|
|
||||||
setCompositionInternal(composition);
|
setCompositionInternal(composition);
|
||||||
if (videoOutput != null) {
|
|
||||||
if (videoOutput instanceof SurfaceHolder) {
|
|
||||||
setVideoSurfaceHolderInternal((SurfaceHolder) videoOutput);
|
|
||||||
} else if (videoOutput instanceof SurfaceView) {
|
|
||||||
SurfaceView surfaceView = (SurfaceView) videoOutput;
|
|
||||||
setVideoSurfaceHolderInternal(surfaceView.getHolder());
|
|
||||||
} else if (videoOutput instanceof Surface) {
|
|
||||||
setVideoSurfaceInternal((Surface) videoOutput, checkNotNull(videoOutputSize));
|
|
||||||
} else {
|
|
||||||
throw new IllegalStateException(videoOutput.getClass().toString());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Update the composition field at the end after everything else has been set.
|
// Update the composition field at the end after everything else has been set.
|
||||||
this.composition = composition;
|
this.composition = composition;
|
||||||
|
maybeSetVideoOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -444,7 +434,6 @@ public final class CompositionPlayer extends SimpleBasePlayer
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Sets the {@link Surface} and {@link Size} to render to. */
|
/** Sets the {@link Surface} and {@link Size} to render to. */
|
||||||
@VisibleForTesting
|
|
||||||
public void setVideoSurface(Surface surface, Size videoOutputSize) {
|
public void setVideoSurface(Surface surface, Size videoOutputSize) {
|
||||||
videoOutput = surface;
|
videoOutput = surface;
|
||||||
this.videoOutputSize = videoOutputSize;
|
this.videoOutputSize = videoOutputSize;
|
||||||
@ -616,18 +605,12 @@ public final class CompositionPlayer extends SimpleBasePlayer
|
|||||||
@Override
|
@Override
|
||||||
protected ListenableFuture<?> handleSetVideoOutput(Object videoOutput) {
|
protected ListenableFuture<?> handleSetVideoOutput(Object videoOutput) {
|
||||||
if (!(videoOutput instanceof SurfaceHolder || videoOutput instanceof SurfaceView)) {
|
if (!(videoOutput instanceof SurfaceHolder || videoOutput instanceof SurfaceView)) {
|
||||||
throw new UnsupportedOperationException(videoOutput.getClass().toString());
|
throw new UnsupportedOperationException(
|
||||||
|
videoOutput.getClass().toString()
|
||||||
|
+ ". Use CompositionPlayer.setVideoSurface() for Surface output.");
|
||||||
}
|
}
|
||||||
this.videoOutput = videoOutput;
|
this.videoOutput = videoOutput;
|
||||||
if (composition == null) {
|
return maybeSetVideoOutput();
|
||||||
return Futures.immediateVoidFuture();
|
|
||||||
}
|
|
||||||
if (videoOutput instanceof SurfaceHolder) {
|
|
||||||
setVideoSurfaceHolderInternal((SurfaceHolder) videoOutput);
|
|
||||||
} else {
|
|
||||||
setVideoSurfaceHolderInternal(((SurfaceView) videoOutput).getHolder());
|
|
||||||
}
|
|
||||||
return Futures.immediateVoidFuture();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -1012,6 +995,25 @@ public final class CompositionPlayer extends SimpleBasePlayer
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ListenableFuture<?> maybeSetVideoOutput() {
|
||||||
|
if (videoOutput == null || composition == null) {
|
||||||
|
return Futures.immediateVoidFuture();
|
||||||
|
}
|
||||||
|
if (videoOutput instanceof SurfaceHolder) {
|
||||||
|
setVideoSurfaceHolderInternal((SurfaceHolder) videoOutput);
|
||||||
|
} else if (videoOutput instanceof SurfaceView) {
|
||||||
|
SurfaceView surfaceView = (SurfaceView) videoOutput;
|
||||||
|
setVideoSurfaceHolderInternal(surfaceView.getHolder());
|
||||||
|
} else if (videoOutput instanceof Surface) {
|
||||||
|
setVideoSurfaceInternal(
|
||||||
|
(Surface) videoOutput,
|
||||||
|
checkNotNull(videoOutputSize, "VideoOutputSize must be set when using Surface output"));
|
||||||
|
} else {
|
||||||
|
throw new IllegalStateException(videoOutput.getClass().toString());
|
||||||
|
}
|
||||||
|
return Futures.immediateVoidFuture();
|
||||||
|
}
|
||||||
|
|
||||||
private long getContentPositionMs() {
|
private long getContentPositionMs() {
|
||||||
if (players.isEmpty()) {
|
if (players.isEmpty()) {
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user