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

📄 umc_h264_mc.cpp

📁 audio-video-codecs.rar语音编解码器
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        // Copy the stored 16x8 prediction data from the BiPred Mode Buffer

        pBiPred = curr_slice->m_pPred4BiPred;
        pMCDst = pDst;
        for (uRow=0; uRow<8; uRow++) {
            memcpy(pMCDst, pBiPred, 16*sizeof(PixType));
            pMCDst += DEST_PITCH;
            pBiPred += 16;
        }

        // Do other 16x8 block
        pMVFwd += 4*2;      // Reposition MV pointer to next 16x8
        pDst += DEST_PITCH*8;

        block_ref = pRefIdxL0[4 * 2];
        prev_frame = pRefPicList0[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields0[block_ref]] + pitchPixels*8;
        pMCRef = prev_frame + SubpelMVAdjust(pMVFwd, pitchPixels, iXType, iYType);

        // interpolate copy the 16x8 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size16x8, pMVFwd->mvy, uMBy, 8);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size16x8, m_PicParamSet.bit_depth_luma);
#endif
        break;

    case MBTYPE_FWD_BIDIR_16x8:
        // 2 vectors for the MB
        block_ref = pRefIdxL0[0];
        prev_frame = pRefPicList0[block_ref]->m_pYPlane
            + curr_slice->m_InitialOffset[pFields0[block_ref]] + uOffset;
        pMCRef = prev_frame + SubpelMVAdjust(pMVFwd, pitchPixels, iXType, iYType);

        // interpolate copy the 16x8 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size16x8, pMVFwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size16x8, m_PicParamSet.bit_depth_luma);
#endif

        // Copy the stored 2nd 16x8 prediction data from the BiPred Mode Buffer
        pBiPred = curr_slice->m_pPred4BiPred + 128;
        pMCDst = pDst + DEST_PITCH*8;
        for (uRow=0; uRow<8; uRow++) {
            memcpy(pMCDst, pBiPred, 16*sizeof(PixType));
            pMCDst += DEST_PITCH;
            pBiPred += 16;
        }
        break;

    case MBTYPE_BIDIR_BWD_16x8:
        // Copy the stored 16x8 prediction data from the BiPred Mode Buffer
        pBiPred = curr_slice->m_pPred4BiPred;
        pMCDst = pDst;
        for (uRow=0; uRow<8; uRow++) {
            memcpy(pMCDst, pBiPred, 16*sizeof(PixType));
            pMCDst += DEST_PITCH;
            pBiPred += 16;
        }

        // Do other 16x8 block
        pMVBwd += 4 * 2;      // Reposition MV pointer to next 16x8
        pDst += DEST_PITCH*8;

        block_ref = pRefIdxL1[4 * 2];
        futr_frame = pRefPicList1[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields1[block_ref]] + pitchPixels*8;
        pMCRef = futr_frame + SubpelMVAdjust(pMVBwd, pitchPixels, iXType, iYType);

        // interpolate copy the 16x8 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size16x8, pMVBwd->mvy, uMBy, 8);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size16x8, m_PicParamSet.bit_depth_luma);
#endif
        break;

    case MBTYPE_BWD_BIDIR_16x8:
        // 2 vectors for the MB
        block_ref = pRefIdxL1[0];
        futr_frame = pRefPicList1[block_ref]->m_pYPlane
            + curr_slice->m_InitialOffset[pFields1[block_ref]] + uOffset;
        pMCRef = futr_frame + SubpelMVAdjust(pMVBwd, pitchPixels, iXType, iYType);

        // interpolate copy the 16x8 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size16x8, pMVBwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size16x8, m_PicParamSet.bit_depth_luma);
