ref: 8e400f19d219896dc3815c2b980ece59ecf084d5
parent: ee425ec78522b7862ca61af246b1f86b46e7f0db
author: Haibo Zhu <haibozhu@cisco.com>
date: Fri Jul 4 00:19:16 EDT 2014
Debug about the ExpandBsBuffer (have no Bs buffer offset reset)
--- a/codec/decoder/core/src/decoder_core.cpp
+++ b/codec/decoder/core/src/decoder_core.cpp
@@ -63,7 +63,7 @@
#else
pCtx->bReferenceLostAtT0Flag = false; // need initialize it due new seq, 6/4/2010
#endif //LONG_TERM_REF
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_INFO,
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_INFO,
"DecodeFrameConstruction()::::output first frame of new sequence, %d x %d, crop_left:%d, crop_right:%d, crop_top:%d, crop_bottom:%d.\n",
kiWidth, kiHeight, pCtx->sFrameCrop.iLeftOffset, pCtx->sFrameCrop.iRightOffset, pCtx->sFrameCrop.iTopOffset,
pCtx->sFrameCrop.iBottomOffset);
@@ -70,7 +70,7 @@
}
if (pCtx->iTotalNumMbRec != kiTotalNumMbInCurLayer) {
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING,
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING,
"DecodeFrameConstruction():::iTotalNumMbRec:%d, total_num_mb_sps:%d, cur_layer_mb_width:%d, cur_layer_mb_height:%d \n",
pCtx->iTotalNumMbRec, kiTotalNumMbInCurLayer, pCurDq->iMbWidth, pCurDq->iMbHeight);
bFrameCompleteFlag = false; //return later after output buffer is done
@@ -318,6 +318,14 @@
if (pNewBsBuff == NULL)
return ERR_INFO_OUT_OF_MEMORY;
+ //Calculate and set the bs start and end position
+ for (int32_t i = 0; i <= pCtx->pAccessUnitList->uiActualUnitsNum; i++) {
+ PBitStringAux pSliceBitsRead = &pCtx->pAccessUnitList->pNalUnitsList[i]->sNalData.sVclNal.sSliceBitsRead;
+ pSliceBitsRead->pStartBuf = pSliceBitsRead->pStartBuf - pCtx->sRawData.pHead + pNewBsBuff;
+ pSliceBitsRead->pEndBuf = pSliceBitsRead->pEndBuf - pCtx->sRawData.pHead + pNewBsBuff;
+ pSliceBitsRead->pCurBuf = pSliceBitsRead->pCurBuf - pCtx->sRawData.pHead + pNewBsBuff;
+ }
+
//Copy current buffer status to new buffer
memcpy (pNewBsBuff, pCtx->sRawData.pHead, pCtx->iMaxBsBufferSizeInByte);
pCtx->iMaxBsBufferSizeInByte = iNewBuffLen;
@@ -331,7 +339,8 @@
int32_t CheckBsBuffer (PWelsDecoderContext pCtx, const int32_t kiSrcLen) {
if (kiSrcLen > MAX_ACCESS_UNIT_CAPACITY) { //exceeds max allowed data
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING, "Max AU size exceeded. Allowed size = %d, current size = %d", MAX_ACCESS_UNIT_CAPACITY,
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "Max AU size exceeded. Allowed size = %d, current size = %d",
+ MAX_ACCESS_UNIT_CAPACITY,
kiSrcLen);
pCtx->iErrorCode |= dsBitstreamError;
return ERR_INFO_INVALID_ACCESS;
@@ -455,7 +464,7 @@
bool bSgChangeCycleInvolved = false; // involved slice group change cycle ?
uint32_t uiCode;
int32_t iCode;
- SLogContext* pLogCtx = &(pCtx->sLogCtx);
+ SLogContext* pLogCtx = & (pCtx->sLogCtx);
if (kpCurNal == NULL) {
return ERR_INFO_OUT_OF_MEMORY;
@@ -576,7 +585,8 @@
if (bIdrFlag) {
if (pSliceHead->iFrameNum != 0) {
- WelsLog (pLogCtx, WELS_LOG_WARNING, "ParseSliceHeaderSyntaxs(), invaild frame number: %d due to IDR frame introduced!\n",
+ WelsLog (pLogCtx, WELS_LOG_WARNING,
+ "ParseSliceHeaderSyntaxs(), invaild frame number: %d due to IDR frame introduced!\n",
pSliceHead->iFrameNum);
return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_INVALID_FRAME_NUM);
}
@@ -750,7 +760,7 @@
pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc = uiCode;
//refer to JVT-X201wcm1.doc G.7.4.3.4--2010.4.20
if (pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc > 6) {
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING, "disable_inter_layer_deblock_filter_idc (%d) out of range [0, 6]\n",
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "disable_inter_layer_deblock_filter_idc (%d) out of range [0, 6]\n",
pSliceHeadExt->uiDisableInterLayerDeblockingFilterIdc);
return ERR_INFO_INVALID_DBLOCKING_IDC;
}
@@ -939,7 +949,8 @@
}
if (uiActualIdx ==
pCurAu->uiActualUnitsNum) { // no found IDR nal within incoming AU, need exit to avoid mosaic issue, 11/19/2009
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING, "UpdateAccessUnit():::::Key frame lost.....CAN NOT find IDR from current AU.\n");
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING,
+ "UpdateAccessUnit():::::Key frame lost.....CAN NOT find IDR from current AU.\n");
if (pCtx->iErrorConMethod == ERROR_CON_DISABLE) {
#ifdef LONG_TERM_REF
pCtx->iErrorCode |= dsNoParamSets;
@@ -1631,7 +1642,7 @@
iErr = SyncPictureResolutionExt (pCtx, pCtx->pSps->iMbWidth, pCtx->pSps->iMbHeight);
if (ERR_NONE != iErr) {
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING, "sync picture resolution ext failed, the error is %d", iErr);
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "sync picture resolution ext failed, the error is %d", iErr);
return iErr;
}
InitErrorCon (pCtx); //Do EC initialization here, for sequence start
@@ -1649,7 +1660,7 @@
if (pCtx->bNewSeqBegin)
ResetActiveSPSForEachLayer (pCtx);
if (ERR_NONE != iErr) {
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_INFO, "returned error from decoding:[0x%x]\n", iErr);
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_INFO, "returned error from decoding:[0x%x]\n", iErr);
return iErr;
}
@@ -1785,7 +1796,8 @@
pCtx->pDec = PrefetchPic (pCtx->pPicBuff[0]);
if (NULL == pCtx->pDec) {
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_ERROR, "DecodeCurrentAccessUnit()::::::PrefetchPic ERROR, pSps->iNumRefFrames:%d.\n",
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR,
+ "DecodeCurrentAccessUnit()::::::PrefetchPic ERROR, pSps->iNumRefFrames:%d.\n",
pCtx->pSps->iNumRefFrames);
pCtx->iErrorCode |= dsOutOfMemory;
return ERR_INFO_REF_COUNT_OVERFLOW;
@@ -1838,7 +1850,7 @@
pCtx->pFmo = &pCtx->sFmoList[iPpsId];
if (!FmoParamUpdate (pCtx->pFmo, pLayerInfo.pSps, pLayerInfo.pPps, &pCtx->iActiveFmoNum)) {
pCtx->iErrorCode |= dsBitstreamError;
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING, "DecodeCurrentAccessUnit(), FmoParamUpdate failed, eSliceType: %d.\n",
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING, "DecodeCurrentAccessUnit(), FmoParamUpdate failed, eSliceType: %d.\n",
pSh->eSliceType);
return GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, ERR_INFO_FMO_INIT_FAIL);
}
@@ -1863,7 +1875,7 @@
if (!kbIdrFlag &&
pSh->iFrameNum != pCtx->iPrevFrameNum &&
pSh->iFrameNum != ((pCtx->iPrevFrameNum + 1) & ((1 << dq_cur->sLayerInfo.pSps->uiLog2MaxFrameNum) - 1))) {
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING,
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING,
"referencing pictures lost due frame gaps exist, prev_frame_num: %d, curr_frame_num: %d\n", pCtx->iPrevFrameNum,
pSh->iFrameNum);
@@ -1884,7 +1896,8 @@
iRet = InitRefPicList (pCtx, uiNalRefIdc, bFreshSliceAvailable, pSh->iPicOrderCntLsb);
if (iRet) {
HandleReferenceLost (pCtx, pNalCur);
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING, "reference picture introduced by this frame is lost during transmission! uiTId: %d\n",
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING,
+ "reference picture introduced by this frame is lost during transmission! uiTId: %d\n",
pNalCur->sNalHeaderExt.uiTemporalId);
if (pCtx->iErrorConMethod == ERROR_CON_DISABLE) {
return iRet;
@@ -1896,7 +1909,8 @@
//Output good store_base reconstruction when enhancement quality layer occurred error for MGS key picture case
if (iRet != ERR_NONE) {
- WelsLog (&(pCtx->sLogCtx), WELS_LOG_WARNING, "DecodeCurrentAccessUnit() failed (%d) in frame: %d uiDId: %d uiQId: %d\n",
+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING,
+ "DecodeCurrentAccessUnit() failed (%d) in frame: %d uiDId: %d uiQId: %d\n",
iRet, pSh->iFrameNum, iCurrIdD, iCurrIdQ);
HandleReferenceLostL0 (pCtx, pNalCur);
if (pCtx->iErrorConMethod == ERROR_CON_DISABLE) {