History

Use Int instead of Double in Rate Control and Modify anchor SHA1 value

dongzha committed 12 years ago

Commit f6ce43f1 parent 08377f312 files · +187 −163Browse files

Showing the changes to codec/encoder/core/src/slice_multi_threading.cpp (1 of 12 files). Show all

Unified · Split

codec/encoder/core/src/slice_multi_threading.cpp+12−12
@@ -120,9 +120,9 @@ void UpdateMbListNeighborParallel (SSliceCtx* pSliceCtx, · 119 unmodified lines
120120 }
121121
122122 void CalcSliceComplexRatio (void* pRatio, SSliceCtx* pSliceCtx, uint32_t* pSliceConsume) {
123− float* pRatioList = (float*)pRatio;
124− float fAvI[MAX_SLICES_NUM];
125− float fSumAv = .0f;
123+ int32_t* pRatioList = (int32_t*)pRatio;
124+ int32_t iAvI[MAX_SLICES_NUM];
125+ int32_t iSumAv = 0;
126126 uint32_t* pSliceTime = (uint32_t*)pSliceConsume;
127127 int32_t* pCountMbInSlice = (int32_t*)pSliceCtx->pCountMbNumInSlice;
128128 const int32_t kiSliceCount = pSliceCtx->iSliceNumInFrame;
@@ -131,16 +131,16 @@ void CalcSliceComplexRatio (void* pRatio, SSliceCtx* pSliceCtx, uint32_t* pSlice · 2 unmodified lines
131131 WelsEmms();
132132
133133 while (iSliceIdx < kiSliceCount) {
134− fAvI[iSliceIdx] = 1.0f * pCountMbInSlice[iSliceIdx] / pSliceTime[iSliceIdx];
134+ iAvI[iSliceIdx] = WELS_DIV_ROUND(INT_MULTIPLY * pCountMbInSlice[iSliceIdx], pSliceTime[iSliceIdx]);
135135 MT_TRACE_LOG (NULL, WELS_LOG_DEBUG, "[MT] CalcSliceComplexRatio(), pSliceConsumeTime[%d]= %d us, slice_run= %d\n",
136136 iSliceIdx,
137137 pSliceTime[iSliceIdx], pCountMbInSlice[iSliceIdx]);
138− fSumAv += fAvI[iSliceIdx];
138+ iSumAv += iAvI[iSliceIdx];
139139
140140 ++ iSliceIdx;
141141 }
142142 while (-- iSliceIdx >= 0) {
143− pRatioList[iSliceIdx] = fAvI[iSliceIdx] / fSumAv;
143+ pRatioList[iSliceIdx] = WELS_DIV_ROUND(INT_MULTIPLY * iAvI[iSliceIdx], iSumAv);
144144 }
145145 }
146146
@@ -200,7 +200,7 @@ void DynamicAdjustSlicing (sWelsEncCtx* pCtx, · 53 unmodified lines
200200 const int32_t kiCountNumMb = pSliceCtx->iMbNumInFrame;
201201 int32_t iMinimalMbNum = pSliceCtx->iMbWidth; // in theory we need only 1 SMB, here let it as one SMB row required
202202 int32_t iMaximalMbNum = 0; // dynamically assign later
203− float* pSliceComplexRatio = (float*)pComplexRatio;
203+ int32_t* pSliceComplexRatio = (int32_t*)pComplexRatio;
204204 int32_t iMbNumLeft = kiCountNumMb;
205205 int32_t iRunLen[MAX_THREADS_NUM] = {0};
206206 int32_t iSliceIdx = 0;
@@ -236,11 +236,11 @@ void DynamicAdjustSlicing (sWelsEncCtx* pCtx, · 29 unmodified lines
236236
237237 iSliceIdx = 0;
238238 while (iSliceIdx + 1 < kiCountSliceNum) {
239− int32_t iNumMbAssigning = WELS_ROUND (kiCountNumMb * pSliceComplexRatio[iSliceIdx]);
239+ int32_t iNumMbAssigning = WELS_DIV_ROUND(kiCountNumMb * pSliceComplexRatio[iSliceIdx], INT_MULTIPLY);
240240
241241 // GOM boundary aligned
242242 if (pCtx->pSvcParam->iRCMode != RC_OFF_MODE) {
243− iNumMbAssigning = WELS_ROUND (1.0f * iNumMbAssigning / iNumMbInEachGom) * iNumMbInEachGom;
243+ iNumMbAssigning = iNumMbAssigning / iNumMbInEachGom * iNumMbInEachGom;
244244 }
245245
246246 // make sure one GOM at least in each pSlice for safe
@@ -259,14 +259,14 @@ void DynamicAdjustSlicing (sWelsEncCtx* pCtx, · 12 unmodified lines
259259 iRunLen[iSliceIdx] = iNumMbAssigning;
260260 MT_TRACE_LOG (pCtx, WELS_LOG_DEBUG,
261261 "[MT] DynamicAdjustSlicing(), uiSliceIdx= %d, pSliceComplexRatio= %.2f, slice_run_org= %d, slice_run_adj= %d\n",
262− iSliceIdx, pSliceComplexRatio[iSliceIdx], pSliceCtx->pCountMbNumInSlice[iSliceIdx], iNumMbAssigning);
262+ iSliceIdx, pSliceComplexRatio[iSliceIdx]* 1.0f / INT_MULTIPLY, pSliceCtx->pCountMbNumInSlice[iSliceIdx], iNumMbAssigning);
263263 ++ iSliceIdx;
264264 iMaximalMbNum = iMbNumLeft - (kiCountSliceNum - iSliceIdx - 1) * iMinimalMbNum; // get maximal num_mb in left parts
265265 }
266266 iRunLen[iSliceIdx] = iMbNumLeft;
267267 MT_TRACE_LOG (pCtx, WELS_LOG_DEBUG,
268268 "[MT] DynamicAdjustSlicing(), iSliceIdx= %d, pSliceComplexRatio= %.2f, slice_run_org= %d, slice_run_adj= %d\n",
269− iSliceIdx, pSliceComplexRatio[iSliceIdx], pSliceCtx->pCountMbNumInSlice[iSliceIdx], iMbNumLeft);
269+ iSliceIdx, pSliceComplexRatio[iSliceIdx]* 1.0f / INT_MULTIPLY, pSliceCtx->pCountMbNumInSlice[iSliceIdx], iMbNumLeft);
270270
271271
272272 if (DynamicAdjustSlicePEncCtxAll (pSliceCtx, iRunLen) == 0) {
@@ -329,7 +329,7 @@ int32_t RequestMtResource (sWelsEncCtx** ppCtx, SWelsSvcCodingParam* pCodingPara · 56 unmodified lines
329329 && pPara->iMultipleThreadIdc >= kiSliceNum) {
330330 pSmt->pSliceConsumeTime[iIdx] = (uint32_t*)pMa->WelsMallocz (kiSliceNum * sizeof (uint32_t), "pSliceConsumeTime[]");
331331 WELS_VERIFY_RETURN_PROC_IF (1, (NULL == pSmt->pSliceConsumeTime[iIdx]), FreeMemorySvc (ppCtx))
332− pSmt->pSliceComplexRatio[iIdx] = (float*)pMa->WelsMalloc (kiSliceNum * sizeof (float), "pSliceComplexRatio[]");
332+ pSmt->pSliceComplexRatio[iIdx] = (int32_t*)pMa->WelsMalloc (kiSliceNum * sizeof (int32_t), "pSliceComplexRatio[]");
333333 WELS_VERIFY_RETURN_PROC_IF (1, (NULL == pSmt->pSliceComplexRatio[iIdx]), FreeMemorySvc (ppCtx))
334334 } else {
335335 pSmt->pSliceConsumeTime[iIdx] = NULL;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t