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

Function PrefetchNalHeaderExtSyntax

codec/decoder/core/src/decoder_core.cpp:1394–1438  ·  view source on GitHub ↗

* Copy relative syntax elements of NALUnitHeaderExt, sRefPicBaseMarking and bStoreRefBasePicFlag in prefix nal unit. * pSrc: mark as decoded prefix NAL * ppDst: succeeded VCL NAL based AVC (I/P Slice) */

Source from the content-addressed store, hash-verified

1392 * ppDst: succeeded VCL NAL based AVC (I/P Slice)
1393 */
1394bool PrefetchNalHeaderExtSyntax (PWelsDecoderContext pCtx, PNalUnit const kppDst, PNalUnit const kpSrc) {
1395 PNalUnitHeaderExt pNalHdrExtD = NULL, pNalHdrExtS = NULL;
1396 PSliceHeaderExt pShExtD = NULL;
1397 PPrefixNalUnit pPrefixS = NULL;
1398 PSps pSps = NULL;
1399 int32_t iIdx = 0;
1400
1401 if (kppDst == NULL || kpSrc == NULL)
1402 return false;
1403
1404 pNalHdrExtD = &kppDst->sNalHeaderExt;
1405 pNalHdrExtS = &kpSrc->sNalHeaderExt;
1406 pShExtD = &kppDst->sNalData.sVclNal.sSliceHeaderExt;
1407 pPrefixS = &kpSrc->sNalData.sPrefixNal;
1408 pSps = &pCtx->sSpsPpsCtx.sSpsBuffer[pCtx->sSpsPpsCtx.sPpsBuffer[pShExtD->sSliceHeader.iPpsId].iSpsId];
1409
1410 pNalHdrExtD->uiDependencyId = pNalHdrExtS->uiDependencyId;
1411 pNalHdrExtD->uiQualityId = pNalHdrExtS->uiQualityId;
1412 pNalHdrExtD->uiTemporalId = pNalHdrExtS->uiTemporalId;
1413 pNalHdrExtD->uiPriorityId = pNalHdrExtS->uiPriorityId;
1414 pNalHdrExtD->bIdrFlag = pNalHdrExtS->bIdrFlag;
1415 pNalHdrExtD->iNoInterLayerPredFlag = pNalHdrExtS->iNoInterLayerPredFlag;
1416 pNalHdrExtD->bDiscardableFlag = pNalHdrExtS->bDiscardableFlag;
1417 pNalHdrExtD->bOutputFlag = pNalHdrExtS->bOutputFlag;
1418 pNalHdrExtD->bUseRefBasePicFlag = pNalHdrExtS->bUseRefBasePicFlag;
1419 pNalHdrExtD->uiLayerDqId = pNalHdrExtS->uiLayerDqId;
1420
1421 pShExtD->bStoreRefBasePicFlag = pPrefixS->bStoreRefBasePicFlag;
1422 memcpy (&pShExtD->sRefBasePicMarking, &pPrefixS->sRefPicBaseMarking,
1423 sizeof (SRefBasePicMarking)); //confirmed_safe_unsafe_usage
1424 if (pShExtD->sRefBasePicMarking.bAdaptiveRefBasePicMarkingModeFlag) {
1425 PRefBasePicMarking pRefBasePicMarking = &pShExtD->sRefBasePicMarking;
1426 iIdx = 0;
1427 do {
1428 if (pRefBasePicMarking->mmco_base[iIdx].uiMmcoType == MMCO_END)
1429 break;
1430 if (pRefBasePicMarking->mmco_base[iIdx].uiMmcoType == MMCO_SHORT2UNUSED)
1431 pRefBasePicMarking->mmco_base[iIdx].iShortFrameNum = (pShExtD->sSliceHeader.iFrameNum -
1432 pRefBasePicMarking->mmco_base[iIdx].uiDiffOfPicNums) & ((1 << pSps->uiLog2MaxFrameNum) - 1);
1433 ++ iIdx;
1434 } while (iIdx < MAX_MMCO_COUNT);
1435 }
1436
1437 return true;
1438}
1439
1440
1441

Callers 1

ParseNalHeaderFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected