⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 umc_h264_redual_decoder_templates.h

📁 audio-video-codecs.rar语音编解码器
💻 H
📖 第 1 页 / 共 5 页
字号:
            } \
            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 + -