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

Function WelsDecodeAndConstructSlice

codec/decoder/core/src/decode_slice.cpp:1620–1782  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1618}
1619
1620int32_t WelsDecodeAndConstructSlice (PWelsDecoderContext pCtx) {
1621 PNalUnit pNalCur = pCtx->pNalCur;
1622 PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
1623 PFmo pFmo = pCtx->pFmo;
1624 int32_t iRet;
1625 int32_t iNextMbXyIndex, iSliceIdc;
1626
1627 PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
1628 PSliceHeaderExt pSliceHeaderExt = &pSlice->sSliceHeaderExt;
1629 PSliceHeader pSliceHeader = &pSliceHeaderExt->sSliceHeader;
1630 int32_t iMbX, iMbY;
1631 const int32_t kiCountNumMb = pSliceHeader->pSps->uiTotalMbCount; //need to be correct when fmo or multi slice
1632 int32_t iTotalMbTargetLayer = kiCountNumMb;
1633 uint32_t uiEosFlag = 0;
1634 PWelsDecMbFunc pDecMbFunc;
1635
1636 pSlice->iTotalMbInCurSlice = 0; //initialize at the starting of slice decoding.
1637
1638 if (pCtx->pPps->bEntropyCodingModeFlag) {
1639 if (pSlice->sSliceHeaderExt.bAdaptiveMotionPredFlag ||
1640 pSlice->sSliceHeaderExt.bAdaptiveBaseModeFlag ||
1641 pSlice->sSliceHeaderExt.bAdaptiveResidualPredFlag) {
1642 WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR,
1643 "WelsDecodeSlice()::::ILP flag exist, not supported with CABAC enabled!");
1644 pCtx->iErrorCode |= dsBitstreamError;
1645 return dsBitstreamError;
1646 }
1647 if (P_SLICE == pSliceHeader->eSliceType)
1648 pDecMbFunc = WelsDecodeMbCabacPSlice;
1649 else if (B_SLICE == pSliceHeader->eSliceType)
1650 pDecMbFunc = WelsDecodeMbCabacBSlice;
1651 else //I_SLICE. B_SLICE is being supported
1652 pDecMbFunc = WelsDecodeMbCabacISlice;
1653 } else {
1654 if (P_SLICE == pSliceHeader->eSliceType) {
1655 pDecMbFunc = WelsDecodeMbCavlcPSlice;
1656 } else if (B_SLICE == pSliceHeader->eSliceType) {
1657 pDecMbFunc = WelsDecodeMbCavlcBSlice;
1658 } else { //I_SLICE
1659 pDecMbFunc = WelsDecodeMbCavlcISlice;
1660 }
1661 }
1662
1663 if (pSliceHeader->pPps->bConstainedIntraPredFlag) {
1664 pCtx->pFillInfoCacheIntraNxNFunc = WelsFillCacheConstrain1IntraNxN;
1665 pCtx->pMapNxNNeighToSampleFunc = WelsMapNxNNeighToSampleConstrain1;
1666 pCtx->pMap16x16NeighToSampleFunc = WelsMap16x16NeighToSampleConstrain1;
1667 } else {
1668 pCtx->pFillInfoCacheIntraNxNFunc = WelsFillCacheConstrain0IntraNxN;
1669 pCtx->pMapNxNNeighToSampleFunc = WelsMapNxNNeighToSampleNormal;
1670 pCtx->pMap16x16NeighToSampleFunc = WelsMap16x16NeighToSampleNormal;
1671 }
1672
1673 pCtx->eSliceType = pSliceHeader->eSliceType;
1674 if (pCurDqLayer->sLayerInfo.pPps->bEntropyCodingModeFlag == 1) {
1675 int32_t iQp = pSlice->sSliceHeaderExt.sSliceHeader.iSliceQp;
1676 int32_t iCabacInitIdc = pSlice->sSliceHeaderExt.sSliceHeader.iCabacInitIdc;
1677 WelsCabacContextInit (pCtx, pSlice->eSliceType, iCabacInitIdc, iQp);

Callers 1

DecodeCurrentAccessUnitFunction · 0.85

Calls 9

WelsLogFunction · 0.85
InitCabacDecEngineFromBSFunction · 0.85
WelsTargetMbConstructionFunction · 0.85
PadMBLuma_cFunction · 0.85
PadMBChroma_cFunction · 0.85
FmoNextMbFunction · 0.85
GetThreadCountFunction · 0.85
WelsCabacContextInitFunction · 0.70

Tested by

no test coverage detected