VC-1 Enumerations

From MultimediaWiki
Jump to navigation Jump to search

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