DecodeCAVLCCoeffs_H264

Decode CAVLC bitstream

Supported Technologies

SSE2

Synopsis

FwStatus   fwiDecodeCAVLCCoeffs_H264_1u16s ( Fw32u ** ppBitStreamFw32s * pBitOffsetFw16s * pNumCoeffFw16s ** ppDstCoeffsFw32u uVLCSelectFw16s uMaxNumCoeffconst Fw32s ** ppTblCoeffTokenconst Fw32s ** ppTblTotalZerosconst Fw32s ** ppTblRunBeforeconst Fw32s * pScanMatrix );

Parameters

pBitOffset   Pointer to a bit position within the byte that ppBitStream points to. Valid within the range 0 to 7. The pointer is updated after motion vector decoding.
pNumCoeff   Pointer to the output number of non-zero coefficients.
pScanMatrix   Pointer to a matrix containing indices of elements in a scanning sequence.
ppBitStream   Double pointer to the current position in the bit stream.
ppDstCoeffs   Double pointer to a 4x4 block of coefficients calculated by the function. The function shifts pointer *ppDstCoeffs on 16.
ppTblCoeffToken   Double pointer to a CoeffToken table.
ppTblRunBefore   Double pointer to a RunBefore table.
ppTblTotalZeros   Double pointer to a TotalZeros table.
uMaxNumCoeff   Maximum number of coefficients in a block (16 for Intra 16x16, 15 for others).
uVLCSelect   Predictor on number of CoeffToken table.

Description

This function parses and decodes a source stream of MPEG-4/AVC Chroma AC and Luma video syntax elements in JVTG050-compliant context-adaptive variable-length coding (CAVLC) format. Result coefficients are written to a series of 4X4 destination blocks.

Each element of pointer array pTblCoeffToken points to a table that contains codes, the number of trailing one transform coefficients and the total number of non-zero transform coefficients, in accordance with JVTG050 Table 9-5. The following values are used.

Element pTblCoeffToken[0], 0 < uVLCSelect < 2

Element pTblCoeffToken[1], 2 < uVLCSelect < 4

Element pTblCoeffToken[2], 4 < uVLCSelect < 8

Element pTblCoeffToken[3], uVLCSelect = -1 (used only for DecodeCAVLCChromaDcCoeffs_H264).

The HuffmanRunLevelTableInitAlloc function must be used to create pTblCoeffToken tables. When the value of uVLCSelect is greater than 8, the function uses its own table of transform coefficients.

Each element of pointer array ppTblTotalZeros except for ppTblTotalZeros[0] points to a table that contains codes and values (JVTG050 total_zeros) in accordance with JVTG050 Tables 9-7 and 9-8. Element ppTblTotalZeros[0] is not used.

Each element ppTblTotalZeros[i] contains codes and values that correspond to JVTG050 TotalCoeff = i, 0 < i < 16.

Each element of pointer array ppTblRunBefore except for ppTblRunBefore[0] points to a table that contains codes and values (JVTG050 run_before) in accordance with JVTG050 Table 9-10. Element ppTblRunBefore[0] is not used.

ppTblRunBefore[i] contains codes and values that correspond to JVTG050 zerosLeft = i, 0 < i < 7.

ppTblRunBefore[7] contains codes and values that correspond to JVTG050 zerosLeft > 6.

The HuffmanTableInitAlloc function must be used to create ppTblTotalZeros and ppTblRunBefore tables.