Name

    ANDROID_presentation_time

Name Strings

    EGL_ANDROID_presentation_time

Contributors

    Jamie Gennis
    Andy McFadden
    Jesse Hall

Contact

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

Status

    Draft

Version

    Version 3, June 26, 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.  If <dpy> is not the name of a valid, initialized EGLDisplay, an
    EGL_BAD_DISPLAY error is generated.  If <surface> is not a valid EGLSurface
    then an EGL_BAD_SURFACE error is generated.

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.

    3. Should the presentation time be state which is used by eglSwapBuffers,
    or should it be a new parameter to an extended variant of eglSwapBuffers?

    RESOLVED: The presentation time should be new state which is used by
    the existing eglSwapBuffers call. Adding new state composes better with
    other (hypothetical) extensions that also modify the behavior of
    eglSwapBuffers.

Revision History

#3 (Jesse Hall, June 26, 2013)
    - Enumerated errors generated by eglPresentationTimeANDROID.
    - Added Issue #3 with resolution.

#2 (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.
