Decode CAVLC bitstream

*SSE2*

FwStatus |
fwiDecodeCAVLCCoeffs_H264_1u16s |
( |
Fw32u ** ppBitStream, Fw32s * pBitOffset, Fw16s * pNumCoeff, Fw16s ** ppDstCoeffs, Fw32u uVLCSelect, Fw16s uMaxNumCoeff, const Fw32s ** ppTblCoeffToken, const Fw32s ** ppTblTotalZeros, const Fw32s ** ppTblRunBefore, const Fw32s * pScanMatrix ); |

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. |

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.