refine pNzc set access
This commit is contained in:
@@ -440,7 +440,8 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) {
|
|||||||
|
|
||||||
int32_t iMbX = pCurLayer->iMbX;
|
int32_t iMbX = pCurLayer->iMbX;
|
||||||
int32_t iMbY = pCurLayer->iMbY;
|
int32_t iMbY = pCurLayer->iMbY;
|
||||||
int32_t iMbXy = pCurLayer->iMbXyIndex;
|
const int32_t iMbXy = pCurLayer->iMbXyIndex;
|
||||||
|
int8_t *pNzc = pCurLayer->pNzc[iMbXy];
|
||||||
int32_t i;
|
int32_t i;
|
||||||
uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0;
|
uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0;
|
||||||
uint32_t uiCode;
|
uint32_t uiCode;
|
||||||
@@ -505,7 +506,7 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) {
|
|||||||
//step 3: update QP and pNonZeroCount
|
//step 3: update QP and pNonZeroCount
|
||||||
pCurLayer->pLumaQp[iMbXy] = 0;
|
pCurLayer->pLumaQp[iMbXy] = 0;
|
||||||
pCurLayer->pChromaQp[iMbXy] = 0;
|
pCurLayer->pChromaQp[iMbXy] = 0;
|
||||||
memset (pCurLayer->pNzc[iMbXy], 16, sizeof (pCurLayer->pNzc[iMbXy])); //Rec. 9.2.1 for PCM, nzc=16
|
memset (pNzc, 16, sizeof (pCurLayer->pNzc[iMbXy])); //Rec. 9.2.1 for PCM, nzc=16
|
||||||
return 0;
|
return 0;
|
||||||
} else if (0 == uiMbType) { //reference to JM
|
} else if (0 == uiMbType) { //reference to JM
|
||||||
ENFORCE_STACK_ALIGN_1D (int8_t, pIntraPredMode, 48, 16);
|
ENFORCE_STACK_ALIGN_1D (int8_t, pIntraPredMode, 48, 16);
|
||||||
@@ -540,12 +541,12 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
memset (pCurLayer->pScaledTCoeff[iMbXy], 0, 384 * sizeof (pCurLayer->pScaledTCoeff[iMbXy][0]));
|
memset (pCurLayer->pScaledTCoeff[iMbXy], 0, 384 * sizeof (pCurLayer->pScaledTCoeff[iMbXy][0]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][0], 0);
|
ST32A4 (&pNzc[0], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][4], 0);
|
ST32A4 (&pNzc[4], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][8], 0);
|
ST32A4 (&pNzc[8], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][12], 0);
|
ST32A4 (&pNzc[12], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][16], 0);
|
ST32A4 (&pNzc[16], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][20], 0);
|
ST32A4 (&pNzc[20], 0);
|
||||||
|
|
||||||
if (pCurLayer->pCbp[iMbXy] == 0 && IS_INTRA4x4 (pCurLayer->pMbType[iMbXy])) {
|
if (pCurLayer->pCbp[iMbXy] == 0 && IS_INTRA4x4 (pCurLayer->pMbType[iMbXy])) {
|
||||||
pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
|
pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
|
||||||
@@ -599,10 +600,10 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) {
|
|||||||
return -1;//abnormal
|
return -1;//abnormal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][0], LD32 (&pNonZeroCount[1 + 8 * 1]));
|
ST32A4 (&pNzc[0], LD32 (&pNonZeroCount[1 + 8 * 1]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][4], LD32 (&pNonZeroCount[1 + 8 * 2]));
|
ST32A4 (&pNzc[4], LD32 (&pNonZeroCount[1 + 8 * 2]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][8], LD32 (&pNonZeroCount[1 + 8 * 3]));
|
ST32A4 (&pNzc[8], LD32 (&pNonZeroCount[1 + 8 * 3]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][12], LD32 (&pNonZeroCount[1 + 8 * 4]));
|
ST32A4 (&pNzc[12], LD32 (&pNonZeroCount[1 + 8 * 4]));
|
||||||
}
|
}
|
||||||
} else { //non-MB_TYPE_INTRA16x16
|
} else { //non-MB_TYPE_INTRA16x16
|
||||||
for (iId8x8 = 0; iId8x8 < 4; iId8x8++) {
|
for (iId8x8 = 0; iId8x8 < 4; iId8x8++) {
|
||||||
@@ -622,10 +623,10 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) {
|
|||||||
ST16 (&pNonZeroCount[g_kuiCacheNzcScanIdx[ (iId8x8 << 2) + 2]], 0);
|
ST16 (&pNonZeroCount[g_kuiCacheNzcScanIdx[ (iId8x8 << 2) + 2]], 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][0], LD32 (&pNonZeroCount[1 + 8 * 1]));
|
ST32A4 (&pNzc[0], LD32 (&pNonZeroCount[1 + 8 * 1]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][4], LD32 (&pNonZeroCount[1 + 8 * 2]));
|
ST32A4 (&pNzc[4], LD32 (&pNonZeroCount[1 + 8 * 2]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][8], LD32 (&pNonZeroCount[1 + 8 * 3]));
|
ST32A4 (&pNzc[8], LD32 (&pNonZeroCount[1 + 8 * 3]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][12], LD32 (&pNonZeroCount[1 + 8 * 4]));
|
ST32A4 (&pNzc[12], LD32 (&pNonZeroCount[1 + 8 * 4]));
|
||||||
}
|
}
|
||||||
|
|
||||||
//chroma
|
//chroma
|
||||||
@@ -653,10 +654,10 @@ int32_t WelsActualDecodeMbCavlcISlice (PWelsDecoderContext pCtx) {
|
|||||||
iIndex++;
|
iIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ST16 (&pCurLayer->pNzc[iMbXy][16], LD16 (&pNonZeroCount[6 + 8 * 1]));
|
ST16A2 (&pNzc[16], LD16A2 (&pNonZeroCount[6 + 8 * 1]));
|
||||||
ST16 (&pCurLayer->pNzc[iMbXy][20], LD16 (&pNonZeroCount[6 + 8 * 2]));
|
ST16A2 (&pNzc[20], LD16A2 (&pNonZeroCount[6 + 8 * 2]));
|
||||||
ST16 (&pCurLayer->pNzc[iMbXy][18], LD16 (&pNonZeroCount[6 + 8 * 4]));
|
ST16A2 (&pNzc[18], LD16A2 (&pNonZeroCount[6 + 8 * 4]));
|
||||||
ST16 (&pCurLayer->pNzc[iMbXy][22], LD16 (&pNonZeroCount[6 + 8 * 5]));
|
ST16A2 (&pNzc[22], LD16A2 (&pNonZeroCount[6 + 8 * 5]));
|
||||||
}
|
}
|
||||||
BsEndCavlc (pBs);
|
BsEndCavlc (pBs);
|
||||||
}
|
}
|
||||||
@@ -705,8 +706,8 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) {
|
|||||||
|
|
||||||
int32_t iMbX = pCurLayer->iMbX;
|
int32_t iMbX = pCurLayer->iMbX;
|
||||||
int32_t iMbY = pCurLayer->iMbY;
|
int32_t iMbY = pCurLayer->iMbY;
|
||||||
int32_t iMbXy = pCurLayer->iMbXyIndex;
|
const int32_t iMbXy = pCurLayer->iMbXyIndex;
|
||||||
|
int8_t* pNzc = pCurLayer->pNzc[iMbXy];
|
||||||
int32_t i;
|
int32_t i;
|
||||||
uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0;
|
uint32_t uiMbType = 0, uiCbp = 0, uiCbpL = 0, uiCbpC = 0;
|
||||||
uint32_t uiCode;
|
uint32_t uiCode;
|
||||||
@@ -796,12 +797,12 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) {
|
|||||||
pCurLayer->pLumaQp[iMbXy] = 0;
|
pCurLayer->pLumaQp[iMbXy] = 0;
|
||||||
pCurLayer->pChromaQp[iMbXy] = 0;
|
pCurLayer->pChromaQp[iMbXy] = 0;
|
||||||
//Rec. 9.2.1 for PCM, nzc=16
|
//Rec. 9.2.1 for PCM, nzc=16
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][0], 0x10101010);
|
ST32A4 (&pNzc[0], 0x10101010);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][4], 0x10101010);
|
ST32A4 (&pNzc[4], 0x10101010);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][8], 0x10101010);
|
ST32A4 (&pNzc[8], 0x10101010);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][12], 0x10101010);
|
ST32A4 (&pNzc[12], 0x10101010);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][16], 0x10101010);
|
ST32A4 (&pNzc[16], 0x10101010);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][20], 0x10101010);
|
ST32A4 (&pNzc[20], 0x10101010);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
if (0 == uiMbType) {
|
if (0 == uiMbType) {
|
||||||
@@ -845,12 +846,12 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) {
|
|||||||
|
|
||||||
memset(pCurLayer->pScaledTCoeff[iMbXy], 0, MB_COEFF_LIST_SIZE * sizeof(int16_t));
|
memset(pCurLayer->pScaledTCoeff[iMbXy], 0, MB_COEFF_LIST_SIZE * sizeof(int16_t));
|
||||||
|
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][0], 0);
|
ST32A4 (&pNzc[0], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][4], 0);
|
ST32A4 (&pNzc[4], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][8], 0);
|
ST32A4 (&pNzc[8], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][12], 0);
|
ST32A4 (&pNzc[12], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][16], 0);
|
ST32A4 (&pNzc[16], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][20], 0);
|
ST32A4 (&pNzc[20], 0);
|
||||||
if (pCurLayer->pCbp[iMbXy] == 0 && !IS_INTRA16x16 (pCurLayer->pMbType[iMbXy]) && !IS_I_BL (pCurLayer->pMbType[iMbXy])) {
|
if (pCurLayer->pCbp[iMbXy] == 0 && !IS_INTRA16x16 (pCurLayer->pMbType[iMbXy]) && !IS_I_BL (pCurLayer->pMbType[iMbXy])) {
|
||||||
pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
|
pCurLayer->pLumaQp[iMbXy] = pSlice->iLastMbQp;
|
||||||
pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQp[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
|
pCurLayer->pChromaQp[iMbXy] = g_kuiChromaQp[WELS_CLIP3 (pCurLayer->pLumaQp[iMbXy] +
|
||||||
@@ -901,10 +902,10 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) {
|
|||||||
return -1;//abnormal
|
return -1;//abnormal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][0], LD32 (&pNonZeroCount[1 + 8 * 1]));
|
ST32A4 (&pNzc[0], LD32 (&pNonZeroCount[1 + 8 * 1]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][4], LD32 (&pNonZeroCount[1 + 8 * 2]));
|
ST32A4 (&pNzc[4], LD32 (&pNonZeroCount[1 + 8 * 2]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][8], LD32 (&pNonZeroCount[1 + 8 * 3]));
|
ST32A4 (&pNzc[8], LD32 (&pNonZeroCount[1 + 8 * 3]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][12], LD32 (&pNonZeroCount[1 + 8 * 4]));
|
ST32A4 (&pNzc[12], LD32 (&pNonZeroCount[1 + 8 * 4]));
|
||||||
}
|
}
|
||||||
} else { //non-MB_TYPE_INTRA16x16
|
} else { //non-MB_TYPE_INTRA16x16
|
||||||
for (iId8x8 = 0; iId8x8 < 4; iId8x8++) {
|
for (iId8x8 = 0; iId8x8 < 4; iId8x8++) {
|
||||||
@@ -924,10 +925,10 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) {
|
|||||||
ST16 (&pNonZeroCount[g_kuiCacheNzcScanIdx[ (iId8x8 << 2) + 2]], 0);
|
ST16 (&pNonZeroCount[g_kuiCacheNzcScanIdx[ (iId8x8 << 2) + 2]], 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][0], LD32 (&pNonZeroCount[1 + 8 * 1]));
|
ST32A4 (&pNzc[0], LD32 (&pNonZeroCount[1 + 8 * 1]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][4], LD32 (&pNonZeroCount[1 + 8 * 2]));
|
ST32A4 (&pNzc[4], LD32 (&pNonZeroCount[1 + 8 * 2]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][8], LD32 (&pNonZeroCount[1 + 8 * 3]));
|
ST32A4 (&pNzc[8], LD32 (&pNonZeroCount[1 + 8 * 3]));
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][12], LD32 (&pNonZeroCount[1 + 8 * 4]));
|
ST32A4 (&pNzc[12], LD32 (&pNonZeroCount[1 + 8 * 4]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -956,10 +957,10 @@ int32_t WelsActualDecodeMbCavlcPSlice (PWelsDecoderContext pCtx) {
|
|||||||
iIndex++;
|
iIndex++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ST16 (&pCurLayer->pNzc[iMbXy][16], LD16 (&pNonZeroCount[6 + 8 * 1]));
|
ST16A2 (&pNzc[16], LD16A2 (&pNonZeroCount[6 + 8 * 1]));
|
||||||
ST16 (&pCurLayer->pNzc[iMbXy][20], LD16 (&pNonZeroCount[6 + 8 * 2]));
|
ST16A2 (&pNzc[20], LD16A2 (&pNonZeroCount[6 + 8 * 2]));
|
||||||
ST16 (&pCurLayer->pNzc[iMbXy][18], LD16 (&pNonZeroCount[6 + 8 * 4]));
|
ST16A2 (&pNzc[18], LD16A2 (&pNonZeroCount[6 + 8 * 4]));
|
||||||
ST16 (&pCurLayer->pNzc[iMbXy][22], LD16 (&pNonZeroCount[6 + 8 * 5]));
|
ST16A2 (&pNzc[22], LD16A2 (&pNonZeroCount[6 + 8 * 5]));
|
||||||
}
|
}
|
||||||
BsEndCavlc (pBs);
|
BsEndCavlc (pBs);
|
||||||
}
|
}
|
||||||
@@ -973,7 +974,8 @@ int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur) {
|
|||||||
PSlice pSlice = &pCurLayer->sLayerInfo.sSliceInLayer;
|
PSlice pSlice = &pCurLayer->sLayerInfo.sSliceInLayer;
|
||||||
PSliceHeader pSliceHeader = &pSlice->sSliceHeaderExt.sSliceHeader;
|
PSliceHeader pSliceHeader = &pSlice->sSliceHeaderExt.sSliceHeader;
|
||||||
|
|
||||||
int32_t iMbXy = pCurLayer->iMbXyIndex;
|
const int32_t iMbXy = pCurLayer->iMbXyIndex;
|
||||||
|
int8_t *pNzc = pCurLayer->pNzc[iMbXy];
|
||||||
int32_t iBaseModeFlag, i;
|
int32_t iBaseModeFlag, i;
|
||||||
int32_t iRet = 0; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15
|
int32_t iRet = 0; //should have the return value to indicate decoding error or not, It's NECESSARY--2010.4.15
|
||||||
uint32_t uiCode;
|
uint32_t uiCode;
|
||||||
@@ -990,12 +992,12 @@ int32_t WelsDecodeMbCavlcPSlice (PWelsDecoderContext pCtx, PNalUnit pNalCur) {
|
|||||||
int16_t iMv[2];
|
int16_t iMv[2];
|
||||||
|
|
||||||
pCurLayer->pMbType[iMbXy] = MB_TYPE_SKIP;
|
pCurLayer->pMbType[iMbXy] = MB_TYPE_SKIP;
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][0], 0);
|
ST32A4 (&pNzc[0], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][4], 0);
|
ST32A4 (&pNzc[4], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][8], 0);
|
ST32A4 (&pNzc[8], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][12], 0);
|
ST32A4 (&pNzc[12], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][16], 0);
|
ST32A4 (&pNzc[16], 0);
|
||||||
ST32A4 (&pCurLayer->pNzc[iMbXy][20], 0);
|
ST32A4 (&pNzc[20], 0);
|
||||||
|
|
||||||
pCurLayer->pInterPredictionDoneFlag[iMbXy] = 0;
|
pCurLayer->pInterPredictionDoneFlag[iMbXy] = 0;
|
||||||
memset (pCurLayer->pRefIndex[0][iMbXy], 0, sizeof (int8_t) * 16);
|
memset (pCurLayer->pRefIndex[0][iMbXy], 0, sizeof (int8_t) * 16);
|
||||||
|
|||||||
Reference in New Issue
Block a user