Showing the changes to codec/encoder/core/src/svc_encode_slice.cpp (1 of 6 files). Show all
Unified · Split
| @@ -483,8 +483,7 @@ void UpdateQpForOverflow (SMB* pCurMb, uint8_t kuiChromaQpIndexOffset) { · 482 unmodified lines | |||
| 483 | //second. lower than highest Dependency Layer, and for every Dependency Layer with one quality layer(single layer) | 483 | //second. lower than highest Dependency Layer, and for every Dependency Layer with one quality layer(single layer) |
| 484 | int32_t WelsISliceMdEnc (sWelsEncCtx* pEncCtx, SSlice* pSlice) { //pMd + encoding | 484 | int32_t WelsISliceMdEnc (sWelsEncCtx* pEncCtx, SSlice* pSlice) { //pMd + encoding |
| 485 | SDqLayer* pCurLayer = pEncCtx->pCurDqLayer; | 485 | SDqLayer* pCurLayer = pEncCtx->pCurDqLayer; |
| 486 | SSliceCtx* pSliceCtx = &pCurLayer->sSliceEncCtx; | 486 | SMbCache* pMbCache = &pSlice->sMbCacheInfo; |
| 487 | SMbCache* pMbCache = &pSlice->sMbCacheInfo; | ||
| 488 | SSliceHeaderExt* pSliceHdExt = &pSlice->sSliceHeaderExt; | 487 | SSliceHeaderExt* pSliceHdExt = &pSlice->sSliceHeaderExt; |
| 489 | SMB* pMbList = pCurLayer->sMbDataP; | 488 | SMB* pMbList = pCurLayer->sMbDataP; |
| 490 | SMB* pCurMb = NULL; | 489 | SMB* pCurMb = NULL; |
| @@ -533,7 +532,7 @@ TRY_REENCODING: · 42 unmodified lines | |||
| 533 | pEncCtx->pFuncList->pfRc.pfWelsRcMbInfoUpdate (pEncCtx, pCurMb, sMd.iCostLuma, pSlice); | 532 | pEncCtx->pFuncList->pfRc.pfWelsRcMbInfoUpdate (pEncCtx, pCurMb, sMd.iCostLuma, pSlice); |
| 534 | 533 | ||
| 535 | ++iNumMbCoded; | 534 | ++iNumMbCoded; |
| 536 | iNextMbIdx = WelsGetNextMbOfSlice (pSliceCtx, iCurMbIdx); | 535 | iNextMbIdx = WelsGetNextMbOfSlice (pCurLayer, iCurMbIdx); |
| 537 | if (iNextMbIdx == -1 || iNextMbIdx >= kiTotalNumMb || iNumMbCoded >= kiTotalNumMb) { | 536 | if (iNextMbIdx == -1 || iNextMbIdx >= kiTotalNumMb || iNumMbCoded >= kiTotalNumMb) { |
| 538 | break; | 537 | break; |
| 539 | } | 538 | } |
| @@ -615,7 +614,7 @@ TRY_REENCODING: · 75 unmodified lines | |||
| 615 | 614 | ||
| 616 | ++iNumMbCoded; | 615 | ++iNumMbCoded; |
| 617 | 616 | ||
| 618 | iNextMbIdx = WelsGetNextMbOfSlice (pSliceCtx, iCurMbIdx); | 617 | iNextMbIdx = WelsGetNextMbOfSlice (pCurLayer, iCurMbIdx); |
| 619 | //whether all of MB in current pSlice encoded or not | 618 | //whether all of MB in current pSlice encoded or not |
| 620 | if (iNextMbIdx == -1 || iNextMbIdx >= kiTotalNumMb || iNumMbCoded >= kiTotalNumMb) { | 619 | if (iNextMbIdx == -1 || iNextMbIdx >= kiTotalNumMb || iNumMbCoded >= kiTotalNumMb) { |
| 621 | pSliceCtx->pCountMbNumInSlice[kiSliceIdx] = iCurMbIdx - pCurLayer->pLastCodedMbIdxOfPartition[kiPartitionId]; | 620 | pSliceCtx->pCountMbNumInSlice[kiSliceIdx] = iCurMbIdx - pCurLayer->pLastCodedMbIdxOfPartition[kiPartitionId]; |
| @@ -759,10 +758,11 @@ int32_t WelsCodeOneSlice (sWelsEncCtx* pEncCtx, const int32_t kiSliceIdx, const · 137 unmodified lines | |||
| 759 | } | 758 | } |
| 760 | 759 | ||
| 761 | //pFunc: UpdateMbNeighbourInfoForNextSlice() | 760 | //pFunc: UpdateMbNeighbourInfoForNextSlice() |
| 762 | void UpdateMbNeighbourInfoForNextSlice (SSliceCtx* pSliceCtx, | 761 | void UpdateMbNeighbourInfoForNextSlice (SDqLayer* pCurDq, |
| 763 | SMB* pMbList, | 762 | SMB* pMbList, |
| 764 | const int32_t kiFirstMbIdxOfNextSlice, | 763 | const int32_t kiFirstMbIdxOfNextSlice, |
| 765 | const int32_t kiLastMbIdxInPartition) { | 764 | const int32_t kiLastMbIdxInPartition) { |
| 765 | SSliceCtx* pSliceCtx = &pCurDq->sSliceEncCtx; | ||
| 766 | const int32_t kiMbWidth = pSliceCtx->iMbWidth; | 766 | const int32_t kiMbWidth = pSliceCtx->iMbWidth; |
| 767 | int32_t iIdx = kiFirstMbIdxOfNextSlice; | 767 | int32_t iIdx = kiFirstMbIdxOfNextSlice; |
| 768 | int32_t iNextSliceFirstMbIdxRowStart = ((kiFirstMbIdxOfNextSlice % kiMbWidth) ? 1 : 0); | 768 | int32_t iNextSliceFirstMbIdxRowStart = ((kiFirstMbIdxOfNextSlice % kiMbWidth) ? 1 : 0); |
| @@ -781,7 +781,7 @@ void UpdateMbNeighbourInfoForNextSlice (SSliceCtx* pSliceCtx, · 12 unmodified lines | |||
| 781 | bool bLeftTop; | 781 | bool bLeftTop; |
| 782 | bool bRightTop; | 782 | bool bRightTop; |
| 783 | int32_t iLeftXY, iTopXY, iLeftTopXY, iRightTopXY; | 783 | int32_t iLeftXY, iTopXY, iLeftTopXY, iRightTopXY; |
| 784 | const uint16_t kuiSliceIdc = WelsMbToSliceIdc (pSliceCtx, kiMbXY); | 784 | const uint16_t kuiSliceIdc = WelsMbToSliceIdc (pCurDq, kiMbXY); |
| 785 | 785 | ||
| 786 | pMb->uiSliceIdc = kuiSliceIdc; | 786 | pMb->uiSliceIdc = kuiSliceIdc; |
| 787 | iLeftXY = kiMbXY - 1; | 787 | iLeftXY = kiMbXY - 1; |
| @@ -789,10 +789,10 @@ void UpdateMbNeighbourInfoForNextSlice (SSliceCtx* pSliceCtx, · 1 unmodified line | |||
| 789 | iLeftTopXY = iTopXY - 1; | 789 | iLeftTopXY = iTopXY - 1; |
| 790 | iRightTopXY = iTopXY + 1; | 790 | iRightTopXY = iTopXY + 1; |
| 791 | 791 | ||
| 792 | bLeft = (kiMbX > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pSliceCtx, iLeftXY)); | 792 | bLeft = (kiMbX > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pCurDq, iLeftXY)); |
| 793 | bTop = (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pSliceCtx, iTopXY)); | 793 | bTop = (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pCurDq, iTopXY)); |
| 794 | bLeftTop = (kiMbX > 0) && (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pSliceCtx, iLeftTopXY)); | 794 | bLeftTop = (kiMbX > 0) && (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pCurDq, iLeftTopXY)); |
| 795 | bRightTop = (kiMbX < (kiMbWidth - 1)) && (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pSliceCtx, iRightTopXY)); | 795 | bRightTop = (kiMbX < (kiMbWidth - 1)) && (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pCurDq, iRightTopXY)); |
| 796 | 796 | ||
| 797 | if (bLeft) { | 797 | if (bLeft) { |
| 798 | uiNeighborAvailFlag |= LEFT_MB_POS; | 798 | uiNeighborAvailFlag |= LEFT_MB_POS; |
| @@ -848,7 +848,7 @@ void AddSliceBoundary (sWelsEncCtx* pEncCtx, SSlice* pCurSlice, SSliceCtx* pSlic · 49 unmodified lines | |||
| 848 | (kiLastMbIdxInPartition - iFirstMbIdxOfNextSlice + 1), sizeof (uint16_t)); | 848 | (kiLastMbIdxInPartition - iFirstMbIdxOfNextSlice + 1), sizeof (uint16_t)); |
| 849 | 849 | ||
| 850 | //DYNAMIC_SLICING_ONE_THREAD: update pMbList slice_neighbor_info | 850 | //DYNAMIC_SLICING_ONE_THREAD: update pMbList slice_neighbor_info |
| 851 | UpdateMbNeighbourInfoForNextSlice (pSliceCtx, pMbList, iFirstMbIdxOfNextSlice, kiLastMbIdxInPartition); | 851 | UpdateMbNeighbourInfoForNextSlice (pCurLayer, pMbList, iFirstMbIdxOfNextSlice, kiLastMbIdxInPartition); |
| 852 | } | 852 | } |
| 853 | 853 | ||
| 854 | bool DynSlcJudgeSliceBoundaryStepBack (void* pCtx, void* pSlice, SSliceCtx* pSliceCtx, SMB* pCurMb, | 854 | bool DynSlcJudgeSliceBoundaryStepBack (void* pCtx, void* pSlice, SSliceCtx* pSliceCtx, SMB* pCurMb, |
| @@ -942,7 +942,6 @@ int32_t WelsMdInterMbLoop (sWelsEncCtx* pEncCtx, SSlice* pSlice, void* pWelsMd, · 87 unmodified lines | |||
| 942 | SWelsMD* pMd = (SWelsMD*)pWelsMd; | 942 | SWelsMD* pMd = (SWelsMD*)pWelsMd; |
| 943 | SBitStringAux* pBs = pSlice->pSliceBsa; | 943 | SBitStringAux* pBs = pSlice->pSliceBsa; |
| 944 | SDqLayer* pCurLayer = pEncCtx->pCurDqLayer; | 944 | SDqLayer* pCurLayer = pEncCtx->pCurDqLayer; |
| 945 | SSliceCtx* pSliceCtx = &pCurLayer->sSliceEncCtx; | ||
| 946 | SMbCache* pMbCache = &pSlice->sMbCacheInfo; | 945 | SMbCache* pMbCache = &pSlice->sMbCacheInfo; |
| 947 | SMB* pMbList = pCurLayer->sMbDataP; | 946 | SMB* pMbList = pCurLayer->sMbDataP; |
| 948 | SMB* pCurMb = NULL; | 947 | SMB* pCurMb = NULL; |
| @@ -1013,7 +1012,7 @@ TRY_REENCODING: · 64 unmodified lines | |||
| 1013 | 1012 | ||
| 1014 | /*judge if all pMb in cur pSlice has been encoded*/ | 1013 | /*judge if all pMb in cur pSlice has been encoded*/ |
| 1015 | ++ iNumMbCoded; | 1014 | ++ iNumMbCoded; |
| 1016 | iNextMbIdx = WelsGetNextMbOfSlice (pSliceCtx, iCurMbIdx); | 1015 | iNextMbIdx = WelsGetNextMbOfSlice (pCurLayer, iCurMbIdx); |
| 1017 | //whether all of MB in current pSlice encoded or not | 1016 | //whether all of MB in current pSlice encoded or not |
| 1018 | if (iNextMbIdx == -1 || iNextMbIdx >= kiTotalNumMb || iNumMbCoded >= kiTotalNumMb) { | 1017 | if (iNextMbIdx == -1 || iNextMbIdx >= kiTotalNumMb || iNumMbCoded >= kiTotalNumMb) { |
| 1019 | break; | 1018 | break; |
| @@ -1130,7 +1129,7 @@ TRY_REENCODING: · 110 unmodified lines | |||
| 1130 | 1129 | ||
| 1131 | /*judge if all pMb in cur pSlice has been encoded*/ | 1130 | /*judge if all pMb in cur pSlice has been encoded*/ |
| 1132 | ++ iNumMbCoded; | 1131 | ++ iNumMbCoded; |
| 1133 | iNextMbIdx = WelsGetNextMbOfSlice (pSliceCtx, iCurMbIdx); | 1132 | iNextMbIdx = WelsGetNextMbOfSlice (pCurLayer, iCurMbIdx); |
| 1134 | //whether all of MB in current pSlice encoded or not | 1133 | //whether all of MB in current pSlice encoded or not |
| 1135 | if (iNextMbIdx == -1 || iNextMbIdx >= kiTotalNumMb || iNumMbCoded >= kiTotalNumMb) { | 1134 | if (iNextMbIdx == -1 || iNextMbIdx >= kiTotalNumMb || iNumMbCoded >= kiTotalNumMb) { |
| 1136 | pCurLayer->pLastCodedMbIdxOfPartition[kiPartitionId] = | 1135 | pCurLayer->pLastCodedMbIdxOfPartition[kiPartitionId] = |