History

Multi-thread-fixed:RBC#1710:move PartitionMBIdx info from slice thread private to layer data structure and refactoring for its int/update module

Huade Shi (huashi) committed 9 years ago

Commit 0d84ead1 parent 83305d87 files · +73 −83Browse files

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

Unified · Split

codec/encoder/core/src/slice_multi_threading.cpp+10−25
@@ -689,18 +689,16 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 688 unmodified lines
689689 SSliceCtx* pSliceCtx = &pCurDq->sSliceEncCtx;
690690 const int32_t kiPartitionId = iThreadIdx;
691691 const int32_t kiSliceIdxStep = pEncPEncCtx->iActiveThreadsNum;
692− const int32_t kiFirstMbInPartition = pPrivateData->iStartMbIndex; // inclusive
693− const int32_t kiEndMbInPartition = pPrivateData->iEndMbIndex; // exclusive
694− int32_t iAnyMbLeftInPartition = kiEndMbInPartition - kiFirstMbInPartition;
695− SSpatialLayerInternal* pParamInternal = &pCodingParam->sDependencyLayers[kiCurDid];
692+ const int32_t kiFirstMbInPartition = pCurDq->pFirstMbIdxOfPartition[kiPartitionId];
693+ const int32_t kiEndMbIdxInPartition = pCurDq->pEndMbIdxOfPartition[kiPartitionId];
694+ int32_t iAnyMbLeftInPartition = kiEndMbIdxInPartition - kiFirstMbInPartition + 1;
695+ SSpatialLayerInternal *pParamInternal = &pCodingParam->sDependencyLayers[kiCurDid];
696696 iSliceIdx = pPrivateData->iSliceIndex;
697697 SSliceHeaderExt* pStartSliceHeaderExt = &pCurDq->ppSliceInLayer[iSliceIdx]->sSliceHeaderExt;
698698 pStartSliceHeaderExt->sSliceHeader.iFirstMbInSlice = kiFirstMbInPartition;
699− pCurDq->pNumSliceCodedOfPartition[kiPartitionId] =
700− 1; // one pSlice per partition intialized, dynamic slicing inside
701− pCurDq->pLastMbIdxOfPartition[kiPartitionId] = kiEndMbInPartition - 1;
702−
699+ pCurDq->pNumSliceCodedOfPartition[kiPartitionId] = 1;
703700 pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId] = 0;
701+
704702 while (iAnyMbLeftInPartition > 0) {
705703 if (iSliceIdx >= pSliceCtx->iMaxSliceNumConstraint) {
706704 // TODO: need exception handler for not large enough of MAX_SLICES_NUM related memory usage
@@ -777,9 +775,9 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 70 unmodified lines
777775 "[MT] CodingSliceThreadProc(), coding_idx %d, iPartitionId %d, uiSliceIdx %d, iSliceSize %d, count_mb_slice %d, iEndMbInPartition %d, pCurDq->pLastCodedMbIdxOfPartition[%d] %d\n",
778776 pEncPEncCtx->iCodingIndex, kiPartitionId, iSliceIdx, iSliceSize,
779777 pCurDq->ppSliceInLayer[iSliceIdx]->iCountMbNumInSlice,
780− kiEndMbInPartition, kiPartitionId, pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId]);
778+ kiEndMbIdxInPartition, kiPartitionId, pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId]);
781779
782− iAnyMbLeftInPartition = kiEndMbInPartition - (1 + pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId]);
780+ iAnyMbLeftInPartition = kiEndMbIdxInPartition - pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId];
783781 iSliceIdx += kiSliceIdxStep;
784782 }
785783
@@ -838,14 +836,11 @@ int32_t CreateSliceThreads (sWelsEncCtx* pCtx) { · 52 unmodified lines
838836
839837 int32_t FiredSliceThreads (sWelsEncCtx* pCtx, SSliceThreadPrivateData* pPriData, WELS_EVENT* pEventsList,
840838 WELS_EVENT* pMasterEventsList, SFrameBSInfo* pFrameBsInfo,
841− const uint32_t uiNumThreads, SSliceCtx* pSliceCtx, const bool bIsDynamicSlicingMode) {
842− int32_t iEndMbIdx = 0;
839+ const uint32_t uiNumThreads) {
843840 int32_t iIdx = 0;
844841 const int32_t kiEventCnt = uiNumThreads;
845842 int32_t iLayerBsIdx = pCtx->pOut->iLayerBsIndex;
846843 SLayerBSInfo* pLbi = &pFrameBsInfo->sLayerInfo[iLayerBsIdx];
847− SSlice** ppSliceInLayer = pCtx->pCurDqLayer->ppSliceInLayer;
848−
849844
850845 if (pPriData == NULL || pFrameBsInfo == NULL || pLbi == NULL || kiEventCnt <= 0 || pEventsList == NULL) {
851846 WelsLog (& (pCtx->sLogCtx), WELS_LOG_ERROR,
@@ -854,17 +849,6 @@ int32_t FiredSliceThreads (sWelsEncCtx* pCtx, SSliceThreadPrivateData* pPriData, · 2 unmodified lines
854849 return 1;
855850 }
856851
857− ////////////////////////////////////////
858− if (bIsDynamicSlicingMode) {
859− iEndMbIdx = pSliceCtx->iMbNumInFrame;
860− for (iIdx = kiEventCnt - 1; iIdx >= 0; --iIdx) {
861− const int32_t iFirstMbIdx = ppSliceInLayer[iIdx]->sSliceHeaderExt.sSliceHeader.iFirstMbInSlice;
862− pPriData[iIdx].iStartMbIndex = iFirstMbIdx;
863− pPriData[iIdx].iEndMbIndex = iEndMbIdx;
864− iEndMbIdx = iFirstMbIdx;
865− }
866− }
867−
868852 pLbi->pBsBuf = pCtx->pFrameBs + pCtx->iPosBsBuffer;
869853 pLbi->uiLayerType = VIDEO_CODING_LAYER;
870854 pLbi->uiSpatialId = pCtx->uiDependencyId;
@@ -876,6 +860,7 @@ int32_t FiredSliceThreads (sWelsEncCtx* pCtx, SSliceThreadPrivateData* pPriData, · 5 unmodified lines
876860 while (iIdx < kiEventCnt) {
877861 pPriData[iIdx].pFrameBsInfo = pFrameBsInfo;
878862 pPriData[iIdx].iSliceIndex = iIdx;
863+
879864 WelsEventSignal (&pEventsList[iIdx]);
880865 WelsEventSignal (&pMasterEventsList[iIdx]);
881866

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