History

Multi-thread-fixed:RBC#1721:replace ppSliceInLayer by pSliceInThread

huade committed 9 years ago

Commit 71750df1 parent c62e70d5 files · +58 −41Browse files

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

Unified · Split

codec/encoder/core/src/slice_multi_threading.cpp+27−21
@@ -603,9 +603,9 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 602 unmodified lines
603603 if (pParamD->sSliceArgument.uiSliceMode != SM_SIZELIMITED_SLICE) {
604604 int64_t iSliceStart = 0;
605605 bool bDsaFlag = false;
606− iSliceIdx = pPrivateData->iSliceIndex;
607− pSlice = pCurDq->ppSliceInLayer[iSliceIdx];
608− pSliceBs = &pSlice->sSliceBs;
606+ iSliceIdx = pPrivateData->iSliceIndex;
607+ pSlice = &pCurDq->sSliceThreadInfo.pSliceInThread[iThreadIdx][iSliceIdx];
608+ pSliceBs = &pSlice->sSliceBs;
609609
610610 bDsaFlag = ((pParamD->sSliceArgument.uiSliceMode == SM_FIXEDSLCNUM_SLICE) &&
611611 pCodingParam->iMultipleThreadIdc > 1 &&
@@ -645,7 +645,16 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 33 unmodified lines
645645 iEventIdx);
646646 }
647647
648− iReturn = WelsCodeOneSlice (pEncPEncCtx, pCurSlice, eNalType);
648+ iReturn = SetSliceBoundaryInfo(pEncPEncCtx->pCurDqLayer, pSlice, iSliceIdx);
649+ if (ENC_RETURN_SUCCESS != iReturn) {
650+ uiThrdRet = iReturn;
651+ WELS_THREAD_SIGNAL_AND_BREAK (pEncPEncCtx->pSliceThreading->pSliceCodedEvent,
652+ pEncPEncCtx->pSliceThreading->pSliceCodedMasterEvent,
653+ iEventIdx);
654+ }
655+
656+ assert (iSliceIdx == (int) pSlice->uiSliceIdx);
657+ iReturn = WelsCodeOneSlice (pEncPEncCtx, pSlice, eNalType);
649658 if (ENC_RETURN_SUCCESS != iReturn) {
650659 uiThrdRet = iReturn;
651660 WELS_THREAD_SIGNAL_AND_BREAK (pEncPEncCtx->pSliceThreading->pSliceCodedEvent,
@@ -666,14 +675,13 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 14 unmodified lines
666675 pEncPEncCtx->pFuncList->pfDeblocking.pfDeblockingFilterSlice (pCurDq, pEncPEncCtx->pFuncList, iSliceIdx);
667676
668677 if (bDsaFlag) {
669− pEncPEncCtx->pCurDqLayer->ppSliceInLayer[iSliceIdx]->uiSliceConsumeTime = (uint32_t) (
670− WelsTime() - iSliceStart);
678+ pSlice->uiSliceConsumeTime = (uint32_t) (WelsTime() - iSliceStart);
671679 MT_TRACE_LOG (& (pEncPEncCtx->sLogCtx), WELS_LOG_INFO,
672680 "[MT] CodingSliceThreadProc(), coding_idx %d, uiSliceIdx %d, uiSliceConsumeTime %d, iSliceSize %d, iFirstMbInSlice %d, count_num_mb_in_slice %d",
673681 pEncPEncCtx->iCodingIndex, iSliceIdx,
674− pEncPEncCtx->pCurDqLayer->ppSliceInLayer[iSliceIdx]->uiSliceConsumeTime, iSliceSize,
675− pCurDq->ppSliceInLayer[iSliceIdx]->sSliceHeaderExt.sSliceHeader.iFirstMbInSlice,
676− pCurDq->ppSliceInLayer[iSliceIdx]->iCountMbNumInSlice);
682+ pSlice->uiSliceConsumeTime, iSliceSize,
683+ pSlice->sSliceHeaderExt.sSliceHeader.iFirstMbInSlice,
684+ pSlice->iCountMbNumInSlice);
677685 }
678686
679687 #if defined(SLICE_INFO_OUTPUT)
@@ -701,11 +709,11 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 21 unmodified lines
701709 const int32_t kiEndMbIdxInPartition = pCurDq->pEndMbIdxOfPartition[kiPartitionId];
702710 int32_t iAnyMbLeftInPartition = kiEndMbIdxInPartition - kiFirstMbInPartition + 1;
703711 SSpatialLayerInternal *pParamInternal = &pCodingParam->sDependencyLayers[kiCurDid];
704− iSliceIdx = pPrivateData->iSliceIndex;
705− SSliceHeaderExt* pStartSliceHeaderExt = &pCurDq->ppSliceInLayer[iSliceIdx]->sSliceHeaderExt;
706− pStartSliceHeaderExt->sSliceHeader.iFirstMbInSlice = kiFirstMbInPartition;
707− pCurDq->pNumSliceCodedOfPartition[kiPartitionId] = 1;
708− pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId] = 0;
712+ iSliceIdx = pPrivateData->iSliceIndex;
713+ SSlice* pStartSlice = &pCurDq->sSliceThreadInfo.pSliceInThread[iThreadIdx][iSliceIdx];
714+ pStartSlice->sSliceHeaderExt.sSliceHeader.iFirstMbInSlice = kiFirstMbInPartition;
715+ pCurDq->pNumSliceCodedOfPartition[kiPartitionId] = 1;
716+ pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId] = 0;
709717
710718 while (iAnyMbLeftInPartition > 0) {
711719 if (iSliceIdx >= pCurDq->iMaxSliceNum) {
@@ -720,8 +728,7 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 8 unmodified lines
720728 pEncPEncCtx->pSliceThreading->pSliceCodedMasterEvent,
721729 iEventIdx);
722730 }
723−
724− pSlice = pCurDq->ppSliceInLayer[iSliceIdx];
731+ pSlice = &pCurDq->sSliceThreadInfo.pSliceInThread[iThreadIdx][iSliceIdx];
725732 pSliceBs = &pSlice->sSliceBs;
726733 pSliceBs->uiBsPos = 0;
727734 pSliceBs->iNalIndex = 0;
@@ -741,11 +748,10 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 13 unmodified lines
741748 }
742749 }
743750
744−
745751 WelsLoadNalForSlice (pSliceBs, eNalType, eNalRefIdc);
746− pCurSlice = pEncPEncCtx->pCurDqLayer->ppSliceInLayer[iSliceIdx];
747− assert (iSliceIdx == (int) pCurSlice->uiSliceIdx);
748− iReturn = WelsCodeOneSlice (pEncPEncCtx, pCurSlice, eNalType);
752+
753+ assert (iSliceIdx == (int) pSlice->uiSliceIdx);
754+ iReturn = WelsCodeOneSlice (pEncPEncCtx, pSlice, eNalType);
749755 if (ENC_RETURN_SUCCESS != iReturn) {
750756 uiThrdRet = iReturn;
751757 WELS_THREAD_SIGNAL_AND_BREAK (pEncPEncCtx->pSliceThreading->pSliceCodedEvent,
@@ -783,7 +789,7 @@ WELS_THREAD_ROUTINE_TYPE CodingSliceThreadProc (void* arg) { · 31 unmodified lines
783789 MT_TRACE_LOG (& (pEncPEncCtx->sLogCtx), WELS_LOG_INFO,
784790 "[MT] CodingSliceThreadProc(), coding_idx %d, iPartitionId %d, uiSliceIdx %d, iSliceSize %d, count_mb_slice %d, iEndMbInPartition %d, pCurDq->pLastCodedMbIdxOfPartition[%d] %d\n",
785791 pEncPEncCtx->iCodingIndex, kiPartitionId, iSliceIdx, iSliceSize,
786− pCurDq->ppSliceInLayer[iSliceIdx]->iCountMbNumInSlice,
792+ pSlice->iCountMbNumInSlice,
787793 kiEndMbIdxInPartition, kiPartitionId, pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId]);
788794
789795 iAnyMbLeftInPartition = kiEndMbIdxInPartition - pCurDq->pLastCodedMbIdxOfPartition[kiPartitionId];

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