diff options
author | John Koleszar <jkoleszar@google.com> | 2011-09-16 09:22:29 -0400 |
---|---|---|
committer | John Koleszar <jkoleszar@google.com> | 2011-09-16 09:22:29 -0400 |
commit | 62371d382a4fb2570c60e0a0948bd32e91790f2a (patch) | |
tree | 8c26234167e8fd034aea025ef5dd7aff93950b61 /vp8/encoder/rdopt.c | |
parent | 3b5f8adcc0f4903c7fbc3986ff6f2f3356445c5b (diff) | |
parent | e47306eb7ac76f15931c917297b313a0985102e1 (diff) | |
download | libvpx-62371d382a4fb2570c60e0a0948bd32e91790f2a.tar libvpx-62371d382a4fb2570c60e0a0948bd32e91790f2a.tar.gz libvpx-62371d382a4fb2570c60e0a0948bd32e91790f2a.tar.bz2 libvpx-62371d382a4fb2570c60e0a0948bd32e91790f2a.zip |
Merge remote branch 'internal/upstream' into HEAD
Conflicts:
vp8/decoder/decodframe.c
vp8/encoder/encodeframe.c
vp8/encoder/encodemb.c
Change-Id: I6e0d1669e4409a2dfd73ba2c7038d730842d3953
Diffstat (limited to 'vp8/encoder/rdopt.c')
-rw-r--r-- | vp8/encoder/rdopt.c | 60 |
1 files changed, 48 insertions, 12 deletions
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index 952977094..416235d2b 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -498,14 +498,23 @@ int VP8_UVSSE(MACROBLOCK *x, const vp8_variance_rtcd_vtable_t *rtcd) unsigned int sse1 = 0; unsigned int sse2 = 0; - int mv_row; - int mv_col; + int mv_row = x->e_mbd.mode_info_context->mbmi.mv.as_mv.row; + int mv_col = x->e_mbd.mode_info_context->mbmi.mv.as_mv.col; int offset; int pre_stride = x->e_mbd.block[16].pre_stride; - vp8_build_uvmvs(&x->e_mbd, 0); - mv_row = x->e_mbd.block[16].bmi.mv.as_mv.row; - mv_col = x->e_mbd.block[16].bmi.mv.as_mv.col; + if (mv_row < 0) + mv_row -= 1; + else + mv_row += 1; + + if (mv_col < 0) + mv_col -= 1; + else + mv_col += 1; + + mv_row /= 2; + mv_col /= 2; offset = (mv_row >> 3) * pre_stride + (mv_col >> 3); uptr = x->e_mbd.pre.u_buffer + offset; @@ -849,11 +858,36 @@ static int rd_cost_mbuv(MACROBLOCK *mb) } -static int vp8_rd_inter_uv(VP8_COMP *cpi, MACROBLOCK *x, int *rate, int *distortion, int fullpixel) +static int rd_inter16x16_uv(VP8_COMP *cpi, MACROBLOCK *x, int *rate, + int *distortion, int fullpixel) { - vp8_build_uvmvs(&x->e_mbd, fullpixel); - vp8_encode_inter16x16uvrd(IF_RTCD(&cpi->rtcd), x); + vp8_build_inter16x16_predictors_mbuv(&x->e_mbd); + ENCODEMB_INVOKE(IF_RTCD(&cpi->rtcd.encodemb), submbuv)(x->src_diff, + x->src.u_buffer, x->src.v_buffer, x->e_mbd.predictor, x->src.uv_stride); +#if CONFIG_T8X8 + if(x->e_mbd.mode_info_context->mbmi.segment_id >= 2) + vp8_transform_mbuv_8x8(x); + else +#endif + vp8_transform_mbuv(x); + vp8_quantize_mbuv(x); + + *rate = rd_cost_mbuv(x); + *distortion = ENCODEMB_INVOKE(&cpi->rtcd.encodemb, mbuverr)(x) / 4; + + return RDCOST(x->rdmult, x->rddiv, *rate, *distortion); +} + +static int rd_inter4x4_uv(VP8_COMP *cpi, MACROBLOCK *x, int *rate, + int *distortion, int fullpixel) +{ + vp8_build_inter4x4_predictors_mbuv(&x->e_mbd); + ENCODEMB_INVOKE(IF_RTCD(&cpi->rtcd.encodemb), submbuv)(x->src_diff, + x->src.u_buffer, x->src.v_buffer, x->e_mbd.predictor, x->src.uv_stride); + + vp8_transform_mbuv(x); + vp8_quantize_mbuv(x); *rate = rd_cost_mbuv(x); *distortion = ENCODEMB_INVOKE(&cpi->rtcd.encodemb, mbuverr)(x) / 4; @@ -2019,7 +2053,7 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int if (tmp_rd < best_yrd) { // Now work out UV cost and add it in - vp8_rd_inter_uv(cpi, x, &rate_uv, &distortion_uv, cpi->common.full_pixel); + rd_inter4x4_uv(cpi, x, &rate_uv, &distortion_uv, cpi->common.full_pixel); rate2 += rate_uv; distortion2 += distortion_uv; } @@ -2270,7 +2304,7 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int distortion2 += distortion; // UV cost and distortion - vp8_rd_inter_uv(cpi, x, &rate_uv, &distortion_uv, cpi->common.full_pixel); + rd_inter16x16_uv(cpi, x, &rate_uv, &distortion_uv, cpi->common.full_pixel); rate2 += rate_uv; distortion2 += distortion_uv; break; @@ -2448,13 +2482,13 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int if (best_mbmode.mode == B_PRED) { for (i = 0; i < 16; i++) - x->e_mbd.block[i].bmi.as_mode = best_bmodes[i].as_mode; + xd->mode_info_context->bmi[i].as_mode = best_bmodes[i].as_mode; } if (best_mbmode.mode == SPLITMV) { for (i = 0; i < 16; i++) - x->e_mbd.block[i].bmi.mv.as_int = best_bmodes[i].mv.as_int; + xd->mode_info_context->bmi[i].mv.as_int = best_bmodes[i].mv.as_int; vpx_memcpy(x->partition_info, &best_partition, sizeof(PARTITION_INFO)); @@ -2464,6 +2498,8 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int rd_update_mvcount(cpi, x, &frame_best_ref_mv[xd->mode_info_context->mbmi.ref_frame]); + + } void vp8_rd_pick_intra_mode(VP8_COMP *cpi, MACROBLOCK *x, int *rate_) |