123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- 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.
|