📄 wmv9_filters.c
字号:
uch4x8FlagV = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
if ((iMBHeight & 2) == 2)
{
uch4x8Flag0 |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag0 |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag0 |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
}
*puch4x8FilterCol0++ = uch4x8Flag0;
*puch4x8FilterCol1++ = uch4x8Flag1;
*puch8x8FilterCol0++ = uch8x8Flag0;
if ((iMBHeight & 3) == 3)
{
uch4x8Flag0 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag0 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag0 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [5]);
*puch4x8FilterCol0++ = uch4x8Flag0;
*puch4x8FilterCol1++ = uch4x8Flag1;
*puch8x8FilterCol0++ = uch8x8Flag0;
}
*puchFilterColFlagU2++ = uch4x8FlagU;
*puchFilterColFlagV2++ = uch4x8FlagV;
}
puch4x8FilterCol0 = puch4x8FilterCol1;
puch4x8FilterCol1 = puch4x8FilterCol1 + ((iMBHeight + 1) >> 1);
puch8x8FilterCol1 = puch8x8FilterCol0 + ((iMBHeight + 1) >> 1);
pLoopFilterFlag ++;
for (iMBX = 1; iMBX < (I32_WMV) MAE_pWMVDec->m_uintNumMBX; iMBX ++)
{
pLoopFilterFlag2 = pLoopFilterFlag;
for (i4MBY = 0; i4MBY < iMBHeight >> 2; i4MBY ++)
{
// Extract flag from pLoopFilterFlag
uch4x8Flag0 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [2]);
uch8x8Flag0 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag1 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag1 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [5]);
uch8x8FlagU = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [4]);
uch8x8FlagV = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
uch4x8Flag0 |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [2]);
uch8x8Flag0 |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag1 |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag1 |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [5]);
*puch4x8FilterCol0++ = uch4x8Flag0;
*puch4x8FilterCol1++ = uch4x8Flag1;
*puch8x8FilterCol0++ = uch8x8Flag0;
*puch8x8FilterCol1++ = uch8x8Flag1;
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
uch4x8Flag0 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [2]);
uch8x8Flag0 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag1 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag1 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
uch4x8Flag0 |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [2]);
uch8x8Flag0 |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag1 |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag1 |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
*puch4x8FilterCol0++ = uch4x8Flag0;
*puch4x8FilterCol1++ = uch4x8Flag1;
*puch8x8FilterCol0++ = uch8x8Flag0;
*puch8x8FilterCol1++ = uch8x8Flag1;
*puchFilterColFlagU++ = uch8x8FlagU;
*puchFilterColFlagV++ = uch8x8FlagV;
*puchFilterColFlagU2++ = uch4x8FlagU;
*puchFilterColFlagV2++ = uch4x8FlagV;
}
if (iMBHeight & 3)
{
uch4x8Flag0 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [2]);
uch8x8Flag0 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag1 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag1 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [5]);
uch8x8FlagU = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [4]);
uch8x8FlagV = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
if ((iMBHeight & 2) == 2)
{
uch4x8Flag0 |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [2]);
uch8x8Flag0 |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag1 |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag1 |= MAE_EXTRACT3_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
}
*puch4x8FilterCol0++ = uch4x8Flag0;
*puch4x8FilterCol1++ = uch4x8Flag1;
*puch8x8FilterCol0++ = uch8x8Flag0;
*puch8x8FilterCol1++ = uch8x8Flag1;
if ((iMBHeight & 3) == 3)
{
uch4x8Flag0 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [0]);
uch4x8Flag0 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [2]);
uch8x8Flag0 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [2]);
uch4x8Flag1 = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [1]);
uch4x8Flag1 |= MAE_EXTRACT1_COLX4(pLoopFilterFlag2->chFlag [3]);
uch8x8Flag1 = MAE_EXTRACT0_COLX8(pLoopFilterFlag2->chFlag [1]);
uch8x8Flag1 |= MAE_EXTRACT1_COLX8(pLoopFilterFlag2->chFlag [3]);
uch4x8FlagU |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV |= MAE_EXTRACT2_COLX4(pLoopFilterFlag2->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT2_COLX8(pLoopFilterFlag2->chFlag [5]);
*puch4x8FilterCol0++ = uch4x8Flag0;
*puch4x8FilterCol1++ = uch4x8Flag1;
*puch8x8FilterCol0++ = uch8x8Flag0;
*puch8x8FilterCol1++ = uch8x8Flag1;
}
*puchFilterColFlagU++ = uch8x8FlagU;
*puchFilterColFlagV++ = uch8x8FlagV;
*puchFilterColFlagU2++ = uch4x8FlagU;
*puchFilterColFlagV2++ = uch4x8FlagV;
}
puch4x8FilterCol0 = puch4x8FilterCol1;
puch4x8FilterCol1 = puch4x8FilterCol1 + ((iMBHeight + 1) >> 1);
puch8x8FilterCol0 = puch8x8FilterCol1;
puch8x8FilterCol1 = puch8x8FilterCol1 + ((iMBHeight + 1) >> 1);
pLoopFilterFlag ++;
}
}
void MAE_DeblockRows (MAE_tWMVDecInternalMember *MAE_pWMVDec,
U8_WMV* ppxliY, U8_WMV* ppxliU, U8_WMV* ppxliV,
I32_WMV iNumRows, U8_WMV* puchFilterFlagY, U8_WMV* puchFilterFlagU, U8_WMV* puchFilterFlagV
)
{
I32_WMV iX, iRow;
U8_WMV uchFlag, *puchFilterFlag;
U8_WMV * pCurr;
// Filter Y boundary rows
puchFilterFlag = puchFilterFlagY; // Set puchFilterFlag to Y array of flags
// This goes through each row of 8x8 blocks
for (iRow = 0; iRow < iNumRows; iRow ++)
{
pCurr = ppxliY + iRow * 8 * MAE_pWMVDec->m_iWidthPrevY;
for (iX = 0; iX < (MAE_pWMVDec->m_iWidthY + 31) >> 5; iX ++)
{
uchFlag = *puchFilterFlag ++;
MAE_FilterRow (MAE_pWMVDec, pCurr, (U8_WMV)(uchFlag >> 4), MAE_pWMVDec->m_iWidthPrevY, MAE_pWMVDec->m_iStepSize);
MAE_FilterRow (MAE_pWMVDec, pCurr + 16, (U8_WMV)(uchFlag & 0xf), MAE_pWMVDec->m_iWidthPrevY, MAE_pWMVDec->m_iStepSize);
pCurr += 32;
}
}
// Filter U boundary rows
puchFilterFlag = puchFilterFlagU;
for (iRow = 0; iRow < (iNumRows >> 1); iRow ++)
{
pCurr = ppxliU + iRow * 8 * MAE_pWMVDec->m_iWidthPrevUV;
for (iX = 0; iX < (MAE_pWMVDec->m_iWidthUV + 31) >> 5; iX ++)
{
uchFlag = *puchFilterFlag ++;
MAE_FilterRow (MAE_pWMVDec, pCurr, (U8_WMV)(uchFlag >> 4), MAE_pWMVDec->m_iWidthPrevUV, MAE_pWMVDec->m_iStepSize);
MAE_FilterRow (MAE_pWMVDec, pCurr + 16, (U8_WMV)(uchFlag & 0xf), MAE_pWMVDec->m_iWidthPrevUV, MAE_pWMVDec->m_iStepSize);
pCurr += 32;
}
}
// Filter V boundary rows
puchFilterFlag = puchFilterFlagV;
for (iRow = 0; iRow < (iNumRows >> 1); iRow ++)
{
pCurr = ppxliV + iRow * 8 * MAE_pWMVDec->m_iWidthPrevUV;
for (iX = 0; iX < (MAE_pWMVDec->m_iWidthUV + 31) >> 5; iX ++)
{
uchFlag = *puchFilterFlag ++;
MAE_FilterRow (MAE_pWMVDec, pCurr, (U8_WMV)(uchFlag >> 4), MAE_pWMVDec->m_iWidthPrevUV, MAE_pWMVDec->m_iStepSize);
MAE_FilterRow (MAE_pWMVDec, pCurr + 16, (U8_WMV)(uchFlag & 0xf), MAE_pWMVDec->m_iWidthPrevUV, MAE_pWMVDec->m_iStepSize);
pCurr += 32;
}
}
}
void MAE_DeblockColumns (MAE_tWMVDecInternalMember *MAE_pWMVDec,
U8_WMV* ppxliY, U8_WMV* ppxliU, U8_WMV* ppxliV,
I32_WMV iNumCols, I32_WMV iHeight,
U8_WMV* puchFilterFlagY, U8_WMV* puchFilterFlagU, U8_WMV* puchFilterFlagV
)
{
I32_WMV iY, iCol;
U8_WMV uchFlag, *puchFilterFlag;
U8_WMV* pCurr;
ppxliY -= 5;
ppxliU -= 5;
ppxliV -= 5;
// Filter Y boundary columns
puchFilterFlag = puchFilterFlagY;
for (iCol = 0; iCol < iNumCols; iCol ++)
{
pCurr = ppxliY + iCol * 8;
for (iY = 0; iY < (iHeight + 31) >> 5; iY ++)
{
uchFlag = *puchFilterFlag ++;
MAE_FilterColumn (MAE_pWMVDec, pCurr,(U8_WMV)(uchFlag >> 4), MAE_pWMVDec->m_iWidthPrevY, MAE_pWMVDec->m_iStepSize);
MAE_FilterColumn (MAE_pWMVDec, pCurr + 16 * MAE_pWMVDec->m_iWidthPrevY, (U8_WMV)(uchFlag & 0xf), MAE_pWMVDec->m_iWidthPrevY, MAE_pWMVDec->m_iStepSize);
pCurr += (32 * MAE_pWMVDec->m_iWidthPrevY);
}
}
// Filter U boundary columns
puchFilterFlag = puchFilterFlagU;
for (iCol = 0; iCol < (iNumCols >> 1); iCol ++)
{
pCurr = ppxliU + iCol * 8;
for (iY = 0; iY < ((iHeight >> 1) + 31) >> 5; iY ++)
{
uchFlag = *puchFilterFlag ++;
MAE_FilterColumn (MAE_pWMVDec, pCurr, (U8_WMV)(uchFlag >> 4), MAE_pWMVDec->m_iWidthPrevUV, MAE_pWMVDec->m_iStepSize);
MAE_FilterColumn (MAE_pWMVDec, pCurr + 16 * MAE_pWMVDec->m_iWidthPrevUV, (U8_WMV)(uchFlag & 0xf), MAE_pWMVDec->m_iWidthPrevUV, MAE_pWMVDec->m_iStepSize);
pCurr += (32 * MAE_pWMVDec->m_iWidthPrevUV);
}
}
// Filter V boundary columns
puchFilterFlag = puchFilterFlagV;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -