* 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) */
| 1392 | * ppDst: succeeded VCL NAL based AVC (I/P Slice) |
| 1393 | */ |
| 1394 | bool 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 |