📄 umc_mpeg2_enc_defs.h
字号:
2*BlkStride_##C, \
0, 0, vector[0][DIR].mctype_##C, 0); \
\
func_getdiff_field_##C(X##Block + (BlkHeight_##C/2)*CC##FrameHSize, \
CC##FrameHSize, \
X##RecFrame[pMBInfo[k].mv_field_sel[1][DIR]][DIR] + vector[1][DIR].offset_##C, \
CC##FrameHSize, \
pDiff + OFF_##X + (BlkHeight_##C/2)*BlkStride_##C, \
2*BlkStride_##C, \
0, 0, vector[1][DIR].mctype_##C, 0); \
}
#define GETDIFF_FIELD_FB(X, CC, C, pDiff) \
if (picture_structure == FRAME_PICTURE) { \
func_getdiffB_field_##C(X##Block, \
2*CC##FrameHSize, \
X##RecFrame[pMBInfo[k].mv_field_sel[0][0]][0] + vector[0][0].offset_##C, \
2*CC##FrameHSize, \
vector[0][0].mctype_##C, \
X##RecFrame[pMBInfo[k].mv_field_sel[0][1]][1] + vector[0][1].offset_##C, \
2*CC##FrameHSize, \
vector[0][1].mctype_##C, \
pDiff + OFF_##X, \
4*BlkStride_##C, \
ippRndZero); \
\
func_getdiffB_field_##C(X##Block + CC##FrameHSize, \
2*CC##FrameHSize, \
X##RecFrame[pMBInfo[k].mv_field_sel[1][0]][0] + vector[1][0].offset_##C, \
2*CC##FrameHSize, \
vector[1][0].mctype_##C, \
X##RecFrame[pMBInfo[k].mv_field_sel[1][1]][1] + vector[1][1].offset_##C, \
2*CC##FrameHSize, \
vector[1][1].mctype_##C, \
pDiff + OFF_##X + BlkStride_##C, \
4*BlkStride_##C, \
ippRndZero); \
} else { \
func_getdiffB_field_##C(X##Block, \
CC##FrameHSize, \
X##RecFrame[pMBInfo[k].mv_field_sel[0][0]][0] + vector[0][0].offset_##C,\
CC##FrameHSize, \
vector[0][0].mctype_##C, \
X##RecFrame[pMBInfo[k].mv_field_sel[0][1]][1] + vector[0][1].offset_##C,\
CC##FrameHSize, \
vector[0][1].mctype_##C, \
pDiff + OFF_##X, \
2*BlkStride_##C, \
ippRndZero); \
\
func_getdiffB_field_##C( \
X##Block + (BlkHeight_##C/2)*CC##FrameHSize, \
CC##FrameHSize, \
X##RecFrame[pMBInfo[k].mv_field_sel[1][0]][0] + vector[1][0].offset_##C, \
CC##FrameHSize, \
vector[1][0].mctype_##C, \
X##RecFrame[pMBInfo[k].mv_field_sel[1][1]][1] + vector[1][1].offset_##C, \
CC##FrameHSize, \
vector[1][1].mctype_##C, \
pDiff + OFF_##X + (BlkHeight_##C/2)*BlkStride_##C, \
2*BlkStride_##C, \
ippRndZero); \
}
#define MC_FRAME_F(X, CC, C, pDiff) \
func_mc_frame_##C( \
X##RecFrame[pMBInfo[k].mv_field_sel[2][0]][0] + vector[2][0].offset_##C, \
CC##FrameHSize, \
pDiff + OFF_##X, \
2*BlkStride_##C, \
X##BlockRec, \
CC##FrameHSize, \
vector[2][0].mctype_##C, \
(IppRoundMode)0 )
#define MC_FIELD_F(X, CC, C, pDiff) \
if (picture_structure == FRAME_PICTURE) { \
func_mc_field_##C( \
X##RecFrame[pMBInfo[k].mv_field_sel[0][0]][0] + vector[0][0].offset_##C, \
2*CC##FrameHSize, \
pDiff + OFF_##X, \
4*BlkStride_##C, \
X##BlockRec, \
2*CC##FrameHSize, \
vector[0][0].mctype_##C, \
(IppRoundMode)0 ); \
\
func_mc_field_##C( \
X##RecFrame[pMBInfo[k].mv_field_sel[1][0]][0] + vector[1][0].offset_##C, \
2*CC##FrameHSize, \
pDiff + OFF_##X + BlkStride_##C, \
4*BlkStride_##C, \
X##BlockRec + CC##FrameHSize, \
2*CC##FrameHSize, \
vector[1][0].mctype_##C, \
(IppRoundMode)0 ); \
} else { \
func_mc_field_##C( \
X##RecFrame[pMBInfo[k].mv_field_sel[0][0]][0] + vector[0][0].offset_##C, \
CC##FrameHSize, \
pDiff + OFF_##X, \
2*BlkStride_##C, \
X##BlockRec, \
CC##FrameHSize, \
vector[0][0].mctype_##C, \
(IppRoundMode)0 ); \
\
func_mc_field_##C( \
X##RecFrame[pMBInfo[k].mv_field_sel[1][0]][0] + vector[1][0].offset_##C, \
CC##FrameHSize, \
pDiff + OFF_##X + (BlkHeight_##C/2)*BlkStride_##C, \
2*BlkStride_##C, \
X##BlockRec + (BlkHeight_##C/2)*CC##FrameHSize, \
CC##FrameHSize, \
vector[1][0].mctype_##C, \
(IppRoundMode)0 ); \
}
// Note: right and bottom borders are excluding
#define BOUNDS_H(DIR, xoff) \
me_bound_left[DIR] = xoff - pMotionData[B_count].searchRange[DIR][0]; \
if (me_bound_left[DIR] < 0) \
{ \
me_bound_left[DIR] = 0; \
} \
me_bound_right[DIR] = xoff + pMotionData[B_count].searchRange[DIR][0]; \
if (me_bound_right[DIR] > MBcountH*16 - 16) { \
me_bound_right[DIR] = IPP_MAX(xoff, MBcountH*16 - 16); \
} \
me_bound_left[DIR] -= xoff; \
me_bound_right[DIR] -= xoff;
#define BOUNDS_V(DIR, yoff) \
me_bound_top[DIR] = yoff - pMotionData[B_count].searchRange[DIR][1]; \
if( me_bound_top[DIR] < 0 ) \
{ \
me_bound_top[DIR] = 0; \
} \
me_bound_bottom[DIR] = yoff + pMotionData[B_count].searchRange[DIR][1];\
if (me_bound_bottom[DIR] > YFrameVSize - 16) { \
me_bound_bottom[DIR] = IPP_MAX(yoff, YFrameVSize - 16); \
} \
me_bound_top[DIR] -= yoff; \
me_bound_bottom[DIR] -= yoff;
// internal border for 16x8 prediction
#define BOUNDS_V_FIELD(DIR, yoff) \
me_bound_1_bottom[DIR] = yoff + pMotionData[B_count].searchRange[DIR][1]; \
if (me_bound_1_bottom[DIR] > YFrameVSize - 8) { \
me_bound_1_bottom[DIR] = IPP_MAX(yoff, YFrameVSize - 8); \
} \
me_bound_2_top[DIR] = yoff + 8 - pMotionData[B_count].searchRange[DIR][1]; \
if( me_bound_2_top[DIR] < 0 ) \
{ \
me_bound_2_top[DIR] = 0; \
} \
me_bound_1_bottom[DIR] -= yoff; \
me_bound_2_top[DIR] -= yoff + 8;
#define ME_FRAME(DIR, vardiff_res, pDiff, dct_type) \
{ \
Ipp32s vardiff_tmp[4], meandiff_tmp[4], _vardiff; \
\
pRef[0] = YRefFrame[curr_field][DIR] + cur_offset; \
pRef[1] = YRefFrame[1-curr_field][DIR] + cur_offset; \
pRec[0] = YRecFrame[curr_field][DIR] + cur_offset; \
pRec[1] = YRecFrame[1-curr_field][DIR] + cur_offset; \
dct_type = DCT_FRAME; \
\
vardiff_res = MotionEstimation_Frame( pRef[ipflag], \
pRec[ipflag], \
YFrameHSize, \
YBlock, \
YFrameHSize, \
mean_frm, \
curr->var, \
curr->mean, \
me_bound_left[DIR], \
me_bound_right[DIR], \
me_bound_top[DIR], \
me_bound_bottom[DIR], \
threadSpec[numTh].PMV[0][DIR], \
pMBInfo[k].MV[0][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[0][DIR] \
: MV_ZERO, \
&vector[2][DIR], \
&threadSpec[numTh], \
i, j, \
&pMBInfo[k].mv_field_sel[2][DIR], \
NULL, ipflag); \
if(picture_structure != FRAME_PICTURE && !ipflag) { \
MotionEstimation_Frame( pRef[1], \
pRec[1], \
YFrameHSize, \
YBlock, \
YFrameHSize, \
mean_frm, \
curr->var, \
curr->mean, \
me_bound_left[DIR], \
me_bound_right[DIR], \
me_bound_top[DIR], \
me_bound_bottom[DIR], \
threadSpec[numTh].PMV[1][DIR], \
pMBInfo[k].MV[1][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[1][DIR] \
: MV_ZERO, \
&vector[2][DIR], \
&threadSpec[numTh], \
i, j, \
&pMBInfo[k].mv_field_sel[2][DIR], \
&vardiff_res, 1); \
} \
else if (!curr_frame_dct) { \
GETDIFF_FRAME(Y, Y, l, pDiff, DIR); \
\
VARMEAN_FIELD(pDiff, vardiff_tmp, meandiff_tmp, _vardiff); \
{ \
Ipp32s var_fld = 0, var = 0; \
ippiFrameFieldSAD16x16_16s32s_C1R(pDiff, BlkStride_l*2, &var, &var_fld); \
if (var_fld < var) { \
dct_type = DCT_FIELD; \
vardiff_res = _vardiff; \
ippsCopy_8u((Ipp8u*)vardiff_tmp, (Ipp8u*)curr->var, sizeof(curr->var)); \
ippsCopy_8u((Ipp8u*)meandiff_tmp, (Ipp8u*)curr->mean, sizeof(curr->mean)); \
} \
} \
} \
}
#define ME_FIELD(DIR, vardiff_fld, pDiff, dct_type) \
{ \
Ipp32s vardiff_tmp[4], meandiff_tmp[4], _vardiff; \
Ipp32s diff_f[2][2]; /* [srcfld][reffld] */ \
\
if (picture_structure == FRAME_PICTURE) { \
diff_f[0][0] = MotionEstimation_Field( pRef[0], \
pRec[0], \
2*YFrameHSize, \
YBlock, \
2*YFrameHSize, \
mean_fld, \
curr->var, \
curr->mean, \
me_bound_left[DIR], \
me_bound_right[DIR], \
(me_bound_top[DIR] + 0) >> 1, \
me_bound_bottom[DIR] >> 1, \
threadSpec[numTh].PMV[0][DIR], \
pMBInfo[k].MV[0][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[0][DIR] \
: MV_ZERO, \
&vector[0][DIR], \
&threadSpec[numTh], \
i, j, \
&pMBInfo[k].mv_field_sel[0][DIR], \
NULL, 0); \
diff_f[0][1] = MotionEstimation_Field( pRef[1], \
pRec[1], \
2*YFrameHSize, \
YBlock, \
2*YFrameHSize, \
mean_fld, \
curr->var, \
curr->mean, \
me_bound_left[DIR], \
me_bound_right[DIR], \
(me_bound_top[DIR] + 0) >> 1, \
me_bound_bottom[DIR] >> 1, \
threadSpec[numTh].PMV[0][DIR], \
pMBInfo[k].MV[0][DIR], \
(j != start_y) ? pMBInfo[k - MBcountH].MV[0][DIR] \
: MV_ZERO, \
&vector[0][DIR], \
&threadSpec[numTh], \
i, j, \
&pMBInfo[k].mv_field_sel[0][DIR], \
&diff_f[0][0], 1); \
\
diff_f[1][0] = MotionEstimation_Field( pRef[0], \
pRec[0], \
2*YFrameHSize, \
YBlock + YFrameHSize, \
2*YFrameHSize, \
mean_fld + 2, \
curr->var + 2, \
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -