diff --git a/codec/encoder/core/src/encoder_ext.cpp b/codec/encoder/core/src/encoder_ext.cpp index 6d13542b..fa449f17 100644 --- a/codec/encoder/core/src/encoder_ext.cpp +++ b/codec/encoder/core/src/encoder_ext.cpp @@ -2086,9 +2086,14 @@ int32_t WelsInitEncoderExt (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pCodingPar return iRet; } - if (pCodingParam->iMultipleThreadIdc > 1) + if (pCodingParam->iMultipleThreadIdc > 1) { iRet = CreateSliceThreads (pCtx); - + if (iRet != 0) { + WelsLog (pLogCtx, WELS_LOG_ERROR, "WelsInitEncoderExt(), CreateSliceThreads failed return %d.", iRet); + FreeMemorySvc (&pCtx); + return iRet; + } + } if (pCodingParam->iEntropyCodingModeFlag) WelsCabacInit (pCtx); WelsRcInitModule (pCtx, pCtx->pSvcParam->iRCMode); diff --git a/codec/encoder/core/src/slice_multi_threading.cpp b/codec/encoder/core/src/slice_multi_threading.cpp index 2335ee0a..d5dce0a3 100644 --- a/codec/encoder/core/src/slice_multi_threading.cpp +++ b/codec/encoder/core/src/slice_multi_threading.cpp @@ -963,8 +963,11 @@ int32_t CreateSliceThreads (sWelsEncCtx* pCtx) { int32_t iIdx = 0; while (iIdx < kiThreadCount) { - WelsThreadCreate (&pCtx->pSliceThreading->pThreadHandles[iIdx], CodingSliceThreadProc, - &pCtx->pSliceThreading->pThreadPEncCtx[iIdx], 0); + if (WelsThreadCreate (&pCtx->pSliceThreading->pThreadHandles[iIdx], CodingSliceThreadProc, + &pCtx->pSliceThreading->pThreadPEncCtx[iIdx], 0)) { + return 1; + } + ++ iIdx; }