refine Check AU boundary
Unified · Split
| @@ -92,7 +92,7 @@ int32_t ParseRefBasePicMarking (PBitStringAux pBs, PRefBasePicMarking pRefBasePi · 91 unmodified lines | |||
| 92 | 92 | ||
| 93 | int32_t ParsePrefixNalUnit (PWelsDecoderContext pCtx, PBitStringAux pBs); | 93 | int32_t ParsePrefixNalUnit (PWelsDecoderContext pCtx, PBitStringAux pBs); |
| 94 | 94 | ||
| 95 | bool CheckAccessUnitBoundary (const PNalUnit kpCurNal, const PNalUnit kpLastNal, const PSps kpSps); | 95 | bool CheckAccessUnitBoundary (const PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const PNalUnit kpLastNal, const PSps kpSps); |
| 96 | bool CheckAccessUnitBoundaryExt (PNalUnitHeaderExt pLastNalHdrExt, PNalUnitHeaderExt pCurNalHeaderExt, | 96 | bool CheckAccessUnitBoundaryExt (PNalUnitHeaderExt pLastNalHdrExt, PNalUnitHeaderExt pCurNalHeaderExt, |
| 97 | PSliceHeader pLastSliceHeader, PSliceHeader pCurSliceHeader); | 97 | PSliceHeader pLastSliceHeader, PSliceHeader pCurSliceHeader); |
| 98 | /*! | 98 | /*! |
| @@ -316,7 +316,7 @@ uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeade · 315 unmodified lines | |||
| 316 | } | 316 | } |
| 317 | 317 | ||
| 318 | if ((uiAvailNalNum > 1) && | 318 | if ((uiAvailNalNum > 1) && |
| 319 | CheckAccessUnitBoundary (pCurAu->pNalUnitsList[uiAvailNalNum - 1], pCurAu->pNalUnitsList[uiAvailNalNum - 2], | 319 | CheckAccessUnitBoundary (pCtx, pCurAu->pNalUnitsList[uiAvailNalNum - 1], pCurAu->pNalUnitsList[uiAvailNalNum - 2], |
| 320 | pCurAu->pNalUnitsList[uiAvailNalNum - 1]->sNalData.sVclNal.sSliceHeaderExt.sSliceHeader.pSps)) { | 320 | pCurAu->pNalUnitsList[uiAvailNalNum - 1]->sNalData.sVclNal.sSliceHeaderExt.sSliceHeader.pSps)) { |
| 321 | pCurAu->uiEndPos = uiAvailNalNum - 2; | 321 | pCurAu->uiEndPos = uiAvailNalNum - 2; |
| 322 | pCtx->bAuReadyFlag = true; | 322 | pCtx->bAuReadyFlag = true; |
| @@ -392,7 +392,7 @@ bool CheckAccessUnitBoundaryExt (PNalUnitHeaderExt pLastNalHdrExt, PNalUnitHeade · 69 unmodified lines | |||
| 392 | } | 392 | } |
| 393 | 393 | ||
| 394 | 394 | ||
| 395 | bool CheckAccessUnitBoundary (const PNalUnit kpCurNal, const PNalUnit kpLastNal, const PSps kpSps) { | 395 | bool CheckAccessUnitBoundary (const PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const PNalUnit kpLastNal, const PSps kpSps) { |
| 396 | const PNalUnitHeaderExt kpLastNalHeaderExt = &kpLastNal->sNalHeaderExt; | 396 | const PNalUnitHeaderExt kpLastNalHeaderExt = &kpLastNal->sNalHeaderExt; |
| 397 | const PNalUnitHeaderExt kpCurNalHeaderExt = &kpCurNal->sNalHeaderExt; | 397 | const PNalUnitHeaderExt kpCurNalHeaderExt = &kpCurNal->sNalHeaderExt; |
| 398 | const SSliceHeader* kpLastSliceHeader = &kpLastNal->sNalData.sVclNal.sSliceHeaderExt.sSliceHeader; | 398 | const SSliceHeader* kpLastSliceHeader = &kpLastNal->sNalData.sVclNal.sSliceHeaderExt.sSliceHeader; |
| @@ -402,27 +402,20 @@ bool CheckAccessUnitBoundary (const PNalUnit kpCurNal, const PNalUnit kpLastNal, · 3 unmodified lines | |||
| 402 | if (kpLastNalHeaderExt->uiTemporalId != kpCurNalHeaderExt->uiTemporalId) { | 402 | if (kpLastNalHeaderExt->uiTemporalId != kpCurNalHeaderExt->uiTemporalId) { |
| 403 | return true; | 403 | return true; |
| 404 | } | 404 | } |
| 405 | 405 | if (kpLastSliceHeader->iFrameNum != kpCurSliceHeader->iFrameNum) | |
| 406 | return true; | ||
| 407 | if (pCtx->pActiveLayerSps[kpCurNalHeaderExt->uiDependencyId] != NULL && pCtx->pActiveLayerSps[kpCurNalHeaderExt->uiDependencyId] != kpSps) { | ||
| 408 | return true; // the active sps changed, new sequence begins, so the current au is ready | ||
| 409 | } | ||
| 406 | // Subclause 7.4.1.2.5 | 410 | // Subclause 7.4.1.2.5 |
| 407 | if (kpLastSliceHeader->iRedundantPicCnt < kpCurSliceHeader->iRedundantPicCnt) | 411 | if (kpLastSliceHeader->iRedundantPicCnt > kpCurSliceHeader->iRedundantPicCnt) |
| 408 | return false; | ||
| 409 | else if (kpLastSliceHeader->iRedundantPicCnt > kpCurSliceHeader->iRedundantPicCnt) | ||
| 410 | return true; | 412 | return true; |
| 411 | 413 | ||
| 412 | // Subclause G7.4.1.2.4 | 414 | // Subclause G7.4.1.2.4 |
| 413 | if (kpLastNalHeaderExt->uiDependencyId < kpCurNalHeaderExt->uiDependencyId) | 415 | if (kpLastNalHeaderExt->uiDependencyId > kpCurNalHeaderExt->uiDependencyId) |
| 414 | return false; | ||
| 415 | else if (kpLastNalHeaderExt->uiDependencyId > kpCurNalHeaderExt->uiDependencyId) | ||
| 416 | return true; | 416 | return true; |
| 417 | if (kpLastNalHeaderExt->uiQualityId < kpCurNalHeaderExt->uiQualityId) | ||
| 418 | return false; | ||
| 419 | else if (kpLastNalHeaderExt->uiQualityId > kpCurNalHeaderExt->uiQualityId) | ||
| 420 | return true; | ||
| 421 | |||
| 422 | // Subclause 7.4.1.2.4 | 417 | // Subclause 7.4.1.2.4 |
| 423 | if (kpLastSliceHeader->iFrameNum != kpCurSliceHeader->iFrameNum) | 418 | if (kpLastNalHeaderExt->uiDependencyId == kpCurNalHeaderExt->uiDependencyId && kpLastSliceHeader->iPpsId != kpCurSliceHeader->iPpsId) |
| 424 | return true; | ||
| 425 | if (kpLastSliceHeader->iPpsId != kpCurSliceHeader->iPpsId) | ||
| 426 | return true; | 419 | return true; |
| 427 | if (kpLastSliceHeader->bFieldPicFlag != kpCurSliceHeader->bFieldPicFlag) | 420 | if (kpLastSliceHeader->bFieldPicFlag != kpCurSliceHeader->bFieldPicFlag) |
| 428 | return true; | 421 | return true; |