Set VideoFrameMetadataListener on VideoSink

PiperOrigin-RevId: 627652670
This commit is contained in:
kimvde 2024-04-24 02:01:46 -07:00 committed by Copybara-Service
parent 3322092070
commit 579386ff27
4 changed files with 20 additions and 9 deletions

View file

@ -306,11 +306,6 @@ public final class CompositingVideoSinkProvider
currentSurfaceAndSize = null;
}
@Override
public void setVideoFrameMetadataListener(VideoFrameMetadataListener videoFrameMetadataListener) {
this.videoFrameMetadataListener = videoFrameMetadataListener;
}
@Override
public void release() {
if (state == STATE_RELEASED) {
@ -516,6 +511,11 @@ public final class CompositingVideoSinkProvider
checkStateNotNull(videoFrameRenderControl).flush();
}
private void setVideoFrameMetadataListener(
VideoFrameMetadataListener videoFrameMetadataListener) {
this.videoFrameMetadataListener = videoFrameMetadataListener;
}
private void setPlaybackSpeed(float speed) {
this.playbackSpeed = speed;
if (videoFrameRenderControl != null) {
@ -758,6 +758,12 @@ 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);

View file

@ -756,7 +756,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
break;
case MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
frameMetadataListener = (VideoFrameMetadataListener) checkNotNull(message);
videoSinkProvider.setVideoFrameMetadataListener(frameMetadataListener);
if (videoSink != null) {
videoSink.setVideoFrameMetadataListener(frameMetadataListener);
}
break;
case MSG_SET_AUDIO_SESSION_ID:
int tunnelingAudioSessionId = (int) checkNotNull(message);
@ -1112,6 +1114,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
// Pass a direct executor since the callback handling involves posting on the app looper
// again, so there's no need to do two hops.
directExecutor());
if (frameMetadataListener != null) {
videoSink.setVideoFrameMetadataListener(frameMetadataListener);
}
if (enableEffectsForOwnSinkProvider) {
if (displaySurface != null && outputResolution != null) {
videoSinkProvider.setOutputSurfaceInfo(displaySurface, outputResolution);

View file

@ -150,6 +150,9 @@ public interface VideoSink {
*/
Surface getInputSurface();
/** Sets the {@link VideoFrameMetadataListener}. */
void setVideoFrameMetadataListener(VideoFrameMetadataListener videoFrameMetadataListener);
/** Sets the playback speed. */
void setPlaybackSpeed(@FloatRange(from = 0, fromInclusive = false) float speed);

View file

@ -79,9 +79,6 @@ public interface VideoSinkProvider {
/** Clears the set output surface info. */
void clearOutputSurfaceInfo();
/** Sets a {@link VideoFrameMetadataListener} which is used in the returned {@link VideoSink}. */
void setVideoFrameMetadataListener(VideoFrameMetadataListener videoFrameMetadataListener);
/** Releases the sink provider. */
void release();
}