blob: e0bfca9987f1fc912db10196c84d812176fb7788 [file] [log] [blame]
XXX - Not complete.
Name
SGIX_mpeg2
Name Strings
GL_SGIX_mpeg2
Version
$Date: 1997/06/07 01:24:17 $ $Revision: 1.6 $
Number
???
Dependencies
SGIX_mpeg1 and SGIX_image_compression are required.
Overview
This extension provides support for compression and decompression
of MPEG2-compressed images.
Most of the additions specified by this extension exist to permit
the handling of fields of images, which is required by MPEG2 but
not by MPEG1. This extension adds the capability to update or
read from only the top or bottom fields of a predictor frame. The
extension also allows the compression and decompression of fields
of an image.
Support of this extension does not imply conformance to the MPEG2
standard (ISO 13818), although the following guarantees are made:
- During decode, the picture_structure field of the picture
coding extension is extracted and interpreted correctly.
The treatment of the resulting value is discussed below.
- During encode, the picture_structure field of the picture
coding extension and the picture_type field of the picture
header are set correctly as determined by
PACK_MPEG_PICTURE_TYPE_SGIX.
Issues
* We guarantee that the picture_structure and picture_type
fields are interpreted and set correctly. We do this so that
we can make guarantees about which predictors will be used
and updated. Should we make this less restrictive?
New Procedures and Functions
None.
New Tokens
Accepted by the <param> parameter of PixelStoref, PixelStorei,
GetBooleanv, GetIntegerv, GetFloatv, and GetDoublev:
MPEG2_SGIX ????
MPEG_IFIELD_TOP_SGIX ????
MPEG_IFIELD_BOTTOM_SGIX ????
MPEG_PFIELD_TOP_SGIX ????
MPEG_PFIELD_BOTTOM_SGIX ????
MPEG_BFIELD_TOP_SGIX ????
MPEG_BFIELD_BOTTOM_SGIX ????
Accepted by the <target> parameter of MPEGQuantTableubv and
GetMPEGQuantTableubv:
PACK_MPEG_INTRA_QUANT_CHROMA ????
PACK_MPEG_NON_INTRA_QUANT_CHROMA ????
UNPACK_MPEG_INTRA_QUANT_CHROMA ????
UNPACK_MPEG_NON_INTRA_QUANT_CHROMA ????
Additions to Chapter 2 of the 1.1 Specification (OpenGL Operation)
None.
Additions to Chapter 3 of the 1.1 Specification (Rasterization)
The pixel storage modes are augmented to support MPEG2 compressed
images in memory. In Table 3.1, MPEG2_SGIX is added to the valid
range of UNPACK_COMPRESSION_TYPE_SGIX.
The values PACK_MPEG_INTRA_QUANT_CHROMA,
PACK_MPEG_NON_INTRA_QUANT_CHROMA, UNPACK_MPEG_INTRA_QUANT_CHROMA,
and UNPACK_MPEG_NON_INTRA_QUANT_CHROMA are added to the list of
legal values for the <target> parameter of MPEGQuantTableubv.
The following should be added to "Unpacking of Compressed Images"
subsection of section 3.6.3 (Rasterization of Pixel
Rectangles) following the information added by the MPEG1
extension: MPEG2-compressed images (UNPACK_COMPRESSION_TYPE_SGIX
equal to MPEG2_SGIX) are classified as one of six types: I-frame,
P-frame, B-frame, I-field, P-field, and B-field. Fields are
further classified into top and bottom. The classification is
accomplished through extraction and interpretation of the
picture_type field of the picture header and the picture_structure
field of the picture coding extension. This extraction and
interpretation is performed as specified in the MPEG2 spec (ISO
13818).
Decompression of MPEG2 images is very similar to the decompression
of MPEG1 images described in SGIX_mpeg1, but MPEG2 decompression
may make use of two chrominance quantization tables:
UNPACK_MPEG_INTRA_QUANT_CHROMA and
UNPACK_MPEG_NON_INTRA_QUANT_CHROMA. These tables are set and read
back in the same manner and using the same commands as the
quantization tables introduced in SGIX_mpeg1. The chrominance
quantization tables may be used and changed during the
decompression step if UNPACK_SAMPLE_SGIX is SAMPLE_422_SGIX.
UNPACK_MPEG_INTRA_QUANT_CHROMA is used and updated only during the
decompression of I-frames and I-fields;
UNPACK_MPEG_NON_INTRA_QUANT_CHROMA, is used and updated only
during the decompression of P- and B-frames and P- and B-fields.
Except for the use and update of UNPACK_MPEG_INTRA_QUANT_CHROMA
and UNPACK_MPEG_NON_INTRA_QUANT_CHROMA, MPEG2 frame pictures (I,
P, and B) are treated as specified in SGIX_mpeg1. MPEG2 field
pictures are treated as images whose height is half the height of
the corresponding frame. The height value, as computed in
image_compression_SGIX, gives the number of scan lines in the
field instead of the height of the frame. Fields are treated
identically to MPEG1 frames with two exceptions: MPEG2 fields may
use and update the chroma quant tables and the MPEG2 field picture
predictor update step is performed differently than the MPEG1
predictor update step. In the predictor update step during MPEG2
field decompression, only the top or bottom field of the predictor
is replaced. The field to be replaced is determined by the field
type of the current image (top fields replace the top fields of
the predictor). The other field of the predictor is left
unchanged. The predictor height must be twice the height of the
current image or the error INVALID_OPERATION is generated and
processing terminates without any change to the predictor frame
taking place.
Additions to Chapter 4 of the 1.1 Specification (Per-Fragment Operations
and the Frame Buffer)
In Table 4.5, the values MPEG_IFIELD_TOP_SGIX,
MPEG_IFIELD_BOTTOM_SGIX, MPEG_PFIELD_TOP_SGIX,
MPEG_PFIELD_BOTTOM_SGIX, MPEG_BFIELD_TOP_SGIX, and
MPEG_BFIELD_BOTTOM_SGIX are added to the valid range of
PACK_MPEG_PICTURE_TYPE_SGIX.
The following should be added to the "Packing of Compressed
Images" subsection of section 4.3.2 following the information
added by the MPEG1 extension: If PACK_COMPRESSION_TYPE_SGIX is
equal to MPEG2_SGIX, MPEG2 compression is performed. Compression
of MPEG2 images is similar to compression of MPEG1 images. During
MPEG2 compression, the value of PACK_MPEG_PICTURE_TYPE_SGIX must
be equal to MPEG_IFRAME_SGIX, MPEG_PFRAME_SGIX, MPEG_BFRAME_SGIX,
MPEG_IFIELD_TOP_SGIX, MPEG_IFIELD_BOTTOM_SGIX,
MPEG_PFIELD_TOP_SGIX, MPEG_PFIELD_BOTTOM_SGIX,
MPEG_BFIELD_TOP_SGIX, or MPEG_BFIELD_BOTTOM_SGIX. If the value is
not legal, the error INVALID_ENUM is generated and no processing
takes place. If the image is a field, the height (as computed in
image_compression_SGIX) is interpreted as the number of scan lines
in the field, which is half the height of the corresponding frame.
The first step of MPEG2 compression is the conversion to YCrCb.
If PACK_TO_RGB_SGIX is TRUE, the RGBA input image is converted to
a YCrCb image using an unspecified algorithm. If PACK_TO_RGB_SGIX
is FALSE, the input image is converted to YCrCb by setting the Y
equal to R, Cr equal to G, and Cb equal to B.
The update of predictors during MPEG2 compression is identical to
the update of predictors during MPEG2 decompression described
above (including generation and possible termination of
processing), except that the PACK state is used in place of the
UNPACK state.
During compression, the replacement of the current image by a
predictor is determined by the values of
PACK_MPEG_PREDICTOR_READ_SGIX and PACK_MPEG_PICTURE_TYPE_SGIX. If
PACK_MPEG_PREDICTOR_READ_SGIX is equal to NONE, the current image
is passed on unchanged. If PACK_MPEG_PREDICTOR_READ_SGIX is
PACK_MPEG_PREDICTOR_FWD_SGIX, the predictor bound to
PACK_MPEG_PREDICTOR_FWD_SGIX is used as the source. If
PACK_MPEG_PREDICTOR_READ_SGIX is PACK_MPEG_PREDICTOR_BACK_SGIX,
the predictor bound to PACK_MPEG_PREDICTOR_BACK_SGIX is used as
the source. If PACK_MPEG_PICTURE_TYPE_SGIX is MPEG_IFRAME_SGIX,
MPEG_PFIELD_SGIX, or MPEG_BFIELD_SGIX, the entire frame of the
source replaces the current image. If PACK_MPEG_PICTURE_TYPE_SGIX
is MPEG_IFIELD_TOP_SGIX, MPEG_PFIELD_TOP_SGIX, or
MPEG_BFIELD_TOP_SGIX, the top field of the predictor replaces the
current image. Every other scan line of the predictor is
extracted, beginning with the top scan line of the image. If
PACK_MPEG_PICTURE_TYPE_SGIX is MPEG_IFIELD_BOTTOM_SGIX,
MPEG_PFIELD_BOTTOM_SGIX, or MPEG_BFIELD_BOTTOM_SGIX, the bottom
field of the predictor replaces the current image. Every other
scan line of the predictor is extracted, beginning with the second
scan line from the top. The image extracted during the replacement
step replaces the current image in all subsequent processing.
After the replacement step, downsampling of the image occurs in
the same manner as during the compression of MPEG1 images.
The output of the downsampling step is converted based upon the
picture type specified by PACK_MPEG_PICTURE_TYPE_SGIX. In this
extension, we specify which quantization tables and predictors are
used in the conversion, but do not describe the algorithms used.
If the picture type is MPEG_IFRAME_SGIX, MPEG_IFIELD_TOP_SGIX, or
MPEG_IFIELD_BOTTOM_SGIX, the quantization table
PACK_MPEG_INTRA_QUANT_SGIX is used. The quantization table
PACK_MPEG_INTRA_QUANT_CHROMA_SGIX is also used if PACK_SAMPLE_SGIX
is SAMPLE_422_SGIX. No predictors are used.
If the picture type is MPEG_PFRAME_SGIX, MPEG_PFIELD_TOP_SGIX, or
MPEG_PFIELD_BOTTOM_SGIX, the quantization table
PACK_MPEG_NON_INTRA_QUANT_SGIX is used.
PACK_MPEG_NON_INTRA_QUANT_CHROMA_SGIX is also used if
PACK_SAMPLE_SGIX is SAMPLE_422_SGIX. The data is converted using
the predictor bound to PACK_MPEG_PREDICTOR_BACK_SGIX. If the
image is a frame and its size is not equal to the size of the
predictor bound to PACK_MPEG_PREDICTOR_BACK_SGIX, the error
INVALID_OPERATION is generated. If the image is a field, its
width must be equal to the width of the predictor and its height
must be equal to half the height of the predictor or the error
INVALID_OPERATION is generated.
If the picture type is MPEG_BFRAME_SGIX, MPEG_PFIELD_TOP_SGIX, or
MPEG_PFIELD_BOTTOM_SGIX, the quantization table
PACK_MPEG_NON_INTRA_QUANT_SGIX is used.
PACK_MPEG_NON_INTRA_QUANT_CHROMA_SGIX is also used if
PACK_SAMPLE_SGIX is SAMPLE_422_SGIX. The image is converted using
the predictors bound to PACK_MPEG_PREDICTOR_BACK_SGIX and
PACK_MPEG_PREDICTOR_FORWARD_SGIX. If the image is a frame and its
size is not equal to the size of the predictors bound to
PACK_MPEG_PREDICTOR_BACK_SGIX and
PACK_MPEG_PREDICTOR_FORWARD_SGIX, the error INVALID_OPERATION is
generated. If the image is a field, its width must be equal to
the width of the predictors and its height must be equal to the
half the height of the predictors or the error INVALID_OPERATION
is generated. Error checking for this step takes place prior to
the predictor replacement step, so if an error is detected the
contents of the predictors are left unchanged.
Further compression is applied to the image using an unspecified
algorithm. The output of MPEG2 decompression is a byte stream
containing an MPEG2 picture header followed by picture data. The
picture header specifies the field and frame type determined by
the setting of PACK_MPEG_PICTURE_TYPE_SGIX.
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)
The values PACK_MPEG_INTRA_QUANT_CHROMA,
PACK_MPEG_NON_INTRA_QUANT_CHROMA_SGIX,
UNPACK_MPEG_INTRA_QUANT_CHROMA_SGIX, and
UNPACK_MPEG_NON_INTRA_QUANT_CHROMA_SGIX are added to the list of
valid values for the parameter <target> to the routine
GetMPEGQuantTableubv.
Additions to the GLX Specification
None.
GLX Protocol
XXX
Errors
INVALID_OPERATION is generated if UNPACK_MPEG_PREDICTOR_STORE_SGIX
is set to UNPACK_MPEG_PREDICTOR_BACK_SGIX during the download of
an MPEG2 field and the height of the predictor bound to
UNPACK_MPEG_PREDICTOR_BACK_SGIX is not equal to twice the height
of the field.
INVALID_OPERATION is generated if UNPACK_MPEG_PREDICTOR_STORE_SGIX
is set to UNPACK_MPEG_PREDICTOR_FWD_SGIX during the download of an
MPEG2 field and the height of the predictor bound to
UNPACK_MPEG_PREDICTOR_FWD_SGIX is not equal to twice the height of
the field.
INVALID_OPERATION is generated if a pixel readback operation is
applied, PACK_COMPRESSION_TYPE_SGIX is equal to MPEG2_SGIX, and
the value of PACK_MPEG_PICTURE_TYPE is not one of the legal
values.
INVALID_OPERATION is generated if during MPEG2 compression of a
frame PACK_MPEG_PREDICTOR_STORE_SGIX is equal to a value other
than NONE and the width and height of the current image are not
equal to the width and height of the predictor bound to the
specified bind point.
INVALID_OPERATION is generated if during MPEG2 compression of a
field PACK_MPEG_PREDICTOR_STORE_SGIX is equal to a value other
than NONE and the width and height of the current image are not
equal to the width and height of the predictor bound to the
specified bind point.
New State
Initial
Get Value Get Command Type Value Attrib
--------- ----------- ---- ------- ------
PACK_MPEG_INTRA_QUANT_CHROMA GetMPEGQuantTableubv 64*Z+ XXX client
PACK_MPEG_NON_INTRA_QUANT_CHROMA GetMPEGQuantTableubv 64*Z+ XXX client
UNPACK_MPEG_INTRA_QUANT_CHROMA GetMPEGQuantTableubv 64*Z+ XXX client
UNPACK_MPEG_NON_INTRA_QUANT_CHROMA GetMPEGQuantTableubv 64*Z+ XXX client
New Implementation Dependent State
None.