| Index: source/libvpx/vp9/encoder/vp9_speed_features.c
|
| ===================================================================
|
| --- source/libvpx/vp9/encoder/vp9_speed_features.c (revision 291087)
|
| +++ source/libvpx/vp9/encoder/vp9_speed_features.c (working copy)
|
| @@ -50,8 +50,20 @@
|
| (1 << THR_GOLD)
|
| };
|
|
|
| +// Intra only frames, golden frames (except alt ref overlays) and
|
| +// alt ref frames tend to be coded at a higher than ambient quality
|
| +static int frame_is_boosted(const VP9_COMP *cpi) {
|
| + return frame_is_intra_only(&cpi->common) ||
|
| + cpi->refresh_alt_ref_frame ||
|
| + (cpi->refresh_golden_frame && !cpi->rc.is_src_frame_alt_ref) ||
|
| + vp9_is_upper_layer_key_frame(cpi);
|
| +}
|
| +
|
| +
|
| static void set_good_speed_feature(VP9_COMP *cpi, VP9_COMMON *cm,
|
| SPEED_FEATURES *sf, int speed) {
|
| + const int boosted = frame_is_boosted(cpi);
|
| +
|
| sf->adaptive_rd_thresh = 1;
|
| sf->recode_loop = (speed < 1) ? ALLOW_RECODE : ALLOW_RECODE_KFMAXBW;
|
| sf->allow_skip_recode = 1;
|
| @@ -59,8 +71,6 @@
|
| if (speed >= 1) {
|
| sf->use_square_partition_only = !frame_is_intra_only(cm);
|
| sf->less_rectangular_check = 1;
|
| - sf->tx_size_search_method = frame_is_boosted(cpi) ? USE_FULL_RD
|
| - : USE_LARGESTALL;
|
|
|
| if (MIN(cm->width, cm->height) >= 720)
|
| sf->disable_split_mask = cm->show_frame ? DISABLE_ALL_SPLIT
|
| @@ -80,9 +90,14 @@
|
| sf->intra_uv_mode_mask[TX_32X32] = INTRA_DC_H_V;
|
| sf->intra_y_mode_mask[TX_16X16] = INTRA_DC_H_V;
|
| sf->intra_uv_mode_mask[TX_16X16] = INTRA_DC_H_V;
|
| +
|
| + sf->tx_size_search_breakout = 1;
|
| }
|
|
|
| if (speed >= 2) {
|
| + sf->tx_size_search_method = frame_is_boosted(cpi) ? USE_FULL_RD
|
| + : USE_LARGESTALL;
|
| +
|
| if (MIN(cm->width, cm->height) >= 720) {
|
| sf->lf_motion_threshold = LOW_MOTION_THRESHOLD;
|
| sf->last_partitioning_redo_frequency = 3;
|
| @@ -102,7 +117,7 @@
|
| FLAG_SKIP_INTRA_LOWVAR;
|
| sf->disable_filter_search_var_thresh = 100;
|
| sf->comp_inter_joint_search_thresh = BLOCK_SIZES;
|
| - sf->auto_min_max_partition_size = RELAXED_NEIGHBORING_MIN_MAX;
|
| + sf->auto_min_max_partition_size = CONSTRAIN_NEIGHBORING_MIN_MAX;
|
| sf->use_lastframe_partitioning = LAST_FRAME_PARTITION_LOW_MOTION;
|
| sf->adjust_partitioning_from_last_frame = 1;
|
| }
|
| @@ -117,9 +132,10 @@
|
| sf->disable_split_mask = DISABLE_ALL_INTER_SPLIT;
|
| }
|
| sf->adaptive_pred_interp_filter = 0;
|
| - sf->cb_partition_search = frame_is_boosted(cpi) ? 0 : 1;
|
| + sf->cb_partition_search = !boosted;
|
| sf->cb_pred_filter_search = 1;
|
| - sf->motion_field_mode_search = frame_is_boosted(cpi) ? 0 : 1;
|
| + sf->alt_ref_search_fp = 1;
|
| + sf->motion_field_mode_search = !boosted;
|
| sf->lf_motion_threshold = LOW_MOTION_THRESHOLD;
|
| sf->last_partitioning_redo_frequency = 3;
|
| sf->recode_loop = ALLOW_RECODE_KFMAXBW;
|
| @@ -347,6 +363,7 @@
|
| sf->cb_pred_filter_search = 0;
|
| sf->cb_partition_search = 0;
|
| sf->motion_field_mode_search = 0;
|
| + sf->alt_ref_search_fp = 0;
|
| sf->use_quant_fp = 0;
|
| sf->reference_masking = 0;
|
| sf->partition_search_type = SEARCH_PARTITION;
|
| @@ -389,6 +406,7 @@
|
| // Recode loop tolerence %.
|
| sf->recode_tolerance = 25;
|
| sf->default_interp_filter = SWITCHABLE;
|
| + sf->tx_size_search_breakout = 0;
|
|
|
| if (oxcf->mode == REALTIME) {
|
| set_rt_speed_feature(cpi, sf, oxcf->speed, oxcf->content);
|
|
|