Showing the changes to codec/decoder/core/src/decode_slice.cpp (1 of 1 file). Show all
Unified · Split
| @@ -440,7 +440,8 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 439 unmodified lines | ||
| 440 | 440 | |
| 441 | 441 | int32_t iMbX = pCurLayer->iMbX; |
| 442 | 442 | int32_t iMbY = pCurLayer->iMbY; |
| 443 | − int32_t iMbXy = pCurLayer->iMbXyIndex; | |
| 443 | + const int32_t iMbXy = pCurLayer->iMbXyIndex; | |
| 444 | + int8_t *pNzc = pCurLayer->pNzc[iMbXy]; | |
| 444 | 445 | int32_t i; |
| 445 | 446 | uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0; |
| 446 | 447 | uint32_t uiCode; |
| @@ -505,7 +506,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 58 unmodified lines | ||
| 505 | 506 | //step 3: update QP and pNonZeroCount |
| 506 | 507 | pCurLayer->pLumaQp[iMbXy] = 0; |
| 507 | 508 | pCurLayer->pChromaQp[iMbXy] = 0; |
| 508 | − memset (pCurLayer->pNzc[iMbXy], 16, sizeof (pCurLayer->pNzc[iMbXy])); //Rec. 9.2.1 for PCM, nzc=16 | |
| 509 | + memset (pNzc, 16, sizeof (pCurLayer->pNzc[iMbXy])); //Rec. 9.2.1 for PCM, nzc=16 | |
| 509 | 510 | return 0; |
| 510 | 511 | } else if (0 == uiMbType) { //reference to JM |
| 511 | 512 | ENFORCE_STACK_ALIGN_1D (int8_t, pIntraPredMode, 48, 16); |
| @@ -540,12 +541,12 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 28 unmodified lines | ||
| 540 | 541 | } |
| 541 | 542 | |
| 542 | 543 | memset (pCurLayer->pScaledTCoeff[iMbXy], 0, 384 * sizeof (pCurLayer->pScaledTCoeff[iMbXy][0])); |
| 543 | − ST32A4 (&pCurLayer->pNzc[iMbXy][0], 0); | |
| 544 | − ST32A4 (&pCurLayer->pNzc[iMbXy][4], 0); | |
| 545 | − ST32A4 (&pCurLayer->pNzc[iMbXy][8], 0); | |
| 546 | − ST32A4 (&pCurLayer->pNzc[iMbXy][12], 0); | |
| 547 | − ST32A4 (&pCurLayer->pNzc[iMbXy][16], 0); | |
| 548 | − ST32A4 (&pCurLayer->pNzc[iMbXy][20], 0); | |
| 544 | + ST32A4 (&pNzc[0], 0); | |
| 545 | + ST32A4 (&pNzc[4], 0); | |
| 546 | + ST32A4 (&pNzc[8], 0); | |
| 547 | + ST32A4 (&pNzc[12], 0); | |
| 548 | + ST32A4 (&pNzc[16], 0); | |
| 549 | + ST32A4 (&pNzc[20], 0); | |
| 549 | 550 | |
| 550 | 551 | if (pCurLayer->pCbp[iMbXy] == 0 && IS_INTRA4x4 (pCurLayer->pMbType[iMbXy])) { |
| 551 | 552 | pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp; |
| @@ -599,10 +600,10 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 47 unmodified lines | ||
| 599 | 600 | return -1;//abnormal |
| 600 | 601 | } |
| 601 | 602 | } |
| 602 | − ST32A4 (&pCurLayer->pNzc[iMbXy][0], LD32 (&pNonZeroCount[1 + 8 * 1])); | |
| 603 | − ST32A4 (&pCurLayer->pNzc[iMbXy][4], LD32 (&pNonZeroCount[1 + 8 * 2])); | |
| 604 | − ST32A4 (&pCurLayer->pNzc[iMbXy][8], LD32 (&pNonZeroCount[1 + 8 * 3])); | |
| 605 | − ST32A4 (&pCurLayer->pNzc[iMbXy][12], LD32 (&pNonZeroCount[1 + 8 * 4])); | |
| 603 | + ST32A4 (&pNzc[0], LD32 (&pNonZeroCount[1 + 8 * 1])); | |
| 604 | + ST32A4 (&pNzc[4], LD32 (&pNonZeroCount[1 + 8 * 2])); | |
| 605 | + ST32A4 (&pNzc[8], LD32 (&pNonZeroCount[1 + 8 * 3])); | |
| 606 | + ST32A4 (&pNzc[12], LD32 (&pNonZeroCount[1 + 8 * 4])); | |
| 606 | 607 | } |
| 607 | 608 | } else { //non-MB_TYPE_INTRA16x16 |
| 608 | 609 | for (iId8x8 = 0; iId8x8 < 4; iId8x8++) { |
| @@ -622,10 +623,10 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 13 unmodified lines | ||
| 622 | 623 | ST16 (&pNonZeroCount[g_kuiCacheNzcScanIdx[ (iId8x8 << 2) + 2]], 0); |
| 623 | 624 | } |
| 624 | 625 | } |
| 625 | − ST32A4 (&pCurLayer->pNzc[iMbXy][0], LD32 (&pNonZeroCount[1 + 8 * 1])); | |
| 626 | − ST32A4 (&pCurLayer->pNzc[iMbXy][4], LD32 (&pNonZeroCount[1 + 8 * 2])); | |
| 627 | − ST32A4 (&pCurLayer->pNzc[iMbXy][8], LD32 (&pNonZeroCount[1 + 8 * 3])); | |
| 628 | − ST32A4 (&pCurLayer->pNzc[iMbXy][12], LD32 (&pNonZeroCount[1 + 8 * 4])); | |
| 626 | + ST32A4 (&pNzc[0], LD32 (&pNonZeroCount[1 + 8 * 1])); | |
| 627 | + ST32A4 (&pNzc[4], LD32 (&pNonZeroCount[1 + 8 * 2])); | |
| 628 | + ST32A4 (&pNzc[8], LD32 (&pNonZeroCount[1 + 8 * 3])); | |
| 629 | + ST32A4 (&pNzc[12], LD32 (&pNonZeroCount[1 + 8 * 4])); | |
| 629 | 630 | } |
| 630 | 631 | |
| 631 | 632 | //chroma |
| @@ -653,10 +654,10 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 21 unmodified lines | ||
| 653 | 654 | iIndex++; |
| 654 | 655 | } |
| 655 | 656 | } |
| 656 | − ST16 (&pCurLayer->pNzc[iMbXy][16], LD16 (&pNonZeroCount[6 + 8 * 1])); | |
| 657 | − ST16 (&pCurLayer->pNzc[iMbXy][20], LD16 (&pNonZeroCount[6 + 8 * 2])); | |
| 658 | − ST16 (&pCurLayer->pNzc[iMbXy][18], LD16 (&pNonZeroCount[6 + 8 * 4])); | |
| 659 | − ST16 (&pCurLayer->pNzc[iMbXy][22], LD16 (&pNonZeroCount[6 + 8 * 5])); | |
| 657 | + ST16A2 (&pNzc[16], LD16A2 (&pNonZeroCount[6 + 8 * 1])); | |
| 658 | + ST16A2 (&pNzc[20], LD16A2 (&pNonZeroCount[6 + 8 * 2])); | |
| 659 | + ST16A2 (&pNzc[18], LD16A2 (&pNonZeroCount[6 + 8 * 4])); | |
| 660 | + ST16A2 (&pNzc[22], LD16A2 (&pNonZeroCount[6 + 8 * 5])); | |
| 660 | 661 | } |
| 661 | 662 | BsEndCavlc (pBs); |
| 662 | 663 | } |
| @@ -705,8 +706,8 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 42 unmodified lines | ||
| 705 | 706 | |
| 706 | 707 | int32_t iMbX = pCurLayer->iMbX; |
| 707 | 708 | int32_t iMbY = pCurLayer->iMbY; |
| 708 | − int32_t iMbXy = pCurLayer->iMbXyIndex; | |
| 709 | − | |
| 709 | + const int32_t iMbXy = pCurLayer->iMbXyIndex; | |
| 710 | + int8_t* pNzc = pCurLayer->pNzc[iMbXy]; | |
| 710 | 711 | int32_t i; |
| 711 | 712 | uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0; |
| 712 | 713 | uint32_t uiCode; |
| @@ -796,12 +797,12 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 83 unmodified lines | ||
| 796 | 797 | pCurLayer->pLumaQp[iMbXy] = 0; |
| 797 | 798 | pCurLayer->pChromaQp[iMbXy] = 0; |
| 798 | 799 | //Rec. 9.2.1 for PCM, nzc=16 |
| 799 | − ST32A4 (&pCurLayer->pNzc[iMbXy][0], 0x10101010); | |
| 800 | − ST32A4 (&pCurLayer->pNzc[iMbXy][4], 0x10101010); | |
| 801 | − ST32A4 (&pCurLayer->pNzc[iMbXy][8], 0x10101010); | |
| 802 | − ST32A4 (&pCurLayer->pNzc[iMbXy][12], 0x10101010); | |
| 803 | − ST32A4 (&pCurLayer->pNzc[iMbXy][16], 0x10101010); | |
| 804 | − ST32A4 (&pCurLayer->pNzc[iMbXy][20], 0x10101010); | |
| 800 | + ST32A4 (&pNzc[0], 0x10101010); | |
| 801 | + ST32A4 (&pNzc[4], 0x10101010); | |
| 802 | + ST32A4 (&pNzc[8], 0x10101010); | |
| 803 | + ST32A4 (&pNzc[12], 0x10101010); | |
| 804 | + ST32A4 (&pNzc[16], 0x10101010); | |
| 805 | + ST32A4 (&pNzc[20], 0x10101010); | |
| 805 | 806 | return 0; |
| 806 | 807 | } else { |
| 807 | 808 | if (0 == uiMbType) { |
| @@ -845,12 +846,12 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 37 unmodified lines | ||
| 845 | 846 | |
| 846 | 847 | memset(pCurLayer->pScaledTCoeff[iMbXy], 0, MB_COEFF_LIST_SIZE * sizeof(int16_t)); |
| 847 | 848 | |
| 848 | − ST32A4 (&pCurLayer->pNzc[iMbXy][0], 0); | |
| 849 | − ST32A4 (&pCurLayer->pNzc[iMbXy][4], 0); | |
| 850 | − ST32A4 (&pCurLayer->pNzc[iMbXy][8], 0); | |
| 851 | − ST32A4 (&pCurLayer->pNzc[iMbXy][12], 0); | |
| 852 | − ST32A4 (&pCurLayer->pNzc[iMbXy][16], 0); | |
| 853 | − ST32A4 (&pCurLayer->pNzc[iMbXy][20], 0); | |
| 849 | + ST32A4 (&pNzc[0], 0); | |
| 850 | + ST32A4 (&pNzc[4], 0); | |
| 851 | + ST32A4 (&pNzc[8], 0); | |
| 852 | + ST32A4 (&pNzc[12], 0); | |
| 853 | + ST32A4 (&pNzc[16], 0); | |
| 854 | + ST32A4 (&pNzc[20], 0); | |
| 854 | 855 | if (pCurLayer->pCbp[iMbXy] == 0 && !IS_INTRA16x16 (pCurLayer->pMbType[iMbXy]) && !IS_I_BL (pCurLayer->pMbType[iMbXy])) { |
| 855 | 856 | pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp; |
| 856 | 857 | pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQp[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] + |
| @@ -901,10 +902,10 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 44 unmodified lines | ||
| 901 | 902 | return -1;//abnormal |
| 902 | 903 | } |
| 903 | 904 | } |
| 904 | − ST32A4 (&pCurLayer->pNzc[iMbXy][0], LD32 (&pNonZeroCount[1 + 8 * 1])); | |
| 905 | − ST32A4 (&pCurLayer->pNzc[iMbXy][4], LD32 (&pNonZeroCount[1 + 8 * 2])); | |
| 906 | − ST32A4 (&pCurLayer->pNzc[iMbXy][8], LD32 (&pNonZeroCount[1 + 8 * 3])); | |
| 907 | − ST32A4 (&pCurLayer->pNzc[iMbXy][12], LD32 (&pNonZeroCount[1 + 8 * 4])); | |
| 905 | + ST32A4 (&pNzc[0], LD32 (&pNonZeroCount[1 + 8 * 1])); | |
| 906 | + ST32A4 (&pNzc[4], LD32 (&pNonZeroCount[1 + 8 * 2])); | |
| 907 | + ST32A4 (&pNzc[8], LD32 (&pNonZeroCount[1 + 8 * 3])); | |
| 908 | + ST32A4 (&pNzc[12], LD32 (&pNonZeroCount[1 + 8 * 4])); | |
| 908 | 909 | } |
| 909 | 910 | } else { //non-MB_TYPE_INTRA16x16 |
| 910 | 911 | for (iId8x8 = 0; iId8x8 < 4; iId8x8++) { |
| @@ -924,10 +925,10 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 13 unmodified lines | ||
| 924 | 925 | ST16 (&pNonZeroCount[g_kuiCacheNzcScanIdx[ (iId8x8 << 2) + 2]], 0); |
| 925 | 926 | } |
| 926 | 927 | } |
| 927 | − ST32A4 (&pCurLayer->pNzc[iMbXy][0], LD32 (&pNonZeroCount[1 + 8 * 1])); | |
| 928 | − ST32A4 (&pCurLayer->pNzc[iMbXy][4], LD32 (&pNonZeroCount[1 + 8 * 2])); | |
| 929 | − ST32A4 (&pCurLayer->pNzc[iMbXy][8], LD32 (&pNonZeroCount[1 + 8 * 3])); | |
| 930 | − ST32A4 (&pCurLayer->pNzc[iMbXy][12], LD32 (&pNonZeroCount[1 + 8 * 4])); | |
| 928 | + ST32A4 (&pNzc[0], LD32 (&pNonZeroCount[1 + 8 * 1])); | |
| 929 | + ST32A4 (&pNzc[4], LD32 (&pNonZeroCount[1 + 8 * 2])); | |
| 930 | + ST32A4 (&pNzc[8], LD32 (&pNonZeroCount[1 + 8 * 3])); | |
| 931 | + ST32A4 (&pNzc[12], LD32 (&pNonZeroCount[1 + 8 * 4])); | |
| 931 | 932 | } |
| 932 | 933 | |
| 933 | 934 | |
| @@ -956,10 +957,10 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 22 unmodified lines | ||
| 956 | 957 | iIndex++; |
| 957 | 958 | } |
| 958 | 959 | } |
| 959 | − ST16 (&pCurLayer->pNzc[iMbXy][16], LD16 (&pNonZeroCount[6 + 8 * 1])); | |
| 960 | − ST16 (&pCurLayer->pNzc[iMbXy][20], LD16 (&pNonZeroCount[6 + 8 * 2])); | |
| 961 | − ST16 (&pCurLayer->pNzc[iMbXy][18], LD16 (&pNonZeroCount[6 + 8 * 4])); | |
| 962 | − ST16 (&pCurLayer->pNzc[iMbXy][22], LD16 (&pNonZeroCount[6 + 8 * 5])); | |
| 960 | + ST16A2 (&pNzc[16], LD16A2 (&pNonZeroCount[6 + 8 * 1])); | |
| 961 | + ST16A2 (&pNzc[20], LD16A2 (&pNonZeroCount[6 + 8 * 2])); | |
| 962 | + ST16A2 (&pNzc[18], LD16A2 (&pNonZeroCount[6 + 8 * 4])); | |
| 963 | + ST16A2 (&pNzc[22], LD16A2 (&pNonZeroCount[6 + 8 * 5])); | |
| 963 | 964 | } |
| 964 | 965 | BsEndCavlc (pBs); |
| 965 | 966 | } |
| @@ -973,7 +974,8 @@ int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur) { · 7 unmodified lines | ||
| 973 | 974 | PSlice pSlice = &pCurLayer->sLayerInfo.sSliceInLayer; |
| 974 | 975 | PSliceHeader pSliceHeader = &pSlice->sSliceHeaderExt.sSliceHeader; |
| 975 | 976 | |
| 976 | − int32_t iMbXy = pCurLayer->iMbXyIndex; | |
| 977 | + const int32_t iMbXy = pCurLayer->iMbXyIndex; | |
| 978 | + int8_t *pNzc = pCurLayer->pNzc[iMbXy]; | |
| 977 | 979 | int32_t iBaseModeFlag, i; |
| 978 | 980 | int32_t iRet = 0; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15 |
| 979 | 981 | uint32_t uiCode; |
| @@ -990,12 +992,12 @@ int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur) { · 10 unmodified lines | ||
| 990 | 992 | int16_t iMv[2]; |
| 991 | 993 | |
| 992 | 994 | pCurLayer->pMbType[iMbXy] = MB_TYPE_SKIP; |
| 993 | − ST32A4 (&pCurLayer->pNzc[iMbXy][0], 0); | |
| 994 | − ST32A4 (&pCurLayer->pNzc[iMbXy][4], 0); | |
| 995 | − ST32A4 (&pCurLayer->pNzc[iMbXy][8], 0); | |
| 996 | − ST32A4 (&pCurLayer->pNzc[iMbXy][12], 0); | |
| 997 | − ST32A4 (&pCurLayer->pNzc[iMbXy][16], 0); | |
| 998 | − ST32A4 (&pCurLayer->pNzc[iMbXy][20], 0); | |
| 995 | + ST32A4 (&pNzc[0], 0); | |
| 996 | + ST32A4 (&pNzc[4], 0); | |
| 997 | + ST32A4 (&pNzc[8], 0); | |
| 998 | + ST32A4 (&pNzc[12], 0); | |
| 999 | + ST32A4 (&pNzc[16], 0); | |
| 1000 | + ST32A4 (&pNzc[20], 0); | |
| 999 | 1001 | |
| 1000 | 1002 | pCurLayer->pInterPredictionDoneFlag[iMbXy] = 0; |
| 1001 | 1003 | memset (pCurLayer->pRefIndex[0][iMbXy], 0, sizeof (int8_t) * 16); |