diff options
author | Yaowu Xu <yaowu@google.com> | 2011-11-15 16:16:30 -0800 |
---|---|---|
committer | Yaowu Xu <yaowu@google.com> | 2011-11-28 08:52:08 -0800 |
commit | 643238a3e02a1936fe9ddbfe2f1f7e046f25c8a0 (patch) | |
tree | 156067a4d06586689bd8bc3b0d3b9ac9ba9f2084 /vp8/encoder/rdopt.c | |
parent | ee2051f6500cf2a576a50f966c5e43df42430f86 (diff) | |
download | libvpx-643238a3e02a1936fe9ddbfe2f1f7e046f25c8a0.tar libvpx-643238a3e02a1936fe9ddbfe2f1f7e046f25c8a0.tar.gz libvpx-643238a3e02a1936fe9ddbfe2f1f7e046f25c8a0.tar.bz2 libvpx-643238a3e02a1936fe9ddbfe2f1f7e046f25c8a0.zip |
changed find_near_mvs search to include a mb from last frame
This is an experiment to include a mv contribution from last frame to
nearest and near mv definition. Initial test showed some small though
consistent gain.
latest patch slightly better result ~.13%-~.18%.
TODO: the entropy used to encode the mode choice, i.e. the mv counts
based conditional distribution of modes should be re-collected to
reflect this change, it is expected that there is some further gain
from that.
Change-Id: Ief1e284a36d8aa56b49ae5b360c91419ec494fa4
Diffstat (limited to 'vp8/encoder/rdopt.c')
-rw-r--r-- | vp8/encoder/rdopt.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/vp8/encoder/rdopt.c b/vp8/encoder/rdopt.c index d4458b9bf..76eec8a80 100644 --- a/vp8/encoder/rdopt.c +++ b/vp8/encoder/rdopt.c @@ -2003,8 +2003,12 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int { YV12_BUFFER_CONFIG *lst_yv12 = &cpi->common.yv12_fb[cpi->common.lst_fb_idx]; - vp8_find_near_mvs(&x->e_mbd, x->e_mbd.mode_info_context, &frame_nearest_mv[LAST_FRAME], &frame_near_mv[LAST_FRAME], - &frame_best_ref_mv[LAST_FRAME], frame_mdcounts[LAST_FRAME], LAST_FRAME, cpi->common.ref_frame_sign_bias); + vp8_find_near_mvs(&x->e_mbd, x->e_mbd.mode_info_context, +#if CONFIG_NEWNEAR + x->e_mbd.prev_mode_info_context, +#endif + &frame_nearest_mv[LAST_FRAME], &frame_near_mv[LAST_FRAME], + &frame_best_ref_mv[LAST_FRAME], frame_mdcounts[LAST_FRAME], LAST_FRAME, cpi->common.ref_frame_sign_bias); y_buffer[LAST_FRAME] = lst_yv12->y_buffer + recon_yoffset; u_buffer[LAST_FRAME] = lst_yv12->u_buffer + recon_uvoffset; @@ -2015,8 +2019,12 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int { YV12_BUFFER_CONFIG *gld_yv12 = &cpi->common.yv12_fb[cpi->common.gld_fb_idx]; - vp8_find_near_mvs(&x->e_mbd, x->e_mbd.mode_info_context, &frame_nearest_mv[GOLDEN_FRAME], &frame_near_mv[GOLDEN_FRAME], - &frame_best_ref_mv[GOLDEN_FRAME], frame_mdcounts[GOLDEN_FRAME], GOLDEN_FRAME, cpi->common.ref_frame_sign_bias); + vp8_find_near_mvs(&x->e_mbd, x->e_mbd.mode_info_context, +#if CONFIG_NEWNEAR + x->e_mbd.prev_mode_info_context, +#endif + &frame_nearest_mv[GOLDEN_FRAME], &frame_near_mv[GOLDEN_FRAME], + &frame_best_ref_mv[GOLDEN_FRAME], frame_mdcounts[GOLDEN_FRAME], GOLDEN_FRAME, cpi->common.ref_frame_sign_bias); y_buffer[GOLDEN_FRAME] = gld_yv12->y_buffer + recon_yoffset; u_buffer[GOLDEN_FRAME] = gld_yv12->u_buffer + recon_uvoffset; @@ -2027,7 +2035,11 @@ void vp8_rd_pick_inter_mode(VP8_COMP *cpi, MACROBLOCK *x, int recon_yoffset, int { YV12_BUFFER_CONFIG *alt_yv12 = &cpi->common.yv12_fb[cpi->common.alt_fb_idx]; - vp8_find_near_mvs(&x->e_mbd, x->e_mbd.mode_info_context, &frame_nearest_mv[ALTREF_FRAME], &frame_near_mv[ALTREF_FRAME], + vp8_find_near_mvs(&x->e_mbd, x->e_mbd.mode_info_context, +#if CONFIG_NEWNEAR + x->e_mbd.prev_mode_info_context, +#endif + &frame_nearest_mv[ALTREF_FRAME], &frame_near_mv[ALTREF_FRAME], &frame_best_ref_mv[ALTREF_FRAME], frame_mdcounts[ALTREF_FRAME], ALTREF_FRAME, cpi->common.ref_frame_sign_bias); y_buffer[ALTREF_FRAME] = alt_yv12->y_buffer + recon_yoffset; |