diff options
author | Jingning Han <jingning@google.com> | 2014-01-08 10:06:03 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2014-01-08 10:06:03 -0800 |
commit | aa9552b0b591851467a715e77c77f5af762e235e (patch) | |
tree | bd86ce514348a05774c0974849b6606011147863 /vp9/encoder | |
parent | 0d21d79bbccfb72b06fa48a9507af109a933b5e4 (diff) | |
parent | 06e4f825af0a2dfe799364a50c19dfa2654437ad (diff) | |
download | libvpx-aa9552b0b591851467a715e77c77f5af762e235e.tar libvpx-aa9552b0b591851467a715e77c77f5af762e235e.tar.gz libvpx-aa9552b0b591851467a715e77c77f5af762e235e.tar.bz2 libvpx-aa9552b0b591851467a715e77c77f5af762e235e.zip |
Merge "Fix an issue in motion vector prediction stage"
Diffstat (limited to 'vp9/encoder')
-rw-r--r-- | vp9/encoder/vp9_rdopt.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index 9c6765240..40d698fc4 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -2119,16 +2119,20 @@ static void mv_pred(VP9_COMP *cpi, MACROBLOCK *x, cpi->common.show_frame && block_size < cpi->sf.max_partition_size); + int_mv pred_mv[3] = { + mbmi->ref_mvs[ref_frame][0], mbmi->ref_mvs[ref_frame][1], + x->pred_mv[ref_frame] + }; + // Get the sad for each candidate reference mv for (i = 0; i < num_mv_refs; i++) { - this_mv.as_int = (i < MAX_MV_REF_CANDIDATES) ? - mbmi->ref_mvs[ref_frame][i].as_int : x->pred_mv[ref_frame].as_int; + this_mv.as_int = pred_mv[i].as_int; max_mv = MAX(max_mv, MAX(abs(this_mv.as_mv.row), abs(this_mv.as_mv.col)) >> 3); - // The list is at an end if we see 0 for a second time. + // only need to check zero mv once if (!this_mv.as_int && zero_seen) - break; + continue; zero_seen = zero_seen || !this_mv.as_int; row_offset = this_mv.as_mv.row >> 3; @@ -2346,6 +2350,10 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, YV12_BUFFER_CONFIG *scaled_ref_frame = get_scaled_ref_frame(cpi, ref); + int_mv pred_mv[3] = { + mbmi->ref_mvs[ref][0], mbmi->ref_mvs[ref][1], x->pred_mv[ref] + }; + if (scaled_ref_frame) { int i; // Swap out the reference frame for a version that's been scaled to @@ -2410,9 +2418,7 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, } } - mvp_full = x->mv_best_ref_index[ref] < MAX_MV_REF_CANDIDATES - ? mbmi->ref_mvs[ref][x->mv_best_ref_index[ref]].as_mv - : x->pred_mv[ref].as_mv; + mvp_full = pred_mv[x->mv_best_ref_index[ref]].as_mv; mvp_full.col >>= 3; mvp_full.row >>= 3; |