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