ref: da0965c42f0b6754c8bff10b1abe7423eac6fcf5
parent: 513a34069d9039ff14e531b022ae6b47a7fe4cea
parent: 628befe8befb90482c009cb4ea955549e6068640
author: HaiboZhu <haibozhu@cisco.com>
date: Fri Nov 13 15:45:11 EST 2015
Merge pull request #2234 from HaiboZhu/Revert_Simply_Dec_Ctx Revert "Merge pull request #2217 from huili2/simply_dec_ctx"
--- a/codec/decoder/core/inc/decoder.h
+++ b/codec/decoder/core/inc/decoder.h
@@ -55,11 +55,6 @@
int32_t DecoderConfigParam (PWelsDecoderContext pCtx, const SDecodingParam* kpParam);
/*!
- * \brief fill in default values of decoder context
- */
-void WelsDecoderDefaults (PWelsDecoderContext pCtx, SLogContext* pLogCtx);
-
-/*!
*************************************************************************************
* \brief Initialize Wels decoder parameters and memory
*
@@ -73,7 +68,7 @@
* \note N/A
*************************************************************************************
*/
-int32_t WelsInitDecoder (PWelsDecoderContext pCtx, SLogContext* pLogCtx);
+int32_t WelsInitDecoder (PWelsDecoderContext pCtx, const bool bParseOnly, SLogContext* pLogCtx);
/*!
*************************************************************************************
@@ -115,9 +110,9 @@
/*
- * free memory dynamically allocated during decoder
+ * free memory blocks in avc
*/
- void WelsFreeDynamicMemory (PWelsDecoderContext pCtx);
+void WelsFreeMem (PWelsDecoderContext pCtx);
/*
* set colorspace format in decoder
@@ -135,19 +130,7 @@
*/
int32_t SyncPictureResolutionExt (PWelsDecoderContext pCtx, const int32_t kiMbWidth, const int32_t kiMbHeight);
-/*!
- * \brief init decoder predictive function pointers including ASM functions during MB reconstruction
- * \param pCtx Wels decoder context
- * \param uiCpuFlag cpu assembly indication
- */
-void InitPredFunc (PWelsDecoderContext pCtx, uint32_t uiCpuFlag);
-
-/*!
- * \brief init decoder internal function pointers including ASM functions
- * \param pCtx Wels decoder context
- * \param uiCpuFlag cpu assembly indication
- */
-void InitDecFuncs (PWelsDecoderContext pCtx, uint32_t uiCpuFlag);
+void AssignFuncPointerForRec (PWelsDecoderContext pCtx);
void GetVclNalTemporalId (PWelsDecoderContext pCtx); //get the info that whether or not have VCL NAL in current AU,
//and if YES, get the temporal ID
--- a/codec/decoder/core/inc/decoder_context.h
+++ b/codec/decoder/core/inc/decoder_context.h
@@ -376,6 +376,7 @@
ERROR_CON_IDC eErrorConMethod; //
//for Parse only
+ bool bParseOnly;
bool bFramePending;
bool bFrameFinish;
int32_t iNalNum;
--- a/codec/decoder/core/inc/decoder_core.h
+++ b/codec/decoder/core/inc/decoder_core.h
@@ -72,21 +72,21 @@
int32_t CheckBsBuffer (PWelsDecoderContext pCtx, const int32_t kiSrcLen);
/*
- * WelsInitStaticMemory
- * Memory request for introduced data at decoder start
+ * WelsInitMemory
+ * Memory request for introduced data
* Especially for:
* rbsp_au_buffer, cur_dq_layer_ptr and ref_dq_layer_ptr in MB info cache.
* return:
* 0 - success; otherwise returned error_no defined in error_no.h.
*/
-int32_t WelsInitStaticMemory (PWelsDecoderContext pCtx);
+int32_t WelsInitMemory (PWelsDecoderContext pCtx);
/*
- * WelsFreeStaticMemory
- * Free memory introduced in WelsInitStaticMemory at destruction of decoder.
+ * WelsFreeMemory
+ * Free memory introduced in WelsInitMemory at destruction of decoder.
*
*/
-void WelsFreeStaticMemory (PWelsDecoderContext pCtx);
+void WelsFreeMemory (PWelsDecoderContext pCtx);
/*!
* \brief request memory when maximal picture width and height are available
--- a/codec/decoder/core/src/au_parser.cpp
+++ b/codec/decoder/core/src/au_parser.cpp
@@ -317,7 +317,7 @@
iNalSize -= NAL_UNIT_HEADER_EXT_SIZE;
*pConsumedBytes += NAL_UNIT_HEADER_EXT_SIZE;
- if (pCtx->pParam->bParseOnly) {
+ if (pCtx->bParseOnly) {
pCurNal->sNalData.sVclNal.pNalPos = pSavedData->pCurPos;
int32_t iTrailingZeroByte = 0;
while (pSrcNal[iSrcNalLen - iTrailingZeroByte - 1] == 0x0) //remove final trailing 0 bytes
@@ -346,7 +346,7 @@
pSavedData->pCurPos += iActualLen - iOffset;
}
} else {
- if (pCtx->pParam->bParseOnly) {
+ if (pCtx->bParseOnly) {
pCurNal->sNalData.sVclNal.pNalPos = pSavedData->pCurPos;
int32_t iTrailingZeroByte = 0;
while (pSrcNal[iSrcNalLen - iTrailingZeroByte - 1] == 0x0) //remove final trailing 0 bytes
@@ -1113,7 +1113,7 @@
WELS_READ_VERIFY (BsGetOneBit (pBs, &uiCode)); //vui_parameters_present_flag
pSps->bVuiParamPresentFlag = !!uiCode;
- if (pCtx->pParam->bParseOnly) {
+ if (pCtx->bParseOnly) {
if (kSrcNalLen >= SPS_PPS_BS_SIZE - 4) { //sps bs exceeds!
pCtx->iErrorCode |= dsOutOfMemory;
return GENERATE_ERROR_NO (ERR_LEVEL_PARAM_SETS, ERR_INFO_OUT_OF_MEMORY);
@@ -1416,7 +1416,7 @@
memcpy (&pCtx->sPpsBuffer[uiPpsId], pPps, sizeof (SPps));
pCtx->bPpsAvailFlags[uiPpsId] = true;
}
- if (pCtx->pParam->bParseOnly) {
+ if (pCtx->bParseOnly) {
if (kSrcNalLen >= SPS_PPS_BS_SIZE - 4) { //pps bs exceeds
pCtx->iErrorCode |= dsOutOfMemory;
return GENERATE_ERROR_NO (ERR_LEVEL_PARAM_SETS, ERR_INFO_OUT_OF_MEMORY);
--- a/codec/decoder/core/src/decode_slice.cpp
+++ b/codec/decoder/core/src/decode_slice.cpp
@@ -90,7 +90,7 @@
break;
}
- if (!pCtx->pParam->bParseOnly) { //for parse only, actual recon MB unnecessary
+ if (!pCtx->bParseOnly) { //for parse only, actual recon MB unnecessary
if (WelsTargetMbConstruction (pCtx)) {
WelsLog (& (pCtx->sLogCtx), WELS_LOG_WARNING,
"WelsTargetSliceConstruction():::MB(%d, %d) construction error. pCurSlice_type:%d",
@@ -134,7 +134,7 @@
if ((pCurSlice->eSliceType != I_SLICE) && (pCurSlice->eSliceType != P_SLICE))
return 0;
- if (pCtx->pParam->bParseOnly) //for parse only, deblocking should not go on
+ if (pCtx->bParseOnly) //for parse only, deblocking should not go on
return 0;
pDeblockMb = WelsDeblockingMb;
--- a/codec/decoder/core/src/decoder.cpp
+++ b/codec/decoder/core/src/decoder.cpp
@@ -272,13 +272,14 @@
pPicBuf = NULL;
*ppPicBuf = NULL;
}
-
/*
* fill data fields in default for decoder context
*/
-void WelsDecoderDefaults (PWelsDecoderContext pCtx, SLogContext* pLogCtx) {
+void WelsDecoderDefaults (PWelsDecoderContext pCtx, SLogContext* pLogCtx, CMemoryAlign* pMa) {
int32_t iCpuCores = 1;
+ memset (pCtx, 0, sizeof (SWelsDecoderContext)); // fill zero first
pCtx->sLogCtx = *pLogCtx;
+ pCtx->pMemAlign = pMa;
pCtx->pArgDec = NULL;
@@ -441,20 +442,18 @@
}
/*
- * free memory dynamically allocated during decoder
+ * free memory blocks in avc
*/
-void WelsFreeDynamicMemory (PWelsDecoderContext pCtx) {
+void WelsFreeMem (PWelsDecoderContext pCtx) {
int32_t iListIdx = 0;
CMemoryAlign* pMa = pCtx->pMemAlign;
- //free dq layer memory
- UninitialDqLayersContext (pCtx);
-
- //free FMO memory
+ /* TODO: free memory blocks introduced in avc */
ResetFmoList (pCtx);
- //free ref-pic list & picture memory
WelsResetRefPic (pCtx);
+
+ // for sPicBuff
for (iListIdx = LIST_0; iListIdx < LIST_A; ++ iListIdx) {
PPicBuff* pPicBuff = &pCtx->pPicBuff[iListIdx];
if (NULL != pPicBuff && NULL != *pPicBuff) {
@@ -469,8 +468,6 @@
pCtx->iLastImgHeightInPixel = 0;
pCtx->bFreezeOutput = true;
pCtx->bHaveGotMemory = false;
-
- //free CABAC memory
pMa->WelsFree (pCtx->pCabacDecEngine, "pCtx->pCabacDecEngine");
}
@@ -478,15 +475,19 @@
* \brief Open decoder
*/
int32_t WelsOpenDecoder (PWelsDecoderContext pCtx) {
- int iRet = ERR_NONE;
// function pointers
- InitDecFuncs (pCtx, pCtx->uiCpuFlag);
+ //initial MC function pointer--
+ int iRet = ERR_NONE;
+ InitMcFunc (& (pCtx->sMcFunc), pCtx->uiCpuFlag);
+ InitExpandPictureFunc (& (pCtx->sExpandPicFunc), pCtx->uiCpuFlag);
+ AssignFuncPointerForRec (pCtx);
+
// vlc tables
InitVlcTable (&pCtx->sVlcTable);
- // static memory
- iRet = WelsInitStaticMemory (pCtx);
+ // startup memory
+ iRet = WelsInitMemory (pCtx);
if (ERR_NONE != iRet)
return iRet;
@@ -506,10 +507,12 @@
* \brief Close decoder
*/
void WelsCloseDecoder (PWelsDecoderContext pCtx) {
- WelsFreeDynamicMemory (pCtx);
+ WelsFreeMem (pCtx);
- WelsFreeStaticMemory (pCtx);
+ WelsFreeMemory (pCtx);
+ UninitialDqLayersContext (pCtx);
+
#ifdef LONG_TERM_REF
pCtx->bParamSetsLostFlag = false;
#else
@@ -528,7 +531,7 @@
memcpy (pCtx->pParam, kpParam, sizeof (SDecodingParam));
pCtx->eOutputColorFormat = pCtx->pParam->eOutputColorFormat;
- if (!pCtx->pParam->bParseOnly) {
+ if (!pCtx->bParseOnly) {
int32_t iRet = DecoderSetCsp (pCtx, pCtx->pParam->eOutputColorFormat);
if (iRet)
return iRet;
@@ -543,7 +546,7 @@
}
pCtx->eErrorConMethod = pCtx->pParam->eEcActiveIdc;
- if (pCtx->pParam->bParseOnly) //parse only, disable EC method
+ if (pCtx->bParseOnly) //parse only, disable EC method
pCtx->eErrorConMethod = ERROR_CON_DISABLE;
InitErrorCon (pCtx);
@@ -571,11 +574,15 @@
* \note N/A
*************************************************************************************
*/
-int32_t WelsInitDecoder (PWelsDecoderContext pCtx, SLogContext* pLogCtx) {
+int32_t WelsInitDecoder (PWelsDecoderContext pCtx, const bool bParseOnly, SLogContext* pLogCtx) {
if (pCtx == NULL) {
return ERR_INFO_INVALID_PTR;
}
+ // default
+ WelsDecoderDefaults (pCtx, pLogCtx, pCtx->pMemAlign);
+
+ pCtx->bParseOnly = bParseOnly;
// open decoder
return WelsOpenDecoder (pCtx);
}
@@ -652,7 +659,7 @@
pRawData->pCurPos = pRawData->pHead;
}
- if (pCtx->pParam->bParseOnly) {
+ if (pCtx->bParseOnly) {
pSavedData = &pCtx->sSavedData;
if ((kiBsLen + 4) > (pSavedData->pEnd - pSavedData->pCurPos)) {
pSavedData->pCurPos = pSavedData->pHead;
@@ -857,15 +864,7 @@
return iErr;
}
-void InitDecFuncs (PWelsDecoderContext pCtx, uint32_t uiCpuFlag) {
- WelsBlockFuncInit (&pCtx->sBlockFunc, uiCpuFlag);
- InitPredFunc (pCtx, uiCpuFlag);
- InitMcFunc (& (pCtx->sMcFunc), uiCpuFlag);
- InitExpandPictureFunc (& (pCtx->sExpandPicFunc), uiCpuFlag);
- DeblockingInit (&pCtx->sDeblockingFunc, uiCpuFlag);
-}
-
-void InitPredFunc (PWelsDecoderContext pCtx, uint32_t uiCpuFlag) {
+void AssignFuncPointerForRec (PWelsDecoderContext pCtx) {
pCtx->pGetI16x16LumaPredFunc[I16_PRED_V ] = WelsI16x16LumaPredV_c;
pCtx->pGetI16x16LumaPredFunc[I16_PRED_H ] = WelsI16x16LumaPredH_c;
pCtx->pGetI16x16LumaPredFunc[I16_PRED_DC ] = WelsI16x16LumaPredDc_c;
@@ -917,7 +916,7 @@
pCtx->pIdctResAddPredFunc8x8 = IdctResAddPred8x8_c;
#if defined(HAVE_NEON)
- if (uiCpuFlag & WELS_CPU_NEON) {
+ if (pCtx->uiCpuFlag & WELS_CPU_NEON) {
pCtx->pIdctResAddPredFunc = IdctResAddPred_neon;
pCtx->pGetI16x16LumaPredFunc[I16_PRED_DC] = WelsDecoderI16x16LumaPredDc_neon;
@@ -942,7 +941,7 @@
#endif//HAVE_NEON
#if defined(HAVE_NEON_AARCH64)
- if (uiCpuFlag & WELS_CPU_NEON) {
+ if (pCtx->uiCpuFlag & WELS_CPU_NEON) {
pCtx->pIdctResAddPredFunc = IdctResAddPred_AArch64_neon;
pCtx->pGetI16x16LumaPredFunc[I16_PRED_DC] = WelsDecoderI16x16LumaPredDc_AArch64_neon;
@@ -972,7 +971,7 @@
#endif//HAVE_NEON_AARCH64
#if defined(X86_ASM)
- if (uiCpuFlag & WELS_CPU_MMXEXT) {
+ if (pCtx->uiCpuFlag & WELS_CPU_MMXEXT) {
pCtx->pIdctResAddPredFunc = IdctResAddPred_mmx;
///////mmx code opt---
@@ -987,7 +986,7 @@
pCtx->pGetI4x4LumaPredFunc[I4_PRED_DDL] = WelsDecoderI4x4LumaPredDDL_mmx;
pCtx->pGetI4x4LumaPredFunc[I4_PRED_VL ] = WelsDecoderI4x4LumaPredVL_mmx;
}
- if (uiCpuFlag & WELS_CPU_SSE2) {
+ if (pCtx->uiCpuFlag & WELS_CPU_SSE2) {
/////////sse2 code opt---
pCtx->pGetI16x16LumaPredFunc[I16_PRED_DC] = WelsDecoderI16x16LumaPredDc_sse2;
pCtx->pGetI16x16LumaPredFunc[I16_PRED_P] = WelsDecoderI16x16LumaPredPlane_sse2;
@@ -1001,6 +1000,9 @@
pCtx->pGetI4x4LumaPredFunc[I4_PRED_H] = WelsDecoderI4x4LumaPredH_sse2;
}
#endif
+ DeblockingInit (&pCtx->sDeblockingFunc, pCtx->uiCpuFlag);
+
+ WelsBlockFuncInit (&pCtx->sBlockFunc, pCtx->uiCpuFlag);
}
//reset decoder number related statistics info
--- a/codec/decoder/core/src/decoder_core.cpp
+++ b/codec/decoder/core/src/decoder_core.cpp
@@ -72,7 +72,7 @@
}
}
- if (pCtx->pParam->bParseOnly) { //should exit for parse only to prevent access NULL pDstInfo
+ if (pCtx->bParseOnly) { //should exit for parse only to prevent access NULL pDstInfo
PAccessUnit pCurAu = pCtx->pAccessUnitList;
if (dsErrorFree == pCtx->iErrorCode) { //correct decoding, add to data buffer
SParserBsInfo* pParser = pCtx->pParserBsInfo;
@@ -467,7 +467,7 @@
}
pCtx->sRawData.pStartPos = pCtx->sRawData.pCurPos = pCtx->sRawData.pHead;
pCtx->sRawData.pEnd = pCtx->sRawData.pHead + pCtx->iMaxBsBufferSizeInByte;
- if (pCtx->pParam->bParseOnly) {
+ if (pCtx->bParseOnly) {
pCtx->pParserBsInfo = static_cast<SParserBsInfo*> (pMa->WelsMallocz (sizeof (SParserBsInfo), "pCtx->pParserBsInfo"));
if (pCtx->pParserBsInfo == NULL) {
return ERR_INFO_OUT_OF_MEMORY;
@@ -538,7 +538,7 @@
}
/*
- * WelsInitStaticMemory
+ * WelsInitMemory
* Memory request for new introduced data
* Especially for:
* rbsp_au_buffer, cur_dq_layer_ptr and ref_dq_layer_ptr in MB info cache.
@@ -545,7 +545,7 @@
* return:
* 0 - success; otherwise returned error_no defined in error_no.h.
*/
-int32_t WelsInitStaticMemory (PWelsDecoderContext pCtx) {
+int32_t WelsInitMemory (PWelsDecoderContext pCtx) {
if (pCtx == NULL) {
return ERR_INFO_INVALID_PTR;
}
@@ -563,16 +563,22 @@
}
/*
- * WelsFreeStaticMemory
- * Free memory introduced in WelsInitStaticMemory at destruction of decoder.
+ * WelsFreeMemory
+ * Free memory introduced in WelsInitMemory at destruction of decoder.
*
*/
-void WelsFreeStaticMemory (PWelsDecoderContext pCtx) {
+void WelsFreeMemory (PWelsDecoderContext pCtx) {
if (pCtx == NULL)
return;
CMemoryAlign* pMa = pCtx->pMemAlign;
+ if (NULL != pCtx->pParam) {
+ pMa->WelsFree (pCtx->pParam, "pCtx->pParam");
+
+ pCtx->pParam = NULL;
+ }
+
MemFreeNalList (&pCtx->pAccessUnitList, pMa);
if (pCtx->sRawData.pHead) {
@@ -582,7 +588,7 @@
pCtx->sRawData.pEnd = NULL;
pCtx->sRawData.pStartPos = NULL;
pCtx->sRawData.pCurPos = NULL;
- if (pCtx->pParam->bParseOnly) {
+ if (pCtx->bParseOnly) {
if (pCtx->sSavedData.pHead) {
pMa->WelsFree (pCtx->sSavedData.pHead, "pCtx->sSavedData->pHead");
}
@@ -599,12 +605,6 @@
pCtx->pParserBsInfo = NULL;
}
}
-
- if (NULL != pCtx->pParam) {
- pMa->WelsFree (pCtx->pParam, "pCtx->pParam");
-
- pCtx->pParam = NULL;
- }
}
/*
* DecodeNalHeaderExt
@@ -723,9 +723,8 @@
pSliceHead->eSliceType = static_cast <EWelsSliceType> (uiSliceType);
WELS_READ_VERIFY (BsGetUe (pBs, &uiCode)); //pic_parameter_set_id
- WELS_CHECK_SE_UPPER_ERROR (uiCode, (MAX_PPS_COUNT - 1), "iPpsId out of range",
- GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER,
- ERR_INFO_PPS_ID_OVERFLOW));
+ WELS_CHECK_SE_UPPER_ERROR (uiCode, (MAX_PPS_COUNT - 1), "iPpsId out of range", GENERATE_ERROR_NO (ERR_LEVEL_SLICE_HEADER,
+ ERR_INFO_PPS_ID_OVERFLOW));
iPpsId = uiCode;
//add check PPS available here
@@ -1975,7 +1974,7 @@
if (ERR_NONE != iErr) {
ForceResetCurrentAccessUnit (pCtx->pAccessUnitList);
- if (!pCtx->pParam->bParseOnly)
+ if (!pCtx->bParseOnly)
pDstInfo->iBufferStatus = 0;
pCtx->bNewSeqBegin = pCtx->bNewSeqBegin || pCtx->bNextNewSeqBegin;
pCtx->bNextNewSeqBegin = false; // reset it
@@ -2340,7 +2339,7 @@
if (dq_cur->uiLayerDqId == kuiTargetLayerDqId) {
if (!pCtx->bInstantDecFlag) {
- if (!pCtx->pParam->bParseOnly) {
+ if (!pCtx->bParseOnly) {
//Do error concealment here
if ((NeedErrorCon (pCtx)) && (pCtx->eErrorConMethod != ERROR_CON_DISABLE)) {
ImplementErrorCon (pCtx);
@@ -2366,7 +2365,7 @@
return iRet;
}
}
- if (!pCtx->pParam->bParseOnly)
+ if (!pCtx->bParseOnly)
ExpandReferencingPicture (pCtx->pDec->pData, pCtx->pDec->iWidthInPixel, pCtx->pDec->iHeightInPixel,
pCtx->pDec->iLinesize,
pCtx->sExpandPicFunc.pfExpandLumaPicture, pCtx->sExpandPicFunc.pfExpandChromaPicture);
@@ -2422,7 +2421,7 @@
if (pCtx->sLastNalHdrExt.sNalUnitHeader.uiNalRefIdc > 0) {
MarkECFrameAsRef (pCtx);
}
- } else if (pCtx->pParam->bParseOnly) { //clear parse only internal data status
+ } else if (pCtx->bParseOnly) { //clear parse only internal data status
pCtx->pParserBsInfo->iNalNum = 0;
pCtx->bFrameFinish = true; //clear frame pending status here!
} else {
--- a/codec/decoder/core/src/pic_queue.cpp
+++ b/codec/decoder/core/src/pic_queue.cpp
@@ -83,7 +83,7 @@
iLumaSize = iPicWidth * iPicHeight;
iChromaSize = iPicChromaWidth * iPicChromaHeight;
- if (pCtx->pParam->bParseOnly) {
+ if (pCtx->bParseOnly) {
pPic->pBuffer[0] = pPic->pBuffer[1] = pPic->pBuffer[2] = NULL;
pPic->pData[0] = pPic->pData[1] = pPic->pData[2] = NULL;
pPic->iLinesize[0] = iPicWidth;
--- a/codec/decoder/plus/src/welsDecoderExt.cpp
+++ b/codec/decoder/plus/src/welsDecoderExt.cpp
@@ -243,7 +243,6 @@
"CWelsDecoder::init_decoder(), openh264 codec version = %s, ParseOnly = %d",
VERSION_NUMBER, (int32_t)pParam->bParseOnly);
- //reset decoder context
if (m_pDecContext) //free
UninitDecoder();
m_pDecContext = (PWelsDecoderContext)WelsMallocz (sizeof (SWelsDecoderContext), "m_pDecContext");
@@ -253,8 +252,8 @@
m_pDecContext->pMemAlign = new CMemoryAlign (iCacheLineSize);
WELS_VERIFY_RETURN_PROC_IF (1, (NULL == m_pDecContext->pMemAlign), UninitDecoder())
- //fill in default value into context
- WelsDecoderDefaults (m_pDecContext, &m_pWelsTrace->m_sLogCtx);
+ WELS_VERIFY_RETURN_PROC_IF (cmInitParaError, WelsInitDecoder (m_pDecContext, pParam->bParseOnly,
+ &m_pWelsTrace->m_sLogCtx), UninitDecoder())
//check param and update decoder context
m_pDecContext->pParam = (SDecodingParam*) m_pDecContext->pMemAlign->WelsMallocz (sizeof (SDecodingParam),
@@ -263,9 +262,6 @@
int32_t iRet = DecoderConfigParam (m_pDecContext, pParam);
WELS_VERIFY_RETURN_IFNEQ (iRet, cmResultSuccess);
- //init decoder
- WELS_VERIFY_RETURN_PROC_IF (cmInitParaError, WelsInitDecoder (m_pDecContext, &m_pWelsTrace->m_sLogCtx), UninitDecoder())
-
return cmResultSuccess;
}
@@ -295,7 +291,7 @@
return dsInitialOptExpected;
if (eOptID == DECODER_OPTION_DATAFORMAT) { // Set color space of decoding output frame
- if (m_pDecContext->pParam->bParseOnly) {
+ if (m_pDecContext->bParseOnly) {
WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_WARNING,
"CWelsDecoder::SetOption for data format meaningless for parseonly.");
return cmResultSuccess;
@@ -322,7 +318,7 @@
iVal = * ((int*)pOption); // int value for error concealment idc
iVal = WELS_CLIP3 (iVal, (int32_t) ERROR_CON_DISABLE, (int32_t) ERROR_CON_SLICE_MV_COPY_CROSS_IDR_FREEZE_RES_CHANGE);
m_pDecContext->pParam->eEcActiveIdc = m_pDecContext->eErrorConMethod = (ERROR_CON_IDC) iVal;
- if ((m_pDecContext->pParam->bParseOnly) && (m_pDecContext->eErrorConMethod != ERROR_CON_DISABLE)) {
+ if ((m_pDecContext->bParseOnly) && (m_pDecContext->eErrorConMethod != ERROR_CON_DISABLE)) {
WelsLog (&m_pWelsTrace->m_sLogCtx, WELS_LOG_INFO,
"CWelsDecoder::SetOption for ERROR_CON_IDC = %d not allowd for parse only!.", iVal);
return cmInitParaError;
--- a/test/decoder/DecUT_DecExt.cpp
+++ b/test/decoder/DecUT_DecExt.cpp
@@ -26,8 +26,6 @@
}
//Init members
void Init();
- //Init valid members
- void ValidInit();
//Uninit members
void Uninit();
//Mock input data for test
@@ -99,29 +97,6 @@
ASSERT_EQ (eRet, cmResultSuccess);
}
-void DecoderInterfaceTest::ValidInit() {
- memset (&m_sBufferInfo, 0, sizeof (SBufferInfo));
- memset (&m_sDecParam, 0, sizeof (SDecodingParam));
- m_sDecParam.pFileNameRestructed = NULL;
- m_sDecParam.eOutputColorFormat = (EVideoFormatType) 23;
- m_sDecParam.uiCpuLoad = 1;
- m_sDecParam.uiTargetDqLayer = 1;
- m_sDecParam.eEcActiveIdc = (ERROR_CON_IDC) (rand() & 7);
- m_sDecParam.sVideoProperty.size = sizeof (SVideoProperty);
- m_sDecParam.sVideoProperty.eVideoBsType = VIDEO_BITSTREAM_DEFAULT;
-
- m_pData[0] = m_pData[1] = m_pData[2] = NULL;
- m_szBuffer[0] = m_szBuffer[1] = m_szBuffer[2] = 0;
- m_szBuffer[3] = 1;
- m_iBufLength = 4;
- CM_RETURN eRet = (CM_RETURN) m_pDec->Initialize (&m_sDecParam);
- if ((m_sDecParam.eOutputColorFormat != videoFormatI420) &&
- (m_sDecParam.eOutputColorFormat != videoFormatInternal))
- ASSERT_EQ (eRet, cmUnsupportedData);
- else
- ASSERT_EQ (eRet, cmResultSuccess);
-}
-
void DecoderInterfaceTest::Uninit() {
if (m_pDec) {
CM_RETURN eRet = (CM_RETURN) m_pDec->Uninitialize();
@@ -283,7 +258,7 @@
int iTmp, iOut;
CM_RETURN eRet;
- ValidInit();
+ Init();
//invalid input
eRet = (CM_RETURN) m_pDec->SetOption (DECODER_OPTION_END_OF_STREAM, NULL);
@@ -345,7 +320,7 @@
int iTmp, iOut;
CM_RETURN eRet;
- ValidInit();
+ Init();
//Test SetOption
//VclNal never supports SetOption
@@ -454,7 +429,7 @@
SDecoderStatistics sDecStatic;
int32_t iError = 0;
- ValidInit();
+ Init();
// setoption not support,
eRet = (CM_RETURN)m_pDec->SetOption (DECODER_OPTION_GET_STATISTICS, NULL);
EXPECT_EQ (eRet, cmInitParaError);
@@ -477,7 +452,7 @@
Uninit();
//Decoder error bs when the first IDR lost
- ValidInit();
+ Init();
iError = 2;
m_pDec->SetOption (DECODER_OPTION_ERROR_CON_IDC, &iError);
DecoderBs ("res/BA_MW_D_IDR_LOST.264");
@@ -495,7 +470,7 @@
Uninit();
//ecoder error bs when the first P lost
- ValidInit();
+ Init();
iError = 2;
m_pDec->SetOption (DECODER_OPTION_ERROR_CON_IDC, &iError);
@@ -516,7 +491,7 @@
//EC enable
//EC Off UT just correc bitstream
- ValidInit();
+ Init();
iError = 0;
m_pDec->SetOption (DECODER_OPTION_ERROR_CON_IDC, &iError);
DecoderBs ("res/test_vd_1d.264");
--- a/test/decoder/DecUT_ParseSyntax.cpp
+++ b/test/decoder/DecUT_ParseSyntax.cpp
@@ -86,15 +86,12 @@
return cmMallocMemeError;
}
- pCtx->sLogCtx = *pLogCtx;
-
+ WELS_VERIFY_RETURN_PROC_IF (cmInitParaError, WelsInitDecoder (pCtx, pParam->bParseOnly, pLogCtx), UninitDecoder (pCtx));
//check param and update decoder context
pCtx->pParam = (SDecodingParam*) pCtx->pMemAlign->WelsMallocz (sizeof (SDecodingParam), "SDecodingParam");
WELS_VERIFY_RETURN_PROC_IF (cmMallocMemeError, (NULL == pCtx->pParam), UninitDecoder (pCtx));
- int32_t iRet = DecoderConfigParam (pCtx, pParam);
+ int32_t iRet = DecoderConfigParam (pCtx, pCtx->pParam);
WELS_VERIFY_RETURN_IFNEQ (iRet, cmResultSuccess);
-
- WELS_VERIFY_RETURN_PROC_IF (cmInitParaError, WelsInitDecoder (pCtx, pLogCtx), UninitDecoder (pCtx));
return cmResultSuccess;
}