📄 umc_h264_mc.cpp
字号:
// 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 + -