Set stream offset on video sink
PiperOrigin-RevId: 628084729
This commit is contained in:
parent
a6eef7b8d8
commit
bf266c96a9
@ -273,11 +273,6 @@ public final class CompositingVideoSinkProvider
|
||||
return videoSinkImpl;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStreamOffsetUs(long streamOffsetUs) {
|
||||
videoSinkImpl.setStreamOffsetUs(streamOffsetUs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setOutputSurfaceInfo(Surface outputSurface, Size outputResolution) {
|
||||
if (currentSurfaceAndSize != null
|
||||
@ -673,6 +668,23 @@ public final class CompositingVideoSinkProvider
|
||||
return checkStateNotNull(videoFrameProcessor).getInputSurface();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVideoFrameMetadataListener(
|
||||
VideoFrameMetadataListener videoFrameMetadataListener) {
|
||||
CompositingVideoSinkProvider.this.setVideoFrameMetadataListener(videoFrameMetadataListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlaybackSpeed(@FloatRange(from = 0, fromInclusive = false) float speed) {
|
||||
CompositingVideoSinkProvider.this.setPlaybackSpeed(speed);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setStreamOffsetUs(long streamOffsetUs) {
|
||||
pendingInputStreamOffsetChange = inputStreamOffsetUs != streamOffsetUs;
|
||||
inputStreamOffsetUs = streamOffsetUs;
|
||||
}
|
||||
|
||||
@Override
|
||||
public long registerInputFrame(long framePresentationTimeUs, boolean isLastFrame) {
|
||||
checkState(isInitialized());
|
||||
@ -752,17 +764,6 @@ public final class CompositingVideoSinkProvider
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setVideoFrameMetadataListener(
|
||||
VideoFrameMetadataListener videoFrameMetadataListener) {
|
||||
CompositingVideoSinkProvider.this.setVideoFrameMetadataListener(videoFrameMetadataListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setPlaybackSpeed(@FloatRange(from = 0, fromInclusive = false) float speed) {
|
||||
CompositingVideoSinkProvider.this.setPlaybackSpeed(speed);
|
||||
}
|
||||
|
||||
// Other methods
|
||||
|
||||
/** Sets the {@linkplain Effect video effects}. */
|
||||
@ -780,12 +781,6 @@ public final class CompositingVideoSinkProvider
|
||||
this.videoEffects.addAll(videoEffects);
|
||||
}
|
||||
|
||||
/** Sets the stream offset, in microseconds. */
|
||||
public void setStreamOffsetUs(long streamOffsetUs) {
|
||||
pendingInputStreamOffsetChange = inputStreamOffsetUs != streamOffsetUs;
|
||||
inputStreamOffsetUs = streamOffsetUs;
|
||||
}
|
||||
|
||||
private void maybeSetStreamOffsetChange(long bufferPresentationTimeUs) {
|
||||
if (pendingInputStreamOffsetChange) {
|
||||
CompositingVideoSinkProvider.this.onStreamOffsetChange(
|
||||
|
@ -1066,7 +1066,6 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
// We always use the video sink if the video sink provider is passed to the renderer.
|
||||
boolean useVideoSink = enableEffectsForOwnSinkProvider || !ownsVideoSinkProvider;
|
||||
if (useVideoSink) {
|
||||
videoSinkProvider.setStreamOffsetUs(getOutputStreamOffsetUs());
|
||||
videoSink = videoSinkProvider.getSink();
|
||||
if (!videoSink.isInitialized()) {
|
||||
try {
|
||||
@ -1113,6 +1112,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
if (frameMetadataListener != null) {
|
||||
videoSink.setVideoFrameMetadataListener(frameMetadataListener);
|
||||
}
|
||||
videoSink.setStreamOffsetUs(getOutputStreamOffsetUs());
|
||||
if (enableEffectsForOwnSinkProvider) {
|
||||
if (displaySurface != null && outputResolution != null) {
|
||||
videoSinkProvider.setOutputSurfaceInfo(displaySurface, outputResolution);
|
||||
@ -1472,7 +1472,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
||||
videoFrameReleaseControl.onProcessedStreamChange();
|
||||
maybeSetupTunnelingForFirstFrame();
|
||||
if (videoSink != null) {
|
||||
videoSinkProvider.setStreamOffsetUs(getOutputStreamOffsetUs());
|
||||
videoSink.setStreamOffsetUs(getOutputStreamOffsetUs());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -158,6 +158,12 @@ public interface VideoSink {
|
||||
/** Sets the playback speed. */
|
||||
void setPlaybackSpeed(@FloatRange(from = 0, fromInclusive = false) float speed);
|
||||
|
||||
/**
|
||||
* Sets the offset, in microseconds, that is added to the video frames presentation timestamps
|
||||
* from the player.
|
||||
*/
|
||||
void setStreamOffsetUs(long streamOffsetUs);
|
||||
|
||||
/**
|
||||
* Informs the video sink that a new input stream will be queued.
|
||||
*
|
||||
|
@ -59,12 +59,6 @@ public interface VideoSinkProvider {
|
||||
/** Returns a {@link VideoSink} to forward video frames for processing. */
|
||||
VideoSink getSink();
|
||||
|
||||
/**
|
||||
* Sets the offset, in microseconds, that is added to the video frames presentation timestamps
|
||||
* from the player.
|
||||
*/
|
||||
void setStreamOffsetUs(long streamOffsetUs);
|
||||
|
||||
/** Sets the output surface info. */
|
||||
void setOutputSurfaceInfo(Surface outputSurface, Size outputResolution);
|
||||
|
||||
|
@ -78,19 +78,18 @@ public final class CompositingVideoSinkProviderTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void setOutputStreamOffsetUs_frameReleaseTimesAreAdjusted()
|
||||
public void setSinkStreamOffsetUs_frameReleaseTimesAreAdjusted()
|
||||
throws VideoSink.VideoSinkException {
|
||||
CompositingVideoSinkProvider provider = createCompositingVideoSinkProvider();
|
||||
VideoSink videoSink = provider.getSink();
|
||||
VideoSink videoSink = createCompositingVideoSinkProvider().getSink();
|
||||
videoSink.initialize(new Format.Builder().build(), Clock.DEFAULT);
|
||||
videoSink.registerInputStream(
|
||||
VideoSink.INPUT_TYPE_SURFACE, new Format.Builder().setWidth(640).setHeight(480).build());
|
||||
|
||||
assertThat(videoSink.registerInputFrame(/* framePresentationTimeUs= */ 0, false)).isEqualTo(0);
|
||||
provider.setStreamOffsetUs(1_000);
|
||||
videoSink.setStreamOffsetUs(1_000);
|
||||
assertThat(videoSink.registerInputFrame(/* framePresentationTimeUs= */ 0, false))
|
||||
.isEqualTo(1_000_000);
|
||||
provider.setStreamOffsetUs(2_000);
|
||||
videoSink.setStreamOffsetUs(2_000);
|
||||
assertThat(videoSink.registerInputFrame(/* framePresentationTimeUs= */ 0, false))
|
||||
.isEqualTo(2_000_000);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user