diff options
Diffstat (limited to 'vp9')
-rw-r--r-- | vp9/encoder/vp9_mcomp.c | 43 | ||||
-rw-r--r-- | vp9/encoder/vp9_speed_features.c | 15 | ||||
-rw-r--r-- | vp9/encoder/vp9_speed_features.h | 3 | ||||
-rw-r--r-- | vp9/encoder/vp9_temporal_filter.c | 2 |
4 files changed, 35 insertions, 28 deletions
diff --git a/vp9/encoder/vp9_mcomp.c b/vp9/encoder/vp9_mcomp.c index ba72c0be5..5c19cc039 100644 --- a/vp9/encoder/vp9_mcomp.c +++ b/vp9/encoder/vp9_mcomp.c @@ -2186,6 +2186,8 @@ int vp9_full_pixel_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, const SEARCH_METHODS method = (SEARCH_METHODS)search_method; vp9_variance_fn_ptr_t *fn_ptr = &cpi->fn_ptr[bsize]; int var = 0; + int run_mesh_search = (method == MESH); + if (cost_list) { cost_list[0] = INT_MAX; cost_list[1] = INT_MAX; @@ -2216,29 +2218,32 @@ int vp9_full_pixel_search(VP9_COMP *cpi, MACROBLOCK *x, BLOCK_SIZE bsize, fn_ptr, 1, ref_mv, tmp_mv); break; default: - assert(method == NSTEP); + assert(method == NSTEP || method == MESH); var = full_pixel_diamond(cpi, x, mvp_full, step_param, error_per_bit, MAX_MVSEARCH_STEPS - 1 - step_param, 1, cost_list, fn_ptr, ref_mv, tmp_mv); - // Should we allow a follow on exhaustive search? - if ((sf->exhaustive_searches_thresh < INT_MAX) && - !cpi->rc.is_src_frame_alt_ref) { - int64_t exhuastive_thr = sf->exhaustive_searches_thresh; - exhuastive_thr >>= - 8 - (b_width_log2_lookup[bsize] + b_height_log2_lookup[bsize]); - - // Threshold variance for an exhaustive full search. - if (var > exhuastive_thr) { - int var_ex; - MV tmp_mv_ex; - var_ex = full_pixel_exhaustive(cpi, x, tmp_mv, error_per_bit, - cost_list, fn_ptr, ref_mv, &tmp_mv_ex); - - if (var_ex < var) { - var = var_ex; - *tmp_mv = tmp_mv_ex; - } + // Should we allow a follow on exhaustive search, in regular rd search + // mode. + if (run_mesh_search == 0) { + if ((sf->exhaustive_searches_thresh < INT_MAX) && + !cpi->rc.is_src_frame_alt_ref) { + int64_t exhuastive_thr = sf->exhaustive_searches_thresh; + exhuastive_thr >>= + 8 - (b_width_log2_lookup[bsize] + b_height_log2_lookup[bsize]); + if (var > exhuastive_thr) run_mesh_search = 1; + } + } + + if (run_mesh_search) { + int var_ex; + MV tmp_mv_ex; + var_ex = full_pixel_exhaustive(cpi, x, tmp_mv, error_per_bit, cost_list, + fn_ptr, ref_mv, &tmp_mv_ex); + + if (var_ex < var) { + var = var_ex; + *tmp_mv = tmp_mv_ex; } } break; diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c index 6d179f7bd..fb3d231e9 100644 --- a/vp9/encoder/vp9_speed_features.c +++ b/vp9/encoder/vp9_speed_features.c @@ -201,17 +201,18 @@ static void set_good_speed_feature_framesize_independent(VP9_COMP *cpi, if (cpi->twopass.fr_content_type == FC_GRAPHICS_ANIMATION) { sf->exhaustive_searches_thresh = (1 << 22); - for (i = 0; i < MAX_MESH_STEP; ++i) { - int mesh_density_level = 0; - sf->mesh_patterns[i].range = - good_quality_mesh_patterns[mesh_density_level][i].range; - sf->mesh_patterns[i].interval = - good_quality_mesh_patterns[mesh_density_level][i].interval; - } } else { sf->exhaustive_searches_thresh = INT_MAX; } + for (i = 0; i < MAX_MESH_STEP; ++i) { + const int mesh_density_level = 0; + sf->mesh_patterns[i].range = + good_quality_mesh_patterns[mesh_density_level][i].range; + sf->mesh_patterns[i].interval = + good_quality_mesh_patterns[mesh_density_level][i].interval; + } + if (speed >= 1) { sf->enable_tpl_model = 0; sf->prune_ref_frame_for_rect_partitions = 0; diff --git a/vp9/encoder/vp9_speed_features.h b/vp9/encoder/vp9_speed_features.h index fd4973fb2..406b40755 100644 --- a/vp9/encoder/vp9_speed_features.h +++ b/vp9/encoder/vp9_speed_features.h @@ -57,7 +57,8 @@ typedef enum { BIGDIA = 3, SQUARE = 4, FAST_HEX = 5, - FAST_DIAMOND = 6 + FAST_DIAMOND = 6, + MESH = 7 } SEARCH_METHODS; typedef enum { diff --git a/vp9/encoder/vp9_temporal_filter.c b/vp9/encoder/vp9_temporal_filter.c index 9a357c105..99a03edf3 100644 --- a/vp9/encoder/vp9_temporal_filter.c +++ b/vp9/encoder/vp9_temporal_filter.c @@ -230,7 +230,7 @@ static uint32_t temporal_filter_find_matching_mb_c(VP9_COMP *cpi, MACROBLOCK *const x = &td->mb; MACROBLOCKD *const xd = &x->e_mbd; MV_SPEED_FEATURES *const mv_sf = &cpi->sf.mv; - const SEARCH_METHODS search_method = NSTEP; + const SEARCH_METHODS search_method = MESH; int step_param; int sadpb = x->sadperbit16; uint32_t bestsme = UINT_MAX; |