Showing the changes to codec/decoder/core/src/decoder_core.cpp (1 of 11 files). Show all
Unified · Split
| @@ -72,7 +72,7 @@ static inline int32_t DecodeFrameConstruction (PWelsDecoderContext pCtx, uint8_t · 71 unmodified lines | ||
| 72 | 72 | } |
| 73 | 73 | } |
| 74 | 74 | |
| 75 | − if (pCtx->bParseOnly) { //should exit for parse only to prevent access NULL pDstInfo | |
| 75 | + if (pCtx->pParam->bParseOnly) { //should exit for parse only to prevent access NULL pDstInfo | |
| 76 | 76 | PAccessUnit pCurAu = pCtx->pAccessUnitList; |
| 77 | 77 | if (dsErrorFree == pCtx->iErrorCode) { //correct decoding, add to data buffer |
| 78 | 78 | SParserBsInfo* pParser = pCtx->pParserBsInfo; |
| @@ -467,7 +467,7 @@ int32_t InitBsBuffer (PWelsDecoderContext pCtx) { · 388 unmodified lines | ||
| 467 | 467 | } |
| 468 | 468 | pCtx->sRawData.pStartPos = pCtx->sRawData.pCurPos = pCtx->sRawData.pHead; |
| 469 | 469 | pCtx->sRawData.pEnd = pCtx->sRawData.pHead + pCtx->iMaxBsBufferSizeInByte; |
| 470 | − if (pCtx->bParseOnly) { | |
| 470 | + if (pCtx->pParam->bParseOnly) { | |
| 471 | 471 | pCtx->pParserBsInfo = static_cast<SParserBsInfo*> (pMa->WelsMallocz (sizeof (SParserBsInfo), "pCtx->pParserBsInfo")); |
| 472 | 472 | if (pCtx->pParserBsInfo == NULL) { |
| 473 | 473 | return ERR_INFO_OUT_OF_MEMORY; |
| @@ -538,14 +538,14 @@ int32_t CheckBsBuffer (PWelsDecoderContext pCtx, const int32_t kiSrcLen) { · 64 unmodified lines | ||
| 538 | 538 | } |
| 539 | 539 | |
| 540 | 540 | /* |
| 541 | − * WelsInitMemory | |
| 541 | + * WelsInitStaticMemory | |
| 542 | 542 | * Memory request for new introduced data |
| 543 | 543 | * Especially for: |
| 544 | 544 | * rbsp_au_buffer, cur_dq_layer_ptr and ref_dq_layer_ptr in MB info cache. |
| 545 | 545 | * return: |
| 546 | 546 | * 0 - success; otherwise returned error_no defined in error_no.h. |
| 547 | 547 | */ |
| 548 | −int32_t WelsInitMemory (PWelsDecoderContext pCtx) { | |
| 548 | +int32_t WelsInitStaticMemory (PWelsDecoderContext pCtx) { | |
| 549 | 549 | if (pCtx == NULL) { |
| 550 | 550 | return ERR_INFO_INVALID_PTR; |
| 551 | 551 | } |
| @@ -563,22 +563,16 @@ int32_t WelsInitMemory (PWelsDecoderContext pCtx) { · 11 unmodified lines | ||
| 563 | 563 | } |
| 564 | 564 | |
| 565 | 565 | /* |
| 566 | − * WelsFreeMemory | |
| 567 | − * Free memory introduced in WelsInitMemory at destruction of decoder. | |
| 566 | + * WelsFreeStaticMemory | |
| 567 | + * Free memory introduced in WelsInitStaticMemory at destruction of decoder. | |
| 568 | 568 | * |
| 569 | 569 | */ |
| 570 | −void WelsFreeMemory (PWelsDecoderContext pCtx) { | |
| 570 | +void WelsFreeStaticMemory (PWelsDecoderContext pCtx) { | |
| 571 | 571 | if (pCtx == NULL) |
| 572 | 572 | return; |
| 573 | 573 | |
| 574 | 574 | CMemoryAlign* pMa = pCtx->pMemAlign; |
| 575 | 575 | |
| 576 | − if (NULL != pCtx->pParam) { | |
| 577 | − pMa->WelsFree (pCtx->pParam, "pCtx->pParam"); | |
| 578 | − | |
| 579 | − pCtx->pParam = NULL; | |
| 580 | − } | |
| 581 | − | |
| 582 | 576 | MemFreeNalList (&pCtx->pAccessUnitList, pMa); |
| 583 | 577 | |
| 584 | 578 | if (pCtx->sRawData.pHead) { |
| @@ -588,7 +582,7 @@ void WelsFreeMemory (PWelsDecoderContext pCtx) { · 3 unmodified lines | ||
| 588 | 582 | pCtx->sRawData.pEnd = NULL; |
| 589 | 583 | pCtx->sRawData.pStartPos = NULL; |
| 590 | 584 | pCtx->sRawData.pCurPos = NULL; |
| 591 | − if (pCtx->bParseOnly) { | |
| 585 | + if (pCtx->pParam->bParseOnly) { | |
| 592 | 586 | if (pCtx->sSavedData.pHead) { |
| 593 | 587 | pMa->WelsFree (pCtx->sSavedData.pHead, "pCtx->sSavedData->pHead"); |
| 594 | 588 | } |
| @@ -605,6 +599,12 @@ void WelsFreeMemory (PWelsDecoderContext pCtx) { · 10 unmodified lines | ||
| 605 | 599 | pCtx->pParserBsInfo = NULL; |
| 606 | 600 | } |
| 607 | 601 | } |
| 602 | + | |
| 603 | + if (NULL != pCtx->pParam) { | |
| 604 | + pMa->WelsFree (pCtx->pParam, "pCtx->pParam"); | |
| 605 | + | |
| 606 | + pCtx->pParam = NULL; | |
| 607 | + } | |
| 608 | 608 | } |
| 609 | 609 | /* |
| 610 | 610 | * DecodeNalHeaderExt |
| @@ -723,8 +723,9 @@ int32_t ParseSliceHeaderSyntaxs (PWelsDecoderContext pCtx, PBitStringAux pBs, co · 112 unmodified lines | ||
| 723 | 723 | pSliceHead->eSliceType = static_cast <EWelsSliceType> (uiSliceType); |
| 724 | 724 | |
| 725 | 725 | WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //pic_parameter_set_id |
| 726 | − WELS_CHECK_SE_UPPER_ERROR (uiCode, (MAX_PPS_COUNT - 1), "iPpsId out of range", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, | |
| 727 | − ERR_INFO_PPS_ID_OVERFLOW)); | |
| 726 | + WELS_CHECK_SE_UPPER_ERROR (uiCode, (MAX_PPS_COUNT - 1), "iPpsId out of range", | |
| 727 | + GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER, | |
| 728 | + ERR_INFO_PPS_ID_OVERFLOW)); | |
| 728 | 729 | iPpsId = uiCode; |
| 729 | 730 | |
| 730 | 731 | //add check PPS available here |
| @@ -1974,7 +1975,7 @@ int32_t ConstructAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferI · 1243 unmodified lines | ||
| 1974 | 1975 | |
| 1975 | 1976 | if (ERR_NONE != iErr) { |
| 1976 | 1977 | ForceResetCurrentAccessUnit (pCtx->pAccessUnitList); |
| 1977 | − if (!pCtx->bParseOnly) | |
| 1978 | + if (!pCtx->pParam->bParseOnly) | |
| 1978 | 1979 | pDstInfo->iBufferStatus = 0; |
| 1979 | 1980 | pCtx->bNewSeqBegin = pCtx->bNewSeqBegin || pCtx->bNextNewSeqBegin; |
| 1980 | 1981 | pCtx->bNextNewSeqBegin = false; // reset it |
| @@ -2339,7 +2340,7 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 358 unmodified lines | ||
| 2339 | 2340 | |
| 2340 | 2341 | if (dq_cur->uiLayerDqId == kuiTargetLayerDqId) { |
| 2341 | 2342 | if (!pCtx->bInstantDecFlag) { |
| 2342 | − if (!pCtx->bParseOnly) { | |
| 2343 | + if (!pCtx->pParam->bParseOnly) { | |
| 2343 | 2344 | //Do error concealment here |
| 2344 | 2345 | if ((NeedErrorCon (pCtx)) && (pCtx->eErrorConMethod != ERROR_CON_DISABLE)) { |
| 2345 | 2346 | ImplementErrorCon (pCtx); |
| @@ -2365,7 +2366,7 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, SBuf · 19 unmodified lines | ||
| 2365 | 2366 | return iRet; |
| 2366 | 2367 | } |
| 2367 | 2368 | } |
| 2368 | − if (!pCtx->bParseOnly) | |
| 2369 | + if (!pCtx->pParam->bParseOnly) | |
| 2369 | 2370 | ExpandReferencingPicture (pCtx->pDec->pData, pCtx->pDec->iWidthInPixel, pCtx->pDec->iHeightInPixel, |
| 2370 | 2371 | pCtx->pDec->iLinesize, |
| 2371 | 2372 | pCtx->sExpandPicFunc.pfExpandLumaPicture, pCtx->sExpandPicFunc.pfExpandChromaPicture); |
| @@ -2421,7 +2422,7 @@ bool CheckAndFinishLastPic (PWelsDecoderContext pCtx, uint8_t** ppDst, SBufferIn · 49 unmodified lines | ||
| 2421 | 2422 | if (pCtx->sLastNalHdrExt.sNalUnitHeader.uiNalRefIdc > 0) { |
| 2422 | 2423 | MarkECFrameAsRef (pCtx); |
| 2423 | 2424 | } |
| 2424 | − } else if (pCtx->bParseOnly) { //clear parse only internal data status | |
| 2425 | + } else if (pCtx->pParam->bParseOnly) { //clear parse only internal data status | |
| 2425 | 2426 | pCtx->pParserBsInfo->iNalNum = 0; |
| 2426 | 2427 | pCtx->bFrameFinish = true; //clear frame pending status here! |
| 2427 | 2428 | } else { |