History

to support different chroma qp

fix travis ci error

zhuiling committed 11 years ago

Commit a45c6611 parent 01fd22011 files · +346 −101Browse files

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

Unified · Split

codec/decoder/core/src/decode_slice.cpp+52−32
@@ -559,8 +559,10 @@ int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t& ui · 558 unmodified lines
559559
560560 if (pCurLayer->pCbp[iMbXy] == 0 && IS_INTRA4x4 (pCurLayer->pMbType[iMbXy])) {
561561 pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
562− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 ((pCurLayer->pLumaQp[iMbXy] +
563− pSliceHeader->pPps->iChromaQpIndexOffset), 0, 51)];
562+ for (i = 0; i < 2; i++) {
563+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 ((pCurLayer->pLumaQp[iMbXy] +
564+ pSliceHeader->pPps->iChromaQpIndexOffset[i]), 0, 51)];
565+ }
564566 }
565567
566568 if (pCurLayer->pCbp[iMbXy] || MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) {
@@ -572,8 +574,10 @@ int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t& ui · 5 unmodified lines
572574 }
573575 pCurLayer->pLumaQp[iMbXy] = (pSlice->iLastMbQp + iQpDelta + 52) % 52; //update last_mb_qp
574576 pSlice->iLastMbQp = pCurLayer->pLumaQp[iMbXy];
575− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 ((pSlice->iLastMbQp +
576− pSliceHeader->pPps->iChromaQpIndexOffset), 0, 51)];
577+ for (i = 0; i < 2; i++) {
578+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 ((pSlice->iLastMbQp +
579+ pSliceHeader->pPps->iChromaQpIndexOffset[i]), 0, 51)];
580+ }
577581 if (MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) {
578582 //step1: Luma DC
579583 WELS_READ_VERIFY (ParseResidualBlockCabac (&sNeighAvail, pNonZeroCount, pBsAux, 0, 16, g_kuiLumaDcZigzagScan,
@@ -625,7 +629,7 @@ int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t& ui · 45 unmodified lines
625629 for (i = 0; i < 2; i++) {
626630 iMbResProperty = i ? CHROMA_DC_V : CHROMA_DC_U;
627631 WELS_READ_VERIFY (ParseResidualBlockCabac (&sNeighAvail, pNonZeroCount, pBsAux, 16 + (i << 2), 4, g_kuiChromaDcScan,
628− iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6), pCurLayer->pChromaQp[iMbXy], pCtx));
632+ iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6), pCurLayer->pChromaQp[iMbXy][i], pCtx));
629633 }
630634 }
631635
@@ -637,7 +641,7 @@ int32_t WelsDecodeMbCabacISliceBaseMode0 (PWelsDecoderContext pCtx, uint32_t& ui · 5 unmodified lines
637641 for (iId4x4 = 0; iId4x4 < 4; iId4x4++) {
638642 WELS_READ_VERIFY (ParseResidualBlockCabac (&sNeighAvail, pNonZeroCount, pBsAux, iIdx,
639643 iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1), iMbResProperty,
640− pCurLayer->pScaledTCoeff[iMbXy] + (iIdx << 4), pCurLayer->pChromaQp[iMbXy], pCtx));
644+ pCurLayer->pScaledTCoeff[iMbXy] + (iIdx << 4), pCurLayer->pChromaQp[iMbXy][i], pCtx));
641645 iIdx++;
642646 }
643647 }
@@ -772,8 +776,10 @@ int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAv · 128 unmodified lines
772776 }
773777 pCurLayer->pLumaQp[iMbXy] = (pSlice->iLastMbQp + iQpDelta + 52) % 52; //update last_mb_qp
774778 pSlice->iLastMbQp = pCurLayer->pLumaQp[iMbXy];
775− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 (pSlice->iLastMbQp +
776− pSliceHeader->pPps->iChromaQpIndexOffset, 0, 51)];
779+ for (i = 0; i < 2; i++) {
780+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 (pSlice->iLastMbQp +
781+ pSliceHeader->pPps->iChromaQpIndexOffset[i], 0, 51)];
782+ }
777783
778784 if (MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) {
779785 //step1: Luma DC
@@ -830,7 +836,7 @@ int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAv · 50 unmodified lines
830836 iMbResProperty = i ? CHROMA_DC_V_INTER : CHROMA_DC_U_INTER;
831837
832838 WELS_READ_VERIFY (ParseResidualBlockCabac (pNeighAvail, pNonZeroCount, pBsAux, 16 + (i << 2), 4, g_kuiChromaDcScan,
833− iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6), pCurLayer->pChromaQp[iMbXy], pCtx));
839+ iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6), pCurLayer->pChromaQp[iMbXy][i], pCtx));
834840 }
835841 }
836842 //step2: AC
@@ -844,7 +850,7 @@ int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAv · 7 unmodified lines
844850 for (iId4x4 = 0; iId4x4 < 4; iId4x4++) {
845851 WELS_READ_VERIFY (ParseResidualBlockCabac (pNeighAvail, pNonZeroCount, pBsAux, index,
846852 iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1),
847− iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + (index << 4), pCurLayer->pChromaQp[iMbXy], pCtx));
853+ iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + (index << 4), pCurLayer->pChromaQp[iMbXy][i], pCtx));
848854 index++;
849855 }
850856 }
@@ -858,8 +864,10 @@ int32_t WelsDecodeMbCabacPSliceBaseMode0 (PWelsDecoderContext pCtx, PWelsNeighAv · 7 unmodified lines
858864 }
859865 } else {
860866 pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
861− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
862− pSliceHeader->pPps->iChromaQpIndexOffset, 0, 51)];
867+ for (i = 0; i < 2; i++) {
868+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
869+ pSliceHeader->pPps->iChromaQpIndexOffset[i], 0, 51)];
870+ }
863871 }
864872
865873 WELS_READ_VERIFY (ParseEndOfSliceCabac (pCtx, uiEosFlag));
@@ -911,8 +919,10 @@ int32_t WelsDecodeMbCabacPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uin · 45 unmodified lines
911919
912920 //reset rS
913921 pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp; //??????????????? dqaunt of previous mb
914− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
915− pSliceHeader->pPps->iChromaQpIndexOffset, 0, 51)];
922+ for (i = 0; i < 2; i++) {
923+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
924+ pSliceHeader->pPps->iChromaQpIndexOffset[i], 0, 51)];
925+ }
916926
917927 //for neighboring CABAC usage
918928 pSlice->iLastDeltaQp = 0;
@@ -1145,7 +1155,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 226 unmodified lines
11451155
11461156 //step 3: update QP and pNonZeroCount
11471157 pCurLayer->pLumaQp[iMbXy] = 0;
1148− pCurLayer->pChromaQp[iMbXy] = 0;
1158+ memset (pCurLayer->pChromaQp[iMbXy], 0, sizeof (pCurLayer->pChromaQp[iMbXy]));
11491159 memset (pNzc, 16, sizeof (pCurLayer->pNzc[iMbXy])); //Rec. 9.2.1 for PCM, nzc=16
11501160 WELS_READ_VERIFY (InitReadBits (pBs, 0));
11511161 return 0;
@@ -1186,8 +1196,10 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 34 unmodified lines
11861196
11871197 if (pCurLayer->pCbp[iMbXy] == 0 && IS_INTRA4x4 (pCurLayer->pMbType[iMbXy])) {
11881198 pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
1189− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
1190− pSliceHeader->pPps->iChromaQpIndexOffset, 0, 51)];
1199+ for (i = 0; i < 2; i++) {
1200+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
1201+ pSliceHeader->pPps->iChromaQpIndexOffset[i], 0, 51)];
1202+ }
11911203
11921204 }
11931205
@@ -1204,9 +1216,11 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 10 unmodified lines
12041216
12051217 pCurLayer->pLumaQp[iMbXy] = (pSlice->iLastMbQp + iQpDelta + 52) % 52; //update last_mb_qp
12061218 pSlice->iLastMbQp = pCurLayer->pLumaQp[iMbXy];
1207− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 (pSlice->iLastMbQp +
1208− pSliceHeader->pPps->iChromaQpIndexOffset, 0,
1209− 51)];
1219+ for (i = 0; i < 2; i++) {
1220+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 (pSlice->iLastMbQp +
1221+ pSliceHeader->pPps->iChromaQpIndexOffset[i], 0,
1222+ 51)];
1223+ }
12101224
12111225
12121226 BsStartCavlc (pBs);
@@ -1262,7 +1276,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 49 unmodified lines
12621276 iMbResProperty = i ? CHROMA_DC_V : CHROMA_DC_U;
12631277 if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs,
12641278 16 + (i << 2), 4, g_kuiChromaDcScan, iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6),
1265− pCurLayer->pChromaQp[iMbXy], pCtx)) {
1279+ pCurLayer->pChromaQp[iMbXy][i], pCtx)) {
12661280 return -1;//abnormal
12671281 }
12681282 }
@@ -1276,7 +1290,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) { · 7 unmodified lines
12761290 for (iId4x4 = 0; iId4x4 < 4; iId4x4++) {
12771291 if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex,
12781292 iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1),
1279− iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), pCurLayer->pChromaQp[iMbXy], pCtx)) {
1293+ iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), pCurLayer->pChromaQp[iMbXy][i], pCtx)) {
12801294 return -1;//abnormal
12811295 }
12821296 iIndex++;
@@ -1435,7 +1449,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 152 unmodified lines
14351449
14361450 //step 3: update QP and pNonZeroCount
14371451 pCurLayer->pLumaQp[iMbXy] = 0;
1438− pCurLayer->pChromaQp[iMbXy] = 0;
1452+ pCurLayer->pChromaQp[iMbXy][0] = pCurLayer->pChromaQp[iMbXy][1] = 0;
14391453 //Rec. 9.2.1 for PCM, nzc=16
14401454 ST32A4 (&pNzc[0], 0x10101010);
14411455 ST32A4 (&pNzc[4], 0x10101010);
@@ -1493,8 +1507,10 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 51 unmodified lines
14931507 ST32A4 (&pNzc[20], 0);
14941508 if (pCurLayer->pCbp[iMbXy] == 0 && !IS_INTRA16x16 (pCurLayer->pMbType[iMbXy]) && !IS_I_BL (pCurLayer->pMbType[iMbXy])) {
14951509 pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
1496− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
1497− pSliceHeader->pPps->iChromaQpIndexOffset, 0, 51)];
1510+ for (i = 0; i < 2; i++) {
1511+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
1512+ pSliceHeader->pPps->iChromaQpIndexOffset[i], 0, 51)];
1513+ }
14981514 }
14991515
15001516 if (pCurLayer->pCbp[iMbXy] || MB_TYPE_INTRA16x16 == pCurLayer->pMbType[iMbXy]) {
@@ -1509,9 +1525,11 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 8 unmodified lines
15091525
15101526 pCurLayer->pLumaQp[iMbXy] = (pSlice->iLastMbQp + iQpDelta + 52) % 52; //update last_mb_qp
15111527 pSlice->iLastMbQp = pCurLayer->pLumaQp[iMbXy];
1512− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 (pSlice->iLastMbQp +
1513− pSliceHeader->pPps->iChromaQpIndexOffset, 0,
1514− 51)];
1528+ for (i = 0; i < 2; i++) {
1529+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 (pSlice->iLastMbQp +
1530+ pSliceHeader->pPps->iChromaQpIndexOffset[i], 0,
1531+ 51)];
1532+ }
15151533
15161534 BsStartCavlc (pBs);
15171535
@@ -1572,7 +1590,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 54 unmodified lines
15721590
15731591 if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs,
15741592 16 + (i << 2), 4, g_kuiChromaDcScan, iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + 256 + (i << 6),
1575− pCurLayer->pChromaQp[iMbXy], pCtx)) {
1593+ pCurLayer->pChromaQp[iMbXy][i], pCtx)) {
15761594 return -1;//abnormal
15771595 }
15781596 }
@@ -1590,7 +1608,7 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) { · 11 unmodified lines
15901608 for (iId4x4 = 0; iId4x4 < 4; iId4x4++) {
15911609 if (WelsResidualBlockCavlc (pVlcTable, pNonZeroCount, pBs, iIndex,
15921610 iScanIdxEnd - WELS_MAX (iScanIdxStart, 1) + 1, g_kuiZigzagScan + WELS_MAX (iScanIdxStart, 1),
1593− iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), pCurLayer->pChromaQp[iMbXy], pCtx)) {
1611+ iMbResProperty, pCurLayer->pScaledTCoeff[iMbXy] + (iIndex << 4), pCurLayer->pChromaQp[iMbXy][i], pCtx)) {
15941612 return -1;//abnormal
15951613 }
15961614 iIndex++;
@@ -1655,8 +1673,10 @@ int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur, uin · 58 unmodified lines
16551673 if (!pSlice->sSliceHeaderExt.bDefaultResidualPredFlag ||
16561674 (pNalCur->sNalHeaderExt.uiQualityId == 0 && pNalCur->sNalHeaderExt.uiDependencyId == 0)) {
16571675 pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
1658− pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
1659− pSliceHeader->pPps->iChromaQpIndexOffset, 0, 51)];
1676+ for (i = 0; i < 2; i++) {
1677+ pCurLayer->pChromaQp[iMbXy][i] = g_kuiChromaQpTable[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
1678+ pSliceHeader->pPps->iChromaQpIndexOffset[i], 0, 51)];
1679+ }
16601680 }
16611681
16621682 pCurLayer->pCbp[iMbXy] = 0;

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