History

fix bNewSeqBegin logic

Licai Guo committed 12 years ago

Commit bada2d31 parent f00d3ac5 files · +11 −4Browse files

Showing the changes to codec/decoder (5 of 5 files). Show all

Unified · Split

5 files
  1. codec/decoder/core/inc/au_parser.h +1 −1
  2. codec/decoder/core/inc/decoder_context.h +1 −0
  3. codec/decoder/core/src/au_parser.cpp +2 −1
  4. codec/decoder/core/src/decoder.cpp +1 −0
  5. codec/decoder/core/src/decoder_core.cpp +6 −2
codec/decoder/core/inc/au_parser.h+1−1
@@ -92,7 +92,7 @@ int32_t ParseRefBasePicMarking (PBitStringAux pBs, PRefBasePicMarking pRefBasePi · 91 unmodified lines
9292
9393 int32_t ParsePrefixNalUnit (PWelsDecoderContext pCtx, PBitStringAux pBs);
9494
95−bool CheckAccessUnitBoundary (const PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const PNalUnit kpLastNal, const PSps kpSps);
95+bool CheckAccessUnitBoundary (PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const PNalUnit kpLastNal, const PSps kpSps);
9696 bool CheckAccessUnitBoundaryExt (PNalUnitHeaderExt pLastNalHdrExt, PNalUnitHeaderExt pCurNalHeaderExt,
9797 PSliceHeader pLastSliceHeader, PSliceHeader pCurSliceHeader);
9898 /*!
codec/decoder/core/inc/decoder_context.h+1−0
@@ -286,6 +286,7 @@ typedef struct TagWelsDecoderContext { · 285 unmodified lines
286286 uint16_t uiCurIdrPicId;
287287 #endif
288288 bool bNewSeqBegin;
289+ bool bNextNewSeqBegin;
289290 int iOverwriteFlags;
290291 int32_t iErrorConMethod; //
291292 PPicture pPreviousDecodedPictureInDpb; //pointer to previously decoded picture in DPB for error concealment
codec/decoder/core/src/au_parser.cpp+2−1
@@ -392,7 +392,7 @@ bool CheckAccessUnitBoundaryExt (PNalUnitHeaderExt pLastNalHdrExt, PNalUnitHeade · 391 unmodified lines
392392 }
393393
394394
395−bool CheckAccessUnitBoundary (const PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const PNalUnit kpLastNal, const PSps kpSps) {
395+bool CheckAccessUnitBoundary (PWelsDecoderContext pCtx, const PNalUnit kpCurNal, const PNalUnit kpLastNal, const PSps kpSps) {
396396 const PNalUnitHeaderExt kpLastNalHeaderExt = &kpLastNal->sNalHeaderExt;
397397 const PNalUnitHeaderExt kpCurNalHeaderExt = &kpCurNal->sNalHeaderExt;
398398 const SSliceHeader* kpLastSliceHeader = &kpLastNal->sNalData.sVclNal.sSliceHeaderExt.sSliceHeader;
@@ -405,6 +405,7 @@ bool CheckAccessUnitBoundary (const PWelsDecoderContext pCtx, const PNalUnit kpC · 6 unmodified lines
405405 if (kpLastSliceHeader->iFrameNum != kpCurSliceHeader->iFrameNum)
406406 return true;
407407 if (pCtx->pActiveLayerSps[kpCurNalHeaderExt->uiDependencyId] != NULL && pCtx->pActiveLayerSps[kpCurNalHeaderExt->uiDependencyId] != kpSps) {
408+ pCtx->bNextNewSeqBegin = true;
408409 return true; // the active sps changed, new sequence begins, so the current au is ready
409410 }
410411 // Subclause 7.4.1.2.5
codec/decoder/core/src/decoder.cpp+1−0
@@ -295,6 +295,7 @@ void WelsOpenDecoder (PWelsDecoderContext pCtx) { · 294 unmodified lines
295295 #else
296296 pCtx->bReferenceLostAtT0Flag = true; // should be true to waiting IDR at incoming AU bits following, 6/4/2010
297297 #endif //LONG_TERM_REF
298+ pCtx->bNewSeqBegin = true;
298299 }
299300
300301 /*!
codec/decoder/core/src/decoder_core.cpp+6−2
@@ -1534,7 +1534,6 @@ static bool CheckNewSeqBeginAndUpdateActiveLayerSps(PWelsDecoderContext pCtx) { · 1533 unmodified lines
15341534 static void WriteBackActiveParameters(PWelsDecoderContext pCtx) {
15351535 if (pCtx->iOverwriteFlags & OVERWRITE_PPS) {
15361536 memcpy(&pCtx->sPpsBuffer[pCtx->sPpsBuffer[MAX_PPS_COUNT].iPpsId], &pCtx->sPpsBuffer[MAX_PPS_COUNT], sizeof(SPps));
1537− pCtx->bNewSeqBegin = true;
15381537 }
15391538 if (pCtx->iOverwriteFlags & OVERWRITE_SPS) {
15401539 memcpy(&pCtx->sSpsBuffer[pCtx->sSpsBuffer[MAX_SPS_COUNT].iSpsId], &pCtx->sSpsBuffer[MAX_SPS_COUNT], sizeof(SSps));
@@ -1542,6 +1541,7 @@ static void WriteBackActiveParameters(PWelsDecoderContext pCtx) { · 1 unmodified line
15421541 }
15431542 if (pCtx->iOverwriteFlags & OVERWRITE_SUBSETSPS) {
15441543 memcpy(&pCtx->sSubsetSpsBuffer[pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT].sSps.iSpsId], &pCtx->sSubsetSpsBuffer[MAX_SPS_COUNT], sizeof(SSubsetSps));
1544+ pCtx->bNewSeqBegin = true;
15451545 }
15461546 pCtx->iOverwriteFlags = OVERWRITE_NONE;
15471547 }
@@ -1567,7 +1567,7 @@ int32_t ConstructAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferI · 19 unmodified lines
15671567 pCtx->bAuReadyFlag = false;
15681568 pCtx->bLastHasMmco5 = false;
15691569 bool bTmpNewSeqBegin = CheckNewSeqBeginAndUpdateActiveLayerSps(pCtx);
1570− pCtx->bNewSeqBegin = pCtx->bNewSeqBegin && bTmpNewSeqBegin;
1570+ pCtx->bNewSeqBegin = pCtx->bNewSeqBegin || bTmpNewSeqBegin;
15711571 iErr = WelsDecodeAccessUnitStart (pCtx);
15721572 GetVclNalTemporalId (pCtx);
15731573
@@ -1599,6 +1599,10 @@ int32_t ConstructAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferI · 25 unmodified lines
15991599 WelsDecodeAccessUnitEnd (pCtx);
16001600 pCtx->bNewSeqBegin = false;
16011601 WriteBackActiveParameters(pCtx);
1602+ pCtx->bNewSeqBegin = pCtx->bNewSeqBegin || pCtx->bNextNewSeqBegin;
1603+ pCtx->bNextNewSeqBegin = false; // reset it
1604+ if (pCtx->bNewSeqBegin)
1605+ ResetActiveSPSForEachLayer(pCtx);
16021606 if (ERR_NONE != iErr) {
16031607 WelsLog (pCtx, WELS_LOG_INFO, "returned error from decoding:[0x%x]\n", iErr);
16041608 return iErr;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t