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

📄 umc_h264_dec_mblevel_calc.cpp

📁 这是在PCA下的基于IPP库示例代码例子,在网上下了IPP的库之后,设置相关参数就可以编译该代码.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        Block->block_num--;        Block->mb_num = m_CurMBAddr;    }    return;}void H264VideoDecoder::GetLeftLumaBlockAcrossBoundary(H264DecoderBlockLocation *Block,Ipp8s y){    if (m_CurSliceHeader.MbaffFrameFlag)    {        bool curmbfff = !pGetMBFieldDecodingFlag(m_cur_mb.GlobalMacroblockInfo);        bool curmbtf  = !pGetMBBottomFlag(m_cur_mb.GlobalMacroblockInfo);        Ipp32s MB_X=m_cur_mb.CurrentMacroblockNeighbours.mb_A;        Ipp32s MB_N=-1;        Ipp32s Block_N=-1;        if (MB_X>=0)        {            Ipp8u xfff=!GetMBFieldDecodingFlag(m_pCurrentFrame->m_mbinfo.mbs[MB_X]);            if (curmbfff)            {                if (curmbtf)                {                    if (xfff)                    {                        // 1 1 1                        MB_N=MB_X;                        Block_N = y/4;                    }                    else                    {                        // 1 1 0                        Ipp32u yN = y;                        yN/=2;                        if (y&1)                            MB_N=MB_X  + mb_width;                        else                            MB_N=MB_X;                        Block_N = yN/4;                    }                }                else                {                    if (xfff)                    {                        // 1 0 1                        MB_N=MB_X + mb_width;                        Block_N = y/4;                    }                    else                    {                        // 1 0 0                        Ipp32u yN = y;                        yN+=16;                        yN/=2;                        if (y&1)                            MB_N=MB_X + mb_width;                        else                            MB_N=MB_X;                        Block_N=yN/4;                    }                }            }            else            {                if (curmbtf)                {                    if (xfff)                    {                        //0 1 1                        Ipp32u yN = y;                        yN*=2;                        if (yN<16)                        {                            MB_N=MB_X;                        }                        else                        {                            yN-=16;                            MB_N=MB_X + mb_width;                        }                        Block_N=yN/4;                    }                    else                    {                        // 0 1 0                        MB_N=MB_X;                        Block_N=y/4;                    }                }                else                {                    if (xfff)                    {                        // 0 0 1                        Ipp32u yN = y;                        if (yN<8)                        {                            yN=yN*2+1;                            MB_N=MB_X;                        }                        else                        {                            yN=yN*2+1-16;                            MB_N=MB_X + mb_width;                        }                        Block_N=yN/4;                    }                    else                    {                        // 0 0 0                        MB_N=MB_X + mb_width;                        Block_N=y/4;                    }                }            }        }        Block->block_num=Block_N*4+3;        Block->mb_num = MB_N;    }    else    {        Block->mb_num = m_cur_mb.CurrentMacroblockNeighbours.mb_A;        Block->block_num = (y/4)*4+3;    }}void H264VideoDecoder::GetLeftChromaMacroBlockAcrossBoundary(Ipp32s& mb){    if (m_CurSliceHeader.MbaffFrameFlag)    {        bool curmbfff = !pGetMBFieldDecodingFlag(m_cur_mb.GlobalMacroblockInfo);        bool curmbtf  = !pGetMBBottomFlag(m_cur_mb.GlobalMacroblockInfo);        Ipp32s MB_X=m_cur_mb.CurrentMacroblockNeighbours.mb_A;        Ipp32s MB_N=-1;        if (MB_X>=0)        {            Ipp8u xfff=!GetMBFieldDecodingFlag(m_pCurrentFrame->m_mbinfo.mbs[MB_X]);            if (curmbfff)            {                if (curmbtf)                {                    if (xfff)                    {                        // 1 1 1                        MB_N=MB_X;                    }                    else                    {                        // 1 1 0                        if (mb&1)                            MB_N=MB_X  + mb_width;                        else                            MB_N=MB_X;                    }                }                else                {                    if (xfff)                    {                        // 1 0 1                        MB_N=MB_X + mb_width;                    }                    else                    {                        // 1 0 0                        if (mb&1)                            MB_N=MB_X + mb_width;                        else                            MB_N=MB_X;                    }                }            }            else            {                if (curmbtf)                {                    if (xfff)                    {                        //0 1 1                        if (mb<4)                        {                            MB_N=MB_X;                        }                        else                        {                            MB_N=MB_X + mb_width;                        }                    }                    else                    {                        // 0 1 0                        MB_N=MB_X;                    }                }                else                {                    if (xfff)                    {                        // 0 0 1                        if (mb<4)                        {                            MB_N=MB_X;                        }                        else                        {                            MB_N=MB_X + mb_width;                        }                    }                    else                    {                        // 0 0 0                        MB_N=MB_X + mb_width;                    }                }            }        }        mb = MB_N;    }    else    {        mb = m_cur_mb.CurrentMacroblockNeighbours.mb_A;    }}void H264VideoDecoder::GetLeftLocationForCurrentMBChromaMBAFF(H264DecoderBlockLocation *Block){    bool curmbfff = !pGetMBFieldDecodingFlag(m_cur_mb.GlobalMacroblockInfo);    bool curmbtf  = !pGetMBBottomFlag(m_cur_mb.GlobalMacroblockInfo);    //Ipp32s mb_width = m_pCurrentFrame->macroBlockSize().width;    Ipp32s MB_X=m_cur_mb.CurrentMacroblockNeighbours.mb_A;    Ipp32s MB_N;    //chroma    if (CHROMA_BLOCK_IS_ON_LEFT_EDGE(Block->block_num))    {        Ipp32u dec_value=16;        if (Block->block_num>=20) dec_value=20;        Block->block_num-=dec_value;        if (MB_X>=0) //left mb addr vaild?        {            Ipp8u xfff=!GetMBFieldDecodingFlag(m_pCurrentFrame->m_mbinfo.mbs[MB_X]);            if (curmbfff)            {                if (curmbtf)                {                    if (xfff)                    {                        // 1 1 1                        MB_N=MB_X;                    }                    else                    {                        // 1 1 0                        Ipp32u yN = Block->block_num/2, xN=Block->block_num%2;                        yN/=2;                        Block->block_num=yN*2+xN;                        MB_N=MB_X;                    }                }                else                {                    if (xfff)                    {                        // 1 0 1                        MB_N=MB_X+mb_width;                    }                    else                    {                        // 1 0 0                        Ipp32u yN = Block->block_num/2, xN=Block->block_num%2;                        yN+=2;                        yN/=2;                        Block->block_num=yN*2+xN;                        MB_N=MB_X;                    }                }            }            else            {                if (curmbtf)                {                    if (xfff)                    {                        //0 1 1                        Ipp32u yN = Block->block_num/2, xN=Block->block_num%2;                        if (yN<1)                        {                            yN*=2;                            MB_N=MB_X;                        }                        else                        {                            yN*=2;                            yN-=2;                            MB_N=MB_X+mb_width;                        }                        Block->block_num=yN*2+xN;                    }                    else                    {                        // 0 1 0                        MB_N=MB_X;                    }                }                else                {                    if (xfff)                    {                        // 0 0 1                        Ipp32u yN = Block->block_num/2, xN=Block->block_num%2;                        if (yN<1)                        {                            yN*=8;                            yN++;                            MB_N=MB_X;                        }                        else                        {                            yN*=8;                            yN-=7;                            MB_N=MB_X + mb_width;                        }                        Block->block_num=(yN/4)*2+xN;                    }                    else                    {                        // 0 0 0                        MB_N=MB_X + mb_width;                    }                }            }        }        else        {            Block->mb_num = -1;//no left neighbours            return;        }        Block->block_num+=dec_value;        Block->block_num+=1;        Block->mb_num = MB_N;    }    else    {        Block->block_num--;        Block->mb_num = m_CurMBAddr;    }    return;}void H264VideoDecoder::GetTopLocationForCurrentMBLumaNonMBAFF(H264DecoderBlockLocation *Block){    //luma    if (BLOCK_IS_ON_TOP_EDGE(Block->block_num))    {        Block->block_num+=12;        Block->mb_num  = m_cur_mb.CurrentMacroblockNeighbours.mb_B;    }    else    {        Block->block_num-=4;        Block->mb_num = m_CurMBAddr;    }    return;}void H264VideoDecoder::GetTopLocationForCurrentMBChromaNonMBAFF(H264DecoderBlockLocation *Block){    //chroma    if (CHROMA_BLOCK_IS_ON_TOP_EDGE(Block->block_num))    {        Block->block_num+=2;        Block->mb_num  = m_cur_mb.CurrentMacroblockNeighbours.mb_B;    }    else    {        Block->block_num-=2;        Block->mb_num = m_CurMBAddr;    }    return;}void H264VideoDecoder::GetTopLocationForCurrentMBLumaMBAFF(H264DecoderBlockLocation *Block,Ipp8u DeblockCalls){    bool curmbfff = !pGetMBFieldDecodingFlag(m_cur_mb.GlobalMacroblockInfo);    bool curmbtf  = !pGetMBBottomFlag(m_cur_mb.GlobalMacroblockInfo);    //Ipp32s mb_width = m_pCurrentFrame->macroBlockSize().width;    Ipp32s pair_offset = curmbtf? mb_width:-mb_width;    Ipp32s MB_X;    Ipp32s MB_N;    //luma    if (BLOCK_IS_ON_TOP_EDGE(Block->block_num))    {        if (curmbfff && !curmbtf )        {            MB_N = m_CurMBAddr + pair_offset;            Block->block_num+=12;        }        else        {            MB_X = m_cur_mb.CurrentMacroblockNeighbours.mb_B;            if (MB_X>=0)            {                Ipp8u xfff=!GetMBFieldDecodingFlag(m_pCurrentFrame->m_mbinfo.mbs[MB_X]);                MB_N=MB_X;                Block->block_num+=12;                if (curmbfff || !curmbtf || xfff)                {                    if (!(curmbfff && curmbtf && !xfff && DeblockCalls))                        MB_N+= mb_width;                }            }            else            {                Block->mb_num = -1;                return;            }        }        Block->mb_num = MB_N;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -