change au_ready status and check au number
This commit is contained in:
@@ -271,7 +271,9 @@ uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeade
|
|||||||
|
|
||||||
if (uiAvailNalNum > 1) {
|
if (uiAvailNalNum > 1) {
|
||||||
pCurAu->uiEndPos = uiAvailNalNum - 2;
|
pCurAu->uiEndPos = uiAvailNalNum - 2;
|
||||||
pCtx->bAuReadyFlag = true;
|
if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) {
|
||||||
|
pCtx->bAuReadyFlag = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pCtx->iErrorCode |= dsBitstreamError;
|
pCtx->iErrorCode |= dsBitstreamError;
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -291,7 +293,9 @@ uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeade
|
|||||||
|
|
||||||
if (uiAvailNalNum > 1) {
|
if (uiAvailNalNum > 1) {
|
||||||
pCurAu->uiEndPos = uiAvailNalNum - 2;
|
pCurAu->uiEndPos = uiAvailNalNum - 2;
|
||||||
pCtx->bAuReadyFlag = true;
|
if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) {
|
||||||
|
pCtx->bAuReadyFlag = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pCtx->iErrorCode |= dsBitstreamError;
|
pCtx->iErrorCode |= dsBitstreamError;
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -340,7 +344,9 @@ uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeade
|
|||||||
ForceClearCurrentNal (pCurAu);
|
ForceClearCurrentNal (pCurAu);
|
||||||
if (uiAvailNalNum > 1) {
|
if (uiAvailNalNum > 1) {
|
||||||
pCurAu->uiEndPos = uiAvailNalNum - 2;
|
pCurAu->uiEndPos = uiAvailNalNum - 2;
|
||||||
pCtx->bAuReadyFlag = true;
|
if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) {
|
||||||
|
pCtx->bAuReadyFlag = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
WelsLog (pLogCtx, WELS_LOG_ERROR, "NAL_UNIT_CODED_SLICE: InitBits() fail due invalid access.");
|
WelsLog (pLogCtx, WELS_LOG_ERROR, "NAL_UNIT_CODED_SLICE: InitBits() fail due invalid access.");
|
||||||
pCtx->iErrorCode |= dsBitstreamError;
|
pCtx->iErrorCode |= dsBitstreamError;
|
||||||
@@ -357,7 +363,9 @@ uint8_t* ParseNalHeader (PWelsDecoderContext pCtx, SNalUnitHeader* pNalUnitHeade
|
|||||||
|
|
||||||
if (uiAvailNalNum > 1) {
|
if (uiAvailNalNum > 1) {
|
||||||
pCurAu->uiEndPos = uiAvailNalNum - 2;
|
pCurAu->uiEndPos = uiAvailNalNum - 2;
|
||||||
pCtx->bAuReadyFlag = true;
|
if (pCtx->eErrorConMethod == ERROR_CON_DISABLE) {
|
||||||
|
pCtx->bAuReadyFlag = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
pCtx->iErrorCode |= dsBitstreamError;
|
pCtx->iErrorCode |= dsBitstreamError;
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|||||||
@@ -626,23 +626,25 @@ int32_t WelsDecodeBs (PWelsDecoderContext pCtx, const uint8_t* kpBsBuf, const in
|
|||||||
pDstNal[iDstIdx] = pDstNal[iDstIdx + 1] = pDstNal[iDstIdx + 2] = pDstNal[iDstIdx + 3] =
|
pDstNal[iDstIdx] = pDstNal[iDstIdx + 1] = pDstNal[iDstIdx + 2] = pDstNal[iDstIdx + 3] =
|
||||||
0; // set 4 reserved bytes to zero
|
0; // set 4 reserved bytes to zero
|
||||||
pNalPayload = ParseNalHeader (pCtx, &pCtx->sCurNalHead, pDstNal, iDstIdx, pSrcNal - 3, iSrcIdx + 3, &iConsumedBytes);
|
pNalPayload = ParseNalHeader (pCtx, &pCtx->sCurNalHead, pDstNal, iDstIdx, pSrcNal - 3, iSrcIdx + 3, &iConsumedBytes);
|
||||||
if (IS_VCL_NAL (pCtx->sCurNalHead.eNalUnitType, 1)) {
|
if (pNalPayload) { //parse correct
|
||||||
CheckAndFinishLastPic (pCtx, ppDst, pDstBufInfo);
|
if (IS_VCL_NAL (pCtx->sCurNalHead.eNalUnitType, 1)) {
|
||||||
}
|
CheckAndFinishLastPic (pCtx, ppDst, pDstBufInfo);
|
||||||
if (IS_PARAM_SETS_NALS (pCtx->sCurNalHead.eNalUnitType) && pNalPayload) {
|
}
|
||||||
iRet = ParseNonVclNal (pCtx, pNalPayload, iDstIdx - iConsumedBytes, pSrcNal - 3, iSrcIdx + 3);
|
if (IS_PARAM_SETS_NALS (pCtx->sCurNalHead.eNalUnitType)) {
|
||||||
}
|
iRet = ParseNonVclNal (pCtx, pNalPayload, iDstIdx - iConsumedBytes, pSrcNal - 3, iSrcIdx + 3);
|
||||||
if (pCtx->bAuReadyFlag) {
|
}
|
||||||
ConstructAccessUnit (pCtx, ppDst, pDstBufInfo);
|
if (pCtx->bAuReadyFlag) {
|
||||||
|
ConstructAccessUnit (pCtx, ppDst, pDstBufInfo);
|
||||||
|
|
||||||
if ((dsOutOfMemory | dsNoParamSets) & pCtx->iErrorCode) {
|
if ((dsOutOfMemory | dsNoParamSets) & pCtx->iErrorCode) {
|
||||||
#ifdef LONG_TERM_REF
|
#ifdef LONG_TERM_REF
|
||||||
pCtx->bParamSetsLostFlag = true;
|
pCtx->bParamSetsLostFlag = true;
|
||||||
#else
|
#else
|
||||||
pCtx->bReferenceLostAtT0Flag = true;
|
pCtx->bReferenceLostAtT0Flag = true;
|
||||||
#endif
|
#endif
|
||||||
if (dsOutOfMemory & pCtx->iErrorCode) {
|
if (dsOutOfMemory & pCtx->iErrorCode) {
|
||||||
return pCtx->iErrorCode;
|
return pCtx->iErrorCode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -682,22 +684,24 @@ int32_t WelsDecodeBs (PWelsDecoderContext pCtx, const uint8_t* kpBsBuf, const in
|
|||||||
pDstNal[iDstIdx] = pDstNal[iDstIdx + 1] = pDstNal[iDstIdx + 2] = pDstNal[iDstIdx + 3] =
|
pDstNal[iDstIdx] = pDstNal[iDstIdx + 1] = pDstNal[iDstIdx + 2] = pDstNal[iDstIdx + 3] =
|
||||||
0; // set 4 reserved bytes to zero
|
0; // set 4 reserved bytes to zero
|
||||||
pNalPayload = ParseNalHeader (pCtx, &pCtx->sCurNalHead, pDstNal, iDstIdx, pSrcNal - 3, iSrcIdx + 3, &iConsumedBytes);
|
pNalPayload = ParseNalHeader (pCtx, &pCtx->sCurNalHead, pDstNal, iDstIdx, pSrcNal - 3, iSrcIdx + 3, &iConsumedBytes);
|
||||||
if (IS_VCL_NAL (pCtx->sCurNalHead.eNalUnitType, 1)) {
|
if (pNalPayload) { //parse correct
|
||||||
CheckAndFinishLastPic (pCtx, ppDst, pDstBufInfo);
|
if (IS_VCL_NAL (pCtx->sCurNalHead.eNalUnitType, 1)) {
|
||||||
}
|
CheckAndFinishLastPic (pCtx, ppDst, pDstBufInfo);
|
||||||
if (IS_PARAM_SETS_NALS (pCtx->sCurNalHead.eNalUnitType) && pNalPayload) {
|
}
|
||||||
iRet = ParseNonVclNal (pCtx, pNalPayload, iDstIdx - iConsumedBytes, pSrcNal - 3, iSrcIdx + 3);
|
if (IS_PARAM_SETS_NALS (pCtx->sCurNalHead.eNalUnitType)) {
|
||||||
}
|
iRet = ParseNonVclNal (pCtx, pNalPayload, iDstIdx - iConsumedBytes, pSrcNal - 3, iSrcIdx + 3);
|
||||||
if (pCtx->bAuReadyFlag) {
|
}
|
||||||
ConstructAccessUnit (pCtx, ppDst, pDstBufInfo);
|
if (pCtx->bAuReadyFlag) {
|
||||||
|
ConstructAccessUnit (pCtx, ppDst, pDstBufInfo);
|
||||||
|
|
||||||
if ((dsOutOfMemory | dsNoParamSets) & pCtx->iErrorCode) {
|
if ((dsOutOfMemory | dsNoParamSets) & pCtx->iErrorCode) {
|
||||||
#ifdef LONG_TERM_REF
|
#ifdef LONG_TERM_REF
|
||||||
pCtx->bParamSetsLostFlag = true;
|
pCtx->bParamSetsLostFlag = true;
|
||||||
#else
|
#else
|
||||||
pCtx->bReferenceLostAtT0Flag = true;
|
pCtx->bReferenceLostAtT0Flag = true;
|
||||||
#endif
|
#endif
|
||||||
return pCtx->iErrorCode;
|
return pCtx->iErrorCode;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (iRet) {
|
if (iRet) {
|
||||||
|
|||||||
@@ -2140,6 +2140,8 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf
|
|||||||
|
|
||||||
bool CheckAndFinishLastPic (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferInfo* pDstInfo) {
|
bool CheckAndFinishLastPic (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferInfo* pDstInfo) {
|
||||||
PAccessUnit pAu = pCtx->pAccessUnitList;
|
PAccessUnit pAu = pCtx->pAccessUnitList;
|
||||||
|
if (pAu->uiAvailUnitsNum == 0)
|
||||||
|
return true;
|
||||||
PNalUnit pCurNal = pAu->pNalUnitsList[pAu->uiEndPos];
|
PNalUnit pCurNal = pAu->pNalUnitsList[pAu->uiEndPos];
|
||||||
if ((pCtx->iTotalNumMbRec != 0)
|
if ((pCtx->iTotalNumMbRec != 0)
|
||||||
&& (CheckAccessUnitBoundaryExt (&pCtx->sLastNalHdrExt, &pCurNal->sNalHeaderExt, &pCtx->sLastSliceHeader,
|
&& (CheckAccessUnitBoundaryExt (&pCtx->sLastNalHdrExt, &pCurNal->sNalHeaderExt, &pCtx->sLastSliceHeader,
|
||||||
|
|||||||
Reference in New Issue
Block a user