Package com.google.android.exoplayer2.video

## Class VideoFrameReleaseHelper

- java.lang.Object
- - com.google.android.exoplayer2.video.VideoFrameReleaseHelper

-     public final class VideoFrameReleaseHelper
      extends Object

  Helps a video `Renderer` release frames to a `Surface`. 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 which `Surface` it's rendering to renders to.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 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

    - #### 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 which `Surface` it's rendering to renders to.
      Parameters:
        `surface` - The new `Surface`, or `null` 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, or `Format.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 to `onNextFrame(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 as `System.nanoTime()`.
      Returns:
        The adjusted frame release timestamp, in nanoseconds and in the same time base as `System.nanoTime()`.