MCPcopy Create free account
hub / github.com/cisco/openh264 / ParseScalingList

Function ParseScalingList

codec/decoder/core/src/au_parser.cpp:1703–1765  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1701}
1702
1703int32_t ParseScalingList (PSps pSps, PBitStringAux pBs, bool bPPS, const bool kbTrans8x8ModeFlag,
1704 bool* pScalingListPresentFlag, uint8_t (*iScalingList4x4)[16], uint8_t (*iScalingList8x8)[64]) {
1705 uint32_t uiScalingListNum;
1706 uint32_t uiCode;
1707
1708 bool bUseDefaultScalingMatrixFlag4x4 = false;
1709 bool bUseDefaultScalingMatrixFlag8x8 = false;
1710 bool bInit = false;
1711 const uint8_t* defaultScaling[4];
1712
1713 if (!bPPS) { //sps scaling_list
1714 uiScalingListNum = (pSps->uiChromaFormatIdc != 3) ? 8 : 12;
1715 } else { //pps scaling_list
1716 uiScalingListNum = 6 + (int32_t) kbTrans8x8ModeFlag * ((pSps->uiChromaFormatIdc != 3) ? 2 : 6);
1717 bInit = pSps->bSeqScalingMatrixPresentFlag;
1718 }
1719
1720//Init default_scaling_list value for sps or pps
1721 defaultScaling[0] = bInit ? pSps->iScalingList4x4[0] : g_kuiDequantScaling4x4Default[0];
1722 defaultScaling[1] = bInit ? pSps->iScalingList4x4[3] : g_kuiDequantScaling4x4Default[1];
1723 defaultScaling[2] = bInit ? pSps->iScalingList8x8[0] : g_kuiDequantScaling8x8Default[0];
1724 defaultScaling[3] = bInit ? pSps->iScalingList8x8[1] : g_kuiDequantScaling8x8Default[1];
1725
1726 for (unsigned int i = 0; i < uiScalingListNum; i++) {
1727 WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode));
1728 pScalingListPresentFlag[i] = !!uiCode;
1729 if (!!uiCode) {
1730 if (i < 6) {//4x4 scaling list
1731 WELS_READ_VERIFY (SetScalingListValue (iScalingList4x4[i], 16, &bUseDefaultScalingMatrixFlag4x4, pBs));
1732 if (bUseDefaultScalingMatrixFlag4x4) {
1733 bUseDefaultScalingMatrixFlag4x4 = false;
1734 memcpy (iScalingList4x4[i], g_kuiDequantScaling4x4Default[i / 3], sizeof (uint8_t) * 16);
1735 }
1736
1737
1738 } else {
1739 WELS_READ_VERIFY (SetScalingListValue (iScalingList8x8[i - 6], 64, &bUseDefaultScalingMatrixFlag8x8, pBs));
1740
1741 if (bUseDefaultScalingMatrixFlag8x8) {
1742 bUseDefaultScalingMatrixFlag8x8 = false;
1743 memcpy (iScalingList8x8[i - 6], g_kuiDequantScaling8x8Default[ (i - 6) & 1], sizeof (uint8_t) * 64);
1744 }
1745 }
1746
1747 } else {
1748 if (i < 6) {
1749 if ((i != 0) && (i != 3))
1750 memcpy (iScalingList4x4[i], iScalingList4x4[i - 1], sizeof (uint8_t) * 16);
1751 else
1752 memcpy (iScalingList4x4[i], defaultScaling[i / 3], sizeof (uint8_t) * 16);
1753
1754 } else {
1755 if ((i == 6) || (i == 7))
1756 memcpy (iScalingList8x8[i - 6], defaultScaling[ (i & 1) + 2], sizeof (uint8_t) * 64);
1757 else
1758 memcpy (iScalingList8x8[i - 6], iScalingList8x8[i - 8], sizeof (uint8_t) * 64);
1759
1760 }

Callers 2

ParseSpsFunction · 0.85
ParsePpsFunction · 0.85

Calls 2

BsGetOneBitFunction · 0.85
SetScalingListValueFunction · 0.85

Tested by

no test coverage detected