blob: 566d77df4ef68e182f6163cf389b7a1a1b28f0a8 [file] [log] [blame]
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 <pname> parameter of PixelStoref, PixelStorei,
GetBooleanv, GetIntegerv, GetFloatv and GetDoublev:
PACK_SUBSAMPLE_RATE_SGIX 0x85A0
UNPACK_SUBSAMPLE_RATE_SGIX 0x85A1
Accepted by the <param> parameter of PixelStoref and
PixelStorei when the <pname> 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
<at the end of the paragraph before the Unpacking section>
If the PixelStore parameter UNPACK_SUBSAMPLE_RATE_SGIX is set to
PIXEL_SUBSAMPLE_4242_SGIX or PIXEL_SUBSAMPLE_2424_SGIX, then the
<format> 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
<width> needs to be set to a multiple of 2 pixels or the error
INVALID_OPERATION occurs.
<following "to form groups." at the end of the first paragraph
in the Unpacking section>
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.
<at the and of the paragraph>
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.
<A new section is inserted before "Conversion to RGB">
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>
<Cb0,Y0> <Cr0,Y1> <Cb2,Y2> <Cr2, Y3>
| | | | | | | |
| | o-----o---+--o | | o-----o---+--o
| | | | | | | | | |
o--+--+-----o | | o---+--+-----o | |
| | | | | | | | | | | |
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 >
4242:
< G0,R0> <G1,B1 > <G2,R2 > < G3,B3 >
<Y0,Cb0> <Y1,Cr0> <Y2,Cb2> <Y3,Cr2>
| | | | | | | |
\ / \_____ __\__/ \ \ / \_____ __\__/ \
X ___X \ | X ___X \ |
/ \ / \ \ | / \ / \ \ |
| | | | | | | | | | | |
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 >
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
<A new section is inserted before "Final Conversion">
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:
<R0,G0,B0,A0> <R1,G1,B1,A1> <R2,G2,B2,A2> <R3,G3,B3,A3>
| | | | | | | | | | | | | | | |
| | | * * | * * | | | * * | * *
| | | | | | | |
V V V V V V V V
<R0,G0><B0 G1> <R2,G2><B2, G3>
<--- pixel pair ----> <--- pixel pair ---->
4242:
<R0,G0,B0,A0> <R1,G1,B1,A1> <R2,G2,B2,A2> <R3,G3,B3,A3>
| | | * * | * * | | | * * | * *
\ / |____ ____| \ / |____ ____|
X ____X____ X ____X____
/ \ | | | | | |
V V V V V V V V
<G0,R0><G1 B0> <G2,R2><G3, B2>
<--- pixel pair ----> <--- pixel pair ---->
<toward the end of the paragraph "Placement in Client Memory">
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.