Name KHR_stream_producer_aldatalocator Name Strings EGL_KHR_stream_producer_aldatalocator Contributors Acorn Pooley Contacts Acorn Pooley, NVIDIA (apooley 'at' nvidia.com) Notice Copyright (c) 2011-2013 The Khronos Group Inc. Copyright terms at http://www.khronos.org/registry/speccopyright.html Status Complete. Approved by the Khronos Board of Promoters on December 2, 2011. Version Version 4, October 4, 2011 Number EGL Extension #35 Dependencies Requires EGL 1.2 or later. Requires OpenMAX AL 1.1 or later. Requires the EGL_KHR_stream extension. Requires the OpenMAX_AL_EGLStream_DataLocator extension. Overview This extension (in conjunction with the OpenMAX_AL_EGLStream_DataLocator extension to OpenMAX AL) allows an OpenMAX AL MediaPlayer object to be connected as the producer of an EGLStream. After the EGLStream is created and connected to a consumer, the OpenMAX AL MediaPlayer object is created by calling 's CreateMediaPlayer() method. The argument points to an XADataLocator_EGLStream containing the EGLStreamKHR handle of the stream. The CreateMediaPlayer() method creates a MediaPlayer object and connects it as the producer of the EGLStream. (Note that the pFormat member of the XADataSink structure is ignored in this case and may be NULL.) Once connected the MediaPlayer inserts image frames into the EGLStream. Replace section "3.10.3.1 No way to connect producer to EGLStream" in the EGL_KHR_stream extension with this: 3.10.3.1 OpenMAX AL Stream Producer An OpenMAX AL MediaPlayer object can act as a producer for an EGLStream. First create the EGLStream and connect a consumer to it so that the EGLStream is in EGL_STREAM_STATE_CONNECTING_KHR state. At this point the application can create an OpenMAX AL MediaPlayer object as described in the OpenMAX AL specification and the OpenMAX_AL_EGLStream_DataLocator extension. The application should create an XADataSink structure with pLocator pointing to an XADataLocator_EGLStream structure referencing the EGLStream (in the pEGLStream member) and the EGLDisplay used to create the EGLStream (in the pEGLDisplay member). The pFormat field of the XADataSink is ignored and should be NULL. This XADataSink structure is passed as the argument to 's CreateMediaPlayer() method. If the OpenMAX AL implementation is unable to convert image frames to a format usable by 's consumer then CreateMediaPlayer will fail with a XA_RESULT_CONTENT_UNSUPPORTED error. After CreateMediaPlayer() has returned successfully, 's state will be one of - EGL_STREAM_STATE_EMPTY_KHR - EGL_STREAM_STATE_NEW_FRAME_AVAILABLE_KHR - EGL_STREAM_STATE_OLD_FRAME_AVAILABLE_KHR and the OpenMAX AL MediaPlayer object returned in will be connected as the producer of . If the MediaPlayer object is destroyed then 's state will become EGL_STREAM_STATE_DISCONNECTED_KHR. Image and video frame data generated by the OpenMAX AL object (as described in the OpenMAX AL spec) are inserted into (as described in section "3.10.5 EGLStream operation" of the EGL_KHR_stream extension). The OpenMAX AL object will use the value of the EGL_CONSUMER_LATENCY_USEC_KHR attribute of to determine when to insert each image frame. If the EGL_CONSUMER_LATENCY_USEC_KHR attribute is modified (by the consumer and/or by the application) then OpenMAX AL object will adjust its timing within 500 milliseconds of the change. If an image frame is intended to appear to the user at time T (e.g. so that it is synchronized with audio) then the OpenMAX AL object must insert the image frame at time T - EGL_CONSUMER_LATENCY_USEC_KHR Issues 1. How many image frame buffers should be used? RESOLVED: This is left up to the OpenMAX AL implementation. 2. How is the image frame size determined? Could also expose EGL_WIDTH and EGL_HEIGHT in the attrib_list as a hint (or as a requirement) as to what size should be used. However, a MediaPlayer object typically knows what size to decode based on the source of the data. So this is probably not necessary. If needed it can be added with a layered extension. RESOLVED: Leave this up to the OpenMAX AL MediaPlayer object. 3. What image frame format should be used? RESOLVED: This is a negotiation between the consumer and producer, but ultimately the producer must convert to the format that the consumer requests, or fail if that is not possible. Details of any such communication is implementation dependent and outside the scope of this specification. 4. Should this extension create an XADataSink structure rather than making the application create its own as described in OpenMAX_AL_EGLStream_DataLocator? RESOLVED: NO no need to do this. 5. (This issue no longer applies) Should this extension allow the application to ignore the XADataSink structure returned by eglStreamProducerALDataSource and instead use its own? RESOLVED: This issue no longer applies 6. (This issue no longer applies) Should eglStreamProducerALDataSource check that is not NULL and that points to a pointer that is NULL? RESOLVED: This issue no longer applies Revision History #4 (October 4, 2011) Acorn Pooley - Convert from an NV extension to a KHR extension #3 (September 23, 2011) Acorn Pooley - Eliminate the eglStreamProducerALDataSource function. - Rename AL0124b_EGLImageStream_DataLocator_Nokia to OpenMAX_AL_EGLStream_DataLocator and point to new link. - Resolve issue 2 #2 (July 6, 2011) Acorn Pooley - remove the creation of the XADataSink by eglStreamProducerALDataSource() #1 (June 30, 2011) Acorn Pooley - initial draft # vim:ai:ts=4:sts=4:expandtab:textwidth=70