VC-1 Data Structures

From MultimediaWiki
Revision as of 12:02, 23 April 2006 by Multimedia Mike (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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.

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.