#endif

        // Copy the stored 2nd 16x8 prediction data from the BiPred Mode Buffer

        pBiPred = curr_slice->m_pPred4BiPred + 128;
        pMCDst = pDst + DEST_PITCH*8;
        for (uRow=0; uRow<8; uRow++) {
            memcpy(pMCDst, pBiPred, 16*sizeof(PixType));
            pMCDst += DEST_PITCH;
            pBiPred += 16;
        }
        break;

    case MBTYPE_INTER_8x16:
    case MBTYPE_FWD_FWD_8x16:
        // 2 vectors for the MB
        block_ref = pRefIdxL0[0];
        prev_frame = pRefPicList0[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields0[block_ref]];
        pMCRef = prev_frame + SubpelMVAdjust(pMVFwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVFwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif

        // Do other 8x16 block
        pMVFwd += 2;                    // Reposition MV pointer to next 8x16
        pDst += 8;

        block_ref = pRefIdxL0[2];
        prev_frame = pRefPicList0[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields0[block_ref]]+ 8;
        pMCRef = prev_frame + SubpelMVAdjust(pMVFwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVFwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif
        break;

    case MBTYPE_FWD_BWD_8x16:
        // 2 vectors for the MB
        block_ref = pRefIdxL0[0];
        prev_frame = pRefPicList0[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields0[block_ref]];
        pMCRef = prev_frame + SubpelMVAdjust(pMVFwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVFwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif

        // Do other 8x16 block
        pMVBwd += 2;                    // Reposition MV pointer to next 8x16
        pDst += 8;

        block_ref = pRefIdxL1[2];
        futr_frame = pRefPicList1[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields1[block_ref]]+ 8;
        pMCRef = futr_frame + SubpelMVAdjust(pMVBwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVBwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif
        break;

    case MBTYPE_BWD_FWD_8x16:
        // 2 vectors for the MB
        block_ref = pRefIdxL1[0];
        futr_frame = pRefPicList1[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields1[block_ref]];
        pMCRef = futr_frame + SubpelMVAdjust(pMVBwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVBwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif

        // Do other 8x16 block
        pMVFwd += 2;                    // Reposition MV pointer to next 8x16
        pDst += 8;

        block_ref = pRefIdxL0[2];
        prev_frame = pRefPicList0[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields0[block_ref]]+ 8;
        pMCRef = prev_frame + SubpelMVAdjust(pMVFwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVFwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif
        break;

    case MBTYPE_BWD_BWD_8x16:
        // 2 vectors for the MB
        block_ref = pRefIdxL1[0];
        futr_frame = pRefPicList1[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields1[block_ref]];
        pMCRef = futr_frame + SubpelMVAdjust(pMVBwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVBwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif

        // Do other 8x16 block
        pMVBwd += 2;                    // Reposition MV pointer to next 8x16
        pDst += 8;

        block_ref = pRefIdxL1[2];
        futr_frame = pRefPicList1[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields1[block_ref]]+ 8;
        pMCRef = futr_frame + SubpelMVAdjust(pMVBwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVBwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif
        break;

    case MBTYPE_BIDIR_FWD_8x16:
        // Copy the stored 8x16 prediction data from the BiPred Mode Buffer
        pBiPred = curr_slice->m_pPred4BiPred;
        pMCDst = pDst;
        for (uRow=0; uRow<16; uRow++) {
            memcpy(pMCDst, pBiPred, 8*sizeof(PixType));
            pMCDst += DEST_PITCH;
            pBiPred += 16;
        }

        // Do other 8x16 block
        pMVFwd += 2;                    // Reposition MV pointer to next 8x16
        pDst += 8;

        block_ref = pRefIdxL0[2];
        prev_frame = pRefPicList0[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields0[block_ref]]+ 8;
        pMCRef = prev_frame + SubpelMVAdjust(pMVFwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVFwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif
        break;

    case MBTYPE_FWD_BIDIR_8x16:
        // 2 vectors for the MB
        block_ref = pRefIdxL0[0];
        prev_frame = pRefPicList0[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields0[block_ref]];
        pMCRef = prev_frame + SubpelMVAdjust(pMVFwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVFwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif

        // Copy the stored 2nd 8x16 prediction data from the BiPred Mode Buffer
        pBiPred = curr_slice->m_pPred4BiPred + 8;
        pMCDst = pDst + 8;
        for (uRow=0; uRow<16; uRow++) {
            memcpy(pMCDst, pBiPred, 8*sizeof(PixType));
            pMCDst += DEST_PITCH;
            pBiPred += 16;
        }
        break;

    case MBTYPE_BIDIR_BWD_8x16:
        // Copy the stored 8x16 prediction data from the BiPred Mode Buffer
        pBiPred = curr_slice->m_pPred4BiPred;
        pMCDst = pDst;
        for (uRow=0; uRow<16; uRow++) {
            memcpy(pMCDst, pBiPred, 8*sizeof(PixType));
            pMCDst += DEST_PITCH;
            pBiPred += 16;
        }

        // Do other 8x16 block
        pMVBwd += 2;                    // Reposition MV pointer to next 8x16
        pDst += 8;

        block_ref = pRefIdxL1[2];
        futr_frame = pRefPicList1[block_ref]->m_pYPlane + uOffset
            + curr_slice->m_InitialOffset[pFields1[block_ref]]+ 8;
        pMCRef = futr_frame + SubpelMVAdjust(pMVBwd, pitchPixels, iXType, iYType);

        // interpolate copy the 8x16 block
#ifdef NEW_INTERPOLATE
        Interpolate(mb_decoding_flag, pMCRef, pitchPixels,pDst, 16, iXType, iYType, size8x16, pMVBwd->mvy, uMBy, 0);
#else
        ippiInterpolateLuma_H264(pMCRef, pitchPixels*sizeof(PixType),pDst, sizeof(PixType)*16, iXType, iYType, size8x16, m_PicParamSet.bit_depth_luma);
#endif
        break;

    case MBTYPE_BWD_BIDIR_8x16:
        // 2 vectors for the MB
        block_ref = pRefIdxL1[0];

⌨️ 快捷键说明

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