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

📄 vopses.cpp

📁 网络MPEG4IP流媒体开发源代码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
                }        }        if ((pmbmd->m_rgTranspStatus[3] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                pmbmd->m_bMerged[2] = checkMergedStatus (7, 8, 15, 8);                if (pmbmd->m_bMerged[2]) {                        pmbmd->m_rgTranspStatusBBM[4] = ALL;                        overlayBlocks (7, 8, 15, 8, pmbmd->m_dctMd);                }        }        if (pmbmd->m_bMerged[1] | pmbmd->m_bMerged[2]) goto MERGE;        else {                if ((pmbmd->m_rgTranspStatus[1] & pmbmd->m_rgTranspStatus[3]) == PARTIAL) {                        pmbmd->m_bMerged[3] = checkMergedStatus (7, 0, 7, 8);                        if (pmbmd->m_bMerged[3]) {                                pmbmd->m_rgTranspStatusBBM[3] = ALL;                                overlayBlocks (7, 0, 7, 8, pmbmd->m_dctMd);                        }                }                if ((pmbmd->m_rgTranspStatus[2] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                        pmbmd->m_bMerged[4] = checkMergedStatus (15, 8, 7, 8);                        if (pmbmd->m_bMerged[4]) {                                pmbmd->m_rgTranspStatusBBM[4] = ALL;                                overlayBlocks (15, 8, 7, 8, pmbmd->m_dctMd);                        }                }                if (pmbmd->m_bMerged[3] | pmbmd->m_bMerged[4]) goto MERGE;                else {                        if ((pmbmd->m_rgTranspStatus[1] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                                pmbmd->m_bMerged[5] = checkMergedStatus (7, 8, 7, 8);                                if (pmbmd->m_bMerged[5]) {                                        pmbmd->m_rgTranspStatusBBM[4] = ALL;                                        overlayBlocks (7, 8, 7, 8, pmbmd->m_dctMd);                                }                        }                        if ((pmbmd->m_rgTranspStatus[2] & pmbmd->m_rgTranspStatus[3]) == PARTIAL) {                                pmbmd->m_bMerged[6] = checkMergedStatus (15, 0, 7, 8);                                if (pmbmd->m_bMerged[6]) {                                        pmbmd->m_rgTranspStatusBBM[3] = ALL;                                        overlayBlocks (15, 0, 7, 8, pmbmd->m_dctMd);                                }                        }                }        }MERGE:        for (UInt x=1; x<7; x++)                pmbmd->m_bMerged[0] |= pmbmd->m_bMerged[x];        if (pmbmd->m_bMerged[0])                swapTransparentModes (pmbmd, BBM);}Void CVideoObject::isBoundaryMacroBlockMerged (CMBMode* pmbmd){        if ((pmbmd->m_rgTranspStatus[1] & pmbmd->m_rgTranspStatus[2]) == PARTIAL) {                pmbmd->m_bMerged[1] = checkMergedStatus (7, 8, 7, 0);                if (pmbmd->m_bMerged[1])                        pmbmd->m_rgTranspStatusBBM[2] = ALL;        }        if ((pmbmd->m_rgTranspStatus[3] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                pmbmd->m_bMerged[2] = checkMergedStatus (7, 8, 15, 8);                if (pmbmd->m_bMerged[2])                        pmbmd->m_rgTranspStatusBBM[4] = ALL;        }        if (pmbmd->m_bMerged[1] | pmbmd->m_bMerged[2]) goto MERGE;        else {                if ((pmbmd->m_rgTranspStatus[1] & pmbmd->m_rgTranspStatus[3]) == PARTIAL) {                        pmbmd->m_bMerged[3] = checkMergedStatus (7, 0, 7, 8);                        if (pmbmd->m_bMerged[3])                                pmbmd->m_rgTranspStatusBBM[3] = ALL;                }                if ((pmbmd->m_rgTranspStatus[2] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                        pmbmd->m_bMerged[4] = checkMergedStatus (15, 8, 7, 8);                        if (pmbmd->m_bMerged[4])                                pmbmd->m_rgTranspStatusBBM[4] = ALL;                }                if (pmbmd->m_bMerged[3] | pmbmd->m_bMerged[4]) goto MERGE;                else {                        if ((pmbmd->m_rgTranspStatus[1] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                                pmbmd->m_bMerged[5] = checkMergedStatus (7, 8, 7, 8);                                if (pmbmd->m_bMerged[5])                                        pmbmd->m_rgTranspStatusBBM[4] = ALL;                        }                        if ((pmbmd->m_rgTranspStatus[2] & pmbmd->m_rgTranspStatus[3]) == PARTIAL) {                                pmbmd->m_bMerged[6] = checkMergedStatus (15, 0, 7, 8);                                if (pmbmd->m_bMerged[6])                                        pmbmd->m_rgTranspStatusBBM[3] = ALL;                        }                }        }MERGE:        for (UInt x=1; x<7; x++)                pmbmd->m_bMerged[0] |= pmbmd->m_bMerged[x];        if (pmbmd->m_bMerged[0])                swapTransparentModes (pmbmd, BBM);}Void CVideoObject::isBoundaryMacroBlockMerged (CMBMode* pmbmd, PixelC* ppxlcBY){        if ((pmbmd->m_rgTranspStatus[1] & pmbmd->m_rgTranspStatus[2]) == PARTIAL) {                pmbmd->m_bMerged[1] = checkMergedStatus (7, 8, 7, 0, ppxlcBY);                if (pmbmd->m_bMerged[1])                        pmbmd->m_rgTranspStatusBBM[2] = ALL;        }        if ((pmbmd->m_rgTranspStatus[3] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                pmbmd->m_bMerged[2] = checkMergedStatus (7, 8, 15, 8, ppxlcBY);                if (pmbmd->m_bMerged[2])                        pmbmd->m_rgTranspStatusBBM[4] = ALL;        }        if (pmbmd->m_bMerged[1] | pmbmd->m_bMerged[2]) goto MERGE;        else {                if ((pmbmd->m_rgTranspStatus[1] & pmbmd->m_rgTranspStatus[3]) == PARTIAL) {                        pmbmd->m_bMerged[3] = checkMergedStatus (7, 0, 7, 8, ppxlcBY);                        if (pmbmd->m_bMerged[3])                                pmbmd->m_rgTranspStatusBBM[3] = ALL;                }                if ((pmbmd->m_rgTranspStatus[2] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                        pmbmd->m_bMerged[4] = checkMergedStatus (15, 8, 7, 8, ppxlcBY);                        if (pmbmd->m_bMerged[4])                                pmbmd->m_rgTranspStatusBBM[4] = ALL;                }                if (pmbmd->m_bMerged[3] | pmbmd->m_bMerged[4]) goto MERGE;                else {                        if ((pmbmd->m_rgTranspStatus[1] & pmbmd->m_rgTranspStatus[4]) == PARTIAL) {                                pmbmd->m_bMerged[5] = checkMergedStatus (7, 8, 7, 8, ppxlcBY);                                if (pmbmd->m_bMerged[5])                                        pmbmd->m_rgTranspStatusBBM[4] = ALL;                        }                        if ((pmbmd->m_rgTranspStatus[2] & pmbmd->m_rgTranspStatus[3]) == PARTIAL) {                                pmbmd->m_bMerged[6] = checkMergedStatus (15, 0, 7, 8, ppxlcBY);                                if (pmbmd->m_bMerged[6])                                        pmbmd->m_rgTranspStatusBBM[3] = ALL;                        }                }        }MERGE:         for (UInt x=1; x<7; x++)                pmbmd->m_bMerged[0] |= pmbmd->m_bMerged[x];        if (pmbmd->m_bMerged[0])                swapTransparentModes (pmbmd, BBM);}Void CVideoObject::overlayBlocks (UInt x1, UInt x2, UInt y1, UInt y2, DCTMode dctMd){        UInt    pos1 = y1*MB_SIZE+x1,                pos2 = y2*MB_SIZE+x2;        PixelC  *SB1 = m_ppxlcCurrMBBY+pos1,                *SB2 = m_ppxlcCurrMBBY+pos2;         if (dctMd == INTRA || dctMd == INTRAQ) {                overlayBlocks (SB1, SB2, m_ppxlcCurrMBY+pos1, m_ppxlcCurrMBY+pos2);                if (m_volmd.fAUsage == EIGHT_BIT)                        overlayBlocks (SB1, SB2, m_ppxlcCurrMBA+pos1, m_ppxlcCurrMBA+pos2);        }        else {                overlayBlocks (SB2, m_ppxliErrorMBY+pos1, m_ppxliErrorMBY+pos2);                if (m_volmd.fAUsage == EIGHT_BIT)                        overlayBlocks (SB2, m_ppxliErrorMBA+pos1, m_ppxliErrorMBA+pos2);        }}Void CVideoObject::overlayBlocks (PixelC* SB1, PixelC* SB2, PixelC* ppxlcB1, PixelC* ppxlcB2){        UInt    x, y;        PixelC  *ppxlcS1, *ppxlcS2;         for (y = 0, ppxlcS1 = SB1, ppxlcS2 = SB2; y < BLOCK_SIZE; y++) {                for (x = 0; x < BLOCK_SIZE; x++, ppxlcS1--, ppxlcS2++, ppxlcB1--, ppxlcB2++)                        if (*ppxlcS2)                                *ppxlcB1 = *ppxlcB2;                        else if (!*ppxlcS1) {                                *ppxlcB1 += *ppxlcB2;                                *ppxlcB1 >>= 1;                        }                ppxlcS1 -= BLOCK_SIZE;                ppxlcS2 += BLOCK_SIZE;                ppxlcB1 -= BLOCK_SIZE;                ppxlcB2 += BLOCK_SIZE;        }} Void CVideoObject::overlayBlocks (PixelC* SB2, PixelI* ppxlcB1, PixelI* ppxlcB2){        UInt    x, y;        PixelC  *ppxlcS2;         for (y = 0, ppxlcS2 = SB2; y < BLOCK_SIZE; y++) {                for (x = 0; x < BLOCK_SIZE; x++, ppxlcS2++, ppxlcB1--, ppxlcB2++)                        if (*ppxlcS2)                                *ppxlcB1 = *ppxlcB2;                ppxlcS2 += BLOCK_SIZE;                ppxlcB1 -= BLOCK_SIZE;                ppxlcB2 += BLOCK_SIZE;        }}Bool CVideoObject::checkMergedStatus (UInt x1, UInt x2, UInt y1, UInt y2){        PixelC  *ppxlcS1 = m_ppxlcCurrMBBY + y1 * MB_SIZE + x1,                *ppxlcS2 = m_ppxlcCurrMBBY + y2 * MB_SIZE + x2;         for (UInt y = 0; y < BLOCK_SIZE; y++) {                for (UInt x = 0; x < BLOCK_SIZE; x++, ppxlcS1--, ppxlcS2++)                        if (*ppxlcS1 && *ppxlcS2)                                return FALSE;                ppxlcS1 -= BLOCK_SIZE;                ppxlcS2 += BLOCK_SIZE;        }        return TRUE;} Bool CVideoObject::checkMergedStatus (UInt x1, UInt x2, UInt y1, UInt y2, PixelC* ppxlcBY){        PixelC  *ppxlcS1 = ppxlcBY + y1 * MB_SIZE + x1,                *ppxlcS2 = ppxlcBY + y2 * MB_SIZE + x2;         for (UInt y = 0; y < BLOCK_SIZE; y++) {                for (UInt x = 0; x < BLOCK_SIZE; x++, ppxlcS1--, ppxlcS2++)                        if (*ppxlcS1 && *ppxlcS2)                                return FALSE;                ppxlcS1 -= BLOCK_SIZE;                ppxlcS2 += BLOCK_SIZE;        }        return TRUE;}Void CVideoObject::mergedMacroBlockSplit (CMBMode* pmbmd, PixelC* ppxlcRefMBY, PixelC* ppxlcRefMBA){        Bool    isIntra = (pmbmd->m_dctMd==INTRA || pmbmd->m_dctMd==INTRAQ) ? TRUE : FALSE;         swapTransparentModes (pmbmd, BBS);        if (pmbmd->m_bMerged[1])                if (isIntra)                        splitTwoMergedBlocks (7, 8, 7, 0, ppxlcRefMBY, ppxlcRefMBA);                else    splitTwoMergedBlocks (7, 8, 7, 0, m_ppxliErrorMBY, m_ppxliErrorMBA);        if (pmbmd->m_bMerged[2])                if (isIntra)                        splitTwoMergedBlocks (7, 8, 15, 8, ppxlcRefMBY, ppxlcRefMBA);                else    splitTwoMergedBlocks (7, 8, 15, 8, m_ppxliErrorMBY, m_ppxliErrorMBA);        if (pmbmd->m_bMerged[1] || pmbmd->m_bMerged[2]) goto SPLIT;        else {                if (pmbmd->m_bMerged[3])                        if (isIntra)                                splitTwoMergedBlocks (7, 0, 7, 8, ppxlcRefMBY, ppxlcRefMBA);                        else    splitTwoMergedBlocks (7, 0, 7, 8, m_ppxliErrorMBY, m_ppxliErrorMBA);                if (pmbmd->m_bMerged[4])                        if (isIntra)                                splitTwoMergedBlocks (15, 8, 7, 8, ppxlcRefMBY, ppxlcRefMBA);                        else    splitTwoMergedBlocks (15, 8, 7, 8, m_ppxliErrorMBY, m_ppxliErrorMBA);                if (pmbmd->m_bMerged[3] || pmbmd->m_bMerged[4]) goto SPLIT;                else {                        if (pmbmd->m_bMerged[5])                                if (isIntra)                                        splitTwoMergedBlocks (7, 8, 7, 8, ppxlcRefMBY, ppxlcRefMBA);                                else    splitTwoMergedBlocks (7, 8, 7, 8, m_ppxliErrorMBY, m_ppxliErrorMBA);                        if (pmbmd->m_bMerged[6])                                if (isIntra)                                        splitTwoMergedBlocks(15, 0, 7, 8, ppxlcRefMBY, ppxlcRefMBA);                                else    splitTwoMergedBlocks (15, 0, 7, 8, m_ppxliErrorMBY, m_ppxliErrorMBA);                }        }SPLIT:        return;}Void CVideoObject::splitTwoMergedBlocks (UInt x1, UInt x2, UInt y1, UInt y2, PixelC* ppxlcIn1, PixelC* ppxlcIn2){        UInt    SKIP = m_iFrameWidthY - BLOCK_SIZE,                pos1 = y1 * m_iFrameWidthY + x1,                pos2 = y2 * m_iFrameWidthY + x2,                pos3 = y2 * MB_SIZE + x2;        PixelC  *ppxlcS2, *ppxlcB1, *ppxlcB2;         ppxlcB1 = ppxlcIn1 + pos1;        ppxlcB2 = ppxlcIn1 + pos2;        ppxlcS2 = m_ppxlcCurrMBBY + pos3;        for (UInt y = 0; y < BLOCK_SIZE; y++) {                for (UInt x = 0; x < BLOCK_SIZE; x++, ppxlcS2++, ppxlcB1--, ppxlcB2++)                        if (*ppxlcS2)                                *ppxlcB2 = *ppxlcB1;                ppxlcS2 += BLOCK_SIZE;                ppxlcB1 -= SKIP;                ppxlcB2 += SKIP;        }        if (m_volmd.fAUsage == EIGHT_BIT) {                ppxlcB1 = ppxlcIn2 + pos1;                ppxlcB2 = ppxlcIn2 + pos2;                ppxlcS2 = m_ppxlcCurrMBBY + pos3;                for (UInt y = 0; y < BLOCK_SIZE; y++) {                        for (UInt x = 0; x < BLOCK_SIZE; x++, ppxlcS2++, ppxlcB1--, ppxlcB2++)                                if (*ppxlcS2)                                        *ppxlcB2 = *ppxlcB1;                        ppxlcS2 += BLOCK_SIZE;                        ppxlcB1 -= SKIP;                        ppxlcB2 += SKIP;                }        }}Void CVideoObject::splitTwoMergedBlocks (UInt x1, UInt x2, UInt y1, UInt y2, PixelI* ppxlcIn1, PixelI* ppxlcIn2){        UInt    pos1 = y1 * MB_SIZE + x1,                pos2 = y2 * MB_SIZE + x2;        PixelC  *ppxlcS2;        PixelI  *ppxlcB1, *ppxlcB2;         ppxlcB1 = ppxlcIn1 + pos1;        ppxlcB2 = ppxlcIn1 + pos2;        ppxlcS2 = m_ppxlcCurrMBBY + pos2;        for (UInt y = 0; y < BLOCK_SIZE; y++) {                for (UInt x = 0; x < BLOCK_SIZE; x++, ppxlcS2++, ppxlcB1--, ppxlcB2++)                        if (*ppxlcS2)                                *ppxlcB2 = *ppxlcB1;                ppxlcS2 += BLOCK_SIZE;                ppxlcB1 -= BLOCK_SIZE;                ppxlcB2 += BLOCK_SIZE;        }        if (m_volmd.fAUsage == EIGHT_BIT) {                ppxlcB1 = ppxlcIn2 + pos1;                ppxlcB2 = ppxlcIn2 + pos2;                ppxlcS2 = m_ppxlcCurrMBBY + pos2;                for (UInt y = 0; y < BLOCK_SIZE; y++) {                        for (UInt x = 0; x < BLOCK_SIZE; x++, ppxlcS2++, ppxlcB1--, ppxlcB2++)                                if (*ppxlcS2)                                        *ppxlcB2 = *ppxlcB1;                        ppxlcS2 += BLOCK_SIZE;                        ppxlcB1 -= BLOCK_SIZE;                        ppxlcB2 += BLOCK_SIZE;                }        }} Void CVideoObject::swapTransparentModes (CMBMode* pmbmd, Bool mode) {        TransparentStatus rgTranspStatusTmp[5];        memcpy (rgTranspStatusTmp, pmbmd->m_rgTranspStatusBBM, 5*sizeof(TransparentStatus));        memcpy (pmbmd->m_rgTranspStatusBBM, pmbmd->m_rgTranspStatus, 5*sizeof(TransparentStatus));        memcpy (pmbmd->m_rgTranspStatus, rgTranspStatusTmp, 5*sizeof(TransparentStatus));} Void CVideoObject::setMergedTransparentModes (CMBMode* pmbmd) {        memcpy (pmbmd->m_rgTranspStatusBBM, pmbmd->m_rgTranspStatus, 11*sizeof(TransparentStatus));} Void CVideoObject::initMergedMode (CMBMode* pmbmd) {        setMergedTransparentModes (pmbmd);        memset (pmbmd->m_bMerged, FALSE, 7*sizeof (Bool));}// End of Hyundai(1998-5-9)*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -