XXX - Not complete. Name SGIX_subsample Name Strings GL_SGIX_subsample Version Last Modified Date: 07/27/1999 Author Revision: $Header: //depot/main/doc/registry/extensions/SGI/subsample.spec#10 $ Number 202 Dependencies Full support of SGI_ycrcb can be accomplished by using SGIX_subsample and GL_COLOR_MATRIX. In addition, some applications may also choose to invoke GL_CONVOLUTION and GL_COLOR_TABLE to better improve the quality of both the resampling and color conversion. Note however, that this extension, combined with the ycrcbformat.spec (SGIX_ycrcba) extension obsoletes the current ycrcb.spec (SGIX_ycrcb) extension. EXT_texture3D affects the definition of this extension EXT_subtexture affects the definition of this extension EXT_histogram affects the definition of this extension EXT_convolution affects the definition of this extension SGI_color_table affects the definition of this extension SGI_resample affects the definition of this extension SGI_subsample_4224 affects the definition of this extension Overview Many video image formats and compression techniques utilize various component subsamplings, so it is necessary to provide a mechanism to specify the up- and down-sampling of components as pixel data is drawn from and read back to the client. Though subsampled components are normally associated with the video color space, YCrCb, use of subsampling in OpenGL does not imply a specific color space. This extension defines new pixel storage modes that are used in the conversion of image data to and from component subsampled formats on the client side. The extension defines a new pixel storage mode to specify these sampling patterns, there are three legal values (PIXEL_SUBSAMPLE_4444_SGIX, PIXEL_SUBSAMPLE_4242_SGIX, and PIXEL_SUBSAMPLE_2424_SGIX). When pixel data is received from the client and an unpacking upsampling mode other than PIXEL_SUBSAMPLE_4444_SGIX is specified, the upsampling is performed via replication, unless otherwise specified by RESAMPLE_SGIX. Similarly, when pixel data is read back to the client and a packing downsampling mode other than PIXEL_SUBSAMPLE_4444_SGIX is specified, downsampling is performed via simple component decimation (point sampling), unless otherwise specified by RESAMPLE_SGIX. Issues * If we revive the ycrcbformat.spec then support for the old (SGIX_ycrcb) extension can be accomplished using the the SGIX_subsample and SGIX_ycrcba. * the enums with names like PIXEL_SUBSAMPLE_4242_SGIX and PIXEL_SUBSAMPLE_2424_SGIX gives an impression that there are 4 components in the subsampling. Can there be an alternative name? (Angela suggests: PIXEL_SUBSAMPLE_422_CbYCrY_SGIX and PIXEL_SUBSAMPLE_422_YCbYCr_SGIX. This is clear, but involves naming the components YCrCb. However, the term 4:2:2 basically refers to the subcarrier frequency for the YCrCb transmission in video signals, so 4:2:2 in a way already implies 4:2:2) New Procedures and Functions None. New Tokens Accepted by the parameter of PixelStoref, PixelStorei, GetBooleanv, GetIntegerv, GetFloatv and GetDoublev: PACK_SUBSAMPLE_RATE_SGIX 0x85A0 UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1 Accepted by the parameter of PixelStoref and PixelStorei when the parameter is PACK_SUBSAMPLE_RATE_SGIX or UNPACK_SUBSAMPLE_RATE_SGIX: PIXEL_SUBSAMPLE_4444_SGIX 0x85A2 PIXEL_SUBSAMPLE_2424_SGIX 0x85A3 PIXEL_SUBSAMPLE_4242_SGIX 0x85A4 Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation) None. Additions to Chapter 3 of the 1.1 Specification (Rasterization) 3.6.1 Pixel Storage Modes The following is added to Table 3.1: Parameter Name Type Initial Value Valid Range -------------- ---- ------------- ----------- UNPACK_SUBSAMPLE_RATE_SGIX integer PIXEL_SUBSAMPLE_4444_SGIX PIXEL_SUBSAMPLE_4444_SGIX PIXEL_SUBSAMPLE_4242_SGIX PIXEL_SUBSAMPLE_2424_SGIX PACK_SUBSAMPLE_RATE_SGIX integer PIXEL_SUBSAMPLE_4444_SGIX PIXEL_SUBSAMPLE_4444_SGIX PIXEL_SUBSAMPLE_4242_SGIX PIXEL_SUBSAMPLE_2424_SGIX 3.6.3 Rasterization of Pixel Rectangles If the PixelStore parameter UNPACK_SUBSAMPLE_RATE_SGIX is set to PIXEL_SUBSAMPLE_4242_SGIX or PIXEL_SUBSAMPLE_2424_SGIX, then the needs to be set to a corresponding 3- or 4- component pixel format or the error INVALID_OPERATION occurs. If a 4-component pixel format is used, the alpha is assumed to be of constant value 1.0) If the PixelStore parameter UNPACK_SUBSAMPLE_RATE_SGIX is set to PIXEL_SUBSAMPLE_4242_SGIX or PIXEL_SUBSAMPLE_2424_SGIX, then the needs to be set to a multiple of 2 pixels or the error INVALID_OPERATION occurs. If the PixelStore parameter UNPACK_SUBSAMPLE_RATE_SGIX is set to something other than PIXEL_SUBSAMPLE_4444_SGIX then these elements are grouped into sets of one, two, three or four values, depending on the value of UNPACK_SUBSAMPLE_RATE_SGIX, to form groups. Table 3.5.1 summarizes the layout of groups obtained from memory depending on the value of UNPACK_SUBSAMPLE_RATE_SGIX. Table 3.5.1: Value of Number of Number of Order of UNPACK_SUBSAMPLE Components Values/Group components _RATE_SGIX in a seq of groups in memory -------------------- ---------- ------- ---------- PIXEL_SUBSAMPLE_4444_SGIX n n PIXEL_SUBSAMPLE_4242_SGIX 3 CbYCr(rgb) 2 YCb,YCr,YCb,YCr PIXEL_SUBSAMPLE_2424_SGIX 3 CbYCr(rgb) 2 CbY,CrY,CbY,CrY note: Cb, Y, and Cr are used to illustrate the in-memory packing of pixels in the YCrCb color space. Normally, 2,3, and 4 component groups are labeled LA, RGB, RGBA. Conversion to UNIFORM Sampling ------------------------------ This step is applied only if the PixelStore parameter UNPACK_SUBSAMPLE_RATE_SGIX is set to something other than PIXEL_SUBSAMPLE_4444_SGIX. If UNPACK_SUBSAMPLE_RATE_SGIX is set to PIXEL_SUBSAMPLE_4242_SGIX or PIXEL_SUBSAMPLE_2424_SGIX then the number of components per pixel is increased from two to three. After upsampling, the data is treated as though it were RGB. 2424: < R0,G0> < B1,G1> < R2,G2> < B3, G3> | | | | | | | | | | o-----o---+--o | | o-----o---+--o | | | | | | | | | | o--+--+-----o | | o---+--+-----o | | | | | | | | | | | | | | V V V V V V V V V V V V < R0,G0,B1 > < R0,G1,B1 > < R2,G2,B3 > < R2,G3,B3 > 4242: < G0,R0> < G3,B3 > | | | | | | | | \ / \_____ __\__/ \ \ / \_____ __\__/ \ X ___X \ | X ___X \ | / \ / \ \ | / \ / \ \ | | | | | | | | | | | | | V V V V V V V V V V V V < R0,G0,B1 > < R0,G1,B1 > < R2,G2,B3 > < R2,G3,B3 > Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations and the Frame Buffer) 4.3.2 Reading Pixels The following is added to Table 4.5: Parameter Name Type Initial Value Valid Range -------------- ---- ------------- ----------- PACK_SUBSAMPLE_RATE_SGIX integer PIXEL_SUBSAMPLE_4444_SGIX PIXEL_SUBSAMPLE_4444_SGIX PIXEL_SUBSAMPLE_4242_SGIX PIXEL_SUBSAMPLE_2424_SGIX Conversion to Subsampled Form ------------------------------ This step is applied only if the PixelStore parameter PACK_SUBSAMPLE_RATE_SGIX is set to something other than PIXEL_SUBSAMPLE_4444_SGIX. If this step is carried out its operation is controlled by the values of PACK_SUBSAMPE_RATE_SGIX. If a filter operation is specified by RESAMPLE_SGIX, the resampling filter is applied prior to the subsampling step. The pack mode involves dropping chroma samples. For users who like to perform arbitrary filtering other than those specifiable using RESAMPLE_SGIX, it could also be done prior to packing with user calls to convolution function. If PACK_SUBSAMPLE_RATE_SGIX is set to PIXEL_SUBSAMPLE_4242_SGIX or PIXEL_SUBSAMPLE_2424_SGIX then the resulting pixels has an average of 2 component values per pixel. Each pixel pair are constructed as follows: The first destination pixel of a pair is made up of the first and second component of the first source pixel. The second destination pixel of a pair is made up of the third component of the first source pixel, and the second component of the second source pixel. 2424: | | | | | | | | | | | | | | | | | | | * * | * * | | | * * | * * | | | | | | | | V V V V V V V V <--- pixel pair ----> <--- pixel pair ----> 4242: | | | * * | * * | | | * * | * * \ / |____ ____| \ / |____ ____| X ____X____ X ____X____ / \ | | | | | | V V V V V V V V <--- pixel pair ----> <--- pixel pair ----> If the PixelStore parameter PACK_SUBSAMPLE_RATE_SGIX is set to PIXEL_SUBSAMPLE_RATE_4242_SGIX or PIXEL_SUBSAMPLE_RATE_2424_SGIX then only the corresponding two elements are written. That is, only the first two components of each group are written to memory. Additions to Chapter 5 of the 1.1 Specification (Special Functions) None. Additions to Chapter 6 of the 1.1 Specification (State and State Requests) XXX Additions to the GLX Specification Errors XXX New State Get Value Get Command Type Initial Value Attribute --------- ----------- ---- ------------- --------- UNPACK_SUBSAMPLE_RATE_SGIX GetIntegerv Z4 PIXEL_SUBSAMPLE_4444_SGIX client PACK_SUBSAMPLE_RATE_SGIX GetIntegerv Z4 PIXEL_SUBSAMPLE_4444_SGIX client New Implementation Dependent State None.