| Name |
| |
| OML_subsample |
| |
| Name Strings |
| |
| GL_OML_subsample |
| |
| Contact |
| |
| Jon Leech, Silicon Graphics (ljp 'at' sgi.com) |
| |
| Status |
| |
| Complete. Approved by the Khronos SIG on July 19, 2001. |
| |
| Version |
| |
| Last Modified Date: 07/23/2001 |
| Author Revision: $Header: //depot/main/doc/registry/extensions/OML/subsample.spec#10 $ |
| |
| Number |
| |
| 240 |
| |
| Dependencies |
| |
| This extension is written against the OpenGL 1.2.1 Specification, |
| |
| 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. Color |
| space conversion may be performed using other extensions or core |
| capabilities such as the color matrix. |
| |
| This extension defines two new pixel storage formats representing |
| subsampled data on the client. It is loosely based on the |
| SGIX_subsample extension, but specifies subsampling with the data |
| format parameter rather than pixel packing parameters. It also |
| adds support for CYA subsampled data. |
| |
| When pixel data is received from the client and an unpacking |
| upsampling mode other than PIXEL_SUBSAMPLE_NONE_OML is specified, |
| upsampling is performed via replication, unless otherwise specified |
| by UNPACK_RESAMPLE_OML. |
| |
| Similarly, when pixel data is read back to the client and a packing |
| downsampling mode other than PIXEL_SUBSAMPLE_NONE_OML is specified, |
| downsampling is performed via simple component decimation (point |
| sampling), unless otherwise specified by PACK_RESAMPLE_OML. |
| |
| Issues |
| |
| * Which subsampled component orderings should be supported? |
| |
| Only CY and CYA component ordering, since this matches contemporary |
| video hardware. YC and YCA ordering will require a separate |
| extension defining new formats. |
| |
| * The new enumerant naming scheme gives the component frequencies in |
| the same order as the components themselves; that is, |
| FORMAT_SUBSAMPLE_24_24_OML corresponds to CY 4:2:2, and |
| FORMAT_SUBSAMPLE_244_244_OML corresponds to CYA 4:2:2:4. This makes |
| naming YC and YCA orderings easier. |
| |
| * Should subsampling be specified with new pixel storage parameters, |
| like the SGIX_subsample extension, or with new formats, like the |
| EXT_422 extension? |
| |
| With new formats. There are many invalid format/type combinations |
| when specifying subsampling with a pixel storage parameter. Also, |
| there's an ambiguity when doing this because the <format> parameter |
| represents the after-upsampling data format, not the host format. |
| |
| * Because subsampled data is inherently pixel / texture oriented, this |
| extension only supports the new formats for pixel and texture |
| operations; it does not support them for convolution filters, |
| histograms, minmax, or color tables. |
| |
| * The only packed pixel type supported is 10_10_10_2, since this is |
| needed for video data interoperability. It would be possible to |
| support many other packed pixel formats, but most are unused in |
| practice. |
| |
| Is support for other packed pixels types, particularly |
| 2_10_10_10_REV, required? |
| |
| * Should readbacks of non-even widths be allowed when downsampling? |
| |
| No. This is not consistent with draw operations, where this |
| constraint already exists. It also makes OML_resample more complex |
| when using an AVERAGE filter, since the edge cases may also apply to |
| even pixel coordinates. The spec may need to be more explicit about |
| this restriction. |
| |
| IP Status |
| |
| No known issues. |
| |
| New Procedures and Functions |
| |
| None. |
| |
| New Tokens |
| |
| Accepted by the <format> parameter of DrawPixels, ReadPixels, |
| TexImage1D, TexImage2D, TexImage3D, TexSubImage1D, TexSubImage2D, |
| TexSubImage3D, and GetTexImage |
| |
| FORMAT_SUBSAMPLE_24_24_OML 0x8982 |
| FORMAT_SUBSAMPLE_244_244_OML 0x8983 |
| |
| Additions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL Operation) |
| |
| None. |
| |
| Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization) |
| |
| - (3.6.4, p. 88 "Rasterization of Pixel Rectangles") |
| |
| Add prior to the "Unpacking" subsection on page 90: |
| |
| If <format> is FORMAT_SUBSAMPLE_24_24_OML or |
| FORMAT_SUBSAMPLE_244_244_OML, and <type> is one of the packed pixel |
| formats in table 3.8 other than UNSIGNED_INT_10_10_10_2, then the |
| error INVALID_OPERATION occurs; if <width> is not a multiple of 2 |
| pixels, or if the value of the UNPACK_SKIP_PIXELS or |
| UNPACK_ROW_LENGTH parameters is not a multiple of 2 pixels, then the |
| error INVALID_OPERATION occurs. |
| |
| - Add new entries to table 3.6: |
| |
| Format Name Element Meaning and Order Target Buffer |
| ----------- ------------------------- ------------- |
| FORMAT_SUBSAMPLE_24_24_OML CbY / CrY Color |
| FORMAT_SUBSAMPLE_244_244_OML CbYA / CrYA Color |
| |
| - Append to the caption of table 3.6: |
| |
| Subsampled formats yield components that are further modified during |
| conversion to uniform sampling. The subsampled components are |
| denoted as Cb, Y, Cr, and A, although subsampled data is not defined |
| to be in any specific color space. |
| |
| - Modify table 3.8: |
| |
| <type> Parameter GL Data Number of Matching |
| Token Name Type Components Pixel Formats |
| ----------------------- ------- ---------- ------------- |
| UNSIGNED_INT_10_10_10_2 uint 2, 3, 4 RGBA, BGRA, |
| FORMAT_SUBSAMPLE_24_24_OML, |
| FORMAT_SUBSAMPLE_244_244_OML |
| |
| - Append to the caption of table 3.8: |
| |
| Subsampled formats may pack components from multiple groups into a |
| single uint. |
| |
| - Modify table 3.11's UNSIGNED_INT_10_10_10_2 entry: |
| |
| UNSIGNED_INT_10_10_10_2, <format>s RGBA and BGRA: |
| |
| (use existing 4-component diagram) |
| |
| UNSIGNED_INT_10_10_10_2, <format> SUBSAMPLE_24_24_OML: |
| |
| 31 22 21 12 11 2 1 0 |
| | pixel 0/comp. 0 | pixel 0/comp. 1 | pixel 1/comp. 0 | xx | |
| | pixel 1/comp. 1 | pixel 2/comp. 0 | pixel 2/comp. 1 | xx | |
| |
| UNSIGNED_INT_10_10_10_2, <format> SUBSAMPLE_244_244_OML: |
| |
| 31 22 21 12 11 2 1 0 |
| | 1st comp. | 2nd comp. | 3rd comp. | xx | |
| |
| - Change caption of table 3.11: |
| |
| Table 3.11: UNSIGNED_INT formats. Subsampled formats are packed into |
| words, so components from a group may lie in different words. ``xx'' |
| fields are unused. |
| |
| - Add new subsection before "Conversion to RGB" on page 99: |
| |
| Conversion to Uniform Sampling |
| |
| This step is applied only to subsampled data. If <format> is |
| FORMAT_SUBSAMPLE_24_24_OML, then the number of components per pixel |
| is increased from two to three. If <format> is |
| FORMAT_SUBSAMPLE_244_244_OML. then the number of components per |
| pixel is increased from three to four. |
| |
| After conversion to uniform sampling (see figure 3.9). pixels are |
| thereafter treated as though they were RGB (three component) or RGBA |
| (four component) format. |
| |
| In the remainder of this section, the j'th component of the i'th |
| pixel in a row is denoted by S_i,j (for source pixels in client |
| memory) and D_i,j (for destination pixels in the color buffer). |
| |
| Destination component values are defined as: |
| |
| For even pixels ((i mod 2) == 0): |
| |
| D_i,0 = S_i,0 |
| D_i,1 = S_i,1 |
| D_i,2 = S_i+1,0 |
| D_i,3 = S_i,2 |
| |
| For odd pixels ((i mod 2) == 1): |
| |
| D_i,0 = S_i-1,0 |
| D_i,1 = S_i,1 |
| D_i,2 = S_i,0 |
| D_i,3 = S_i,2 |
| |
| - Add new figure 3.9 (renumber following figures): |
| |
| FORMAT_SUBSAMPLE_24_24_OML: |
| <Cb0,Y0> <Cr0,Y1> <Cb2,Y2> <Cr2, Y3> |
| | | | | | | | | |
| | | ____/ \__|__ | | ____/ \__|__ |
| | | / | \ | | / | \ |
| |\_|__|_____ | | |\__|__|_____ | | |
| | | | \ | | | | | \ | | |
| V V V V V V V V V V V V |
| <Cb0,Y0,Cr0> <Cb0,Y1,Cr0> <Cb2,Y2,Cr2> <Cb2,Y3,Cr2> |
| < R0,G0,B1 > < R0,G1,B1 > < R2,G2,B3 > < R2,G3,B3 > |
| |
| FORMAT_SUBSAMPLE_244_244_OML: |
| <Cb0,Y0,A0> <Cr0,Y1,A1> <Cb2,Y2,A2> <Cr2,Y3,A3> |
| | | \ | | \ | | \ | | \ |
| | | _\_____/ \__|__ \ | | _\_____/ \__|__ \ |
| | | / \ | \ \ | | / \ | \ \ |
| |\_|__|___\____ | | \ |\__|__|___\____ | | \ |
| | | | | \ | | | | | | | \ | | | |
| V V V V V V V V V V V V V V V V |
| <Cb0,Y0,Cr0,A0> <Cb0,Y1,Cr0,A1> <Cb2,Y2,Cr2,A2> <Cb2,Y3,Cr2,A3> |
| < R0,G0,B1,A0 > < R0,G1,B1,A1 > < R2,G2,B3,A2 > < R2,G3,B3,A3 > |
| |
| Figure 3.9: Upsampling with component replication of subsampled data |
| from client memory to form RGB or RGBA pixels. |
| |
| |
| Additions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment |
| Operations and the Frame Buffer) |
| |
| 4.3.2 Reading Pixels |
| |
| - Add new subsection before "Final Conversion" on page 160: |
| |
| Conversion to Subsampled Form |
| |
| This step is applied only if <format> is FORMAT_SUBSAMPLE_24_24_OML |
| or FORMAT_SUBSAMPLE_244_244_OML. |
| |
| In the remainder of this section, the j'th component of the i'th |
| pixel in a row is denoted by S_i,j (for source pixels in the color |
| buffer) and D_i,j (for destination pixels in client memory). |
| |
| If <format> is FORMAT_SUBSAMPLE_24_24_OML, then the resulting pixels |
| have 2 components; if <format> is FORMAT_SUBSAMPLE_244_244_OML, then |
| the resulting pixels have 3 components (see figure 4.3). Destination |
| component values are defined as: |
| |
| For even pixels ((i mod 2) == 0): |
| |
| D_i,0 = S_i,0 |
| D_i,1 = S_i,1 |
| D_i,2 = S_i,3 (only for FORMAT_SUBSAMPLE_244_244_OML) |
| |
| For odd pixels ((i mod 2) == 1): |
| |
| D_i,0 = S_i-1,2 |
| D_i,1 = S_i,1 |
| D_i,2 = S_i,3 (only for FORMAT_SUBSAMPLE_244_244_OML) |
| |
| - Add new figure 4.3 (renumber following figures): |
| |
| FORMAT_SUBSAMPLE_24_24_OML: |
| <R0,G0,B0,A0> <R1,G1,B1,A1> <R2,G2,B2,A2> <R3,G3,B3,A3> |
| | | | | | | | | | | | | | | | | |
| | | \ * * | * * | | \ * * | * * |
| | | | | | | | | |
| V V V V V V V V |
| <Cb0,Y0><Cr0, Y1> <Cb2,Y2><Cr2, Y3> |
| <--- pixel pair ----> <--- pixel pair ----> |
| |
| FORMAT_SUBSAMPLE_244_244_OML: |
| <R0,G0,B0,A0> <R1,G1,B1,A1> <R2,G2,B2,A2> <R3,G3,B3,A3> |
| | | | | | | | | | | | | | | | | |
| | | \__|__ * | * | | | \__|__ * | * | |
| | | | \ | | | | | \ | | |
| | | / | | / | | / | | / |
| V V V V V V V V V V V V |
| <Cb0,Y0,A0> <Cr0,Y1,A1> <Cb2,Y2,A2> <Cr2,Y3,A3> |
| <--- pixel pair ----> <--- pixel pair ----> |
| |
| Figure 4.3: Downsampling of RGB or RGBA pixels to form subsampled |
| data in host memory. |
| |
| |
| - Add prior to the last sentence of subsection "Placement in Client |
| Memory" on page 162: |
| |
| If <format> is FORMAT_SUBSAMPLE_24_24_OML, then only the |
| corresponding two elements (first two components of each group) are |
| written. If <format> is FORMAT_SUBSAMPLE_244_244_OML, then only the |
| corresponding three elements (first three components of each group) |
| are written. |
| |
| Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special Functions) |
| |
| None. |
| |
| Additions to Chapter 6 of the OpenGL 1.2.1 Specification (State and State Requests) |
| |
| None. |
| |
| Additions to the GLX 1.3 Specification |
| |
| TBD. Discussion of image formats in the GLX Protocol Specification |
| may need to be expanded. |
| |
| Errors |
| |
| See above. |
| |
| New State |
| |
| None. |
| |
| New Implementation Dependent State |
| |
| None. |
| |
| Revision History |
| |
| * Revision 10, 07/24/2001 - Finalized Status for OpenML 1.0. |
| * Revision 9, 07/16/2001 - Fix label in 24_24 packed pixel diagram. |
| * Revisions 7-8, 07/11/2001 - Assign enum values and extension number |
| for the registry. |
| * Revision 6 - Correct errors in the equations describing subsampling. |
| * Revision 5 - formatting changes for OpenML Specification |
| * Revision 4 - Rewrite to use the <format> parameter, rather than a |
| pixel storage mode, to specify subsampled data. Specify which |
| format/type combinations are allowed for subsampled data, and define |
| the representation of 10-bit component subsampled packed pixel data. |
| * Revision 3 - Removed support for YC component orders. Renamed CY and |
| CYA enumerants more sensibly. Changed text descriptions of sampling |
| to equations. Made enum values undefined until we've determined if |
| this extension is backwards compatible with SGIX_subsample. |
| * Revision 2 - corrected 4224 upsampling and downsampling figures. |
| Moved discussion of errors for non-even image widths from the |
| OML_resample specification. |
| * Revision 1 - derived from SGIX_subsample. |