Name
EXT_stream_consumer_qnxscreen_window
Name Strings
EGL_EXT_stream_consumer_qnxscreen_window
Contributors
TBD @ QNX
Daniel Kartch
Lakshmanan Selvi Muthusamy
Nazeer Hussain Shaik
Miguel A. Vico
Contacts
TBD @ QNX
Status
Draft
Version
Version 4 - March 13, 2016
Number
TBD
Extension Type
EGL display extension
Dependencies
Requires EGL_KHR_stream.
Requires EGL_NV_stream_attrib
Interacts with EGL_KHR_stream_fifo.
Requires QNX CAR platform 2.1 (Minimum Expectation).
Overview
This extension allows a QNX screen window to be connected to an
EGLStream as its consumer. Image frames from the EGLStream can be
posted into the window for use in composition or display. The
effect is similar to using that window system's
screen_post_window function, but without requiring the
application to perform additional copy steps or have detailed
knowledge of the image buffers to map between the EGL client
producer and the native window system buffers. The QNX screen
window allocation and its handling is done by
EXT_stream_consumer_qnxscreen_window extension itself.
Application don't need to do any external work to display
through the QNX screen window system.
New Procedures and Functions
EGLBoolean eglStreamConsumerQNXScreenWindowEXT(
EGLDisplay dpy,
EGLStreamKHR stream);
New Tokens
Accepted as an attribute in the <attrib_list> parameter of
eglCreateStreamKHR and as the <attribute> parameter of
eglStreamAttribKHR and eglQueryStreamKHR
EGL_CONSUMER_ACQUIRE_QNX_FLUSHING_EXT 0xXXXX
EGL_CONSUMER_ACQUIRE_QNX_DISPNO_EXT 0xXXXX
EGL_CONSUMER_ACQUIRE_QNX_LAYERNO_EXT 0xXXXX
EGL_CONSUMER_ACQUIRE_QNX_SURFACE_TYPE_EXT 0xXXXX
EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_POS_X_EXT 0xXXXX
EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_POS_Y_EXT 0xXXXX
EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_WIDTH_EXT 0xXXXX
EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_HEIGHT_EXT 0xXXXX
Replace section "3.10.2.1 No way to connect consumer to EGLStream" in
the EGL_KHR_stream extension:
3.10.2.1 QNX screen window consumer
Call
EGLBoolean eglStreamConsumerQNXScreenWindowEXT(
EGLDisplay dpy,
EGLStreamKHR stream);
to connect QNX screen window system as the the consumer of
<stream>.
On failure, EGL_FALSE is returned and an error is generated.
- EGL_BAD_DISPLAY is generated if <dpy> is not a valid,
initialized EGLDisplay.
- EGL_BAD_STREAM_KHR is generated if <stream> is not a valid
EGLStreamKHR created for <dpy>.
- EGL_BAD_STATE_KHR is generated if <stream> is not in state
EGL_STREAM_STATE_CREATED_KHR.
On success, a new QNX screen window is allocated and connected
to <stream>, <stream> is placed in the
EGL_STREAM_STATE_CONNECTING_KHR state, and EGL_TRUE is returned.
The handle of the new window is not returned to the user for
direct manipulation. All window properties must be set through
the stream. This prevents applications from accessing or
interfering with the buffers containing the frame data.
If <stream> is destroyed, the QNX screen window will be closed.
Call eglStreamConsumerAcquireAttribNV to post the next available
frame from <stream> into the QNX screen window.
Add a new subsection 3.10.4.x at the end of section "3.10.4 EGLStream
Attributes" in the EGL_KHR_stream extension spec:
3.10.4.x EGL_CONSUMER_ACQUIRE_QNX_FLUSHING_EXT Attribute
This attribute is a read/write bitfield which may contain any
flags of type Screen_Flushing_Types. The default value is 0. It
indicates the flushing behavior to use during
eglStreamConsumerAcquireAttribNV when connected to a QNX screen
window consumer. When connected to any other type of consumer, this
attribute is ignored.
3.10.4.x+1 EGL_CONSUMER_ACQUIRE_QNX_DISPNO_EXT Attribute
This attribute is a read/write integer mapped to the
display port number of the QNX screen window's
SCREEN_PROPERTY_DISPLAY attribute. It may bet set to any valid
display port number supported by the platform.
The default value is 0. When connected to
any other type of consumer, this attribute is ignored.
3.10.4.x+2 EGL_CONSUMER_ACQUIRE_QNX_LAYERNO_EXT Attribute
This attribute is a read/write integer mapped to the
pipeline id of the QNX screen window's
SCREEN_PROPERTY_PIPELINE attribute. It may bet set to any valid
pipeline id supported by the platform.
The default value is 0. When connected to
any other type of consumer, this attribute is ignored.
3.10.4.x+3 EGL_CONSUMER_ACQUIRE_QNX_SURFACE_TYPE_EXT Attribute
This attribute is a read/write flag mapped to the QNX screen
window's SCREEN_PROPERTY_FLIP property. Its value may be 0,
indicating the surface is top-left oriented, or 1, indicating
bottom-left orientation. The default value is 0. When connected
to any other type of consumer, this attribute is ignored.
3.10.4.x+4 EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_POS_X_EXT Attribute
This attribute is a read/write integer mapped to the x value of
the QNX screen window's SCREEN_PROPERTY_POSITION attribute.
It may bet set to any valid window x position.
The default value is 0. When connected to
any other type of consumer, this attribute is ignored.
3.10.4.x+5 EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_POS_Y_EXT Attribute
This attribute is a read/write integer mapped to the y value of
the QNX screen window's SCREEN_PROPERTY_POSITION attribute.
It may bet set to any valid window y position.
The default value is 0. When connected to
any other type of consumer, this attribute is ignored.
3.10.4.x+6 EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_WIDTH_EXT Attribute
This attribute is a read/write integer mapped to the width value
of the QNX screen window's SCREEN_PROPERTY_SIZE attribute.
It may bet set to any valid window width value.
The default value is current display mode's width. When connected
to any other type of consumer, this attribute is ignored.
3.10.4.x+7 EGL_CONSUMER_ACQUIRE_QNX_DISPLAY_HEIGHT_EXT Attribute
This attribute is a read/write integer mapped to the height value
of the QNX screen window's SCREEN_PROPERTY_SIZE attribute.
It may bet set to any valid window height value.
The default value is current display mode's height. When
connected to any other type of consumer, this attribute is
ignored.
Issues:
1. The EGL_KHR_stream_consumer_gltexture extension provides a
timeout attribute which causes the Acquire function to block
if no new frame is available. Do we want similar behavior
here?
RESOLVED - Use the EGL_CONSUMER_ACQUIRE_TIMEOUT_USEC_KHR to
make eglStreamConsumerAcquireAttribNV blocking if desired.
2. In fifo mode, if a timestamp is specified by the producer
which has not yet been reached, should the post operation
performed by the Acquire function block until then?
UNRESOLVED
3. A separate extension may allow QNX screen windows to be
stream producers. How do these extensions interact? Is it
legal for a window to be made both the consumer of one stream
and the producer of another? If so, at what point do frames
acquired by a window get released back to the original
producer if they have been passed downstream? If not, what
errors are generated if an application attempts to do this?
UNRESOLVED
Revision History
#4 (March 13, 2016) Miguel A. Vico
- Rewritten against wording of EGL_NV_stream_attrib.
#3 (July 16, 2015) Nazeer Hussain Shaik
- Prototype of the acquire API changed to match
the one defined by EGL_EXT_stream_acquire_mode
and rewritten accordingly.
#2 (February 18, 2015) Lakshmanan Selvi Muthusamy
- 2nd draft
#1 (September 22, 2014) Daniel Kartch
- Initial draft