⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmv9_filters.c

📁 au1200 linux2.6.11 硬件解码mae驱动和maiplayer播放器源码
💻 C
📖 第 1 页 / 共 5 页
字号:
        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 + -