Name

    ANDROID_presentation_time

Name Strings

    EGL_ANDROID_presentation_time

Contributors

    Jamie Gennis
    Andy McFadden

Contact

    Jamie Gennis, Google Inc. (jgennis 'at' google.com)

Status

    Draft

Version

    Version 2, April 1, 2013

Number

    EGL Extension #XXX

Dependencies

    Requires EGL 1.1

    This extension is written against the wording of the EGL 1.4 Specification

Overview

    Often when rendering a sequence of images, there is some time at which each
    image is intended to be presented to the viewer.  This extension allows
    this desired presentation time to be specified for each frame rendered to
    an EGLSurface, allowing the native window system to use it.

New Types

    /*
     * EGLnsecsANDROID is a signed integer type for representing a time in
     * nanoseconds.
     */
    #include <khrplatform.h>
    typedef khronos_stime_nanoseconds_t EGLnsecsANDROID;


New Procedures and Functions

    EGLboolean eglPresentationTimeANDROID(
                        EGLDisplay dpy,
                        EGLSurface sur,
                        EGLnsecsANDROID time);

New Tokens

    None.

Changes to Chapter 3 of the EGL 1.2 Specification (EGL Functions and Errors)

    Add a new subsection before Section 3.9.4, page 53 (Posting Errors)

    "3.9.4 Presentation Time

    The function

        EGLboolean eglPresentationTimeANDROID(EGLDisplay dpy, EGLSurface
            surface, EGLnsecsANDROID time);

    specifies the time at which the current color buffer of surface should be
    presented to the viewer.  The time parameter should be a time in
    nanoseconds, but the exact meaning of the time depends on the native
    window system's use of the presentation time.  In situations where
    an absolute time is needed such as displaying the color buffer on a
    display device, the time should correspond to the system monotonic up-time
    clock.  For situations in which an absolute time is not needed such as
    using the color buffer for video encoding, the presentation time of the
    first frame may be arbitrarily chosen and those of subsequent frames
    chosen relative to that of the first frame.

    The presentation time may be set multiple times, with each call to
    eglPresentationTimeANDROID overriding prior calls.  Setting the
    presentation time alone does not cause the color buffer to be made
    visible, but if the color buffer is subsequently posted to a native window
    or copied to a native pixmap then the presentation time of the surface at
    that time may be passed along for the native window system to use.

    If the surface presentation time is successfully set, EGL_TRUE is
    returned.  Otherwise EGL_FALSE is returned and an appropriate error is
    set.

Issues

    1. How is the presentation time used?

    RESOLVED: The uses of the presentation time are intentionally not specified
    in this extension.  Some possible uses include Audio/Video synchronization,
    video frame timestamps for video encoding, display latency metrics, and
    display latency control.

    2. How can the current value of the clock that should be used for the
    presentation time when an absolute time is needed be queried on Android?

    RESOLVED: The current clock value can be queried from the Java
    System.nanoTime() method, or from the native clock_gettime function by
    passing CLOCK_MONOTONIC as the clock identifier.

Revision History

#1 (Jamie Gennis, April 1, 2013)
    - Clarified how uses that either do or do not need an absolute time should
      be handled.
    - Specified the eglPresentationTimeANDROID return value.

#1 (Jamie Gennis, January 8, 2013)
    - Initial draft.
