NVIDIA DRIVE OS Linux API Reference

5.1.6.1 Release
For Test and Development only

 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
EGL_EXT_stream_consumer_qnxscreen_window
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