Class VideoFrameReleaseHelper
- java.lang.Object
-
- com.google.android.exoplayer2.video.VideoFrameReleaseHelper
-
public final class VideoFrameReleaseHelper extends Object
Helps a videoRenderer
release frames to aSurface
. The helper:- Adjusts frame release timestamps to achieve a smoother visual result. The release timestamps are smoothed, and aligned with the default display's vsync signal.
- Adjusts the
Surface
frame rate to inform the underlying platform of a fixed frame rate, when there is one.
-
-
Constructor Summary
Constructors Constructor Description VideoFrameReleaseHelper(Context context)
Constructs an instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description long
adjustReleaseTime(long releaseTimeNs)
Adjusts the release timestamp for the next frame.void
onDisabled()
Called when the renderer is disabled.void
onEnabled()
Called when the renderer is enabled.void
onFormatChanged(float formatFrameRate)
Called when the renderer's output format changes.void
onNextFrame(long framePresentationTimeUs)
Called by the renderer for each frame, prior to it being skipped, dropped or rendered.void
onPlaybackSpeed(float playbackSpeed)
Called when the renderer's playback speed changes.void
onPositionReset()
Called when the renderer's position is reset.void
onStarted()
Called when the renderer is started.void
onStopped()
Called when the renderer is stopped.void
onSurfaceChanged(Surface surface)
Called when the renderer changes whichSurface
it's rendering to renders to.void
setChangeFrameRateStrategy(int changeFrameRateStrategy)
Change theC.VideoChangeFrameRateStrategy
used when callingSurface.setFrameRate(float, int, int)
.
-
-
-
Constructor Detail
-
VideoFrameReleaseHelper
public VideoFrameReleaseHelper(@Nullable Context context)
Constructs an instance.- Parameters:
context
- A context from which information about the default display can be retrieved.
-
-
Method Detail
-
setChangeFrameRateStrategy
public void setChangeFrameRateStrategy(@VideoChangeFrameRateStrategy int changeFrameRateStrategy)
Change theC.VideoChangeFrameRateStrategy
used when callingSurface.setFrameRate(float, int, int)
.
-
onEnabled
public void onEnabled()
Called when the renderer is enabled.
-
onStarted
public void onStarted()
Called when the renderer is started.
-
onSurfaceChanged
public void onSurfaceChanged(@Nullable Surface surface)
Called when the renderer changes whichSurface
it's rendering to renders to.- Parameters:
surface
- The newSurface
, ornull
if the renderer does not have one.
-
onPositionReset
public void onPositionReset()
Called when the renderer's position is reset.
-
onPlaybackSpeed
public void onPlaybackSpeed(float playbackSpeed)
Called when the renderer's playback speed changes.- Parameters:
playbackSpeed
- The factor by which playback is sped up.
-
onFormatChanged
public void onFormatChanged(float formatFrameRate)
Called when the renderer's output format changes.- Parameters:
formatFrameRate
- The format's frame rate, orFormat.NO_VALUE
if unknown.
-
onNextFrame
public void onNextFrame(long framePresentationTimeUs)
Called by the renderer for each frame, prior to it being skipped, dropped or rendered.- Parameters:
framePresentationTimeUs
- The frame presentation timestamp, in microseconds.
-
onStopped
public void onStopped()
Called when the renderer is stopped.
-
onDisabled
public void onDisabled()
Called when the renderer is disabled.
-
adjustReleaseTime
public long adjustReleaseTime(long releaseTimeNs)
Adjusts the release timestamp for the next frame. This is the frame whose presentation timestamp was most recently passed toonNextFrame(long)
.This method may be called any number of times for each frame, including zero times (for skipped frames, or when rendering the first frame prior to playback starting), or more than once (if the caller wishes to give the helper the opportunity to refine a release time closer to when the frame needs to be released).
- Parameters:
releaseTimeNs
- The frame's unadjusted release time, in nanoseconds and in the same time base asSystem.nanoTime()
.- Returns:
- The adjusted frame release timestamp, in nanoseconds and in the same time base as
System.nanoTime()
.
-
-