VC-1 Data Structures: Difference between revisions

From MultimediaWiki
Jump to navigation Jump to search
(more data structures)
(more enumerations)
Line 61: Line 61:
== Motion ==
== Motion ==
This structure encapsulates motion vectors along with mode information.
This structure encapsulates motion vectors along with mode information.
* prediction mode, as enumerated in [[VC-1 Data Structure#Hybrid Prediction Modes|Hybrid Prediction Modes]]
* prediction mode, as enumerated in [[VC-1 Data Structures#Hybrid Prediction Modes|Hybrid Prediction Modes]]
* motion vector data structure
* motion vector data structure
* differential motion vector data structure, represented in quarter-pel units
* differential motion vector data structure, represented in quarter-pel units
Line 91: Line 91:
* a flag indicating whether the quantization is uniform or non-uniform
* a flag indicating whether the quantization is uniform or non-uniform


== Motion Compensation Properties ==
== Macroblock Properties ==
These properties are associated with motion compensation:
These properties are associated with various macroblock coding options:
* a block is intra-coded, or has 1, 2, or 4 motion vectors associated
* a block is intra-coded, or has 1, 2, or 4 motion vectors associated
* a block predicts backwards from a previous frame, from a forward frame, from both a backward or forward frame, or uses "direct" mode
* a block predicts backwards from a previous frame, from a forward frame, from both a backward or forward frame, or uses "direct" mode
Line 98: Line 98:
* a flag that indicates that "bottom field different direction to top"
* a flag that indicates that "bottom field different direction to top"
* a flag that indicates "field transform"
* a flag that indicates "field transform"
== 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?)
== Macroblock ==
The SRD maintains the following information about an individual macroblock:
* macroblock type: this is a combination of properties enumerated in [[VC-1 Data Structures#Macroblock Properties|Macroblock Properties]]
* AC prediction status as enumerated in [[VC-1 Data Structures#AC Prediction|AC Prediction]]
* block type as enumerated in [[VC-1 Data Structures#Block Types|Block Types]]; might be "any"
* a flag indicating whether the overlap filter is active for this macroblock
* a flag indicating whether is motion predicted only (presumably, this means that a predicted block is formed by no other transform/addition occurs for the MB)
* a 6-bit flag vector that indicates which of the 6 constituent block in the MB are coded
* a 4-bit flag vector that indicates motion vector block pattern-- these flags are set if the differential MV for a respective Y block is not 0
* quantizer data structure for the macroblock
* 6 block structures
== 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 ==
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

Revision as of 17:46, 23 April 2006

Part of Understanding VC-1

This page is a discussion of the various data structures and constant enumerations employed in the SMPTE Reference Decoder (SRD) VC-1 reference implementation. These are mostly found in the file vc1types.h.

Macroblocks, Blocks, and Sub-blocks

A macroblock embodies a 16x16 block of pixels in a YUV 4:2:0 colorspace. A macroblock consists of 6 blocks: 4 8x8 Y blocks, 1 U block, and 1 V block. Further, these blocks maybe divided into sub-blocks of sizes 8x4, 4x8, or 4x4.

Block Types

Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to independent implementation. 0: 8x8 inter-coded block 1: 8x4 inter-coded block 2: 4x8 inter-coded block 3: 4x4 inter-coded block 4: 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

Intra Block

An intra block data structure requires the following information:

  • number of non-zero AC coefficients
  • quantized DC coefficient for prediction
  • 7 quantized AC coefficients along the top row of the block, used for prediction
  • 7 quantized AC coefficients along the left side of the block, used for prediction
  • 16 samples representing the bottom 2 8-pixel rows of the block, maintained for overlap smoothing filters

Hybrid Prediction Modes

Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to independent implementation.

  • 0: predict from left
  • 1: predict from top
  • 2: no hybrid prediction

Sub-block Patterns

Note: enumerated numbers are defined in the SRD; specific numbers may or may not be relevant to independent implementation.

  • 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

Motion Vector

This is the information maintained for an individual motion vector:

  • X offset
  • Y offset
  • a flag indicating whether the vector pertains to the top or bottom field of interlaced video

The (X, Y) vector is relative to the top-left coordinate of a block. The fractional pel resolution of the vectors depends on the motion vector coding mode.

Motion

This structure encapsulates motion vectors along with mode information.

  • prediction mode, as enumerated in Hybrid Prediction Modes
  • motion vector data structure
  • differential motion vector data structure, represented in quarter-pel units

The SRD contains the following not accompanying this data structure:

/*
 * If Two Reference Images (NUMREF=1) then:
 *      Y=2*(YValue)+PredFlag
 *      PredFlag: 0=dominant 1=non-dominant
*/

Motion Vector History

This data structure consists of an array of 4 motion vector data structures which stores the motion vector history for 4 Y blocks, used for direct mode.

Inter Block

An intra block data structure requires the following information:

  • an array of 4 integers representing the number of non-zero coefficients (DC and AC together) for up to 4 sub-blocks in the block
  • 2 motion structures, 1 for backward prediction and 1 for forward prediction

Block

This is the information that the SRD maintains for an individual block:

  • block type, as defined in Block Types section
  • a flag indicating whether there are non-zero AC coefficients for an intra block, or non-zero DC or AC coefficients for an inter block
  • a C union that contains either an intra or inter block data structure

Quantizer

This data structure maintains information about quantization parameters.

  • quantizer step, range 0..31
  • quantizer half-step, either 0 or 1
  • a flag indicating whether the quantization is uniform or non-uniform

Macroblock Properties

These properties are associated with various macroblock coding options:

  • a block is intra-coded, or has 1, 2, or 4 motion vectors associated
  • a block predicts backwards from a previous frame, from a forward frame, from both a backward or forward frame, or uses "direct" mode
  • a flag that indicates whether MVs apply to interlaced fields
  • a flag that indicates that "bottom field different direction to top"
  • a flag that indicates "field transform"

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?)

Macroblock

The SRD maintains the following information about an individual macroblock:

  • macroblock type: this is a combination of properties enumerated in Macroblock Properties
  • AC prediction status as enumerated in AC Prediction
  • block type as enumerated in Block Types; might be "any"
  • a flag indicating whether the overlap filter is active for this macroblock
  • a flag indicating whether is motion predicted only (presumably, this means that a predicted block is formed by no other transform/addition occurs for the MB)
  • a 6-bit flag vector that indicates which of the 6 constituent block in the MB are coded
  • a 4-bit flag vector that indicates motion vector block pattern-- these flags are set if the differential MV for a respective Y block is not 0
  • quantizer data structure for the macroblock
  • 6 block structures

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

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