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

📄 umc_vc1_deblock_adv.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
📖 第 1 页 / 共 4 页
字号:
                                                 2*UPitch,
                                                 IPPVC_EDGE_HALF_2);
            _own_FilterDeblockingChroma_VerEdge_VC1(m_CurrMB->currUPlane+8+UPitch,
                                                 PQuant,
                                                 2*UPitch,
                                                 IPPVC_EDGE_HALF_2);


            _own_FilterDeblockingChroma_VerEdge_VC1(m_CurrMB->currVPlane+8,
                                                 PQuant,
                                                 2*VPitch,
                                                 IPPVC_EDGE_HALF_2);
            _own_FilterDeblockingChroma_VerEdge_VC1(m_CurrMB->currVPlane+8+VPitch,
                                                 PQuant,
                                                 2*VPitch,
                                                 IPPVC_EDGE_HALF_2);
            ++m_CurrMB;
        }

            if (m_CurrMB->FIELDTX)
            {
                _own_FilterDeblockingLuma_VerEdge_VC1(m_CurrMB->currYPlane+8,
                                                 PQuant,
                                                 2*YPitch,
                                                 IPPVC_EDGE_HALF_2);
                _own_FilterDeblockingLuma_VerEdge_VC1(m_CurrMB->currYPlane+8+YPitch,
                                                 PQuant,
                                                 2*YPitch,
                                                 IPPVC_EDGE_HALF_2);
            }
            else
            {
               _own_FilterDeblockingLuma_VerEdge_VC1(m_CurrMB->currYPlane+8 + YPitch,
                                                 PQuant,
                                                 2*YPitch,
                                                 IPPVC_EDGE_HALF_2);
               _own_FilterDeblockingLuma_VerEdge_VC1(m_CurrMB->currYPlane+8,
                                                 PQuant,
                                                 2*YPitch,
                                                 IPPVC_EDGE_HALF_2);
             }
            ++m_CurrMB;
    }
}


