📄 umc_vc1_enc_deblocking.cpp
字号:
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 + -