summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJingning Han <jingning@google.com>2014-02-28 12:14:10 -0800
committerGerrit Code Review <gerrit@gerrit.golo.chromium.org>2014-02-28 12:14:10 -0800
commitda798043c512182f8fcf3cdc04b9f6c64617e741 (patch)
tree194604c596f7c6bb8d9004a3117a770f5132b461
parent0bbc7f9825516e8e59a8a701e43df1aa967fd70a (diff)
parent24c7ee78c59eb2237d12658f8ca01ad0862bc444 (diff)
downloadlibvpx-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.c19
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) {