diff options
author | Paul Wilkins <paulwilkins@google.com> | 2012-11-12 15:09:25 +0000 |
---|---|---|
committer | Paul Wilkins <paulwilkins@google.com> | 2012-11-12 15:50:02 +0000 |
commit | 2669f42b0d50bcff236176584caf623585e487b7 (patch) | |
tree | 5a17fb6160809e0577698226d26d621674a4eb76 /vp9/decoder | |
parent | 6fb8953c190430bbc324b57efa0297f6a612d7c7 (diff) | |
download | libvpx-2669f42b0d50bcff236176584caf623585e487b7.tar libvpx-2669f42b0d50bcff236176584caf623585e487b7.tar.gz libvpx-2669f42b0d50bcff236176584caf623585e487b7.tar.bz2 libvpx-2669f42b0d50bcff236176584caf623585e487b7.zip |
New inter mode context
This change is a fix / extension of the newbestrefmv
experiment. As such it is presented without IFDEF.
The change creates a new context for coding inter modes
in vp9_find_mv_refs(). This replaces the context that
was previously calculated in vp9_find_near_mvs().
The new context is unoptimized and not necessarily
any better at this stage (results pending), but eliminates
the need for a legacy call to vp9_find_near_mvs().
Based on numbers from Scott, this could help decode
speed by several %.
In a later patch I will add support for forward update of
context (assuming this helps) and refine the context as
necessary.
Change-Id: I1cd991b82c8df86cc02237a34185e6d67510698a
Diffstat (limited to 'vp9/decoder')
-rw-r--r-- | vp9/decoder/decodemv.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/vp9/decoder/decodemv.c b/vp9/decoder/decodemv.c index 7d4d6a7c2..52032bc9d 100644 --- a/vp9/decoder/decodemv.c +++ b/vp9/decoder/decodemv.c @@ -720,10 +720,6 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, int recon_y_stride, recon_yoffset; int recon_uv_stride, recon_uvoffset; - vp9_find_near_mvs(xd, mi, - prev_mi, - &nearest, &nearby, &best_mv, rct, - mbmi->ref_frame, cm->ref_frame_sign_bias); { int ref_fb_idx; MV_REFERENCE_FRAME ref_frame = mbmi->ref_frame; @@ -755,9 +751,10 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, recon_y_stride, mbmi->ref_mvs[ref_frame], &best_mv, &nearest, &nearby); - } - vp9_mv_ref_probs(&pbi->common, mv_ref_p, rct); + vp9_mv_ref_probs(&pbi->common, mv_ref_p, + mbmi->mb_mode_context[ref_frame]); + } // Is the segment level mode feature enabled for this segment if (vp9_segfeature_active(xd, mbmi->segment_id, SEG_LVL_MODE)) { @@ -771,7 +768,8 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, #endif mbmi->mode = read_mv_ref(bc, mv_ref_p); - vp9_accum_mv_refs(&pbi->common, mbmi->mode, rct); + vp9_accum_mv_refs(&pbi->common, mbmi->mode, + mbmi->mb_mode_context[mbmi->ref_frame]); } #if CONFIG_PRED_FILTER @@ -825,11 +823,6 @@ static void read_mb_modes_mv(VP9D_COMP *pbi, MODE_INFO *mi, MB_MODE_INFO *mbmi, cm->yv12_fb[second_ref_fb_idx].u_buffer + recon_uvoffset; xd->second_pre.v_buffer = cm->yv12_fb[second_ref_fb_idx].v_buffer + recon_uvoffset; - vp9_find_near_mvs(xd, mi, prev_mi, - &nearest_second, &nearby_second, &best_mv_second, - rct, - mbmi->second_ref_frame, - cm->ref_frame_sign_bias); vp9_find_mv_refs(xd, mi, prev_mi, mbmi->second_ref_frame, |