| 1031 | } |
| 1032 | |
| 1033 | int32_t InitSliceThreadInfo (sWelsEncCtx* pCtx, |
| 1034 | SDqLayer* pDqLayer, |
| 1035 | const int32_t kiDlayerIndex, |
| 1036 | CMemoryAlign* pMa) { |
| 1037 | int32_t iThreadNum = pCtx->pSvcParam->iMultipleThreadIdc; |
| 1038 | int32_t iMaxSliceNum = 0; |
| 1039 | int32_t iSlcBufferNum = 0; |
| 1040 | int32_t iIdx = 0; |
| 1041 | int32_t iRet = 0; |
| 1042 | |
| 1043 | assert (iThreadNum > 0); |
| 1044 | |
| 1045 | //for fixed slice num case, no need to reallocate, so one slice buffer for all thread |
| 1046 | if (pDqLayer->bThreadSlcBufferFlag) { |
| 1047 | iMaxSliceNum = pDqLayer->iMaxSliceNum / iThreadNum + 1; |
| 1048 | iSlcBufferNum = iThreadNum; |
| 1049 | } else { |
| 1050 | iMaxSliceNum = pDqLayer->iMaxSliceNum; |
| 1051 | iSlcBufferNum = 1; |
| 1052 | } |
| 1053 | |
| 1054 | while (iIdx < iSlcBufferNum) { |
| 1055 | pDqLayer->sSliceBufferInfo[iIdx].iMaxSliceNum = iMaxSliceNum; |
| 1056 | pDqLayer->sSliceBufferInfo[iIdx].iCodedSliceNum = 0; |
| 1057 | pDqLayer->sSliceBufferInfo[iIdx].pSliceBuffer = (SSlice*)pMa->WelsMallocz (sizeof (SSlice) * iMaxSliceNum, |
| 1058 | "pSliceBuffer"); |
| 1059 | if (NULL == pDqLayer->sSliceBufferInfo[iIdx].pSliceBuffer) { |
| 1060 | WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, |
| 1061 | "CWelsH264SVCEncoder::InitSliceThreadInfo: pSliceThreadInfo->pSliceBuffer[iIdx] is NULL"); |
| 1062 | return ENC_RETURN_MEMALLOCERR; |
| 1063 | } |
| 1064 | iRet = InitSliceList (pDqLayer->sSliceBufferInfo[iIdx].pSliceBuffer, |
| 1065 | &pCtx->pOut->sBsWrite, |
| 1066 | iMaxSliceNum, |
| 1067 | pCtx->iSliceBufferSize[kiDlayerIndex], |
| 1068 | pDqLayer->bSliceBsBufferFlag, |
| 1069 | pMa); |
| 1070 | if (ENC_RETURN_SUCCESS != iRet) { |
| 1071 | return iRet; |
| 1072 | } |
| 1073 | iIdx++; |
| 1074 | } |
| 1075 | |
| 1076 | for (; iIdx < MAX_THREADS_NUM; iIdx++) { |
| 1077 | pDqLayer->sSliceBufferInfo[iIdx].iMaxSliceNum = 0; |
| 1078 | pDqLayer->sSliceBufferInfo[iIdx].iCodedSliceNum = 0; |
| 1079 | pDqLayer->sSliceBufferInfo[iIdx].pSliceBuffer = NULL; |
| 1080 | } |
| 1081 | |
| 1082 | return ENC_RETURN_SUCCESS; |
| 1083 | } |
| 1084 | |
| 1085 | int32_t InitSliceInLayer (sWelsEncCtx* pCtx, |
| 1086 | SDqLayer* pDqLayer, |
no test coverage detected