📄 umc_vc1_smoothing.cpp
字号:
VPlane = pCurrMB->currVPlane;
//UpYrow = pContext->SmoothingInfo->SmoothUpperYRows[i-1];
//UpUrow = pContext->SmoothingInfo->SmoothUpperURows[i-1];
//UpVrow = pContext->SmoothingInfo->SmoothUpperVRows[i-1];
CurrIntra = (pCurrMB)->IntraFlag*pCurrMB->Overlap;
LeftIntra = (pCurrMB - 1)->IntraFlag*(pCurrMB - 1)->Overlap;
TopLeftIntra = (pCurrMB - Width - 1)->IntraFlag*(pCurrMB - Width - 1)->Overlap;
if(CurrIntra)
{
//////////////////////////////////
//LUMA left boundary vertical smoothing
EdgeDisabledFlag =(((VC1_EDGE_MB(CurrIntra,VC1_BLOCK_0_INTRA)) && (VC1_EDGE_MB(LeftIntra, VC1_BLOCK_1_INTRA)))
*(IPPVC_EDGE_HALF_1))|
(((VC1_EDGE_MB(CurrIntra,VC1_BLOCK_2_INTRA)) && (VC1_EDGE_MB(LeftIntra, VC1_BLOCK_3_INTRA)))
*(IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_VerEdge_VC1_16s8u_C1R(CurrBlock - 8*8*6+14, VC1_PIXEL_IN_LUMA*2,
CurrBlock, VC1_PIXEL_IN_LUMA*2,
YPlane, YPitch,
0, EdgeDisabledFlag);
//////////////////////////////
//internal vertical smoothing
EdgeDisabledFlag = (VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_0_1_INTRA) * (IPPVC_EDGE_HALF_1))
|(VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_2_3_INTRA) * (IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_VerEdge_VC1_16s8u_C1R(CurrBlock + 6, VC1_PIXEL_IN_LUMA*2,
CurrBlock + 8, VC1_PIXEL_IN_LUMA*2,
YPlane+8, YPitch,
0, EdgeDisabledFlag);
}
if(LeftIntra)
{
////////////////////////////////
//left MB Upper horizontal edge
EdgeDisabledFlag =(((VC1_EDGE_MB(TopLeftIntra,VC1_BLOCK_2_INTRA)) && (VC1_EDGE_MB(LeftIntra, VC1_BLOCK_0_INTRA)))
*(IPPVC_EDGE_HALF_1))|
(((VC1_EDGE_MB(TopLeftIntra,VC1_BLOCK_3_INTRA)) && (VC1_EDGE_MB(LeftIntra, VC1_BLOCK_1_INTRA)))
*(IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_HorEdge_VC1_16s8u_C1R(CurrBlock - (Width+1)*8*8*6 + 64*2 +6*VC1_PIXEL_IN_LUMA, VC1_PIXEL_IN_LUMA*2,
CurrBlock - 8*8*6, VC1_PIXEL_IN_LUMA*2,
YPlane - 16, YPitch,
EdgeDisabledFlag);
//////////////////////////////////
//left MB internal horizontal edge
EdgeDisabledFlag = (VC1_EDGE_MB(LeftIntra,VC1_BLOCKS_0_2_INTRA) * (IPPVC_EDGE_HALF_1))
|(VC1_EDGE_MB(LeftIntra,VC1_BLOCKS_1_3_INTRA) * (IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_HorEdge_VC1_16s8u_C1R(CurrBlock - 8*8*4 - 32, VC1_PIXEL_IN_LUMA*2,
CurrBlock - 8*8*4, VC1_PIXEL_IN_LUMA*2,
YPlane - 16 + 8*YPitch, YPitch,
EdgeDisabledFlag);
if(((LeftIntra & VC1_BLOCK_4_INTRA) == VC1_BLOCK_4_INTRA) && ((CurrIntra & VC1_BLOCK_4_INTRA) == VC1_BLOCK_4_INTRA))
{
///////////////////////
//U vertical smoothing
_own_ippiSmoothingChroma_VerEdge_VC1_16s8u_C1R(CurrBlock - 8*8*2 + 6, VC1_PIXEL_IN_CHROMA*2,
CurrBlock + 8*8*4, VC1_PIXEL_IN_CHROMA*2,
UPlane, UPitch);
///////////////////////
//V vertical smoothing
_own_ippiSmoothingChroma_VerEdge_VC1_16s8u_C1R(CurrBlock - 8*8 + 6, VC1_PIXEL_IN_CHROMA*2,
CurrBlock + 8*8*5, VC1_PIXEL_IN_CHROMA*2,
VPlane, VPitch);
}
if(((TopLeftIntra & VC1_BLOCK_4_INTRA) == VC1_BLOCK_4_INTRA) && ((LeftIntra & VC1_BLOCK_4_INTRA) == VC1_BLOCK_4_INTRA))
{
/////////////////////////////
//U top horizontal smoothing
_own_ippiSmoothingChroma_HorEdge_VC1_16s8u_C1R(CurrBlock - (Width+1)*8*8*6 + 64*4 +6*VC1_PIXEL_IN_CHROMA, VC1_PIXEL_IN_CHROMA*2,
CurrBlock - 2*64, VC1_PIXEL_IN_CHROMA*2,
UPlane - 8, UPitch);
////////////////////////////
//V top horizontal smoothing
_own_ippiSmoothingChroma_HorEdge_VC1_16s8u_C1R(CurrBlock - (Width+1)*8*8*6 + 64*5 +6*VC1_PIXEL_IN_CHROMA, VC1_PIXEL_IN_CHROMA*2,
CurrBlock - 64, VC1_PIXEL_IN_CHROMA*2,
VPlane - 8, VPitch);
}
//copy last two srings of Left macroblock to SmoothUpperRows
/* ippsCopy_16s(CurrBlock - 64*2 - 32, pContext->SmoothingInfo->SmoothUpperYRows[i - 1], 32);
ippsCopy_16s(CurrBlock - 64 - 16, pContext->SmoothingInfo->SmoothUpperURows[i - 1], 16);
ippsCopy_16s(CurrBlock - 16, pContext->SmoothingInfo->SmoothUpperVRows[i - 1], 16);*/
}
}
//RIGHT MB
//LUMA
//UpYrow = pContext->SmoothingInfo->SmoothUpperYRows[Width - 1];
//UpUrow = pContext->SmoothingInfo->SmoothUpperURows[Width - 1];
//UpVrow = pContext->SmoothingInfo->SmoothUpperVRows[Width - 1];
TopIntra = (pCurrMB - Width)->IntraFlag*(pCurrMB - Width)->Overlap;
if(CurrIntra)
{
///////////////////////////
//MB Upper horizontal edge
EdgeDisabledFlag =(((VC1_EDGE_MB(TopIntra,VC1_BLOCK_2_INTRA)) && (VC1_EDGE_MB(CurrIntra, VC1_BLOCK_0_INTRA)))
*(IPPVC_EDGE_HALF_1))|
(((VC1_EDGE_MB(TopIntra,VC1_BLOCK_3_INTRA)) && (VC1_EDGE_MB(CurrIntra, VC1_BLOCK_1_INTRA)))
*(IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_HorEdge_VC1_16s8u_C1R(CurrBlock - Width*8*8*6 + 64*2 +6*VC1_PIXEL_IN_LUMA, VC1_PIXEL_IN_LUMA*2,
CurrBlock, VC1_PIXEL_IN_LUMA*2,
YPlane, YPitch,
EdgeDisabledFlag);
/////////////////////////////
//MB internal horizontal edge
EdgeDisabledFlag = (VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_0_2_INTRA) * (IPPVC_EDGE_HALF_1))
|(VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_1_3_INTRA) * (IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_HorEdge_VC1_16s8u_C1R(CurrBlock + 8*8*2 - 32, VC1_PIXEL_IN_LUMA*2,
CurrBlock + 8*8*2, VC1_PIXEL_IN_LUMA*2,
YPlane + 8*YPitch, YPitch,
EdgeDisabledFlag);
if(((TopIntra & VC1_BLOCK_4_INTRA) == VC1_BLOCK_4_INTRA) && ((CurrIntra & VC1_BLOCK_4_INTRA) == VC1_BLOCK_4_INTRA))
{
/////////////////////////////
//U top horizontal smoothing
_own_ippiSmoothingChroma_HorEdge_VC1_16s8u_C1R(CurrBlock - Width*8*8*6 + 64*4 +6*VC1_PIXEL_IN_CHROMA, VC1_PIXEL_IN_CHROMA*2,
CurrBlock + 4*64, VC1_PIXEL_IN_CHROMA*2,
UPlane, UPitch);
/////////////////////////////
//V top horizontal smoothing
_own_ippiSmoothingChroma_HorEdge_VC1_16s8u_C1R(CurrBlock - Width*8*8*6 + 64*5 +6*VC1_PIXEL_IN_CHROMA, VC1_PIXEL_IN_CHROMA*2,
CurrBlock + 64*5, VC1_PIXEL_IN_CHROMA*2,
VPlane, VPitch);
}
//copy last two srings of Left macroblock to SmoothUpperRows
/* ippsCopy_16s(CurrBlock + 64*4 - 32, pContext->SmoothingInfo->SmoothUpperYRows[Width - 1], 32);
ippsCopy_16s(CurrBlock + 64*5 - 16, pContext->SmoothingInfo->SmoothUpperURows[Width - 1], 16);
ippsCopy_16s(CurrBlock + 64*6 - 16, pContext->SmoothingInfo->SmoothUpperVRows[Width - 1], 16);*/
}
CurrBlock += 8*8*6;
pCurrMB++;
LeftIntra = (pCurrMB - 1)->IntraFlag*(pCurrMB - 1)->Overlap;
TopLeftIntra = (pCurrMB - Width - 1)->IntraFlag*(pCurrMB - Width - 1)->Overlap;
}
else
{
YPlane = pCurrMB->currYPlane;
UPlane = pCurrMB->currUPlane;
VPlane = pCurrMB->currVPlane;
CurrIntra = (pCurrMB)->IntraFlag*pCurrMB->Overlap;
if(CurrIntra)
{
////////////////////////////
//first block in row
//internal vertical smoothing
EdgeDisabledFlag = (VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_0_1_INTRA) * (IPPVC_EDGE_HALF_1))
|(VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_2_3_INTRA) * (IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_VerEdge_VC1_16s8u_C1R(CurrBlock + 6, VC1_PIXEL_IN_LUMA*2,
CurrBlock + 8, VC1_PIXEL_IN_LUMA*2,
YPlane + 8, YPitch,
0, EdgeDisabledFlag);
}
for (i = 1; i < Width; i++)
{
CurrBlock += 8*8*6;
pCurrMB++;
YPlane = pCurrMB->currYPlane;
UPlane = pCurrMB->currUPlane;
VPlane = pCurrMB->currVPlane;
//UpYrow = pContext->SmoothingInfo->SmoothUpperYRows[i-1];
//UpUrow = pContext->SmoothingInfo->SmoothUpperURows[i-1];
//UpVrow = pContext->SmoothingInfo->SmoothUpperVRows[i-1];
CurrIntra = (pCurrMB)->IntraFlag*pCurrMB->Overlap;
LeftIntra = (pCurrMB - 1)->IntraFlag*(pCurrMB - 1)->Overlap;
//LUMA
if(CurrIntra)
{
///////////////////////////////////
//left boundary vertical smoothing
EdgeDisabledFlag =(((VC1_EDGE_MB(CurrIntra,VC1_BLOCK_0_INTRA)) && (VC1_EDGE_MB(LeftIntra, VC1_BLOCK_1_INTRA)))
*(IPPVC_EDGE_HALF_1))|
(((VC1_EDGE_MB(CurrIntra,VC1_BLOCK_2_INTRA)) && (VC1_EDGE_MB(LeftIntra, VC1_BLOCK_3_INTRA)))
*(IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_VerEdge_VC1_16s8u_C1R(CurrBlock - 8*8*6+14, VC1_PIXEL_IN_LUMA*2,
CurrBlock, VC1_PIXEL_IN_LUMA*2,
YPlane, YPitch,
0, EdgeDisabledFlag);
/////////////////////////////
//internal vertical smoothing
EdgeDisabledFlag = (VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_0_1_INTRA) * (IPPVC_EDGE_HALF_1))
|(VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_2_3_INTRA) * (IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_VerEdge_VC1_16s8u_C1R(CurrBlock + 6, VC1_PIXEL_IN_LUMA*2,
CurrBlock + 8, VC1_PIXEL_IN_LUMA*2,
YPlane + 8, YPitch,
0, EdgeDisabledFlag);
}
if(LeftIntra)
{
///////////////////////////////////
//left MB internal horizontal edge
EdgeDisabledFlag = (VC1_EDGE_MB(LeftIntra,VC1_BLOCKS_0_2_INTRA) * (IPPVC_EDGE_HALF_1))
|(VC1_EDGE_MB(LeftIntra,VC1_BLOCKS_1_3_INTRA) * (IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_HorEdge_VC1_16s8u_C1R(CurrBlock - 8*8*4 - 32, VC1_PIXEL_IN_LUMA*2,
CurrBlock - 8*8*4, VC1_PIXEL_IN_LUMA*2,
YPlane - 16 + 8*YPitch, YPitch,
EdgeDisabledFlag);
//CHROMA
if(((LeftIntra & VC1_BLOCK_4_INTRA) == VC1_BLOCK_4_INTRA) && ((CurrIntra & VC1_BLOCK_4_INTRA) == VC1_BLOCK_4_INTRA))
{
///////////////////////
//U vertical smoothing
_own_ippiSmoothingChroma_VerEdge_VC1_16s8u_C1R(CurrBlock - 8*8*2 + 6, VC1_PIXEL_IN_CHROMA*2,
CurrBlock + 8*8*4, VC1_PIXEL_IN_CHROMA*2,
UPlane, UPitch);
//////////////////////
//V vertical smoothing
_own_ippiSmoothingChroma_VerEdge_VC1_16s8u_C1R(CurrBlock - 8*8 + 6, VC1_PIXEL_IN_CHROMA*2,
CurrBlock + 8*8*5, VC1_PIXEL_IN_CHROMA*2,
VPlane, VPitch);
}
//copy last two srings of Left macroblock to SmoothUpperRows
/*ippsCopy_16s(CurrBlock - 64*2 - 32, pContext->SmoothingInfo->SmoothUpperYRows[i - 1], 32);
ippsCopy_16s(CurrBlock - 64 - 16, pContext->SmoothingInfo->SmoothUpperURows[i - 1], 16);
ippsCopy_16s(CurrBlock - 16, pContext->SmoothingInfo->SmoothUpperVRows[i -1], 16);*/
}
}
//RIGHT MB
//LUMA
//UpYrow = pContext->SmoothingInfo->SmoothUpperYRows[Width - 1];
//UpUrow = pContext->SmoothingInfo->SmoothUpperURows[Width - 1];
//UpVrow = pContext->SmoothingInfo->SmoothUpperVRows[Width - 1];
if(CurrIntra)
{
/////////////////////////////
//MB internal horizontal edge
EdgeDisabledFlag = (VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_0_2_INTRA) * (IPPVC_EDGE_HALF_1))
|(VC1_EDGE_MB(CurrIntra,VC1_BLOCKS_1_3_INTRA) * (IPPVC_EDGE_HALF_2));
_own_ippiSmoothingLuma_HorEdge_VC1_16s8u_C1R(CurrBlock + 8*8*2 - 32, VC1_PIXEL_IN_LUMA*2,
CurrBlock + 8*8*2, VC1_PIXEL_IN_LUMA*2,
YPlane + 8*YPitch, YPitch,
EdgeDisabledFlag);
//copy last two srings of Left macroblock to SmoothUpperRows
/* ippsCopy_16s(CurrBlock + 64*4 - 32, pContext->SmoothingInfo->SmoothUpperYRows[Width - 1], 32);
ippsCopy_16s(CurrBlock + 64*5 - 16, pContext->SmoothingInfo->SmoothUpperURows[Width - 1], 16);
ippsCopy_16s(CurrBlock + 64*6 - 16, pContext->SmoothingInfo->SmoothUpperVRows[Width -1 ], 16);*/
}
CurrBlock += 8*8*6;
pCurrMB++;
LeftIntra = (pCurrMB - 1)->IntraFlag*(pCurrMB - 1)->Overlap;
}
}
}
}
#endif //UMC_ENABLE_VC1_VIDEO_DECODER
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -