blob: 5f56646dc6eaf45ddb2af4bfb552005ee5530905 [file] [log] [blame]
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