| Name |
| |
| NV_stream_origin |
| |
| Name Strings |
| |
| EGL_NV_stream_origin |
| |
| Contributors |
| |
| Miguel A. Vico |
| James Jones |
| Daniel Kartch |
| |
| Contacts |
| |
| Miguel A. Vico (mvicomoya 'AT' nvidia.com) |
| |
| Status |
| |
| Complete. |
| |
| Version |
| |
| Version 5 - May 20, 2019 |
| |
| Number |
| |
| 134 |
| |
| Extension Type |
| |
| EGL display extension |
| |
| Dependencies |
| |
| Requires the EGL_KHR_stream extension. |
| |
| This extension is written based on the wording of version 26 of the |
| EGL_KHR_stream extension. |
| |
| Overview |
| |
| EGL does not define a frame orientation. However, window systems or |
| rendering APIs might. |
| |
| Ideally, when using EGL streams, frame orientation is agreed upon by |
| both the connected consumer and producer and appropriate handling is |
| performed within EGL to satisfy both endpoints needs. Thus, |
| applications will rarely have to worry about frame orientation. |
| |
| However, in some cases consumer applications such as compositors |
| might still need to access the frame data as provided by the |
| consumer. Hence, they need to know what orientation was set for the |
| stream frames. This will allow applications to adjust the way they |
| access the frame data. |
| |
| Similarly, producer applications might need to adjust how rendering |
| commands are issued depending on the orientation set for the stream |
| frames. |
| |
| This extension provides new attributes to allow EGL stream users to |
| query frame orientation and whether it is handled automatically by |
| the producer or consumer endpoints so that clients are not required |
| to take further actions. |
| |
| New Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted as the <attribute> parameter of eglQueryStreamKHR and |
| eglQueryStreamAttribKHR: |
| |
| EGL_STREAM_FRAME_ORIGIN_X_NV 0x3366 |
| EGL_STREAM_FRAME_ORIGIN_Y_NV 0x3367 |
| EGL_STREAM_FRAME_MAJOR_AXIS_NV 0x3368 |
| |
| EGL_CONSUMER_AUTO_ORIENTATION_NV 0x3369 |
| EGL_PRODUCER_AUTO_ORIENTATION_NV 0x336A |
| |
| Returned by eglQueryStreamKHR and eglQueryStreamAttribKHR when |
| attribute is EGL_STREAM_FRAME_ORIGIN_X_NV: |
| |
| EGL_LEFT_NV 0x336B |
| EGL_RIGHT_NV 0x336C |
| |
| Returned by eglQueryStreamKHR and eglQueryStreamAttribKHR when |
| attribute is EGL_STREAM_FRAME_ORIGIN_Y_NV: |
| |
| EGL_TOP_NV 0x336D |
| EGL_BOTTOM_NV 0x336E |
| |
| Returned by eglQueryStreamKHR and eglQueryStreamAttribKHR when |
| attribute is EGL_STREAM_FRAME_MAJOR_AXIS_NV: |
| |
| EGL_X_AXIS_NV 0x336F |
| EGL_Y_AXIS_NV 0x3370 |
| |
| Add to table "3.10.4.4 EGLStream Attributes" |
| |
| Attribute Read/Write Type Section |
| --------------------------------- ---------- ---------- ----------- |
| EGL_STREAM_FRAME_ORIGIN_X_NV ro EGLint 3.10.4.x |
| EGL_STREAM_FRAME_ORIGIN_Y_NV ro EGLint 3.10.4.x+1 |
| EGL_STREAM_FRAME_MAJOR_AXIS_NV ro EGLint 3.10.4.x+2 |
| EGL_CONSUMER_AUTO_ORIENTATION_NV ro EGLBoolean 3.10.4.x+3 |
| EGL_PRODUCER_AUTO_ORIENTATION_NV ro EGLBoolean 3.10.4.x+4 |
| |
| Add new subsections to the end of section "3.10.4 EGLStream Attributes" |
| in EGL_KHR_stream: |
| |
| 3.10.4.x EGL_STREAM_FRAME_ORIGIN_X_NV |
| |
| EGL_STREAM_FRAME_ORIGIN_X_NV is a read-only attribute that |
| indicates the position on the X axis of the origin relative to the |
| stream images surface as agreed upon by consumer and producer. |
| |
| The relative position on X may be one of the following: |
| |
| - EGL_LEFT_NV - Coordinates on the X axis will be 0 on the left |
| border and increase towards the right border until <frame |
| width> is reached. |
| |
| - EGL_RIGHT_NV - Coordinates on the X axis will be <frame width> |
| on the left border and decrease towards the right border until |
| 0 is reached. |
| |
| - EGL_DONT_CARE - No orientation on the X axis was set by the EGL |
| implementation. Applications must coordinate what they are |
| doing. |
| |
| EGL_STREAM_FRAME_ORIGIN_X_NV will not be defined until a consumer |
| and a producer are connected to the stream. Querying it before that |
| will generate an EGL_BAD_STATE_KHR error. |
| |
| |
| 3.10.4.x+1 EGL_STREAM_FRAME_ORIGIN_Y_NV |
| |
| EGL_STREAM_FRAME_ORIGIN_Y_NV is a read-only attribute that |
| indicates the position on the Y axis of the origin relative to the |
| stream images surface as agreed upon by consumer and producer. |
| |
| The relative position on Y may be one of the following: |
| |
| - EGL_TOP_NV - Coordinates on the Y axis will be 0 on the top |
| border and increase towards the bottom border until <frame |
| height> is reached. |
| |
| - EGL_BOTTOM_NV - Coordinates on the Y axis will be <frame |
| height> on the top border and decrease towards the bottom |
| border until 0 is reached. |
| |
| - EGL_DONT_CARE - No orientation on the Y axis was set by the EGL |
| implementation. Applications must coordinate what they are |
| doing. |
| |
| EGL_STREAM_FRAME_ORIGIN_Y_NV will not be defined until a consumer |
| and a producer are connected to the stream. Querying it before that |
| will generate an EGL_BAD_STATE_KHR error. |
| |
| |
| 3.10.4.x+2 EGL_STREAM_FRAME_MAJOR_AXIS_NV |
| |
| EGL_STREAM_FRAME_MAJOR_AXIS_NV is a read-only attribute that |
| indicates whether the stream images are X-major or Y-major. |
| |
| The major axis may be one of the following: |
| |
| - EGL_X_AXIS_NV - Frames are laid out such that consecutive |
| pixels with same Y coordinate reside next to each other in |
| memory. |
| |
| - EGL_Y_AXIS_NV - Frames are laid out such that consecutive |
| pixels with same X coordinate reside next to each other in |
| memory. |
| |
| - EGL_DONT_CARE - No major axis was set by the EGL |
| implementation. Applications must coordinate what they are |
| doing. |
| |
| EGL_STREAM_FRAME_MAJOR_AXIS_NV will not be defined until a consumer |
| and a producer are connected to the stream. Querying it before that |
| will generate an EGL_BAD_STATE_KHR error. |
| |
| |
| 3.10.4.x+3 EGL_CONSUMER_AUTO_ORIENTATION_NV |
| |
| EGL_CONSUMER_AUTO_ORIENTATION_NV is a read-only attribute that |
| indicates whether the consumer endpoint will handle frame orientation |
| automatically so that the consumer application is not required to |
| take further actions. |
| |
| The following values can be returned: |
| |
| - EGL_TRUE - The consumer application can read frames as normal. |
| The consumer will flip images as needed if the expected |
| orientation does not match. |
| |
| - EGL_FALSE - The consumer application is expected to query the |
| frame orientation and process images accordingly if it does not |
| match with the expected orientation. |
| |
| EGL_CONSUMER_AUTO_ORIENTATION_NV will not be defined until a consumer |
| and a producer are connected to the stream. Querying it before that |
| will generate an EGL_BAD_STATE_KHR error. |
| |
| |
| 3.10.4.x+4 EGL_PRODUCER_AUTO_ORIENTATION_NV |
| |
| EGL_PRODUCER_AUTO_ORIENTATION_NV is a read-only attribute that |
| indicates whether the producer endpoint will handle frame orientation |
| automatically so that the producer application is not required to |
| take further actions. |
| |
| The following values can be returned: |
| |
| - EGL_TRUE - The producer application can generate frames as |
| normal. The producer will flip images as needed if the |
| expected orientation does not match. |
| |
| - EGL_FALSE - The producer application is expected to query the |
| frame orientation and generate images accordingly if it does |
| not match with the expected orientation. |
| |
| EGL_PRODUCER_AUTO_ORIENTATION_NV will not be defined until a consumer |
| and a producer are connected to the stream. Querying it before that |
| will generate an EGL_BAD_STATE_KHR error. |
| |
| |
| Add to the error list in section "3.10.4.2 Querying EGLStream |
| Attributes": |
| |
| - EGL_BAD_STATE_KHR is generated if <attribute> is any of |
| EGL_STREAM_FRAME_ORIGIN_X_NV, EGL_STREAM_FRAME_ORIGIN_Y_NV, |
| EGL_STREAM_FRAME_MAJOR_AXIS_NV, EGL_CONSUMER_AUTO_ORIENTATION_NV, |
| or EGL_PRODUCER_AUTO_ORIENTATION_NV and the stream is in |
| EGL_STREAM_STATE_CREATED_KHR or EGL_STREAM_STATE_CONNECTING_KHR |
| state. |
| |
| Issues |
| |
| 1. Frame orientation is only needed for and relevant to specific |
| consumers and producers. What should the query of either |
| EGL_STREAM_FRAME_ORIGIN_X_NV, EGL_STREAM_FRAME_ORIGIN_Y_NV, |
| EGL_STREAM_FRAME_MAJOR_AXIS_NV when consumers or producers that do |
| not define a frame orientation are connected to the stream? |
| |
| RESOLVED: If the consumer or producer connected to the stream does |
| not define a frame orientation, the queries will return |
| EGL_DONT_CARE and applications must coordinate what they do. |
| |
| 2. What should the query return when the connected consumer or |
| producer defines a frame orientation but can actually handle any? |
| |
| RESOLVED: Quering EGL_STREAM_FRAME_ORIGIN_X_NV, |
| EGL_STREAM_FRAME_ORIGIN_Y_NV, or EGL_STREAM_FRAME_MAJOR_AXIS_NV |
| will return the default frame orientation. |
| |
| Querying EGL_CONSUMER_AUTO_ORIENTATION_NV or |
| EGL_PRODUCER_AUTO_ORIENTATION_NV will return whether the consumer |
| or producer can handle any orientation automatically so that |
| applications do not need to worry about it. |
| |
| If querying EGL_CONSUMER_AUTO_ORIENTATION_NV or |
| EGL_PRODUCER_AUTO_ORIENTATION_NV returns EGL_FALSE, the |
| corresponding application is expected to query the frame |
| orientation and take the appropriate action if that does not match |
| the expected orientation. |
| |
| Revision History |
| |
| #5 (May 20th, 2019) Miguel A. Vico |
| - Allocate extension number |
| - Mark extension as complete |
| |
| #4 (January 30th, 2019) Miguel A. Vico |
| - Allocate values for added enumerants |
| - Minor fixes to the major axis attribute description |
| |
| #3 (October 8th, 2018) Miguel A. Vico |
| - Collapsed producer and consumer orientation attributes |
| - Added major axis attribute to fully define orientation |
| - Added two new attributes to indicate whether the producer or |
| consumer can handle orientation automatically. |
| - Rewritten issue #1 |
| - Added issue #2 and its resolution |
| - Overall spec changes to reflect the above points |
| |
| #2 (August 19th, 2016) Miguel A. Vico |
| - Rename newly added attributes as consumer and producer |
| attributes |
| - Added both issue #1 and its resolution |
| - Overall spec changes to reflect the above points |
| |
| #1 (August 1st, 2016) Miguel A. Vico |
| - Initial draft |