History

Multi-thread-fixed:RBC#1712:add pFirstMbIdxInSlice/pCountMbNumInSlice in layer structure

huade committed 9 years ago

Commit 6f347d11 parent 0d84ead4 files · +42 −2Browse files

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

Unified · Split

codec/encoder/core/src/svc_encode_slice.cpp+36−0
@@ -1061,6 +1061,18 @@ int32_t InitSliceInLayer (sWelsEncCtx* pCtx, · 1060 unmodified lines
10611061 return ENC_RETURN_MEMALLOCERR;
10621062 }
10631063
1064+ pDqLayer->pFirstMbIdxOfSlice = (int32_t*)pMa->WelsMallocz (sizeof (int32_t*) * iMaxSliceNum, "pFirstMbIdxOfSlice");
1065+ if (NULL == pDqLayer->pFirstMbIdxOfSlice) {
1066+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "CWelsH264SVCEncoder::InitSliceInLayer() pDqLayer->pFirstMbIdxOfSlice is NULL");
1067+ return ENC_RETURN_MEMALLOCERR;
1068+ }
1069+
1070+ pDqLayer->pCountMbNumInSlice = (int32_t*)pMa->WelsMallocz (sizeof (int32_t*) * iMaxSliceNum, "pCountMbNumInSlice");
1071+ if (NULL == pDqLayer->pCountMbNumInSlice) {
1072+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "CWelsH264SVCEncoder::InitSliceInLayer() pDqLayer->pCountMbNumInSlice is NULL");
1073+ return ENC_RETURN_MEMALLOCERR;
1074+ }
1075+
10641076 InitSliceThreadInfo (pCtx,
10651077 pDqLayer,
10661078 kiDlayerIndex,
@@ -1278,6 +1290,8 @@ int32_t ReallocSliceBuffer (sWelsEncCtx* pCtx) { · 211 unmodified lines
12781290 int32_t iSliceIdx = 0;
12791291 const int32_t kiCurDid = pCtx->uiDependencyId;
12801292
1293+ int32_t* pFirstMbIdxofSlice = NULL;
1294+ int32_t* pCountMbNumInSlice = NULL;
12811295 SSlice* pLastCodedSlice = pCurLayer->sSliceThreadInfo.pSliceInThread[0] + (iMaxSliceNumOld - 1);
12821296 SSliceArgument* pSliceArgument = & pCtx->pSvcParam->sSpatialLayers[kiCurDid].sSliceArgument;
12831297 iRet = CalculateNewSliceNum (pCurLayer,
@@ -1307,6 +1321,28 @@ int32_t ReallocSliceBuffer (sWelsEncCtx* pCtx) { · 23 unmodified lines
13071321 pMA->WelsFree (pCurLayer->ppSliceInLayer, "ppSliceInLayer");
13081322 pCurLayer->ppSliceInLayer = ppSlice;
13091323
1324+ // update for pFirstMbIdxInSlice
1325+ pFirstMbIdxofSlice = (int32_t*)pMA->WelsMallocz (sizeof (int32_t*) * iMaxSliceNumNew, "pFirstMbIdxofSlice");
1326+ if (NULL == pFirstMbIdxofSlice) {
1327+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "CWelsH264SVCEncoder::ReallocSliceBuffer: pFirstMbIdxofSlice is NULL");
1328+ return ENC_RETURN_MEMALLOCERR;
1329+ }
1330+ memset (pFirstMbIdxofSlice, 0, sizeof(int32_t) * iMaxSliceNumNew);
1331+ memcpy (pFirstMbIdxofSlice, pCurLayer->pFirstMbIdxOfSlice, sizeof (int32_t) * iMaxSliceNumOld);
1332+ pMA->WelsFree (pCurLayer->pFirstMbIdxOfSlice, "pFirstMbIdxofSlice");
1333+ pCurLayer->pFirstMbIdxOfSlice = pFirstMbIdxofSlice;
1334+
1335+ // update for pCountMbNumInSlice
1336+ pCountMbNumInSlice = (int32_t*)pMA->WelsMallocz (sizeof (int32_t*) * iMaxSliceNumNew, "pCountMbNumInSlice");
1337+ if (NULL == pCountMbNumInSlice) {
1338+ WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR, "CWelsH264SVCEncoder::ReallocSliceBuffer: pCountMbNumInSlice is NULL");
1339+ return ENC_RETURN_MEMALLOCERR;
1340+ }
1341+ memset (pCountMbNumInSlice, 0, sizeof(int32_t) * iMaxSliceNumNew);
1342+ memcpy (pCountMbNumInSlice, pCurLayer->pCountMbNumInSlice, sizeof (int32_t) * iMaxSliceNumOld);
1343+ pMA->WelsFree (pCurLayer->pCountMbNumInSlice, "pCountMbNumInSlice");
1344+ pCurLayer->pCountMbNumInSlice = pCountMbNumInSlice;
1345+
13101346 for (iSliceIdx = 0; iSliceIdx < iMaxSliceNumNew; iSliceIdx++) {
13111347 pCurLayer->ppSliceInLayer[iSliceIdx] = pCurLayer->sSliceThreadInfo.pSliceInThread[0] + iSliceIdx;
13121348 }

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