Showing the changes to codec/encoder/core/src/slice_multi_threading.cpp (1 of 10 files). Show all
Unified · Split
| @@ -361,7 +361,8 @@ int32_t RequestMtResource (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pCodingPara · 360 unmodified lines | ||
| 361 | 361 | memset (&pSmt->bThreadBsBufferUsage, 0, MAX_THREADS_NUM * sizeof (bool)); |
| 362 | 362 | iReturn = WelsMutexInit (&pSmt->mutexThreadBsBufferUsage); |
| 363 | 363 | WELS_VERIFY_RETURN_PROC_IF (1, (WELS_THREAD_ERROR_OK != iReturn), FreeMemorySvc (ppCtx)) |
| 364 | − | |
| 364 | + iReturn = WelsMutexInit (&pSmt->mutexEvent); | |
| 365 | + WELS_VERIFY_RETURN_PROC_IF (1, (WELS_THREAD_ERROR_OK != iReturn), FreeMemorySvc (ppCtx)); | |
| 365 | 366 | iReturn = WelsMutexInit (& (*ppCtx)->mutexEncoderError); |
| 366 | 367 | WELS_VERIFY_RETURN_PROC_IF (1, (WELS_THREAD_ERROR_OK != iReturn), FreeMemorySvc (ppCtx)) |
| 367 | 368 | |
| @@ -411,7 +412,7 @@ void ReleaseMtResource (sWelsEncCtx** ppCtx) { · 43 unmodified lines | ||
| 411 | 412 | WelsMutexDestroy (&pSmt->mutexSliceNumUpdate); |
| 412 | 413 | WelsMutexDestroy (&pSmt->mutexThreadBsBufferUsage); |
| 413 | 414 | WelsMutexDestroy (& ((*ppCtx)->mutexEncoderError)); |
| 414 | − | |
| 415 | + WelsMutexDestroy (&pSmt->mutexEvent); | |
| 415 | 416 | if (pSmt->pThreadPEncCtx != NULL) { |
| 416 | 417 | pMa->WelsFree (pSmt->pThreadPEncCtx, "pThreadPEncCtx"); |
| 417 | 418 | pSmt->pThreadPEncCtx = NULL; |
| @@ -585,7 +586,7 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 167 unmodified lines | ||
| 585 | 586 | pEventsList[0], pEventsList[1], pEventsList[1], (void*)pEncPEncCtx); |
| 586 | 587 | iWaitRet = WelsMultipleEventsWaitSingleBlocking (iEventCount, |
| 587 | 588 | &pEventsList[0], |
| 588 | − &pEncPEncCtx->pSliceThreading->pThreadMasterEvent[iEventIdx]); // blocking until at least one event is signalled | |
| 589 | + &pEncPEncCtx->pSliceThreading->pThreadMasterEvent[iEventIdx],&pEncPEncCtx->pSliceThreading->mutexEvent); // blocking until at least one event is signalled | |
| 589 | 590 | if (WELS_THREAD_ERROR_WAIT_OBJECT_0 == iWaitRet) { // start pSlice coding signal waited |
| 590 | 591 | //int iLayerIndex = pEncPEncCtx->pOut->iLayerBsIndex; |
| 591 | 592 | //SFrameBSInfo* pFrameBsInfo = pPrivateData->pFrameBsInfo; |
| @@ -877,10 +878,8 @@ int32_t FiredSliceThreads (sWelsEncCtx* pCtx, SSliceThreadPrivateData* pPriData, · 285 unmodified lines | ||
| 877 | 878 | pPriData[iIdx].pFrameBsInfo = pFrameBsInfo; |
| 878 | 879 | pPriData[iIdx].iSliceIndex = iIdx; |
| 879 | 880 | SetOneSliceBsBufferUnderMultithread (pCtx, iIdx, iIdx); |
| 880 | − if (pEventsList[iIdx]) | |
| 881 | − WelsEventSignal (&pEventsList[iIdx]); | |
| 882 | − if (pMasterEventsList[iIdx]) | |
| 883 | − WelsEventSignal (&pMasterEventsList[iIdx]); | |
| 881 | + WelsEventSignal (&pEventsList[iIdx]); | |
| 882 | + WelsEventSignal (&pMasterEventsList[iIdx]); | |
| 884 | 883 | ++ iIdx; |
| 885 | 884 | } |
| 886 | 885 | |