Showing the changes to codec/decoder/core/src/decode_slice.cpp (1 of 5 files). Show all
Unified · Split
| @@ -453,7 +453,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 452 unmodified lines | |||
| 453 | int32_t iMbX = pCurLayer->iMbX; | 453 | int32_t iMbX = pCurLayer->iMbX; |
| 454 | int32_t iMbY = pCurLayer->iMbY; | 454 | int32_t iMbY = pCurLayer->iMbY; |
| 455 | int32_t iMbXy = pCurLayer->iMbXyIndex; | 455 | int32_t iMbXy = pCurLayer->iMbXyIndex; |
| 456 | int32_t iNMbMode, i; | 456 | int32_t i; |
| 457 | uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0; | 457 | uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0; |
| 458 | uint32_t uiCode; | 458 | uint32_t uiCode; |
| 459 | int32_t iCode; | 459 | int32_t iCode; |
| @@ -551,8 +551,6 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 91 unmodified lines | |||
| 551 | } | 551 | } |
| 552 | } | 552 | } |
| 553 | 553 | ||
| 554 | iNMbMode = BASE_MB; | ||
| 555 | |||
| 556 | memset (pCurLayer->pScaledTCoeff[iMbXy], 0, 384 * sizeof (pCurLayer->pScaledTCoeff[iMbXy][0])); | 554 | memset (pCurLayer->pScaledTCoeff[iMbXy], 0, 384 * sizeof (pCurLayer->pScaledTCoeff[iMbXy][0])); |
| 557 | ST32 (&pCurLayer->pNzc[iMbXy][0], 0); | 555 | ST32 (&pCurLayer->pNzc[iMbXy][0], 0); |
| 558 | ST32 (&pCurLayer->pNzc[iMbXy][4], 0); | 556 | ST32 (&pCurLayer->pNzc[iMbXy][4], 0); |
| @@ -601,7 +599,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 42 unmodified lines | |||
| 601 | if (MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) { | 599 | if (MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) { |
| 602 | //step1: Luma DC | 600 | //step1: Luma DC |
| 603 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, 0, 16, | 601 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, 0, 16, |
| 604 | g_kuiLumaDcZigzagScan, I16_LUMA_DC, pCurLayer->pScaledTCoeff[iMbXy], iNMbMode, pCurLayer->pLumaQp[iMbXy], pCtx)) { | 602 | g_kuiLumaDcZigzagScan, I16_LUMA_DC, pCurLayer->pScaledTCoeff[iMbXy], pCurLayer->pLumaQp[iMbXy], pCtx)) { |
| 605 | return -1;//abnormal | 603 | return -1;//abnormal |
| 606 | } | 604 | } |
| 607 | //step2: Luma AC | 605 | //step2: Luma AC |
| @@ -609,7 +607,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 1 unmodified line | |||
| 609 | for (i = 0; i < 16; i++) { | 607 | for (i = 0; i < 16; i++) { |
| 610 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, i, | 608 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, i, |
| 611 | iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), | 609 | iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), |
| 612 | I16_LUMA_AC, pCurLayer->pScaledTCoeff[iMbXy] + (i << 4), iNMbMode, pCurLayer->pLumaQp[iMbXy], pCtx)) { | 610 | I16_LUMA_AC, pCurLayer->pScaledTCoeff[iMbXy] + (i << 4), pCurLayer->pLumaQp[iMbXy], pCtx)) { |
| 613 | return -1;//abnormal | 611 | return -1;//abnormal |
| 614 | } | 612 | } |
| 615 | } | 613 | } |
| @@ -626,7 +624,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 10 unmodified lines | |||
| 626 | //Luma (DC and AC decoding together) | 624 | //Luma (DC and AC decoding together) |
| 627 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex, | 625 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex, |
| 628 | iScanIdxEnd - iScanIdxStart + 1, g_kuiZigzagScan + iScanIdxStart, | 626 | iScanIdxEnd - iScanIdxStart + 1, g_kuiZigzagScan + iScanIdxStart, |
| 629 | LUMA_DC_AC, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), iNMbMode, pCurLayer->pLumaQp[iMbXy], pCtx)) { | 627 | LUMA_DC_AC, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), pCurLayer->pLumaQp[iMbXy], pCtx)) { |
| 630 | return -1;//abnormal | 628 | return -1;//abnormal |
| 631 | } | 629 | } |
| 632 | iIndex++; | 630 | iIndex++; |
| @@ -648,7 +646,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 15 unmodified lines | |||
| 648 | for (i = 0; i < 2; i++) { //Cb Cr | 646 | for (i = 0; i < 2; i++) { //Cb Cr |
| 649 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, | 647 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, |
| 650 | 16 + (i << 2), 4, g_kuiChromaDcScan, CHROMA_DC, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6), | 648 | 16 + (i << 2), 4, g_kuiChromaDcScan, CHROMA_DC, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6), |
| 651 | iNMbMode, pCurLayer->pChromaQp[iMbXy], pCtx)) { | 649 | pCurLayer->pChromaQp[iMbXy], pCtx)) { |
| 652 | return -1;//abnormal | 650 | return -1;//abnormal |
| 653 | } | 651 | } |
| 654 | } | 652 | } |
| @@ -661,7 +659,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 6 unmodified lines | |||
| 661 | for (iId4x4 = 0; iId4x4 < 4; iId4x4++) { | 659 | for (iId4x4 = 0; iId4x4 < 4; iId4x4++) { |
| 662 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex, | 660 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex, |
| 663 | iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), | 661 | iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), |
| 664 | CHROMA_AC, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), iNMbMode, pCurLayer->pChromaQp[iMbXy], pCtx)) { | 662 | CHROMA_AC, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), pCurLayer->pChromaQp[iMbXy], pCtx)) { |
| 665 | return -1;//abnormal | 663 | return -1;//abnormal |
| 666 | } | 664 | } |
| 667 | iIndex++; | 665 | iIndex++; |
| @@ -721,7 +719,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 53 unmodified lines | |||
| 721 | int32_t iMbY = pCurLayer->iMbY; | 719 | int32_t iMbY = pCurLayer->iMbY; |
| 722 | int32_t iMbXy = pCurLayer->iMbXyIndex; | 720 | int32_t iMbXy = pCurLayer->iMbXyIndex; |
| 723 | 721 | ||
| 724 | int32_t iNMbMode, i; | 722 | int32_t i; |
| 725 | uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0; | 723 | uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0; |
| 726 | uint32_t uiCode; | 724 | uint32_t uiCode; |
| 727 | int32_t iCode; | 725 | int32_t iCode; |
| @@ -749,7 +747,6 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 21 unmodified lines | |||
| 749 | } | 747 | } |
| 750 | 748 | ||
| 751 | if (pCurLayer->pResidualPredFlag[iMbXy] == 0) { | 749 | if (pCurLayer->pResidualPredFlag[iMbXy] == 0) { |
| 752 | iNMbMode = BASE_MB; | ||
| 753 | pCurLayer->pInterPredictionDoneFlag[iMbXy] = 0; | 750 | pCurLayer->pInterPredictionDoneFlag[iMbXy] = 0; |
| 754 | } else { | 751 | } else { |
| 755 | WelsLog (pCtx, WELS_LOG_WARNING, "residual_pred_flag = 1 not supported.\n"); | 752 | WelsLog (pCtx, WELS_LOG_WARNING, "residual_pred_flag = 1 not supported.\n"); |
| @@ -826,7 +823,6 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 70 unmodified lines | |||
| 826 | if (pCtx->pParseIntra4x4ModeFunc (&sNeighAvail, pIntraPredMode, pBs, pCurLayer)) { | 823 | if (pCtx->pParseIntra4x4ModeFunc (&sNeighAvail, pIntraPredMode, pBs, pCurLayer)) { |
| 827 | return -1; | 824 | return -1; |
| 828 | } | 825 | } |
| 829 | iNMbMode = BASE_MB; | ||
| 830 | } else { //I_PCM exclude, we can ignore it | 826 | } else { //I_PCM exclude, we can ignore it |
| 831 | pCurLayer->pMbType[iMbXy] = MB_TYPE_INTRA16x16; | 827 | pCurLayer->pMbType[iMbXy] = MB_TYPE_INTRA16x16; |
| 832 | pCurLayer->pIntraPredMode[iMbXy][7] = (uiMbType - 1) & 3; | 828 | pCurLayer->pIntraPredMode[iMbXy][7] = (uiMbType - 1) & 3; |
| @@ -837,7 +833,6 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 4 unmodified lines | |||
| 837 | if (pCtx->pParseIntra16x16ModeFunc (&sNeighAvail, pBs, pCurLayer)) { | 833 | if (pCtx->pParseIntra16x16ModeFunc (&sNeighAvail, pBs, pCurLayer)) { |
| 838 | return -1; | 834 | return -1; |
| 839 | } | 835 | } |
| 840 | iNMbMode = BASE_MB; | ||
| 841 | } | 836 | } |
| 842 | } | 837 | } |
| 843 | } | 838 | } |
| @@ -860,22 +855,20 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 16 unmodified lines | |||
| 860 | uiCbpL = pCurLayer->pCbp[iMbXy] & 15; | 855 | uiCbpL = pCurLayer->pCbp[iMbXy] & 15; |
| 861 | } | 856 | } |
| 862 | 857 | ||
| 863 | if (iNMbMode == BASE_MB) { | 858 | pCtx->sBlockFunc.pWelsBlockZero16x16Func (pCurLayer->pScaledTCoeff[iMbXy], 16); |
| 864 | pCtx->sBlockFunc.pWelsBlockZero16x16Func (pCurLayer->pScaledTCoeff[iMbXy], 16); | 859 | pCtx->sBlockFunc.pWelsBlockZero8x8Func (pCurLayer->pScaledTCoeff[iMbXy] + 256, 8); |
| 865 | pCtx->sBlockFunc.pWelsBlockZero8x8Func (pCurLayer->pScaledTCoeff[iMbXy] + 256, 8); | 860 | pCtx->sBlockFunc.pWelsBlockZero8x8Func (pCurLayer->pScaledTCoeff[iMbXy] + 256 + 64, 8); |
| 866 | pCtx->sBlockFunc.pWelsBlockZero8x8Func (pCurLayer->pScaledTCoeff[iMbXy] + 256 + 64, 8); | ||
| 867 | 861 | ||
| 868 | ST32 (&pCurLayer->pNzc[iMbXy][0], 0); | 862 | ST32 (&pCurLayer->pNzc[iMbXy][0], 0); |
| 869 | ST32 (&pCurLayer->pNzc[iMbXy][4], 0); | 863 | ST32 (&pCurLayer->pNzc[iMbXy][4], 0); |
| 870 | ST32 (&pCurLayer->pNzc[iMbXy][8], 0); | 864 | ST32 (&pCurLayer->pNzc[iMbXy][8], 0); |
| 871 | ST32 (&pCurLayer->pNzc[iMbXy][12], 0); | 865 | ST32 (&pCurLayer->pNzc[iMbXy][12], 0); |
| 872 | ST32 (&pCurLayer->pNzc[iMbXy][16], 0); | 866 | ST32 (&pCurLayer->pNzc[iMbXy][16], 0); |
| 873 | ST32 (&pCurLayer->pNzc[iMbXy][20], 0); | 867 | ST32 (&pCurLayer->pNzc[iMbXy][20], 0); |
| 874 | if (pCurLayer->pCbp[iMbXy] == 0 && !IS_INTRA16x16 (pCurLayer->pMbType[iMbXy]) && !IS_I_BL (pCurLayer->pMbType[iMbXy])) { | 868 | if (pCurLayer->pCbp[iMbXy] == 0 && !IS_INTRA16x16 (pCurLayer->pMbType[iMbXy]) && !IS_I_BL (pCurLayer->pMbType[iMbXy])) { |
| 875 | pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp; | 869 | pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp; |
| 876 | pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQp[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] + | 870 | pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQp[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] + |
| 877 | pSliceHeader->pPps->iChromaQpIndexOffset, 0, 51)]; | 871 | pSliceHeader->pPps->iChromaQpIndexOffset, 0, 51)]; |
| 878 | } | ||
| 879 | } | 872 | } |
| 880 | 873 | ||
| 881 | if (pCurLayer->pCbp[iMbXy] || MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) { | 874 | if (pCurLayer->pCbp[iMbXy] || MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) { |
| @@ -910,7 +903,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 28 unmodified lines | |||
| 910 | if (MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) { | 903 | if (MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) { |
| 911 | //step1: Luma DC | 904 | //step1: Luma DC |
| 912 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, 0, 16, g_kuiLumaDcZigzagScan, | 905 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, 0, 16, g_kuiLumaDcZigzagScan, |
| 913 | I16_LUMA_DC, pCurLayer->pScaledTCoeff[iMbXy], iNMbMode, pCurLayer->pLumaQp[iMbXy], pCtx)) { | 906 | I16_LUMA_DC, pCurLayer->pScaledTCoeff[iMbXy], pCurLayer->pLumaQp[iMbXy], pCtx)) { |
| 914 | return -1;//abnormal | 907 | return -1;//abnormal |
| 915 | } | 908 | } |
| 916 | //step2: Luma AC | 909 | //step2: Luma AC |
| @@ -918,7 +911,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 1 unmodified line | |||
| 918 | for (i = 0; i < 16; i++) { | 911 | for (i = 0; i < 16; i++) { |
| 919 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, i, | 912 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, i, |
| 920 | iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), | 913 | iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), |
| 921 | I16_LUMA_AC, pCurLayer->pScaledTCoeff[iMbXy] + (i << 4), iNMbMode, pCurLayer->pLumaQp[iMbXy], pCtx)) { | 914 | I16_LUMA_AC, pCurLayer->pScaledTCoeff[iMbXy] + (i << 4), pCurLayer->pLumaQp[iMbXy], pCtx)) { |
| 922 | return -1;//abnormal | 915 | return -1;//abnormal |
| 923 | } | 916 | } |
| 924 | } | 917 | } |
| @@ -935,7 +928,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 10 unmodified lines | |||
| 935 | //Luma (DC and AC decoding together) | 928 | //Luma (DC and AC decoding together) |
| 936 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex, | 929 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex, |
| 937 | iScanIdxEnd - iScanIdxStart + 1, g_kuiZigzagScan + iScanIdxStart, LUMA_DC_AC, | 930 | iScanIdxEnd - iScanIdxStart + 1, g_kuiZigzagScan + iScanIdxStart, LUMA_DC_AC, |
| 938 | pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), iNMbMode, pCurLayer->pLumaQp[iMbXy], pCtx)) { | 931 | pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), pCurLayer->pLumaQp[iMbXy], pCtx)) { |
| 939 | return -1;//abnormal | 932 | return -1;//abnormal |
| 940 | } | 933 | } |
| 941 | iIndex++; | 934 | iIndex++; |
| @@ -958,7 +951,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 16 unmodified lines | |||
| 958 | for (i = 0; i < 2; i++) { //Cb Cr | 951 | for (i = 0; i < 2; i++) { //Cb Cr |
| 959 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, | 952 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, |
| 960 | 16 + (i << 2), 4, g_kuiChromaDcScan, CHROMA_DC, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6), | 953 | 16 + (i << 2), 4, g_kuiChromaDcScan, CHROMA_DC, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6), |
| 961 | iNMbMode, pCurLayer->pChromaQp[iMbXy], pCtx)) { | 954 | pCurLayer->pChromaQp[iMbXy], pCtx)) { |
| 962 | return -1;//abnormal | 955 | return -1;//abnormal |
| 963 | } | 956 | } |
| 964 | } | 957 | } |
| @@ -971,7 +964,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 6 unmodified lines | |||
| 971 | for (iId4x4 = 0; iId4x4 < 4; iId4x4++) { | 964 | for (iId4x4 = 0; iId4x4 < 4; iId4x4++) { |
| 972 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex, | 965 | if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex, |
| 973 | iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), | 966 | iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), |
| 974 | CHROMA_AC, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), iNMbMode, pCurLayer->pChromaQp[iMbXy], pCtx)) { | 967 | CHROMA_AC, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), pCurLayer->pChromaQp[iMbXy], pCtx)) { |
| 975 | return -1;//abnormal | 968 | return -1;//abnormal |
| 976 | } | 969 | } |
| 977 | iIndex++; | 970 | iIndex++; |