void Deblocking_InterlaceFramePpicture_Adv(VC1Context* pContext)
{
    Ipp32s WidthMB =  pContext->m_seqLayerHeader->widthMB;
    Ipp32s curX, curY;
    Ipp32u PQuant = pContext->m_picLayerHeader->PQUANT;


    Ipp32s fieldoffset[] = {8,1};

    Ipp32s HeightMB   = pContext->DeblockInfo.HeightMB;
    //VC1MB* m_CurrMB = pContext->m_pCurrMB - WidthMB*(HeightMB);
    VC1MB* m_CurrMB = pContext->m_pCurrMB;
    Ipp32s YPitch = m_CurrMB->currYPitch;
    Ipp32s UPitch = m_CurrMB->currUPitch;
    Ipp32s VPitch = m_CurrMB->currVPitch;

    Ipp32u is_intern_deblock = 0;

    /* Deblock horizontal edges */
    for (curY=0; curY<HeightMB-1; curY++)
    {
        for (curX=0; curX<WidthMB; curX++)
        {

            if (VC1_IS_NO_TOP_MB(m_CurrMB->LeftTopRightPositionFlag))
                is_intern_deblock = 1;
            else
                is_intern_deblock = 0;

            //VM_Debug::GetInstance().vm_debug_frame(-1,VC1_MV, VM_STRING("m_CurrMB->FIELDTX %d\n"), m_CurrMB->FIELDTX);


            HorizontalDeblockingBlkInterlaceP((m_CurrMB->currYPlane),
                PQuant,
                YPitch,
                &m_CurrMB->m_pBlocks[0],
                m_CurrMB->FIELDTX,
                is_intern_deblock);
            HorizontalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+8),
                PQuant,
                YPitch,
                &m_CurrMB->m_pBlocks[1],
                m_CurrMB->FIELDTX,
                is_intern_deblock);

            HorizontalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]),
                PQuant,
                YPitch,
                &m_CurrMB->m_pBlocks[2],
                m_CurrMB->FIELDTX,
                1);
            HorizontalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]+8),
                PQuant,
                YPitch,
                &m_CurrMB->m_pBlocks[3],
                m_CurrMB->FIELDTX,
                1);

            /* Horizontal deblock Cb */
            HorizontalDeblockingBlkInterlaceP((m_CurrMB->currUPlane),
                                               PQuant,
                                               UPitch,
                                               &m_CurrMB->m_pBlocks[4],
                                               0,is_intern_deblock);

              /* Horizontal deblock Cr */
            HorizontalDeblockingBlkInterlaceP((m_CurrMB->currVPlane),
                                               PQuant,
                                               VPitch,
                                               &m_CurrMB->m_pBlocks[5],
                                               0,is_intern_deblock);
            ++m_CurrMB;
        }
    }
    if (pContext->DeblockInfo.is_last_deblock)
    {
        for (curX=0; curX<WidthMB; curX++)
        {

            if (VC1_IS_NO_TOP_MB(m_CurrMB->LeftTopRightPositionFlag))
                is_intern_deblock = 1;
            else
                is_intern_deblock = 0;

            //VM_Debug::GetInstance().vm_debug_frame(-1,VC1_MV, VM_STRING("m_CurrMB->FIELDTX %d\n"), m_CurrMB->FIELDTX);




            if (!m_CurrMB->FIELDTX)
            {
                HorizontalDeblockingBlkInterlaceP((m_CurrMB->currYPlane),
                                                PQuant,
                                                YPitch,
                                                &m_CurrMB->m_pBlocks[0],
                                                 m_CurrMB->FIELDTX,
                                                 is_intern_deblock);

                HorizontalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+8),
                                                PQuant,
                                                YPitch,
                                                &m_CurrMB->m_pBlocks[1],
                                                m_CurrMB->FIELDTX,
                                                is_intern_deblock);
            } else
            {
                HorizontalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currYPlane),
                                                PQuant,
                                                YPitch,
                                                &m_CurrMB->m_pBlocks[0],
                                                 m_CurrMB->FIELDTX);

                HorizontalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currYPlane+8),
                                                PQuant,
                                                YPitch,
                                                &m_CurrMB->m_pBlocks[1],
                                                 m_CurrMB->FIELDTX);
            }

            HorizontalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]),
                                               PQuant,
                                               YPitch,
                                               &m_CurrMB->m_pBlocks[2],
                                               m_CurrMB->FIELDTX);
            HorizontalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]+8),
                                                PQuant,
                                                YPitch,
                                                &m_CurrMB->m_pBlocks[3],
                                                m_CurrMB->FIELDTX);
           ++m_CurrMB;
        }


    }
    else
    {
        HeightMB -=1;
    }



    m_CurrMB -= WidthMB*(HeightMB);

    if (VC1_IS_NO_TOP_MB(m_CurrMB->LeftTopRightPositionFlag))
    {

        m_CurrMB -= WidthMB*(pContext->iPrevDblkStartPos);


    /* Deblock vertical edges */
    for (curY=0; curY<pContext->iPrevDblkStartPos; curY++)
    {
        for (curX=0; curX<WidthMB-1; curX++)
        {

            //VM_Debug::GetInstance().vm_debug_frame(-1,VC1_MV, VM_STRING("m_CurrMB->FIELDTX %d\n"), m_CurrMB->FIELDTX);


            VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane),
                                             PQuant,
                                             YPitch,
                                             &m_CurrMB->m_pBlocks[0],
                                             m_CurrMB->FIELDTX);
            VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]),
                                             PQuant,
                                             YPitch,
                                             &m_CurrMB->m_pBlocks[2],
                                             m_CurrMB->FIELDTX);

            VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+8),
                                             PQuant,
                                             YPitch,
                                             &m_CurrMB->m_pBlocks[1],
                                             m_CurrMB->FIELDTX);
            VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]+8),
                                             PQuant,
                                             YPitch,
                                             &m_CurrMB->m_pBlocks[3],
                                              m_CurrMB->FIELDTX);


            /* Vertical deblock Cb */
            VerticalDeblockingBlkInterlaceP((m_CurrMB->currUPlane),
                                             PQuant,
                                             UPitch,
                                             &m_CurrMB->m_pBlocks[4],
                                             0);
            /* Vertical deblock Cr */
            VerticalDeblockingBlkInterlaceP((m_CurrMB->currVPlane),
                                             PQuant,
                                             VPitch,
                                             &m_CurrMB->m_pBlocks[5],
                                             0);
            ++m_CurrMB;
        }

        VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane),
                                         PQuant,
                                         YPitch,
                                         &m_CurrMB->m_pBlocks[0],
                                          m_CurrMB->FIELDTX);
        VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]),
                                         PQuant,
                                         YPitch,
                                         &m_CurrMB->m_pBlocks[2],
                                         m_CurrMB->FIELDTX);
        VerticalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currYPlane+8),
                                                   PQuant,
                                                   YPitch,
                                                   &m_CurrMB->m_pBlocks[1],
                                                   m_CurrMB->FIELDTX);
        VerticalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]+8),
                                                   PQuant,
                                                   YPitch,
                                                   &m_CurrMB->m_pBlocks[3],
                                                    m_CurrMB->FIELDTX);
        VerticalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currUPlane),
                                                   PQuant,
                                                   UPitch,
                                                   &m_CurrMB->m_pBlocks[4],
                                                   0);
        VerticalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currVPlane),
                                                   PQuant,
                                                   VPitch,
                                                   &m_CurrMB->m_pBlocks[5],
                                                   0);
        ++m_CurrMB;
    }
    }
    if (pContext->DeblockInfo.is_last_deblock)
    {
        for (curY=0; curY < HeightMB; curY++)
    {
        for (curX=0; curX<WidthMB-1; curX++)
        {

            //VM_Debug::GetInstance().vm_debug_frame(-1,VC1_MV, VM_STRING("m_CurrMB->FIELDTX %d\n"), m_CurrMB->FIELDTX);


            VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane),
                                             PQuant,
                                             YPitch,
                                             &m_CurrMB->m_pBlocks[0],
                                             m_CurrMB->FIELDTX);
            VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]),
                                             PQuant,
                                             YPitch,
                                             &m_CurrMB->m_pBlocks[2],
                                             m_CurrMB->FIELDTX);

            VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+8),
                                             PQuant,
                                             YPitch,
                                             &m_CurrMB->m_pBlocks[1],
                                             m_CurrMB->FIELDTX);
            VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]+8),
                                             PQuant,
                                             YPitch,
                                             &m_CurrMB->m_pBlocks[3],
                                              m_CurrMB->FIELDTX);


            /* Vertical deblock Cb */
            VerticalDeblockingBlkInterlaceP((m_CurrMB->currUPlane),
                                             PQuant,
                                             UPitch,
                                             &m_CurrMB->m_pBlocks[4],
                                             0);
            /* Vertical deblock Cr */
            VerticalDeblockingBlkInterlaceP((m_CurrMB->currVPlane),
                                             PQuant,
                                             VPitch,
                                             &m_CurrMB->m_pBlocks[5],
                                             0);
            ++m_CurrMB;
        }

        VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane),
                                         PQuant,
                                         YPitch,
                                         &m_CurrMB->m_pBlocks[0],
                                          m_CurrMB->FIELDTX);
        VerticalDeblockingBlkInterlaceP((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]),
                                         PQuant,
                                         YPitch,
                                         &m_CurrMB->m_pBlocks[2],
                                         m_CurrMB->FIELDTX);
        VerticalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currYPlane+8),
                                                   PQuant,
                                                   YPitch,
                                                   &m_CurrMB->m_pBlocks[1],
                                                   m_CurrMB->FIELDTX);
        VerticalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currYPlane+YPitch*fieldoffset[m_CurrMB->FIELDTX]+8),
                                                   PQuant,
                                                   YPitch,
                                                   &m_CurrMB->m_pBlocks[3],
                                                    m_CurrMB->FIELDTX);
        VerticalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currUPlane),
                                                   PQuant,
                                                   UPitch,
                                                   &m_CurrMB->m_pBlocks[4],
                                                   0);
        VerticalDeblockingBlkInterlaceP_No_DBlock((m_CurrMB->currVPlane),
                                                   PQuant,
                                                   VPitch,
                                                   &m_CurrMB->m_pBlocks[5],
                                                   0);
        ++m_CurrMB;
    }
    }


}

#endif //UMC_ENABLE_VC1_VIDEO_DECODER

⌨️ 快捷键说明

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