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

Function CheckAccessUnitBoundary

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

Source from the content-addressed store, hash-verified

493
494
495bool CheckAccessUnitBoundary (PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const PNalUnit kpLastNal,
496 const PSps kpSps) {
497 const PNalUnitHeaderExt kpLastNalHeaderExt = &kpLastNal->sNalHeaderExt;
498 const PNalUnitHeaderExt kpCurNalHeaderExt = &kpCurNal->sNalHeaderExt;
499 const SSliceHeader* kpLastSliceHeader = &kpLastNal->sNalData.sVclNal.sSliceHeaderExt.sSliceHeader;
500 const SSliceHeader* kpCurSliceHeader = &kpCurNal->sNalData.sVclNal.sSliceHeaderExt.sSliceHeader;
501 if (pCtx->sSpsPpsCtx.pActiveLayerSps[kpCurNalHeaderExt->uiDependencyId] != NULL
502 && pCtx->sSpsPpsCtx.pActiveLayerSps[kpCurNalHeaderExt->uiDependencyId] != kpSps) {
503 return true; // the active sps changed, new sequence begins, so the current au is ready
504 }
505
506 //Sub-clause 7.1.4.1.1 temporal_id
507 if (kpLastNalHeaderExt->uiTemporalId != kpCurNalHeaderExt->uiTemporalId) {
508 return true;
509 }
510 if (kpLastSliceHeader->iFrameNum != kpCurSliceHeader->iFrameNum)
511 return true;
512 // Subclause 7.4.1.2.5
513 if (kpLastSliceHeader->iRedundantPicCnt > kpCurSliceHeader->iRedundantPicCnt)
514 return true;
515
516 // Subclause G7.4.1.2.4
517 if (kpLastNalHeaderExt->uiDependencyId > kpCurNalHeaderExt->uiDependencyId)
518 return true;
519 // Subclause 7.4.1.2.4
520 if (kpLastNalHeaderExt->uiDependencyId == kpCurNalHeaderExt->uiDependencyId
521 && kpLastSliceHeader->iPpsId != kpCurSliceHeader->iPpsId)
522 return true;
523 if (kpLastSliceHeader->bFieldPicFlag != kpCurSliceHeader->bFieldPicFlag)
524 return true;
525 if (kpLastSliceHeader->bBottomFiledFlag != kpCurSliceHeader->bBottomFiledFlag)
526 return true;
527 if ((kpLastNalHeaderExt->sNalUnitHeader.uiNalRefIdc != NRI_PRI_LOWEST) != (kpCurNalHeaderExt->sNalUnitHeader.uiNalRefIdc
528 != NRI_PRI_LOWEST))
529 return true;
530 if (kpLastNalHeaderExt->bIdrFlag != kpCurNalHeaderExt->bIdrFlag)
531 return true;
532 if (kpCurNalHeaderExt->bIdrFlag) {
533 if (kpLastSliceHeader->uiIdrPicId != kpCurSliceHeader->uiIdrPicId)
534 return true;
535 }
536 if (kpSps->uiPocType == 0) {
537 if (kpLastSliceHeader->iPicOrderCntLsb != kpCurSliceHeader->iPicOrderCntLsb)
538 return true;
539 if (kpLastSliceHeader->iDeltaPicOrderCntBottom != kpCurSliceHeader->iDeltaPicOrderCntBottom)
540 return true;
541 } else if (kpSps->uiPocType == 1) {
542 if (kpLastSliceHeader->iDeltaPicOrderCnt[0] != kpCurSliceHeader->iDeltaPicOrderCnt[0])
543 return true;
544 if (kpLastSliceHeader->iDeltaPicOrderCnt[1] != kpCurSliceHeader->iDeltaPicOrderCnt[1])
545 return true;
546 }
547
548 return false;
549}
550
551bool CheckNextAuNewSeq (PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const PSps kpSps) {
552 const PNalUnitHeaderExt kpCurNalHeaderExt = &kpCurNal->sNalHeaderExt;

Callers 1

ParseNalHeaderFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected