History

refine pNzc set access

Licai Guo committed 12 years ago

Commit 669d7041 parent c5f04cf1 file · +55 −53Browse files

Showing the changes to codec/decoder/core/src/decode_slice.cpp (1 of 1 file). Show all

Unified · Split

codec/decoder/core/src/decode_slice.cpp+55−53
@@ -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 pNonZeroCount506 //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=16509 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 JM511 } 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;//abnormal600 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_INTRA16x16608 } 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 //chroma632 //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=16799 //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;//abnormal902 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_INTRA16x16910 } 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.15980 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);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t