VC-1 Enumerations
Part of Understanding VC-1
This is a list of the various enumerations in the SMPTE reference decoder (SRD) VC-1 implementation. For any given enumeration, specific numbers may or may not be relevant to an independent implementation.
Block Types
- 0: 8x8 inter-coded block
- 1: 8x4 inter-coded block
- 2: 4x8 inter-coded block
- 3: 4x4 inter-coded block
- 4: inter-coded block, transform type not yet determined
- 5: intra-coded block, no AC prediction
- 6: intra-coded block, AC prediction of top row coefficients
- 7: intra-coded block, AC prediction of left column coefficients
Hybrid Prediction Modes
- 0: predict from left
- 1: predict from top
- 2: no hybrid prediction
Sub-block Patterns
- 0: 8x8 transform, coded
- 1: 8x4 transform, bottom subblock coded
- 2: 8x4 transform, top subblock coded
- 3: 8x4 transform, both subblocks coded
- 4: 4x8 transform, right subblock coded
- 5: 4x8 transform, left subblock coded
- 6: 4x8 transform, both subblocks coded
- 7: 4x4 transform, subblock pattern separate
- 8: 8x8 transform, coded, whole MB
- 9: 8x4 transform, bottom subblock coded, whole MB
- 10: 8x4 transform, top subblock coded, whole MB
- 11: 8x4 transform, both subblocks coded, whole MB
- 12: 4x8 transform, right subblock coded, whole MB
- 13: 4x8 transform, left subblock coded, whole MB
- 14: 4x8 transform, both subblocks coded, whole MB
- 15: 4x4 transform, subblocks pattern separate, whole MB
One more stray constant:
- 8: MB level threshold (this marks the split in the preceding enumeration and indicates that all constants above and including this number pertain to the macroblock level)
AC Prediction
Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to independent implementation.
- 0: AC prediction off
- 1: AC prediction on
- 2: AC prediction absent (no blocks to predict from?)
Picture Format
Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to an independent implementation.
- 0: picture is a progressive frame
- 1: picture is an interlaced frame
- 2: picture consists of 2 interlaced fields
- 3: picture format has not been determined
Bitstream Profile
These are the supported profiles in the VC-1 coding scheme.
- 0: simple profile
- 1: main profile
- 2: reserved
- 3: advanced profile
Profile Level Enumeration
- simple/main profiles:
- 0: low
- 1: medium
- 2: high
- advanced profile:
- 0..4: levels 0..4
- levels 5..7 are reserved
- 255 indicates that the level is unknown
Chroma Format
The SRD only supports one chroma format: YUV 4:2:0, which is format 1. Ostensibly, there are 2 bits in the bitstream to define chroma format. Modes 0, 2, and 3 are all reserved.
Color Primaries
- 0: color primaries are forbidden
- 1: ITU-R BT-709
- 2: unspecified
- 3: reserved
- 4: reserved
- 5: EBU Tech 3213
- 6: SMPTE C
- 7-255: reserved
Transfer Characteristics
These properties are encoded into the bitstream and describe the characteristics of the source bitstream:
- 0: forbidden
- 1: ITU-R BT-709
- 2: unspecified
- 3: reserved
- 4: reserved
- 5: reserved
- 6: reserved
- 7: SMPTE 240M
- 8-255: reserved
Matrix Coefficients
- 0: forbidden
- 1: ITU-R BT-709
- 2: unspecified
- 3: reserved
- 4: reserved
- 5: reserved
- 6: SMPTE 170M
- 7: SMPTE 240M
- 8-255: reserved
Quantizer Modes
- 0: quantizer implied by quantizer step size
- 1: quantizer explicitly signaled
- 2: non-uniform quantizer
- 3: uniform quantizer
Picture Types
- 0: I-frame-- intraframe/field
- 1: P-frame-- predicted frame/field
- 2: B-frame-- bi-directionally predicted frame/field
- 3: BI-frame-- ??? perhaps an I-frame upon which no other frames depend
- 4: skipped
Scaling Modes
This enumeration defines whether there will be any scaling in the picture before display:
- 0: 1x1 = no scaling
- 1: 2x1 = horizontal scaling
- 2: 1x2 = vertical scaling
- 3: 2x2 = horizontal and vertical scaling
Motion Vector Ranges
- Range #0:
- x component range = -64..63
- y component range = -32..31
- Range #1:
- x component range = -128..127
- y component range = -64..63
- Range #2:
- x component range = -512..511
- y component range = -128..127
- Range #3:
- x component range = -1024..1023
- y component range = -256..255
Differential Motion Vector Ranges
- 0: no extended DMV
- 1: extended DMV horizontal/X
- 2: extended DMV vertical/Y
- 3: extended DMV horizontal & vertical
Macroblock Quantizer Step Sizes
Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to an independent implementation.
- 0: all macroblocks use PQUANT
- 1: edge MBs use ALTPQUANT
- 2: left/top MBs use ALTPQUANT
- 3: top/right MBs use ALTPQUANT
- 4: right/bottom MBs use ALTPQUANT
- 5: bottom/left MBs use ALTPQUANT
- 6: left MBs use ALTPQUANT
- 7: top MBs use ALTPQUANT
- 8: right MBs use ALTPQUANT
- 9: bottom MBs use ALTPQUANT
- 10: PQUANT vs. ALTPQUANT is selected per MB
- 11: quantizer decoded per MB
Bitplane Coding Methods
Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to an independent implementation.
- 0: normal-2 method
- 1: normal-6 method
- 2: rowskip method
- 3: colskip method
- 4: diff-2 method
- 5: diff-6 method
- 6: uncompressed
Overlap Filter Modes
Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to an independent implementation.
- 0: disable overlap filter
- 1: enable overlap filter for all macroblocks
- 2: overlap filter is enabled for select macroblocks
Motion Vector Modes
Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to an independent implementation.
- 0: 1 motion vector, half-pel, bilinear interpolation
- 1: 1 motion vector, half-pel, bicubic interpolation
- 2: 1 motion vector, quarter-pel, bicubic interpolation
- 3: mixed motion vectors, quarter-pel, bicubic interpolation
- 4: intensity compensation
Start Codes
These are the various start codes that the SRD defines:
- 0x0A: end of sequence
- 0x0B: slice
- 0x0C: field
- 0x0D: frame header
- 0x0E: entry point header
- 0x0F: sequence header
- 0x1B: user-defined slice
- 0x1C: user-defined field
- 0x1D: user-defined frame header
- 0x1E: user-defined entry point header
- 0x1F: user-defined sequence header