📄 wmv9_filters.c
字号:
uch8x8Flag0 = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [2]);
uch8x8Flag0 |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [3]);
uch8x4FlagU = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [4]);
uch8x4FlagV = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [5]);
pLoopFilterFlag ++;
if ((MAE_pWMVDec->m_uintNumMBX & 2) == 2)
{
uch8x4Flag0 |= MAE_EXTRACT2_ROWX4(pLoopFilterFlag->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT3_ROWX4(pLoopFilterFlag->chFlag [1]);
uch8x4Flag1 |= MAE_EXTRACT2_ROWX4(pLoopFilterFlag->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT3_ROWX4(pLoopFilterFlag->chFlag [3]);
uch8x8Flag0 |= MAE_EXTRACT2_ROWX8(pLoopFilterFlag->chFlag [2]);
uch8x8Flag0 |= MAE_EXTRACT3_ROWX8(pLoopFilterFlag->chFlag [3]);
uch8x4FlagU |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [4]);
uch8x4FlagV |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [5]);
pLoopFilterFlag++;
}
*puch8x4FilterRow0++ = uch8x4Flag0;
*puch8x4FilterRow1++ = uch8x4Flag1;
*puch8x8FilterRow0++ = uch8x8Flag0;
if ((MAE_pWMVDec->m_uintNumMBX & 3) == 3)
{
uch8x4Flag0 = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [1]);
uch8x4Flag1 = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [3]);
uch8x8Flag0 = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [2]);
uch8x8Flag0 |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [3]);
uch8x4FlagU |= MAE_EXTRACT2_ROWX4(pLoopFilterFlag->chFlag [4]);
uch8x4FlagV |= MAE_EXTRACT2_ROWX4(pLoopFilterFlag->chFlag [5]);
pLoopFilterFlag++;
*puch8x4FilterRow0++ = uch8x4Flag0;
*puch8x4FilterRow1++ = uch8x4Flag1;
*puch8x8FilterRow0++ = uch8x8Flag0;
}
*puchFilterRowFlagU2++ = uch8x4FlagU;
*puchFilterRowFlagV2++ = uch8x4FlagV;
}
puch8x8FilterRow1 = puch8x8FilterRow0 + ((MAE_pWMVDec->m_uintNumMBX + 1) >> 1);
puch8x4FilterRow0 = puch8x4FilterRow1;
puch8x4FilterRow1 = puch8x4FilterRow1 + ((MAE_pWMVDec->m_uintNumMBX + 1) >> 1);
}
for (iMBY = iMBYStart; iMBY < iMBYEnd; iMBY ++)
{
for (i4MBX = 0; i4MBX < (I32_WMV) MAE_pWMVDec->m_uintNumMBX >> 2; i4MBX ++)
{
// Extract flag from pLoopFilterFlag
uch8x4Flag0 = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [1]);
uch8x8Flag0 = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [1]);
uch8x4Flag1 = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [3]);
uch8x8Flag1 = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [2]);
uch8x8Flag1 |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [3]);
uch8x4FlagU = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [4]);
uch8x4FlagV = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [5]);
uch8x8FlagU = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [4]);
uch8x8FlagV = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [5]);
uch8x4Flag0 |= MAE_EXTRACT2_ROWX4((pLoopFilterFlag + 1)->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT3_ROWX4((pLoopFilterFlag + 1)->chFlag [1]);
uch8x8Flag0 |= MAE_EXTRACT2_ROWX8((pLoopFilterFlag + 1)->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT3_ROWX8((pLoopFilterFlag + 1)->chFlag [1]);
uch8x4Flag1 |= MAE_EXTRACT2_ROWX4((pLoopFilterFlag + 1)->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT3_ROWX4((pLoopFilterFlag + 1)->chFlag [3]);
uch8x8Flag1 |= MAE_EXTRACT2_ROWX8((pLoopFilterFlag + 1)->chFlag [2]);
uch8x8Flag1 |= MAE_EXTRACT3_ROWX8((pLoopFilterFlag + 1)->chFlag [3]);
uch8x4FlagU |= MAE_EXTRACT1_ROWX4((pLoopFilterFlag + 1)->chFlag [4]);
uch8x4FlagV |= MAE_EXTRACT1_ROWX4((pLoopFilterFlag + 1)->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT1_ROWX8((pLoopFilterFlag + 1)->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT1_ROWX8((pLoopFilterFlag + 1)->chFlag [5]);
*puch8x4FilterRow0++ = uch8x4Flag0;
*puch8x4FilterRow1++ = uch8x4Flag1;
*puch8x8FilterRow0++ = uch8x8Flag0;
*puch8x8FilterRow1++ = uch8x8Flag1;
uch8x4Flag0 = MAE_EXTRACT0_ROWX4((pLoopFilterFlag + 2)->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT1_ROWX4((pLoopFilterFlag + 2)->chFlag [1]);
uch8x8Flag0 = MAE_EXTRACT0_ROWX8((pLoopFilterFlag + 2)->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT1_ROWX8((pLoopFilterFlag + 2)->chFlag [1]);
uch8x4Flag1 = MAE_EXTRACT0_ROWX4((pLoopFilterFlag + 2)->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT1_ROWX4((pLoopFilterFlag + 2)->chFlag [3]);
uch8x8Flag1 = MAE_EXTRACT0_ROWX8((pLoopFilterFlag + 2)->chFlag [2]);
uch8x8Flag1 |= MAE_EXTRACT1_ROWX8((pLoopFilterFlag + 2)->chFlag [3]);
uch8x4FlagU |= MAE_EXTRACT2_ROWX4((pLoopFilterFlag + 2)->chFlag [4]);
uch8x4FlagV |= MAE_EXTRACT2_ROWX4((pLoopFilterFlag + 2)->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT2_ROWX8((pLoopFilterFlag + 2)->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT2_ROWX8((pLoopFilterFlag + 2)->chFlag [5]);
uch8x4Flag0 |= MAE_EXTRACT2_ROWX4((pLoopFilterFlag + 3)->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT3_ROWX4((pLoopFilterFlag + 3)->chFlag [1]);
uch8x8Flag0 |= MAE_EXTRACT2_ROWX8((pLoopFilterFlag + 3)->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT3_ROWX8((pLoopFilterFlag + 3)->chFlag [1]);
uch8x4Flag1 |= MAE_EXTRACT2_ROWX4((pLoopFilterFlag + 3)->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT3_ROWX4((pLoopFilterFlag + 3)->chFlag [3]);
uch8x8Flag1 |= MAE_EXTRACT2_ROWX8((pLoopFilterFlag + 3)->chFlag [2]);
uch8x8Flag1 |= MAE_EXTRACT3_ROWX8((pLoopFilterFlag + 3)->chFlag [3]);
uch8x4FlagU |= MAE_EXTRACT3_ROWX4((pLoopFilterFlag + 3)->chFlag [4]);
uch8x4FlagV |= MAE_EXTRACT3_ROWX4((pLoopFilterFlag + 3)->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT3_ROWX8((pLoopFilterFlag + 3)->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT3_ROWX8((pLoopFilterFlag + 3)->chFlag [5]);
*puch8x4FilterRow0++ = uch8x4Flag0;
*puch8x4FilterRow1++ = uch8x4Flag1;
*puch8x8FilterRow0++ = uch8x8Flag0;
*puch8x8FilterRow1++ = uch8x8Flag1;
*puchFilterRowFlagU++ = uch8x8FlagU;
*puchFilterRowFlagV++ = uch8x8FlagV;
*puchFilterRowFlagU2++ = uch8x4FlagU;
*puchFilterRowFlagV2++ = uch8x4FlagV;
pLoopFilterFlag += 4;
}
if (MAE_pWMVDec->m_uintNumMBX & 3)
{
uch8x4Flag0 = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [1]);
uch8x8Flag0 = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [1]);
uch8x4Flag1 = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [3]);
uch8x8Flag1 = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [2]);
uch8x8Flag1 |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [3]);
uch8x4FlagU = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [4]);
uch8x4FlagV = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [5]);
uch8x8FlagU = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [4]);
uch8x8FlagV = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [5]);
pLoopFilterFlag++;
if ((MAE_pWMVDec->m_uintNumMBX & 2) == 2)
{
uch8x4Flag0 |= MAE_EXTRACT2_ROWX4(pLoopFilterFlag->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT3_ROWX4(pLoopFilterFlag->chFlag [1]);
uch8x8Flag0 |= MAE_EXTRACT2_ROWX8(pLoopFilterFlag->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT3_ROWX8(pLoopFilterFlag->chFlag [1]);
uch8x4Flag1 |= MAE_EXTRACT2_ROWX4(pLoopFilterFlag->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT3_ROWX4(pLoopFilterFlag->chFlag [3]);
uch8x8Flag1 |= MAE_EXTRACT2_ROWX8(pLoopFilterFlag->chFlag [2]);
uch8x8Flag1 |= MAE_EXTRACT3_ROWX8(pLoopFilterFlag->chFlag [3]);
uch8x4FlagU |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [4]);
uch8x4FlagV |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [5]);
pLoopFilterFlag++;
}
*puch8x4FilterRow0++ = uch8x4Flag0;
*puch8x4FilterRow1++ = uch8x4Flag1;
*puch8x8FilterRow0++ = uch8x8Flag0;
*puch8x8FilterRow1++ = uch8x8Flag1;
if ((MAE_pWMVDec->m_uintNumMBX & 3) == 3)
{
uch8x4Flag0 = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [0]);
uch8x4Flag0 |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [1]);
uch8x8Flag0 = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [0]);
uch8x8Flag0 |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [1]);
uch8x4Flag1 = MAE_EXTRACT0_ROWX4(pLoopFilterFlag->chFlag [2]);
uch8x4Flag1 |= MAE_EXTRACT1_ROWX4(pLoopFilterFlag->chFlag [3]);
uch8x8Flag1 = MAE_EXTRACT0_ROWX8(pLoopFilterFlag->chFlag [2]);
uch8x8Flag1 |= MAE_EXTRACT1_ROWX8(pLoopFilterFlag->chFlag [3]);
uch8x4FlagU |= MAE_EXTRACT2_ROWX4(pLoopFilterFlag->chFlag [4]);
uch8x4FlagV |= MAE_EXTRACT2_ROWX4(pLoopFilterFlag->chFlag [5]);
uch8x8FlagU |= MAE_EXTRACT2_ROWX8(pLoopFilterFlag->chFlag [4]);
uch8x8FlagV |= MAE_EXTRACT2_ROWX8(pLoopFilterFlag->chFlag [5]);
pLoopFilterFlag++;
*puch8x4FilterRow0++ = uch8x4Flag0;
*puch8x4FilterRow1++ = uch8x4Flag1;
*puch8x8FilterRow0++ = uch8x8Flag0;
*puch8x8FilterRow1++ = uch8x8Flag1;
}
*puchFilterRowFlagU++ = uch8x8FlagU;
*puchFilterRowFlagV++ = uch8x8FlagV;
*puchFilterRowFlagU2++ = uch8x4FlagU;
*puchFilterRowFlagV2++ = uch8x4FlagV;
}
puch8x4FilterRow0 = puch8x4FilterRow1;
puch8x4FilterRow1 = puch8x4FilterRow1 + ((MAE_pWMVDec->m_uintNumMBX + 1) >> 1);
puch8x8FilterRow0 = puch8x8FilterRow1;
puch8x8FilterRow1 = puch8x8FilterRow1 + ((MAE_pWMVDec->m_uintNumMBX + 1) >> 1);
}
}
void MAE_GenerateColumnLoopFilterFlags (MAE_tWMVDecInternalMember *MAE_pWMVDec,
U8_WMV* puchFilterColFlagY, U8_WMV* puchFilterColFlagU, U8_WMV* puchFilterColFlagV,
U8_WMV* puchFilterColFlagY2, U8_WMV* puchFilterColFlagU2, U8_WMV* puchFilterColFlagV2,
MAE_LOOPF_FLAG* pLoopFilterFlag, I32_WMV iMBHeight)
{
U8_WMV* puch4x8FilterCol0 = puchFilterColFlagY2;
U8_WMV* puch4x8FilterCol1 = puchFilterColFlagY2 + ((iMBHeight + 1) >> 1);
U8_WMV* puch8x8FilterCol0 = puchFilterColFlagY;
U8_WMV* puch8x8FilterCol1;
U8_WMV uch4x8Flag0, uch4x8Flag1, uch8x8Flag0, uch8x8Flag1;
U8_WMV uch8x8FlagU, uch8x8FlagV, uch4x8FlagU, uch4x8FlagV;
MAE_LOOPF_FLAG* pLoopFilterFlag2 = pLoopFilterFlag;
I32_WMV iMBX;
I32_WMV i4MBY;
uch4x8Flag0 = 0, uch4x8Flag1 = 0, uch8x8Flag0 = 0, uch8x8Flag1 = 0;
uch8x8FlagU = 0, uch8x8FlagV = 0, uch4x8FlagU = 0, uch4x8FlagV = 0;
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]);
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_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV = MAE_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
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]);
*puch4x8FilterCol0++ = uch4x8Flag0;
*puch4x8FilterCol1++ = uch4x8Flag1;
*puch8x8FilterCol0++ = uch8x8Flag0;
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
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]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
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_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [4]);
uch4x8FlagV |= MAE_EXTRACT3_COLX4(pLoopFilterFlag2->chFlag [5]);
pLoopFilterFlag2 += MAE_pWMVDec->m_uintNumMBX;
*puch4x8FilterCol0++ = uch4x8Flag0;
*puch4x8FilterCol1++ = uch4x8Flag1;
*puch8x8FilterCol0++ = uch8x8Flag0;
*puchFilterColFlagU2++ = uch4x8FlagU;
*puchFilterColFlagV2++ = uch4x8FlagV;
}
if (iMBHeight & 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_EXTRACT0_COLX4(pLoopFilterFlag2->chFlag [4]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -