137 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			137 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 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.
 |