| | '''OpenGL extension APPLE.rgb_422 |
| | |
| | This module customises the behaviour of the |
| | OpenGL.raw.GL.APPLE.rgb_422 to provide a more |
| | Python-friendly API |
| | |
| | Overview (from the spec) |
| | |
| | A common storage format for video data is 8-bit 422, with every four |
| | bytes encoding two pixels. Within the four bytes there are two |
| | luminance samples, and two chrominance samples that are shared between |
| | both pixels. |
| | |
| | There is a previous extension, namely GL_APPLE_ycbcr_422 that provided |
| | transparent support for this kind of data. However, that extension |
| | left the exact conversion from Y'CbCr to RGB undefined. In reality, |
| | it really had always been based on the ITU-R BT.601 standard, which |
| | meant it was not particularly useful for dealing with high definition |
| | video data, which is encoded using the Rec. 709 standard. |
| | |
| | In some cases the original extension was implemented via fixed function |
| | hardware, but on more modern graphics processors this is done via |
| | a combination of 422 sampling formats and fragment shader instructions. |
| | |
| | This extension essentially exposes a "raw" 422 texture format that |
| | allows developers to access the raw pre-converted Y'CbCr components |
| | so that they have full control over the colorspace conversion. |
| | |
| | In order to avoid defining entirely new color channels within GL, |
| | the Y, Cb and Cr color channels within the 422 data are mapped into |
| | the existing green, blue and red color channels, respectively. Developers |
| | must write their own fragment shader/program to perform the desired |
| | color space transformation. |
| | |
| | Note: Because of the use of the packed UNSIGNED_SHORT_8_8[_REV] types, the |
| | correct type to use based on the layout of the data in memory (Cb Y Cr Y |
| | versus Y Cb Y Cr) will necessarily be sensitive to host endianness. |
| | |
| | This extension differs from the EXT_422_pixels extension in a couple of |
| | ways. First, this extension defines only a single new format, while |
| | relying on two new type arguments to differentiate between the two |
| | component orderings. Second, this extension provides no defined method |
| | of filtering the chroma values between adjacent pixels. And lastly, |
| | the color channel assignments are slightly different, essentially to |
| | match more closely the rough meanings of the Y, Cb and Cr values in |
| | 422 video data. |
| | |
| | The official definition of this extension is available here: |
| | http://www.opengl.org/registry/specs/APPLE/rgb_422.txt |
| | ''' |
| | from OpenGL import platform, constant, arrays |
| | from OpenGL import extensions, wrapper |
| | import ctypes |
| | from OpenGL.raw.GL import _types, _glgets |
| | from OpenGL.raw.GL.APPLE.rgb_422 import * |
| | from OpenGL.raw.GL.APPLE.rgb_422 import _EXTENSION_NAME |
| |
|
| | def glInitRgb422APPLE(): |
| | '''Return boolean indicating whether this extension is available''' |
| | from OpenGL import extensions |
| | return extensions.hasGLExtension( _EXTENSION_NAME ) |
| |
|
| |
|
| | |