📄 umc_h264_redual_decoder_templates.h
字号:
} \
else \
condTermFlagB = defTermFlag; \
} \
/* create context increment */ \
ctxIdxInc = condTermFlagA + 2 * condTermFlagB; \
/* decode block coeffs */ \
if (sd->m_pBitStream->DecodeSingleBin_CABAC(ctxCodedBlockFlag + ctxIdxInc)) \
{ \
sd->m_pBitStream->ResidualBlock4x4_CABAC(ctxBlockCat, \
ctxBase, \
pScan, \
pPosCoefbuf, \
iMaxNum); \
/* update final CBP */ \
uFinalCBP |= (1 << (block_number + 1)); \
/* update coefficient buffer pointer */ \
pPosCoefbuf += 16; \
} \
}
#define DECODE_TOP_LUMA_BLOCK_CABAC(x_pos, y_pos, block_number, left_block_num) \
{ \
Ipp32s ctxIdxInc; \
Ipp32s condTermFlagA, condTermFlagB; \
/* create flag for A macroblock */ \
{ \
condTermFlagA = (uFinalCBP & (1 << (left_block_num + 1))) ? \
(1) : \
(0); \
} \
/* create flag for B macroblock */ \
{ \
H264DecoderBlockLocation mbAddrB; \
mbAddrB = pN->mb_above; \
if (-1 < mbAddrB.mb_num) \
{ \
condTermFlagB = (sd->m_mbinfo.mbs[mbAddrB.mb_num].cbp4x4_luma & (0x0800 << (block_number))) ? \
(1) : \
(0); \
} \
else \
condTermFlagB = defTermFlag; \
} \
/* create context increment */ \
ctxIdxInc = condTermFlagA + 2 * condTermFlagB; \
/* decode block coeffs */ \
if (sd->m_pBitStream->DecodeSingleBin_CABAC(ctxCodedBlockFlag + ctxIdxInc)) \
{ \
sd->m_pBitStream->ResidualBlock4x4_CABAC(ctxBlockCat, \
ctxBase, \
pScan, \
pPosCoefbuf, \
iMaxNum); \
/* update final CBP */ \
uFinalCBP |= (1 << (block_number + 1)); \
/* update coefficient buffer pointer */ \
pPosCoefbuf += 16; \
} \
}
#define DECODE_LEFT_LUMA_BLOCK_CABAC(x_pos, y_pos, block_number, top_block_num) \
{ \
Ipp32s ctxIdxInc; \
Ipp32s condTermFlagA, condTermFlagB; \
/* create flag for A macroblock */ \
{ \
H264DecoderBlockLocation mbAddrA; \
mbAddrA = pN->mbs_left[y_pos]; \
if (-1 < mbAddrA.mb_num) \
{ \
condTermFlagA = CheckCBP(sd->m_mbinfo.mbs[mbAddrA.mb_num].cbp4x4_luma, \
mbAddrA.block_num); \
} \
else \
condTermFlagA = defTermFlag; \
} \
/* create flag for B macroblock */ \
{ \
condTermFlagB = (uFinalCBP & (1 << (top_block_num + 1))) ? \
(1) : \
(0); \
} \
/* create context increment */ \
ctxIdxInc = condTermFlagA + 2 * condTermFlagB; \
/* decode block coeffs */ \
if (sd->m_pBitStream->DecodeSingleBin_CABAC(ctxCodedBlockFlag + ctxIdxInc)) \
{ \
sd->m_pBitStream->ResidualBlock4x4_CABAC(ctxBlockCat, \
ctxBase, \
pScan, \
pPosCoefbuf, \
iMaxNum); \
/* update final CBP */ \
uFinalCBP |= (1 << (block_number + 1)); \
/* update coefficient buffer pointer */ \
pPosCoefbuf += 16; \
} \
}
#define DECODE_INTERNAL_LUMA_BLOCK_CABAC(x_pos, y_pos, block_number, left_block_num, top_block_num) \
{ \
Ipp32s ctxIdxInc; \
Ipp32s condTermFlagA, condTermFlagB; \
/* create flag for A macroblock */ \
{ \
condTermFlagA = (uFinalCBP & (1 << (left_block_num + 1))) ? \
(1) : \
(0); \
} \
/* create flag for B macroblock */ \
{ \
condTermFlagB = (uFinalCBP & (1 << (top_block_num + 1))) ? \
(1) : \
(0); \
} \
/* create context increment */ \
ctxIdxInc = condTermFlagA + 2 * condTermFlagB; \
/* decode block coeffs */ \
if (sd->m_pBitStream->DecodeSingleBin_CABAC(ctxCodedBlockFlag + ctxIdxInc)) \
{ \
sd->m_pBitStream->ResidualBlock4x4_CABAC(ctxBlockCat, \
ctxBase, \
pScan, \
pPosCoefbuf, \
iMaxNum); \
/* update final CBP */ \
uFinalCBP |= (1 << (block_number + 1)); \
/* update coefficient buffer pointer */ \
pPosCoefbuf += 16; \
} \
}
#define DECODE_CHROMA_DC_BLOCK_CABAC(component) \
{ \
Ipp32s iNumCoeffs = (4 << (3 & (color_format - 1))); \
Ipp32s ctxIdxInc; \
Ipp32s condTermFlagA, condTermFlagB; \
/* create flag for A macroblock */ \
{ \
H264DecoderBlockLocation mbAddrA; \
mbAddrA = pN->mbs_left[0]; \
if (-1 < mbAddrA.mb_num) \
condTermFlagA = (sd->m_mbinfo.mbs[mbAddrA.mb_num].cbp4x4_chroma[component] & 1); \
else \
condTermFlagA = defTermFlag; \
} \
/* create flag for B macroblock */ \
{ \
H264DecoderBlockLocation mbAddrB; \
mbAddrB = pN->mb_above; \
if (-1 < mbAddrB.mb_num) \
condTermFlagB = (sd->m_mbinfo.mbs[mbAddrB.mb_num].cbp4x4_chroma[component] & 1); \
else \
condTermFlagB = defTermFlag; \
} \
/* create context increment */ \
ctxIdxInc = condTermFlagA + 2 * condTermFlagB; \
if (sd->m_pBitStream->DecodeSingleBin_CABAC(ctxCodedBlockFlag + ctxIdxInc)) \
{ \
const Ipp32s * pDCScan; \
switch (color_format) \
{ \
case 2: \
pDCScan = ChromaDC422RasterScan; \
break; \
case 3: \
pDCScan = mp_scan4x4[0]; \
break; \
default: \
pDCScan = 0; \
break; \
} \
BitStreamColorSpecific<Coeffs, color_format>::ResidualChromaDCBlock_CABAC(ctxBase, \
pDCScan, \
pPosCoefbuf, \
sd->m_pBitStream); \
/* update coefficient buffer pointer */ \
pPosCoefbuf += iNumCoeffs; \
/* update final CBP */ \
uFinalCBP[component] = 1; \
} \
else \
uFinalCBP[component] = 0; \
}
#define DECODE_EXTERNAL_CHROMA_BLOCK_CABAC(x_pos, y_pos, block_number, top_block_num) \
{ \
Ipp32s ctxIdxInc; \
Ipp32s condTermFlagA, condTermFlagB; \
/* create flag for A macroblock */ \
{ \
H264DecoderBlockLocation mbAddrA; \
mbAddrA = pN->mbs_left_chroma[iComponent][y_pos]; \
if (-1 < mbAddrA.mb_num) \
{ \
condTermFlagA = CheckCBPChroma(sd->m_mbinfo.mbs[mbAddrA.mb_num].cbp4x4_chroma[iComponent], \
mbAddrA.block_num - iBlocksBefore); \
} \
else \
condTermFlagA = defTermFlag; \
} \
/* create flag for B macroblock */ \
{ \
H264DecoderBlockLocation mbAddrB; \
mbAddrB = pN->mb_above_chroma[iComponent]; \
if (-1 < mbAddrB.mb_num) \
{ \
condTermFlagB = (sd->m_mbinfo.mbs[mbAddrB.mb_num].cbp4x4_chroma[iComponent] & (1 << (top_block_num + 1))) ? \
(1) : \
(0); \
} \
else \
condTermFlagB = defTermFlag; \
} \
/* create context increment */ \
ctxIdxInc = condTermFlagA + 2 * condTermFlagB; \
/* decode block coeffs */ \
if (sd->m_pBitStream->DecodeSingleBin_CABAC(ctxCodedBlockFlag + ctxIdxInc)) \
{ \
sd->m_pBitStream->ResidualBlock4x4_CABAC(BLOCK_CHROMA_AC_LEVELS, \
ctxBase, \
pScan, \
pPosCoefbuf, \
14); \
/* update final CBP */ \
uFinalCBP[iComponent] |= (1 << (block_number + 1)); \
/* update coefficient buffer pointer */ \
pPosCoefbuf += 16; \
} \
}
#define DECODE_TOP_CHROMA_BLOCK_CABAC(x_pos, y_pos, block_number, left_block_num, top_block_num) \
{ \
Ipp32s ctxIdxInc; \
Ipp32s condTermFlagA, condTermFlagB; \
/* create flag for A macroblock */ \
{ \
condTermFlagA = (uFinalCBP[iComponent] & (1 << (left_block_num + 1))) ? \
(1) : \
(0); \
} \
/* create flag for B macroblock */ \
{ \
H264DecoderBlockLocation mbAddrB; \
mbAddrB = pN->mb_above_chroma[iComponent]; \
if (-1 < mbAddrB.mb_num) \
{ \
condTermFlagB = (sd->m_mbinfo.mbs[mbAddrB.mb_num].cbp4x4_chroma[iComponent] & (1 << (top_block_num + 1))) ? \
(1) : \
(0); \
} \
else \
condTermFlagB = defTermFlag; \
} \
/* create context increment */ \
ctxIdxInc = condTermFlagA + 2 * condTermFlagB; \
/* decode block coeffs */ \
if (sd->m_pBitStream->DecodeSingleBin_CABAC(ctxCodedBlockFlag + ctxIdxInc)) \
{ \
sd->m_pBitStream->ResidualBlock4x4_CABAC(BLOCK_CHROMA_AC_LEVELS, \
ctxBase, \
pScan, \
pPosCoefbuf, \
14); \
/* update final CBP */ \
uFinalCBP[iComponent] |= (1 << (block_number + 1)); \
/* update coefficient buffer pointer */ \
pPosCoefbuf += 16; \
} \
}
#define DECODE_LEFT_CHROMA_BLOCK_CABAC(x_pos, y_pos, block_number, top_block_num) \
{ \
Ipp32s ctxIdxInc; \
Ipp32s condTermFlagA, condTermFlagB; \
/* create flag for A macroblock */ \
{ \
H264DecoderBlockLocation mbAddrA; \
mbAddrA = pN->mbs_left_chroma[iComponent][y_pos]; \
if (-1 < mbAddrA.mb_num) \
{ \
condTermFlagA = CheckCBPChroma(sd->m_mbinfo.mbs[mbAddrA.mb_num].cbp4x4_chroma[iComponent], \
mbAddrA.block_num - iBlocksBefore); \
} \
else \
condTermFlagA = defTermFlag; \
} \
/* create flag for B macroblock */ \
{ \
condTermFlagB = (uFinalCBP[iComponent] & (1 << (top_block_num + 1))) ? \
(1) : \
(0); \
} \
/* create context increment */ \
ctxIdxInc = condTermFlagA + 2 * condTermFlagB; \
/* decode block coeffs */ \
if (sd->m_pBitStream->DecodeSingleBin_CABAC(ctxCodedBlockFlag + ctxIdxInc)) \
{ \
sd->m_pBitStream->ResidualBlock4x4_CABAC(BLOCK_CHROMA_AC_LEVELS, \
ctxBase, \
pScan, \
pPosCoefbuf, \
14); \
/* update final CBP */ \
uFinalCBP[iComponent] |= (1 << (block_number + 1)); \
/* update coefficient buffer pointer */ \
pPosCoefbuf += 16; \
} \
}
#define DECODE_INTERNAL_CHROMA_BLOCK_CABAC(x_pos, y_pos, block_number, left_block_num, top_block_num) \
{ \
Ipp32s ctxIdxInc; \
Ipp32s condTermFlagA, condTermFlagB; \
/* create flag for A macroblock */ \
{ \
condTermFlagA = (uFinalCBP[iComponent] & (1 << (left_block_num + 1))) ? \
(1) : \
(0); \
} \
/* create flag for B macroblock */ \
{ \
condTermFlagB = (uFinalCBP[iComponent] & (1 << (top_block_num + 1))) ? \
(1) : \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -