More refactoring and cosmetics to rdopt.c

Change-Id: I7803d719ead238189e75c52701c3bb6c1552f4b5
This commit is contained in:
Daniel Kang 2012-08-07 14:39:25 -07:00 коммит произвёл Gerrit Code Review
Родитель 342040a6a6
Коммит a513af4baa
1 изменённых файлов: 47 добавлений и 88 удалений

Просмотреть файл

@ -2618,6 +2618,46 @@ static void store_coding_context(MACROBLOCK *x, int mb_index,
// x->mb_context[mb_index].rdmult = x->rdmult;
}
static void inter_mode_cost(VP8_COMP *cpi, MACROBLOCK *x, int this_mode,
int *rate2, int *distortion2, int *rate_y,
int *distortion, int* rate_uv, int *distortion_uv) {
// Y cost and distortion
#if CONFIG_TX16X16
if (this_mode == ZEROMV ||
this_mode == NEARESTMV ||
this_mode == NEARMV ||
this_mode == NEWMV)
macro_block_yrd_16x16(x, rate_y, distortion, IF_RTCD(&cpi->rtcd));
else {
#endif
if (cpi->common.txfm_mode == ALLOW_8X8)
macro_block_yrd_8x8(x, rate_y, distortion, IF_RTCD(&cpi->rtcd));
else
macro_block_yrd(x, rate_y, distortion, IF_RTCD(&cpi->rtcd));
#if CONFIG_TX16X16
}
#endif
*rate2 += *rate_y;
*distortion2 += *distortion;
// UV cost and distortion
if (cpi->common.txfm_mode == ALLOW_8X8
#if CONFIG_TX16X16
|| this_mode == ZEROMV ||
this_mode == NEARESTMV ||
this_mode == NEARMV ||
this_mode == NEWMV
#endif
)
rd_inter16x16_uv_8x8(cpi, x, rate_uv, distortion_uv,
cpi->common.full_pixel);
else
rd_inter16x16_uv(cpi, x, rate_uv, distortion_uv, cpi->common.full_pixel);
*rate2 += *rate_uv;
*distortion2 += *distortion_uv;
}
#define MIN(x,y) (((x)<(y))?(x):(y))
#define MAX(x,y) (((x)>(y))?(x):(y))
void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int recon_uvoffset,
@ -3291,48 +3331,9 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
// Add in the Mv/mode cost
rate2 += vp8_cost_mv_ref(cpi, this_mode, mdcounts);
// Y cost and distortion
#if CONFIG_TX16X16
if (this_mode == ZEROMV ||
this_mode == NEARESTMV ||
this_mode == NEARMV ||
this_mode == NEWMV)
macro_block_yrd_16x16(x, &rate_y, &distortion, IF_RTCD(&cpi->rtcd));
else {
#endif
if (cpi->common.txfm_mode == ALLOW_8X8)
macro_block_yrd_8x8(x, &rate_y, &distortion,
IF_RTCD(&cpi->rtcd));
else
macro_block_yrd(x, &rate_y, &distortion,
IF_RTCD(&cpi->rtcd));
#if CONFIG_TX16X16
}
#endif
rate2 += rate_y;
distortion2 += distortion;
// UV cost and distortion
vp8_build_inter16x16_predictors_mbuv(&x->e_mbd);
if (cpi->common.txfm_mode == ALLOW_8X8
#if CONFIG_TX16X16
|| this_mode == ZEROMV ||
this_mode == NEARESTMV ||
this_mode == NEARMV ||
this_mode == NEWMV
#endif
)
rd_inter16x16_uv_8x8(cpi, x, &rate_uv,
&distortion_uv,
cpi->common.full_pixel);
else
rd_inter16x16_uv(cpi, x, &rate_uv,
&distortion_uv,
cpi->common.full_pixel);
rate2 += rate_uv;
distortion2 += distortion_uv;
inter_mode_cost(cpi, x, this_mode, &rate2, &distortion2,
&rate_y, &distortion, &rate_uv, &distortion_uv);
mode_excluded = cpi->common.comp_pred_mode == COMP_PREDICTION_ONLY;
break;
@ -3439,47 +3440,8 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
&x->e_mbd.predictor[256],
&x->e_mbd.predictor[320], 16, 8);
/* Y cost and distortion */
if (cpi->common.txfm_mode == ALLOW_8X8
#if CONFIG_TX16X16
|| this_mode == ZEROMV ||
this_mode == NEARESTMV ||
this_mode == NEARMV ||
this_mode == NEWMV
#endif
)
#if CONFIG_TX16X16
macro_block_yrd_16x16(x, &rate_y, &distortion,
IF_RTCD(&cpi->rtcd));
#else
macro_block_yrd_8x8(x, &rate_y, &distortion,
IF_RTCD(&cpi->rtcd));
#endif
else
macro_block_yrd(x, &rate_y, &distortion,
IF_RTCD(&cpi->rtcd));
rate2 += rate_y;
distortion2 += distortion;
/* UV cost and distortion */
if (cpi->common.txfm_mode == ALLOW_8X8
#if CONFIG_TX16X16
|| this_mode == ZEROMV ||
this_mode == NEARESTMV ||
this_mode == NEARMV ||
this_mode == NEWMV
#endif
)
rd_inter16x16_uv_8x8(cpi, x, &rate_uv,
&distortion_uv,
cpi->common.full_pixel);
else
rd_inter16x16_uv(cpi, x, &rate_uv,
&distortion_uv,
cpi->common.full_pixel);
rate2 += rate_uv;
distortion2 += distortion_uv;
inter_mode_cost(cpi, x, this_mode, &rate2, &distortion2,
&rate_y, &distortion, &rate_uv, &distortion_uv);
}
/* don't bother w/ skip, we would never have come here if skip were enabled */
@ -3680,9 +3642,8 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int
single_rd < best_comp_rd) {
best_comp_rd = single_rd;
}
if (hybrid_rd < best_hybrid_rd) {
if (hybrid_rd < best_hybrid_rd)
best_hybrid_rd = hybrid_rd;
}
}
#if CONFIG_PRED_FILTER
}
@ -3900,7 +3861,6 @@ int vp8_rd_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x) {
} else {
xd->mode_info_context->mbmi.mode = mode16x16;
rate += rate16x16;
}
} else {
if (error4x4 < error8x8) {
@ -3916,7 +3876,6 @@ int vp8_rd_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x) {
#endif
xd->mode_info_context->mbmi.mode = B_PRED;
} else {
xd->mode_info_context->mbmi.mode = I8X8_PRED;
set_i8x8_block_modes(x, mode8x8);
rate += rate8x8;
@ -3925,8 +3884,8 @@ int vp8_rd_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x) {
return rate;
}
int vp8cx_pick_mode_inter_macroblock (VP8_COMP *cpi, MACROBLOCK *x,
int recon_yoffset, int recon_uvoffset) {
int vp8cx_pick_mode_inter_macroblock(VP8_COMP *cpi, MACROBLOCK *x,
int recon_yoffset, int recon_uvoffset) {
VP8_COMMON *cm = &cpi->common;
MACROBLOCKD *const xd = &x->e_mbd;
int rate;