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