From a0b9b050b845c2ed03f8c6405517ece0ad0e6ed1 Mon Sep 17 00:00:00 2001 From: Yaowu Xu Date: Wed, 22 Jan 2014 14:57:03 -0800 Subject: [PATCH] Added a speed feature That force the stop of subpel search possibly at full/half/quater pel stages Change-Id: Ie50c500417bd78e1a53e6620bd4c2b85f63d9c67 --- vp9/encoder/vp9_onyx_if.c | 2 ++ vp9/encoder/vp9_onyx_int.h | 3 +++ vp9/encoder/vp9_rdopt.c | 6 ++++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/vp9/encoder/vp9_onyx_if.c b/vp9/encoder/vp9_onyx_if.c index 38189edca..a0de23be6 100644 --- a/vp9/encoder/vp9_onyx_if.c +++ b/vp9/encoder/vp9_onyx_if.c @@ -839,6 +839,7 @@ static void set_rt_speed_feature(VP9_COMMON *cm, if (speed >= 5) { int i; sf->disable_split_mask = DISABLE_ALL_SPLIT; + sf->subpel_force_stop = 1; for (i = 0; i < TX_SIZES; i++) { sf->intra_y_mode_mask[i] = INTRA_DC_H_V; sf->intra_uv_mode_mask[i] = INTRA_DC_ONLY; @@ -867,6 +868,7 @@ void vp9_set_speed_features(VP9_COMP *cpi) { sf->recode_loop = 1; sf->subpel_search_method = SUBPEL_TREE; sf->subpel_iters_per_step = 2; + sf->subpel_force_stop = 0; sf->optimize_coefficients = !cpi->oxcf.lossless; sf->reduce_first_step_size = 0; sf->auto_mv_step_size = 0; diff --git a/vp9/encoder/vp9_onyx_int.h b/vp9/encoder/vp9_onyx_int.h index 5838c76d9..8c6d85c16 100644 --- a/vp9/encoder/vp9_onyx_int.h +++ b/vp9/encoder/vp9_onyx_int.h @@ -256,6 +256,9 @@ typedef struct { // Maximum number of steps in logarithmic subpel search before giving up. int subpel_iters_per_step; + // Control when to stop subpel search + int subpel_force_stop; + // Thresh_mult is used to set a threshold for the rd score. A higher value // means that we will accept the best mode so far more often. This number // is used in combination with the current block size, and thresh_freq_fact diff --git a/vp9/encoder/vp9_rdopt.c b/vp9/encoder/vp9_rdopt.c index b7ea34679..975e58b64 100644 --- a/vp9/encoder/vp9_rdopt.c +++ b/vp9/encoder/vp9_rdopt.c @@ -1840,7 +1840,8 @@ static void rd_check_segment_txsize(VP9_COMP *cpi, MACROBLOCK *x, &bsi->ref_mv->as_mv, cm->allow_high_precision_mv, x->errorperbit, v_fn_ptr, - 0, cpi->sf.subpel_iters_per_step, + cpi->sf.subpel_force_stop, + cpi->sf.subpel_iters_per_step, x->nmvjointcost, x->mvcost, &distortion, &x->pred_sse[mbmi->ref_frame[0]]); @@ -2451,7 +2452,8 @@ static void single_motion_search(VP9_COMP *cpi, MACROBLOCK *x, cm->allow_high_precision_mv, x->errorperbit, &cpi->fn_ptr[bsize], - 0, cpi->sf.subpel_iters_per_step, + cpi->sf.subpel_force_stop, + cpi->sf.subpel_iters_per_step, x->nmvjointcost, x->mvcost, &dis, &x->pred_sse[ref]); } -- 2.40.0