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

Function WelsDecodeSlice

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

Source from the content-addressed store, hash-verified

1513}
1514
1515int32_t WelsDecodeSlice (PWelsDecoderContext pCtx, bool bFirstSliceInLayer, PNalUnit pNalCur) {
1516 PDqLayer pCurDqLayer = pCtx->pCurDqLayer;
1517 PFmo pFmo = pCtx->pFmo;
1518 int32_t iRet;
1519 int32_t iNextMbXyIndex, iSliceIdc;
1520
1521 PSlice pSlice = &pCurDqLayer->sLayerInfo.sSliceInLayer;
1522 PSliceHeaderExt pSliceHeaderExt = &pSlice->sSliceHeaderExt;
1523 PSliceHeader pSliceHeader = &pSliceHeaderExt->sSliceHeader;
1524 int32_t iMbX, iMbY;
1525 const int32_t kiCountNumMb = pSliceHeader->pSps->uiTotalMbCount; //need to be correct when fmo or multi slice
1526 uint32_t uiEosFlag = 0;
1527 PWelsDecMbFunc pDecMbFunc;
1528
1529 pSlice->iTotalMbInCurSlice = 0; //initialize at the starting of slice decoding.
1530
1531 if (pCtx->pPps->bEntropyCodingModeFlag) {
1532 if (pSlice->sSliceHeaderExt.bAdaptiveMotionPredFlag ||
1533 pSlice->sSliceHeaderExt.bAdaptiveBaseModeFlag ||
1534 pSlice->sSliceHeaderExt.bAdaptiveResidualPredFlag) {
1535 WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR,
1536 "WelsDecodeSlice()::::ILP flag exist, not supported with CABAC enabled!");
1537 pCtx->iErrorCode |= dsBitstreamError;
1538 return dsBitstreamError;
1539 }
1540 if (P_SLICE == pSliceHeader->eSliceType)
1541 pDecMbFunc = WelsDecodeMbCabacPSlice;
1542 else if (B_SLICE == pSliceHeader->eSliceType)
1543 pDecMbFunc = WelsDecodeMbCabacBSlice;
1544 else //I_SLICE. B_SLICE is being supported
1545 pDecMbFunc = WelsDecodeMbCabacISlice;
1546 } else {
1547 if (P_SLICE == pSliceHeader->eSliceType) {
1548 pDecMbFunc = WelsDecodeMbCavlcPSlice;
1549 } else if (B_SLICE == pSliceHeader->eSliceType) {
1550 pDecMbFunc = WelsDecodeMbCavlcBSlice;
1551 } else { //I_SLICE
1552 pDecMbFunc = WelsDecodeMbCavlcISlice;
1553 }
1554 }
1555
1556 if (pSliceHeader->pPps->bConstainedIntraPredFlag) {
1557 pCtx->pFillInfoCacheIntraNxNFunc = WelsFillCacheConstrain1IntraNxN;
1558 pCtx->pMapNxNNeighToSampleFunc = WelsMapNxNNeighToSampleConstrain1;
1559 pCtx->pMap16x16NeighToSampleFunc = WelsMap16x16NeighToSampleConstrain1;
1560 } else {
1561 pCtx->pFillInfoCacheIntraNxNFunc = WelsFillCacheConstrain0IntraNxN;
1562 pCtx->pMapNxNNeighToSampleFunc = WelsMapNxNNeighToSampleNormal;
1563 pCtx->pMap16x16NeighToSampleFunc = WelsMap16x16NeighToSampleNormal;
1564 }
1565
1566 pCtx->eSliceType = pSliceHeader->eSliceType;
1567 if (pCurDqLayer->sLayerInfo.pPps->bEntropyCodingModeFlag == 1) {
1568 int32_t iQp = pSlice->sSliceHeaderExt.sSliceHeader.iSliceQp;
1569 int32_t iCabacInitIdc = pSlice->sSliceHeaderExt.sSliceHeader.iCabacInitIdc;
1570 WelsCabacContextInit (pCtx, pSlice->eSliceType, iCabacInitIdc, iQp);
1571 //InitCabacCtx (pCtx->pCabacCtx, pSlice->eSliceType, iCabacInitIdc, iQp);
1572 pSlice->iLastDeltaQp = 0;

Callers 1

DecodeCurrentAccessUnitFunction · 0.85

Calls 5

WelsLogFunction · 0.85
InitCabacDecEngineFromBSFunction · 0.85
FmoNextMbFunction · 0.85
WelsCabacContextInitFunction · 0.70

Tested by

no test coverage detected