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

📄 umc_vc1_enc_deblocking.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
📖 第 1 页 / 共 2 页
字号:
            if (!pCur->isCoded(1,3) && !pCur->isCoded(3,1))
                YFlagH |= IPPVC_EDGE_QUARTER_4;
        }
     }
    return;
}
void GetInternalEdge4MV_NOVST( VC1EncoderMBInfo *pCur,Ipp8u& YFlagV, Ipp8u& YFlagH)
{
     sCoordinate    mvCurr    = {0,0}, mvPrev = {0,0};

     YFlagV = 0;
     YFlagH = 0;

     if (!pCur->isIntra(0) && !pCur->isIntra(1))
     {
        pCur->GetMV(&mvPrev,0);
        pCur->GetMV(&mvCurr,1);
        if (mvPrev.x == mvCurr.x && mvPrev.y == mvCurr.y)
        {
            if (!pCur->isCoded(0,1) && !pCur->isCoded(1,0))
                YFlagV |= IPPVC_EDGE_HALF_1;
            }
     }
     if (!pCur->isIntra(2) && !pCur->isIntra(3))
     {
        pCur->GetMV(&mvPrev,2);
        pCur->GetMV(&mvCurr,3);
        if (mvPrev.x == mvCurr.x && mvPrev.y == mvCurr.y)
        {
            if (!pCur->isCoded(2,1) && !pCur->isCoded(3,0))
                YFlagV |= IPPVC_EDGE_HALF_2;
        }
     }
     if (!pCur->isIntra(0) && !pCur->isIntra(2))
     {
        pCur->GetMV(&mvPrev,0);
        pCur->GetMV(&mvCurr,2);
        if (mvPrev.x == mvCurr.x && mvPrev.y == mvCurr.y)
        {
            if (!pCur->isCoded(0,2) && !pCur->isCoded(2,0))
                YFlagH |= IPPVC_EDGE_HALF_1;

        }
     }
     if (!pCur->isIntra(1) && !pCur->isIntra(3))
     {
        pCur->GetMV(&mvPrev,1);
        pCur->GetMV(&mvCurr,3);
        if (mvPrev.x == mvCurr.x && mvPrev.y == mvCurr.y)
        {
            if (!pCur->isCoded(1,2) && !pCur->isCoded(3,0))
                YFlagH |= IPPVC_EDGE_HALF_1;

        }
     }

    return;
}
void GetInternalEdge1MV_VST(VC1EncoderMBInfo *pCur,Ipp8u& YFlagV, Ipp8u& YFlagH)
{

     YFlagV= 0;
     YFlagH= 0;

     if (!pCur->isIntra())
     {
        if (!pCur->isCoded(0,1) && !pCur->isCoded(1,0))
            YFlagV |= IPPVC_EDGE_QUARTER_1;
        if (!pCur->isCoded(0,3) && !pCur->isCoded(1,2))
            YFlagV |= IPPVC_EDGE_QUARTER_2;
        if (!pCur->isCoded(2,1) && !pCur->isCoded(3,0))
            YFlagV |= IPPVC_EDGE_QUARTER_3;
        if (!pCur->isCoded(2,3) && !pCur->isCoded(3,2))
            YFlagV |= IPPVC_EDGE_QUARTER_4;
        if (!pCur->isCoded(0,2) && !pCur->isCoded(2,0))
            YFlagH |= IPPVC_EDGE_QUARTER_1;
        if (!pCur->isCoded(0,3) && !pCur->isCoded(2,1))
            YFlagH |= IPPVC_EDGE_QUARTER_2;
        if (!pCur->isCoded(1,2) && !pCur->isCoded(3,0))
            YFlagH |= IPPVC_EDGE_QUARTER_3;
        if (!pCur->isCoded(1,3) && !pCur->isCoded(3,1))
            YFlagH |= IPPVC_EDGE_QUARTER_4;
    }
    return;
}
void GetInternalEdge1MV_NOVST(VC1EncoderMBInfo *pCur,Ipp8u& YFlagV, Ipp8u& YFlagH)
{
     YFlagV= 0;
     YFlagH= 0;

     if (!pCur->isIntra())
     {
        if (!pCur->isCoded(0,1) && !pCur->isCoded(1,0))
            YFlagV |= IPPVC_EDGE_HALF_1;
        if (!pCur->isCoded(2,1) && !pCur->isCoded(3,0))
            YFlagV |= IPPVC_EDGE_HALF_2;
        if (!pCur->isCoded(0,2) && !pCur->isCoded(2,0))
            YFlagH |= IPPVC_EDGE_HALF_1;
        if (!pCur->isCoded(1,2) && !pCur->isCoded(3,0))
            YFlagH |= IPPVC_EDGE_HALF_2;
    }
}

