Showing the changes to codec/decoder/core/src/au_parser.cpp (1 of 2 files). Show all
Unified · Split
| @@ -316,7 +316,7 @@ uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeade · 315 unmodified lines | ||
| 316 | 316 | } |
| 317 | 317 | |
| 318 | 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 | 320 | pCurAu->pNalUnitsList[uiAvailNalNum - 1]->sNalData.sVclNal.sSliceHeaderExt.sSliceHeader.pSps)) { |
| 321 | 321 | pCurAu->uiEndPos = uiAvailNalNum - 2; |
| 322 | 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 | 396 | const PNalUnitHeaderExt kpLastNalHeaderExt = &kpLastNal->sNalHeaderExt; |
| 397 | 397 | const PNalUnitHeaderExt kpCurNalHeaderExt = &kpCurNal->sNalHeaderExt; |
| 398 | 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 | 402 | if (kpLastNalHeaderExt->uiTemporalId != kpCurNalHeaderExt->uiTemporalId) { |
| 403 | 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 | 410 | // Subclause 7.4.1.2.5 |
| 407 | − if (kpLastSliceHeader->iRedundantPicCnt < kpCurSliceHeader->iRedundantPicCnt) | |
| 408 | − return false; | |
| 409 | − else if (kpLastSliceHeader->iRedundantPicCnt > kpCurSliceHeader->iRedundantPicCnt) | |
| 411 | + if (kpLastSliceHeader->iRedundantPicCnt > kpCurSliceHeader->iRedundantPicCnt) | |
| 410 | 412 | return true; |
| 411 | 413 | |
| 412 | 414 | // Subclause G7.4.1.2.4 |
| 413 | − if (kpLastNalHeaderExt->uiDependencyId < kpCurNalHeaderExt->uiDependencyId) | |
| 414 | − return false; | |
| 415 | − else if (kpLastNalHeaderExt->uiDependencyId > kpCurNalHeaderExt->uiDependencyId) | |
| 415 | + if (kpLastNalHeaderExt->uiDependencyId > kpCurNalHeaderExt->uiDependencyId) | |
| 416 | 416 | return true; |
| 417 | − if (kpLastNalHeaderExt->uiQualityId < kpCurNalHeaderExt->uiQualityId) | |
| 418 | − return false; | |
| 419 | − else if (kpLastNalHeaderExt->uiQualityId > kpCurNalHeaderExt->uiQualityId) | |
| 420 | − return true; | |
| 421 | − | |
| 422 | 417 | // Subclause 7.4.1.2.4 |
| 423 | − if (kpLastSliceHeader->iFrameNum != kpCurSliceHeader->iFrameNum) | |
| 424 | − return true; | |
| 425 | − if (kpLastSliceHeader->iPpsId != kpCurSliceHeader->iPpsId) | |
| 418 | + if (kpLastNalHeaderExt->uiDependencyId == kpCurNalHeaderExt->uiDependencyId && kpLastSliceHeader->iPpsId != kpCurSliceHeader->iPpsId) | |
| 426 | 419 | return true; |
| 427 | 420 | if (kpLastSliceHeader->bFieldPicFlag != kpCurSliceHeader->bFieldPicFlag) |
| 428 | 421 | return true; |