Add a method to change the frame rate strategy from the VideoSink
PiperOrigin-RevId: 644373231
This commit is contained in:
parent
1d8b2e3f43
commit
ada7271974
@ -697,6 +697,12 @@ public final class CompositingVideoSinkProvider implements VideoSinkProvider, Vi
|
|||||||
CompositingVideoSinkProvider.this.clearOutputSurfaceInfo();
|
CompositingVideoSinkProvider.this.clearOutputSurfaceInfo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setChangeFrameRateStrategy(
|
||||||
|
@C.VideoChangeFrameRateStrategy int changeFrameRateStrategy) {
|
||||||
|
videoFrameReleaseControl.setChangeFrameRateStrategy(changeFrameRateStrategy);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void enableMayRenderStartOfStream() {
|
public void enableMayRenderStartOfStream() {
|
||||||
videoFrameReleaseControl.allowReleaseFirstFrameBeforeStarted();
|
videoFrameReleaseControl.allowReleaseFirstFrameBeforeStarted();
|
||||||
|
@ -161,6 +161,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
|||||||
private Size outputResolution;
|
private Size outputResolution;
|
||||||
private boolean haveReportedFirstFrameRenderedForCurrentSurface;
|
private boolean haveReportedFirstFrameRenderedForCurrentSurface;
|
||||||
private @C.VideoScalingMode int scalingMode;
|
private @C.VideoScalingMode int scalingMode;
|
||||||
|
private @C.VideoChangeFrameRateStrategy int changeFrameRateStrategy;
|
||||||
private long droppedFrameAccumulationStartTimeMs;
|
private long droppedFrameAccumulationStartTimeMs;
|
||||||
private int droppedFrames;
|
private int droppedFrames;
|
||||||
private int consecutiveDroppedFrameCount;
|
private int consecutiveDroppedFrameCount;
|
||||||
@ -408,6 +409,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
|||||||
deviceNeedsNoPostProcessWorkaround = deviceNeedsNoPostProcessWorkaround();
|
deviceNeedsNoPostProcessWorkaround = deviceNeedsNoPostProcessWorkaround();
|
||||||
outputResolution = Size.UNKNOWN;
|
outputResolution = Size.UNKNOWN;
|
||||||
scalingMode = C.VIDEO_SCALING_MODE_DEFAULT;
|
scalingMode = C.VIDEO_SCALING_MODE_DEFAULT;
|
||||||
|
changeFrameRateStrategy = C.VIDEO_CHANGE_FRAME_RATE_STRATEGY_ONLY_IF_SEAMLESS;
|
||||||
decodedVideoSize = VideoSize.UNKNOWN;
|
decodedVideoSize = VideoSize.UNKNOWN;
|
||||||
tunnelingAudioSessionId = C.AUDIO_SESSION_ID_UNSET;
|
tunnelingAudioSessionId = C.AUDIO_SESSION_ID_UNSET;
|
||||||
reportedVideoSize = null;
|
reportedVideoSize = null;
|
||||||
@ -691,6 +693,7 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
|||||||
if (displaySurface != null && !outputResolution.equals(Size.UNKNOWN)) {
|
if (displaySurface != null && !outputResolution.equals(Size.UNKNOWN)) {
|
||||||
videoSink.setOutputSurfaceInfo(displaySurface, outputResolution);
|
videoSink.setOutputSurfaceInfo(displaySurface, outputResolution);
|
||||||
}
|
}
|
||||||
|
videoSink.setChangeFrameRateStrategy(changeFrameRateStrategy);
|
||||||
videoSink.setPlaybackSpeed(getPlaybackSpeed());
|
videoSink.setPlaybackSpeed(getPlaybackSpeed());
|
||||||
if (videoEffects != null) {
|
if (videoEffects != null) {
|
||||||
videoSink.setVideoEffects(videoEffects);
|
videoSink.setVideoEffects(videoEffects);
|
||||||
@ -833,7 +836,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MSG_SET_CHANGE_FRAME_RATE_STRATEGY:
|
case MSG_SET_CHANGE_FRAME_RATE_STRATEGY:
|
||||||
videoFrameReleaseControl.setChangeFrameRateStrategy((int) checkNotNull(message));
|
changeFrameRateStrategy = (int) checkNotNull(message);
|
||||||
|
if (videoSink != null) {
|
||||||
|
videoSink.setChangeFrameRateStrategy(changeFrameRateStrategy);
|
||||||
|
} else {
|
||||||
|
videoFrameReleaseControl.setChangeFrameRateStrategy(changeFrameRateStrategy);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
|
case MSG_SET_VIDEO_FRAME_METADATA_LISTENER:
|
||||||
frameMetadataListener = (VideoFrameMetadataListener) checkNotNull(message);
|
frameMetadataListener = (VideoFrameMetadataListener) checkNotNull(message);
|
||||||
|
@ -389,8 +389,10 @@ public final class VideoFrameReleaseControl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the {@link C.VideoChangeFrameRateStrategy}, used when calling {@link
|
* Changes the {@link C.VideoChangeFrameRateStrategy} used when calling {@link
|
||||||
* Surface#setFrameRate}.
|
* Surface#setFrameRate}.
|
||||||
|
*
|
||||||
|
* <p>The default value is {@link C#VIDEO_CHANGE_FRAME_RATE_STRATEGY_ONLY_IF_SEAMLESS}.
|
||||||
*/
|
*/
|
||||||
public void setChangeFrameRateStrategy(
|
public void setChangeFrameRateStrategy(
|
||||||
@C.VideoChangeFrameRateStrategy int changeFrameRateStrategy) {
|
@C.VideoChangeFrameRateStrategy int changeFrameRateStrategy) {
|
||||||
|
@ -142,8 +142,10 @@ public final class VideoFrameReleaseHelper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the {@link C.VideoChangeFrameRateStrategy} used when calling {@link
|
* Changes the {@link C.VideoChangeFrameRateStrategy} used when calling {@link
|
||||||
* Surface#setFrameRate}.
|
* Surface#setFrameRate}.
|
||||||
|
*
|
||||||
|
* <p>The default value is {@link C#VIDEO_CHANGE_FRAME_RATE_STRATEGY_ONLY_IF_SEAMLESS}.
|
||||||
*/
|
*/
|
||||||
public void setChangeFrameRateStrategy(
|
public void setChangeFrameRateStrategy(
|
||||||
@C.VideoChangeFrameRateStrategy int changeFrameRateStrategy) {
|
@C.VideoChangeFrameRateStrategy int changeFrameRateStrategy) {
|
||||||
|
@ -201,6 +201,14 @@ public interface VideoSink {
|
|||||||
/** Clears the set output surface info. */
|
/** Clears the set output surface info. */
|
||||||
void clearOutputSurfaceInfo();
|
void clearOutputSurfaceInfo();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the {@link C.VideoChangeFrameRateStrategy} used when calling {@link
|
||||||
|
* Surface#setFrameRate}.
|
||||||
|
*
|
||||||
|
* <p>The default value is {@link C#VIDEO_CHANGE_FRAME_RATE_STRATEGY_ONLY_IF_SEAMLESS}.
|
||||||
|
*/
|
||||||
|
void setChangeFrameRateStrategy(@C.VideoChangeFrameRateStrategy int changeFrameRateStrategy);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables this video sink to render the start of the stream even if the renderer is not
|
* Enables this video sink to render the start of the stream even if the renderer is not
|
||||||
* {@linkplain #onRendererStarted() started} yet.
|
* {@linkplain #onRendererStarted() started} yet.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user