void GetInternalBlockEdge(VC1EncoderMBInfo *pCur,
                          eTransformType* BlockTSTypes,
                          Ipp8u& YFlagUp, Ipp8u& YFlagBot, Ipp8u& UFlagH, Ipp8u& VFlagH,
                          Ipp8u& YFlagL,  Ipp8u& YFlagR,   Ipp8u& UFlagV, Ipp8u& VFlagV)
{

    YFlagUp = YFlagBot = UFlagH = VFlagH = 0;
    YFlagL  = YFlagR   = UFlagV = VFlagV = 0;

    switch (BlockTSTypes[0])
    {
        case VC1_ENC_8x4_TRANSFORM:
            if (!pCur->isCoded(0,0) && !pCur->isCoded(0,2))
                YFlagUp |= IPPVC_EDGE_HALF_1;
            break;
       case VC1_ENC_4x8_TRANSFORM:
            if (!pCur->isCoded(0,0) && !pCur->isCoded(0,1))
                YFlagL |= IPPVC_EDGE_HALF_1;
            break;
      case VC1_ENC_4x4_TRANSFORM:
            if (!pCur->isCoded(0,0) && !pCur->isCoded(0,2))
                YFlagUp |= IPPVC_EDGE_QUARTER_1;
           if (!pCur->isCoded(0,1) && !pCur->isCoded(0,3))
                YFlagUp |= IPPVC_EDGE_QUARTER_2;
            if (!pCur->isCoded(0,0) && !pCur->isCoded(0,1))
                YFlagL |= IPPVC_EDGE_QUARTER_1;
            if (!pCur->isCoded(0,2) && !pCur->isCoded(0,3))
                YFlagL |= IPPVC_EDGE_QUARTER_2;
            break;
      default:
          break;
    }
    switch (BlockTSTypes[1])
    {
        case VC1_ENC_8x4_TRANSFORM:
            if (!pCur->isCoded(1,0) && !pCur->isCoded(1,2))
                YFlagUp |= IPPVC_EDGE_HALF_2;
            break;
       case VC1_ENC_4x8_TRANSFORM:
            if (!pCur->isCoded(1,0) && !pCur->isCoded(1,1))
                YFlagR |= IPPVC_EDGE_HALF_1;
            break;
      case VC1_ENC_4x4_TRANSFORM:
            if (!pCur->isCoded(1,0) && !pCur->isCoded(1,2))
                YFlagUp |= IPPVC_EDGE_QUARTER_3;
           if  (!pCur->isCoded(1,1) && !pCur->isCoded(1,3))
                YFlagUp |= IPPVC_EDGE_QUARTER_4;
            if (!pCur->isCoded(1,0) && !pCur->isCoded(1,1))
                YFlagR |= IPPVC_EDGE_QUARTER_1;
            if (!pCur->isCoded(1,2) && !pCur->isCoded(1,3))
                YFlagR |= IPPVC_EDGE_QUARTER_2;
            break;
      default:
          break;
    }
    switch (BlockTSTypes[2])
    {
        case VC1_ENC_8x4_TRANSFORM:
            if (!pCur->isCoded(2,0) && !pCur->isCoded(2,2))
                YFlagBot |= IPPVC_EDGE_HALF_1;
            break;
       case VC1_ENC_4x8_TRANSFORM:
            if (!pCur->isCoded(2,0) && !pCur->isCoded(2,1))
                YFlagL |= IPPVC_EDGE_HALF_2;
            break;
      case VC1_ENC_4x4_TRANSFORM:
            if (!pCur->isCoded(2,0) && !pCur->isCoded(2,2))
                YFlagBot |= IPPVC_EDGE_QUARTER_1;
            if (!pCur->isCoded(2,1) && !pCur->isCoded(2,3))
                YFlagBot |= IPPVC_EDGE_QUARTER_2;
            if (!pCur->isCoded(2,0) && !pCur->isCoded(2,1))
                YFlagL |= IPPVC_EDGE_QUARTER_3;
            if (!pCur->isCoded(2,2) && !pCur->isCoded(2,3))
                YFlagL |= IPPVC_EDGE_QUARTER_4;
            break;
      default:
          break;
    }
    switch (BlockTSTypes[3])
    {
        case VC1_ENC_8x4_TRANSFORM:
            if (!pCur->isCoded(3,0) && !pCur->isCoded(3,2))
                YFlagBot |= IPPVC_EDGE_HALF_2;
            break;
       case VC1_ENC_4x8_TRANSFORM:
            if (!pCur->isCoded(3,0) && !pCur->isCoded(3,1))
                YFlagR |= IPPVC_EDGE_HALF_2;
            break;
      case VC1_ENC_4x4_TRANSFORM:
            if (!pCur->isCoded(3,0) && !pCur->isCoded(3,2))
                YFlagBot |= IPPVC_EDGE_QUARTER_3;
            if (!pCur->isCoded(3,1) && !pCur->isCoded(3,3))
                YFlagBot |= IPPVC_EDGE_QUARTER_4;
            if (!pCur->isCoded(3,0) && !pCur->isCoded(3,1))
                YFlagR |= IPPVC_EDGE_QUARTER_3;
            if (!pCur->isCoded(3,2) && !pCur->isCoded(3,3))
                YFlagR |= IPPVC_EDGE_QUARTER_4;
            break;
      default:
          break;
    }
    switch (BlockTSTypes[4])
    {
        case VC1_ENC_8x4_TRANSFORM:
            if (!pCur->isCoded(4,0) && !pCur->isCoded(4,2))
                UFlagH = IPPVC_EDGE_ALL;
            break;
       case VC1_ENC_4x8_TRANSFORM:
            if (!pCur->isCoded(4,0) && !pCur->isCoded(4,1))
                UFlagV = IPPVC_EDGE_ALL;
            break;
      case VC1_ENC_4x4_TRANSFORM:
            if (!pCur->isCoded(4,0) && !pCur->isCoded(4,2))
                UFlagH |= IPPVC_EDGE_HALF_1;
            if (!pCur->isCoded(4,1) && !pCur->isCoded(4,3))
                UFlagH |= IPPVC_EDGE_HALF_2;
            if (!pCur->isCoded(4,0) && !pCur->isCoded(4,1))
                UFlagV |= IPPVC_EDGE_HALF_1;
            if (!pCur->isCoded(4,2) && !pCur->isCoded(4,3))
                UFlagV |= IPPVC_EDGE_HALF_2;
            break;
      default:
          break;
    }
    switch (BlockTSTypes[5])
    {
        case VC1_ENC_8x4_TRANSFORM:
            if (!pCur->isCoded(5,0) && !pCur->isCoded(5,2))
                VFlagH = IPPVC_EDGE_ALL;
            break;
       case VC1_ENC_4x8_TRANSFORM:
            if (!pCur->isCoded(5,0) && !pCur->isCoded(5,1))
                VFlagV = IPPVC_EDGE_ALL;
            break;
      case VC1_ENC_4x4_TRANSFORM:
            if (!pCur->isCoded(5,0) && !pCur->isCoded(5,2))
                VFlagH |= IPPVC_EDGE_HALF_1;
            if (!pCur->isCoded(5,1) && !pCur->isCoded(5,3))
                VFlagH |= IPPVC_EDGE_HALF_2;
            if (!pCur->isCoded(5,0) && !pCur->isCoded(5,1))
                VFlagV |= IPPVC_EDGE_HALF_1;
            if (!pCur->isCoded(5,2) && !pCur->isCoded(5,3))
                VFlagV |= IPPVC_EDGE_HALF_2;
            break;
      default:
          break;
    }

    return;
}

fGetExternalEdge GetExternalEdge[2][2] = {//4 MV, VTS
    {GetExternalEdge1MV_NOVST,GetExternalEdge1MV_VST},
    {GetExternalEdge4MV_NOVST,GetExternalEdge4MV_VST}
};
fGetInternalEdge GetInternalEdge[2][2] = {//4 MV, VTS
    {GetInternalEdge1MV_NOVST,GetInternalEdge1MV_VST},
    {GetInternalEdge4MV_NOVST,GetInternalEdge4MV_VST}
};


}





#endif

⌨️ 快捷键说明

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