| 1440 | |
| 1441 | |
| 1442 | int32_t UpdateAccessUnit (PWelsDecoderContext pCtx) { |
| 1443 | PAccessUnit pCurAu = pCtx->pAccessUnitList; |
| 1444 | int32_t iIdx = pCurAu->uiEndPos; |
| 1445 | |
| 1446 | // Conversed iterator |
| 1447 | pCtx->uiTargetDqId = pCurAu->pNalUnitsList[iIdx]->sNalHeaderExt.uiLayerDqId; |
| 1448 | pCurAu->uiActualUnitsNum = iIdx + 1; |
| 1449 | pCurAu->bCompletedAuFlag = true; |
| 1450 | |
| 1451 | // Added for mosaic avoidance, 11/19/2009 |
| 1452 | #ifdef LONG_TERM_REF |
| 1453 | if (pCtx->bParamSetsLostFlag || pCtx->bNewSeqBegin) |
| 1454 | #else |
| 1455 | if (pCtx->bReferenceLostAtT0Flag || pCtx->bNewSeqBegin) |
| 1456 | #endif |
| 1457 | { |
| 1458 | uint32_t uiActualIdx = 0; |
| 1459 | while (uiActualIdx < pCurAu->uiActualUnitsNum) { |
| 1460 | PNalUnit nal = pCurAu->pNalUnitsList[uiActualIdx]; |
| 1461 | |
| 1462 | if (nal->sNalHeaderExt.sNalUnitHeader.eNalUnitType == NAL_UNIT_CODED_SLICE_IDR || nal->sNalHeaderExt.bIdrFlag) { |
| 1463 | break; |
| 1464 | } |
| 1465 | ++ uiActualIdx; |
| 1466 | } |
| 1467 | if (uiActualIdx == |
| 1468 | pCurAu->uiActualUnitsNum) { // no found IDR nal within incoming AU, need exit to avoid mosaic issue, 11/19/2009 |
| 1469 | |
| 1470 | pCtx->pDecoderStatistics->uiIDRLostNum++; |
| 1471 | if (!pCtx->bParamSetsLostFlag) |
| 1472 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, |
| 1473 | "UpdateAccessUnit():::::Key frame lost.....CAN NOT find IDR from current AU."); |
| 1474 | pCtx->iErrorCode |= dsRefLost; |
| 1475 | if (pCtx->pParam->eEcActiveIdc == ERROR_CON_DISABLE) { |
| 1476 | #ifdef LONG_TERM_REF |
| 1477 | pCtx->iErrorCode |= dsNoParamSets; |
| 1478 | return dsNoParamSets; |
| 1479 | #else |
| 1480 | pCtx->iErrorCode |= dsRefLost; |
| 1481 | return ERR_INFO_REFERENCE_PIC_LOST; |
| 1482 | #endif |
| 1483 | } |
| 1484 | } |
| 1485 | } |
| 1486 | |
| 1487 | return ERR_NONE; |
| 1488 | } |
| 1489 | |
| 1490 | int32_t InitialDqLayersContext (PWelsDecoderContext pCtx, const int32_t kiMaxWidth, const int32_t kiMaxHeight) { |
| 1491 | int32_t i = 0; |
no test coverage detected