aboutsummaryrefslogtreecommitdiff
path: root/libvpx/vp9/encoder/vp9_speed_features.c
diff options
context:
space:
mode:
Diffstat (limited to 'libvpx/vp9/encoder/vp9_speed_features.c')
-rw-r--r--libvpx/vp9/encoder/vp9_speed_features.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/libvpx/vp9/encoder/vp9_speed_features.c b/libvpx/vp9/encoder/vp9_speed_features.c
index 0b24b5cb3..81695e915 100644
--- a/libvpx/vp9/encoder/vp9_speed_features.c
+++ b/libvpx/vp9/encoder/vp9_speed_features.c
@@ -345,7 +345,6 @@ static void set_good_speed_feature_framesize_independent(VP9_COMP *cpi,
sf->intra_y_mode_mask[TX_32X32] = INTRA_DC;
sf->intra_uv_mode_mask[TX_32X32] = INTRA_DC;
sf->adaptive_interp_filter_search = 1;
- sf->allow_partition_search_skip = 1;
if (cpi->twopass.fr_content_type == FC_GRAPHICS_ANIMATION) {
for (i = 0; i < MAX_MESH_STEP; ++i) {
@@ -457,6 +456,7 @@ static void set_rt_speed_feature_framesize_independent(
sf->cb_pred_filter_search = 0;
sf->force_smooth_interpol = 0;
sf->rt_intra_dc_only_low_content = 0;
+ sf->mv.enable_adaptive_subpel_force_stop = 0;
if (speed >= 1) {
sf->allow_txfm_domain_distortion = 1;
@@ -620,7 +620,7 @@ static void set_rt_speed_feature_framesize_independent(
// increase in encoding time.
if (cpi->use_svc && svc->spatial_layer_id > 0) sf->nonrd_keyframe = 1;
if (cm->frame_type != KEY_FRAME && cpi->resize_state == ORIG &&
- cpi->oxcf.rc_mode == VPX_CBR) {
+ cpi->oxcf.rc_mode == VPX_CBR && !cpi->rc.disable_overshoot_maxq_cbr) {
if (cm->width * cm->height <= 352 * 288 && !cpi->use_svc &&
cpi->oxcf.content != VP9E_CONTENT_SCREEN)
sf->overshoot_detection_cbr_rt = RE_ENCODE_MAXQ;
@@ -633,6 +633,7 @@ static void set_rt_speed_feature_framesize_independent(
sf->use_compound_nonrd_pickmode = 1;
}
if (cm->width * cm->height > 1280 * 720) sf->cb_pred_filter_search = 1;
+ if (!cpi->external_resize) sf->use_source_sad = 1;
}
if (speed >= 6) {
@@ -645,8 +646,6 @@ static void set_rt_speed_feature_framesize_independent(
sf->mv.reduce_first_step_size = 1;
sf->skip_encode_sb = 0;
- if (!cpi->external_resize) sf->use_source_sad = 1;
-
if (sf->use_source_sad) {
sf->adapt_partition_source_sad = 1;
sf->adapt_partition_thresh =
@@ -668,7 +667,7 @@ static void set_rt_speed_feature_framesize_independent(
sf->base_mv_aggressive = 1;
}
if (cm->frame_type != KEY_FRAME && cpi->resize_state == ORIG &&
- cpi->oxcf.rc_mode == VPX_CBR)
+ cpi->oxcf.rc_mode == VPX_CBR && !cpi->rc.disable_overshoot_maxq_cbr)
sf->overshoot_detection_cbr_rt = FAST_DETECTION_MAXQ;
}
@@ -727,7 +726,10 @@ static void set_rt_speed_feature_framesize_independent(
if (speed >= 8) {
sf->adaptive_rd_thresh = 4;
sf->skip_encode_sb = 1;
- sf->nonrd_keyframe = 1;
+ if (cpi->svc.number_spatial_layers > 1 && !cpi->svc.simulcast_mode)
+ sf->nonrd_keyframe = 0;
+ else
+ sf->nonrd_keyframe = 1;
if (!cpi->use_svc) cpi->max_copied_frame = 4;
if (cpi->row_mt && cpi->oxcf.max_threads > 1)
sf->adaptive_rd_thresh_row_mt = 1;
@@ -786,6 +788,15 @@ static void set_rt_speed_feature_framesize_independent(
if (cm->width * cm->height >= 640 * 360) sf->variance_part_thresh_mult = 2;
}
+ // Disable split to 8x8 for low-resolution at very high Q.
+ // For variance partition (speed >= 6). Ignore the first few frames
+ // as avg_frame_qindex starts at max_q (worst_quality).
+ if (cm->frame_type != KEY_FRAME && cm->width * cm->height <= 320 * 240 &&
+ sf->partition_search_type == VAR_BASED_PARTITION &&
+ cpi->rc.avg_frame_qindex[INTER_FRAME] > 208 &&
+ cpi->common.current_video_frame > 8)
+ sf->disable_16x16part_nonkey = 1;
+
if (sf->nonrd_use_ml_partition)
sf->partition_search_type = ML_BASED_PARTITION;
@@ -919,7 +930,6 @@ void vp9_set_speed_features_framesize_independent(VP9_COMP *cpi, int speed) {
sf->max_delta_qindex = 0;
sf->disable_filter_search_var_thresh = 0;
sf->adaptive_interp_filter_search = 0;
- sf->allow_partition_search_skip = 0;
sf->allow_txfm_domain_distortion = 0;
sf->tx_domain_thresh = 99.0;
sf->allow_quant_coeff_opt = sf->optimize_coefficients;
@@ -928,6 +938,7 @@ void vp9_set_speed_features_framesize_independent(VP9_COMP *cpi, int speed) {
sf->enable_tpl_model = oxcf->enable_tpl_model;
sf->prune_ref_frame_for_rect_partitions = 0;
sf->temporal_filter_search_method = MESH;
+ sf->allow_skip_txfm_ac_dc = 0;
for (i = 0; i < TX_SIZES; i++) {
sf->intra_y_mode_mask[i] = INTRA_ALL;