Showing the changes to codec/encoder/core/src/svc_encode_slice.cpp (1 of 4 files). Show all
Unified · Split
| @@ -137,6 +137,44 @@ void WelsSliceHeaderExtInit (sWelsEncCtx* pEncCtx, SDqLayer* pCurLayer, SSlice* · 136 unmodified lines | |||
| 137 | } | 137 | } |
| 138 | } | 138 | } |
| 139 | 139 | ||
| 140 | |||
| 141 | void UpdateMbNeighbor(SDqLayer* pCurDq, SMB* pMb, const int32_t kiMbWidth, uint16_t uiSliceIdc) { | ||
| 142 | uint32_t uiNeighborAvailFlag = 0; | ||
| 143 | const int32_t kiMbXY = pMb->iMbXY; | ||
| 144 | const int32_t kiMbX = pMb->iMbX; | ||
| 145 | const int32_t kiMbY = pMb->iMbY; | ||
| 146 | bool bLeft; | ||
| 147 | bool bTop; | ||
| 148 | bool bLeftTop; | ||
| 149 | bool bRightTop; | ||
| 150 | int32_t iLeftXY, iTopXY, iLeftTopXY, iRightTopXY; | ||
| 151 | |||
| 152 | pMb->uiSliceIdc = uiSliceIdc; | ||
| 153 | iLeftXY = kiMbXY - 1; | ||
| 154 | iTopXY = kiMbXY - kiMbWidth; | ||
| 155 | iLeftTopXY = iTopXY - 1; | ||
| 156 | iRightTopXY = iTopXY + 1; | ||
| 157 | |||
| 158 | bLeft = (kiMbX > 0) && (uiSliceIdc == WelsMbToSliceIdc (pCurDq, iLeftXY)); | ||
| 159 | bTop = (kiMbY > 0) && (uiSliceIdc == WelsMbToSliceIdc (pCurDq, iTopXY)); | ||
| 160 | bLeftTop = (kiMbX > 0) && (kiMbY > 0) && (uiSliceIdc == WelsMbToSliceIdc (pCurDq, iLeftTopXY)); | ||
| 161 | bRightTop = (kiMbX < (kiMbWidth - 1)) && (kiMbY > 0) && (uiSliceIdc == WelsMbToSliceIdc (pCurDq, iRightTopXY)); | ||
| 162 | |||
| 163 | if (bLeft) { | ||
| 164 | uiNeighborAvailFlag |= LEFT_MB_POS; | ||
| 165 | } | ||
| 166 | if (bTop) { | ||
| 167 | uiNeighborAvailFlag |= TOP_MB_POS; | ||
| 168 | } | ||
| 169 | if (bLeftTop) { | ||
| 170 | uiNeighborAvailFlag |= TOPLEFT_MB_POS; | ||
| 171 | } | ||
| 172 | if (bRightTop) { | ||
| 173 | uiNeighborAvailFlag |= TOPRIGHT_MB_POS; | ||
| 174 | } | ||
| 175 | pMb->uiNeighborAvail = (uint8_t)uiNeighborAvailFlag; | ||
| 176 | } | ||
| 177 | |||
| 140 | /* count MB types if enabled FRAME_INFO_OUTPUT*/ | 178 | /* count MB types if enabled FRAME_INFO_OUTPUT*/ |
| 141 | #if defined(MB_TYPES_CHECK) | 179 | #if defined(MB_TYPES_CHECK) |
| 142 | void WelsCountMbType (int32_t (*iMbCount)[18], const EWelsSliceType keSt, const SMB* kpMb) { | 180 | void WelsCountMbType (int32_t (*iMbCount)[18], const EWelsSliceType keSt, const SMB* kpMb) { |
| @@ -772,42 +810,7 @@ void UpdateMbNeighbourInfoForNextSlice (SDqLayer* pCurDq, · 629 unmodified lines | |||
| 772 | SMB* pMb = &pMbList[iIdx]; | 810 | SMB* pMb = &pMbList[iIdx]; |
| 773 | 811 | ||
| 774 | do { | 812 | do { |
| 775 | uint32_t uiNeighborAvailFlag = 0; | 813 | UpdateMbNeighbor(pCurDq, pMb, kiMbWidth, WelsMbToSliceIdc (pCurDq, pMb->iMbXY)); |
| 776 | const int32_t kiMbXY = pMb->iMbXY; | ||
| 777 | const int32_t kiMbX = pMb->iMbX; | ||
| 778 | const int32_t kiMbY = pMb->iMbY; | ||
| 779 | bool bLeft; | ||
| 780 | bool bTop; | ||
| 781 | bool bLeftTop; | ||
| 782 | bool bRightTop; | ||
| 783 | int32_t iLeftXY, iTopXY, iLeftTopXY, iRightTopXY; | ||
| 784 | const uint16_t kuiSliceIdc = WelsMbToSliceIdc (pCurDq, kiMbXY); | ||
| 785 | |||
| 786 | pMb->uiSliceIdc = kuiSliceIdc; | ||
| 787 | iLeftXY = kiMbXY - 1; | ||
| 788 | iTopXY = kiMbXY - kiMbWidth; | ||
| 789 | iLeftTopXY = iTopXY - 1; | ||
| 790 | iRightTopXY = iTopXY + 1; | ||
| 791 | |||
| 792 | bLeft = (kiMbX > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pCurDq, iLeftXY)); | ||
| 793 | bTop = (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pCurDq, iTopXY)); | ||
| 794 | bLeftTop = (kiMbX > 0) && (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pCurDq, iLeftTopXY)); | ||
| 795 | bRightTop = (kiMbX < (kiMbWidth - 1)) && (kiMbY > 0) && (kuiSliceIdc == WelsMbToSliceIdc (pCurDq, iRightTopXY)); | ||
| 796 | |||
| 797 | if (bLeft) { | ||
| 798 | uiNeighborAvailFlag |= LEFT_MB_POS; | ||
| 799 | } | ||
| 800 | if (bTop) { | ||
| 801 | uiNeighborAvailFlag |= TOP_MB_POS; | ||
| 802 | } | ||
| 803 | if (bLeftTop) { | ||
| 804 | uiNeighborAvailFlag |= TOPLEFT_MB_POS; | ||
| 805 | } | ||
| 806 | if (bRightTop) { | ||
| 807 | uiNeighborAvailFlag |= TOPRIGHT_MB_POS; | ||
| 808 | } | ||
| 809 | pMb->uiNeighborAvail = (uint8_t)uiNeighborAvailFlag; | ||
| 810 | |||
| 811 | ++ pMb; | 814 | ++ pMb; |
| 812 | ++ iIdx; | 815 | ++ iIdx; |
| 813 | } while ((iIdx < kiEndMbNeedUpdate) && | 816 | } while ((iIdx < kiEndMbNeedUpdate) && |