From: Jingning Han Date: Tue, 1 Apr 2014 19:55:20 +0000 (-0700) Subject: Adjust rate allocation in non-RD coding mode X-Git-Tag: v1.4.0~1919^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=751d002f2fd45d2354d8d6419c940c12a6bf9a44;p=libvpx Adjust rate allocation in non-RD coding mode This commit reduces the frequency of frames using finer quantizer in non-RD coding flow, and slightly tune up the quantizer resolution when used. It provides 1.7% compression gains in speed -5 at no speed difference. Change-Id: I430249a51260a841a0402666e5ec1566e4f7d5a6 --- diff --git a/vp9/encoder/vp9_pickmode.c b/vp9/encoder/vp9_pickmode.c index b517d6cfe..099add730 100644 --- a/vp9/encoder/vp9_pickmode.c +++ b/vp9/encoder/vp9_pickmode.c @@ -193,9 +193,8 @@ static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize, int var = cpi->fn_ptr[bs].vf(p->src.buf, p->src.stride, pd->dst.buf, pd->dst.stride, &sse); - vp9_model_rd_from_var_lapndz(var + sse, 1 << num_pels_log2_lookup[bs], + vp9_model_rd_from_var_lapndz(sse + var, 1 << num_pels_log2_lookup[bs], pd->dequant[1] >> 3, &rate, &dist); - *out_rate_sum = rate; *out_dist_sum = dist << 3; } diff --git a/vp9/encoder/vp9_ratectrl.c b/vp9/encoder/vp9_ratectrl.c index 55a558122..e39c18cd6 100644 --- a/vp9/encoder/vp9_ratectrl.c +++ b/vp9/encoder/vp9_ratectrl.c @@ -985,8 +985,8 @@ int vp9_rc_pick_q_and_bounds(const VP9_COMP *cpi, q /= 3; if (q == 0) q++; - if (cpi->sf.partition_check == 1) - q -= 10; + if (cpi->sf.force_ref_frame == 1) + q -= 15; if (q < *bottom_index) *bottom_index = q; diff --git a/vp9/encoder/vp9_speed_features.c b/vp9/encoder/vp9_speed_features.c index f09035077..6a5c4e998 100644 --- a/vp9/encoder/vp9_speed_features.c +++ b/vp9/encoder/vp9_speed_features.c @@ -251,6 +251,9 @@ static void set_rt_speed_feature(VP9_COMMON *cm, sf->min_partition_size = BLOCK_8X8; sf->partition_check = (cm->current_video_frame % sf->last_partitioning_redo_frequency == 1); + sf->force_ref_frame = + (cm->current_video_frame % + (sf->last_partitioning_redo_frequency << 1) == 1); sf->partition_search_type = REFERENCE_PARTITION; sf->use_nonrd_pick_mode = 1; sf->search_method = FAST_DIAMOND; @@ -303,6 +306,7 @@ void vp9_set_speed_features(VP9_COMP *cpi) { sf->last_partitioning_redo_frequency = 4; sf->disable_split_mask = 0; sf->mode_search_skip_flags = 0; + sf->force_ref_frame = 0; sf->disable_split_var_thresh = 0; sf->disable_filter_search_var_thresh = 0; for (i = 0; i < TX_SIZES; i++) { diff --git a/vp9/encoder/vp9_speed_features.h b/vp9/encoder/vp9_speed_features.h index 5091e2b06..78bf40f45 100644 --- a/vp9/encoder/vp9_speed_features.h +++ b/vp9/encoder/vp9_speed_features.h @@ -252,6 +252,10 @@ typedef struct { // encoding process for RTC. int partition_check; + // Use finer quantizer in every other few frames that run variable block + // partition type search. + int force_ref_frame; + // Implements various heuristics to skip searching modes // The heuristics selected are based on flags // defined in the MODE_SEARCH_SKIP_HEURISTICS enum