diff options
author | Jingning Han <jingning@google.com> | 2014-02-28 12:14:10 -0800 |
---|---|---|
committer | Gerrit Code Review <gerrit@gerrit.golo.chromium.org> | 2014-02-28 12:14:10 -0800 |
commit | da798043c512182f8fcf3cdc04b9f6c64617e741 (patch) | |
tree | 194604c596f7c6bb8d9004a3117a770f5132b461 | |
parent | 0bbc7f9825516e8e59a8a701e43df1aa967fd70a (diff) | |
parent | 24c7ee78c59eb2237d12658f8ca01ad0862bc444 (diff) | |
download | libvpx-da798043c512182f8fcf3cdc04b9f6c64617e741.tar libvpx-da798043c512182f8fcf3cdc04b9f6c64617e741.tar.gz libvpx-da798043c512182f8fcf3cdc04b9f6c64617e741.tar.bz2 libvpx-da798043c512182f8fcf3cdc04b9f6c64617e741.zip |
Merge "Skip some mode SAD calculation in non-RD mode"
-rw-r--r-- | vp9/encoder/vp9_pickmode.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index 87f20fa1c..0f2e3034f 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -270,12 +270,21 @@ int64_t vp9_pick_inter_mode(VP9_COMP *cpi, MACROBLOCK *x, &frame_mv[NEWMV][ref_frame]); } - mbmi->mode = this_mode; - mbmi->mv[0].as_int = frame_mv[this_mode][ref_frame].as_int; - vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); + if (frame_mv[this_mode][ref_frame].as_int == 0) { + dist = x->mode_sad[ref_frame][INTER_OFFSET(ZEROMV)]; + } else if (this_mode != NEARESTMV && + frame_mv[NEARESTMV][ref_frame].as_int == + frame_mv[this_mode][ref_frame].as_int) { + dist = x->mode_sad[ref_frame][INTER_OFFSET(NEARESTMV)]; + } else { + mbmi->mode = this_mode; + mbmi->mv[0].as_int = frame_mv[this_mode][ref_frame].as_int; + vp9_build_inter_predictors_sby(xd, mi_row, mi_col, bsize); + dist = x->mode_sad[ref_frame][INTER_OFFSET(this_mode)] = + cpi->fn_ptr[bsize].sdf(p->src.buf, p->src.stride, + pd->dst.buf, pd->dst.stride, INT_MAX); + } - dist = cpi->fn_ptr[bsize].sdf(p->src.buf, p->src.stride, - pd->dst.buf, pd->dst.stride, INT_MAX); this_rd = rate + dist; if (this_rd < best_rd) { |