| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 | 99 |
| 100 sf->tx_size_search_breakout = 1; | 100 sf->tx_size_search_breakout = 1; |
| 101 sf->partition_search_breakout_rate_thr = 80; | 101 sf->partition_search_breakout_rate_thr = 80; |
| 102 } | 102 } |
| 103 | 103 |
| 104 if (speed >= 2) { | 104 if (speed >= 2) { |
| 105 sf->tx_size_search_method = frame_is_boosted(cpi) ? USE_FULL_RD | 105 sf->tx_size_search_method = frame_is_boosted(cpi) ? USE_FULL_RD |
| 106 : USE_LARGESTALL; | 106 : USE_LARGESTALL; |
| 107 | 107 |
| 108 sf->reference_masking = 1; | 108 sf->reference_masking = 1; |
| 109 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | | 109 sf->mode_search_skip_flags = (cm->frame_type == KEY_FRAME) ? 0 : |
| 110 FLAG_SKIP_INTRA_DIRMISMATCH | |
| 110 FLAG_SKIP_INTRA_BESTINTER | | 111 FLAG_SKIP_INTRA_BESTINTER | |
| 111 FLAG_SKIP_COMP_BESTINTRA | | 112 FLAG_SKIP_COMP_BESTINTRA | |
| 112 FLAG_SKIP_INTRA_LOWVAR; | 113 FLAG_SKIP_INTRA_LOWVAR; |
| 113 sf->disable_filter_search_var_thresh = 100; | 114 sf->disable_filter_search_var_thresh = 100; |
| 114 sf->comp_inter_joint_search_thresh = BLOCK_SIZES; | 115 sf->comp_inter_joint_search_thresh = BLOCK_SIZES; |
| 115 sf->auto_min_max_partition_size = CONSTRAIN_NEIGHBORING_MIN_MAX; | 116 sf->auto_min_max_partition_size = CONSTRAIN_NEIGHBORING_MIN_MAX; |
| 116 | 117 |
| 117 sf->allow_partition_search_skip = 1; | 118 sf->allow_partition_search_skip = 1; |
| 118 } | 119 } |
| 119 | 120 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 133 sf->intra_uv_mode_mask[TX_32X32] = INTRA_DC; | 134 sf->intra_uv_mode_mask[TX_32X32] = INTRA_DC; |
| 134 sf->adaptive_interp_filter_search = 1; | 135 sf->adaptive_interp_filter_search = 1; |
| 135 } | 136 } |
| 136 | 137 |
| 137 if (speed >= 4) { | 138 if (speed >= 4) { |
| 138 sf->use_square_partition_only = 1; | 139 sf->use_square_partition_only = 1; |
| 139 sf->tx_size_search_method = USE_LARGESTALL; | 140 sf->tx_size_search_method = USE_LARGESTALL; |
| 140 sf->mv.search_method = BIGDIA; | 141 sf->mv.search_method = BIGDIA; |
| 141 sf->mv.subpel_search_method = SUBPEL_TREE_PRUNED_MORE; | 142 sf->mv.subpel_search_method = SUBPEL_TREE_PRUNED_MORE; |
| 142 sf->adaptive_rd_thresh = 4; | 143 sf->adaptive_rd_thresh = 4; |
| 143 sf->mode_search_skip_flags |= FLAG_EARLY_TERMINATE; | 144 if (cm->frame_type != KEY_FRAME) |
| 145 sf->mode_search_skip_flags |= FLAG_EARLY_TERMINATE; |
| 144 sf->disable_filter_search_var_thresh = 200; | 146 sf->disable_filter_search_var_thresh = 200; |
| 145 sf->use_lp32x32fdct = 1; | 147 sf->use_lp32x32fdct = 1; |
| 146 sf->use_fast_coef_updates = ONE_LOOP_REDUCED; | 148 sf->use_fast_coef_updates = ONE_LOOP_REDUCED; |
| 147 sf->use_fast_coef_costing = 1; | 149 sf->use_fast_coef_costing = 1; |
| 148 sf->motion_field_mode_search = !boosted; | 150 sf->motion_field_mode_search = !boosted; |
| 149 sf->partition_search_breakout_rate_thr = 300; | 151 sf->partition_search_breakout_rate_thr = 300; |
| 150 } | 152 } |
| 151 | 153 |
| 152 if (speed >= 5) { | 154 if (speed >= 5) { |
| 153 int i; | 155 int i; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 sf->adaptive_motion_search = 1; | 221 sf->adaptive_motion_search = 1; |
| 220 sf->adaptive_pred_interp_filter = 1; | 222 sf->adaptive_pred_interp_filter = 1; |
| 221 sf->mv.auto_mv_step_size = 1; | 223 sf->mv.auto_mv_step_size = 1; |
| 222 sf->adaptive_rd_thresh = 2; | 224 sf->adaptive_rd_thresh = 2; |
| 223 sf->intra_y_mode_mask[TX_32X32] = INTRA_DC_H_V; | 225 sf->intra_y_mode_mask[TX_32X32] = INTRA_DC_H_V; |
| 224 sf->intra_uv_mode_mask[TX_32X32] = INTRA_DC_H_V; | 226 sf->intra_uv_mode_mask[TX_32X32] = INTRA_DC_H_V; |
| 225 sf->intra_uv_mode_mask[TX_16X16] = INTRA_DC_H_V; | 227 sf->intra_uv_mode_mask[TX_16X16] = INTRA_DC_H_V; |
| 226 } | 228 } |
| 227 | 229 |
| 228 if (speed >= 2) { | 230 if (speed >= 2) { |
| 229 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | | 231 sf->mode_search_skip_flags = (cm->frame_type == KEY_FRAME) ? 0 : |
| 232 FLAG_SKIP_INTRA_DIRMISMATCH | |
| 230 FLAG_SKIP_INTRA_BESTINTER | | 233 FLAG_SKIP_INTRA_BESTINTER | |
| 231 FLAG_SKIP_COMP_BESTINTRA | | 234 FLAG_SKIP_COMP_BESTINTRA | |
| 232 FLAG_SKIP_INTRA_LOWVAR; | 235 FLAG_SKIP_INTRA_LOWVAR; |
| 233 sf->adaptive_pred_interp_filter = 2; | 236 sf->adaptive_pred_interp_filter = 2; |
| 234 sf->reference_masking = 1; | 237 sf->reference_masking = 1; |
| 235 sf->disable_filter_search_var_thresh = 50; | 238 sf->disable_filter_search_var_thresh = 50; |
| 236 sf->comp_inter_joint_search_thresh = BLOCK_SIZES; | 239 sf->comp_inter_joint_search_thresh = BLOCK_SIZES; |
| 237 sf->auto_min_max_partition_size = RELAXED_NEIGHBORING_MIN_MAX; | 240 sf->auto_min_max_partition_size = RELAXED_NEIGHBORING_MIN_MAX; |
| 238 sf->lf_motion_threshold = LOW_MOTION_THRESHOLD; | 241 sf->lf_motion_threshold = LOW_MOTION_THRESHOLD; |
| 239 sf->adjust_partitioning_from_last_frame = 1; | 242 sf->adjust_partitioning_from_last_frame = 1; |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 sf->inter_mode_mask[BLOCK_32X32] = INTER_NEAREST_NEW_ZERO; | 301 sf->inter_mode_mask[BLOCK_32X32] = INTER_NEAREST_NEW_ZERO; |
| 299 sf->inter_mode_mask[BLOCK_32X64] = INTER_NEAREST_NEW_ZERO; | 302 sf->inter_mode_mask[BLOCK_32X64] = INTER_NEAREST_NEW_ZERO; |
| 300 sf->inter_mode_mask[BLOCK_64X32] = INTER_NEAREST_NEW_ZERO; | 303 sf->inter_mode_mask[BLOCK_64X32] = INTER_NEAREST_NEW_ZERO; |
| 301 sf->inter_mode_mask[BLOCK_64X64] = INTER_NEAREST_NEW_ZERO; | 304 sf->inter_mode_mask[BLOCK_64X64] = INTER_NEAREST_NEW_ZERO; |
| 302 sf->adaptive_rd_thresh = 2; | 305 sf->adaptive_rd_thresh = 2; |
| 303 // This feature is only enabled when partition search is disabled. | 306 // This feature is only enabled when partition search is disabled. |
| 304 sf->reuse_inter_pred_sby = 1; | 307 sf->reuse_inter_pred_sby = 1; |
| 305 sf->partition_search_breakout_rate_thr = 200; | 308 sf->partition_search_breakout_rate_thr = 200; |
| 306 sf->coeff_prob_appx_step = 4; | 309 sf->coeff_prob_appx_step = 4; |
| 307 sf->use_fast_coef_updates = is_keyframe ? TWO_LOOP : ONE_LOOP_REDUCED; | 310 sf->use_fast_coef_updates = is_keyframe ? TWO_LOOP : ONE_LOOP_REDUCED; |
| 311 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH; |
| 308 | 312 |
| 309 if (!is_keyframe) { | 313 if (!is_keyframe) { |
| 310 int i; | 314 int i; |
| 311 if (content == VP9E_CONTENT_SCREEN) { | 315 if (content == VP9E_CONTENT_SCREEN) { |
| 312 for (i = 0; i < TX_SIZES; ++i) | 316 for (i = 0; i < TX_SIZES; ++i) |
| 313 sf->intra_y_mode_mask[i] = INTRA_DC_TM_H_V; | 317 sf->intra_y_mode_mask[i] = INTRA_DC_TM_H_V; |
| 314 } else { | 318 } else { |
| 315 for (i = 0; i < TX_SIZES; i++) | 319 for (i = 0; i < TX_SIZES; i++) |
| 316 sf->intra_y_mode_mask[i] = INTRA_DC; | 320 sf->intra_y_mode_mask[i] = INTRA_DC; |
| 317 } | 321 } |
| 318 } | 322 } |
| 319 } | 323 } |
| 320 | 324 |
| 321 if (speed >= 6) { | 325 if (speed >= 6) { |
| 322 // Adaptively switch between SOURCE_VAR_BASED_PARTITION and FIXED_PARTITION. | 326 // Adaptively switch between SOURCE_VAR_BASED_PARTITION and FIXED_PARTITION. |
| 323 sf->partition_search_type = VAR_BASED_PARTITION; | 327 sf->partition_search_type = VAR_BASED_PARTITION; |
| 324 | |
| 325 // Turn on this to use non-RD key frame coding mode. | 328 // Turn on this to use non-RD key frame coding mode. |
| 326 sf->use_nonrd_pick_mode = 1; | 329 sf->use_nonrd_pick_mode = 1; |
| 327 sf->mv.search_method = NSTEP; | 330 sf->mv.search_method = NSTEP; |
| 328 sf->tx_size_search_method = is_keyframe ? USE_LARGESTALL : USE_TX_8X8; | 331 sf->tx_size_search_method = is_keyframe ? USE_LARGESTALL : USE_TX_8X8; |
| 329 sf->mv.reduce_first_step_size = 1; | 332 sf->mv.reduce_first_step_size = 1; |
| 330 sf->skip_encode_sb = 0; | 333 sf->skip_encode_sb = 0; |
| 331 } | 334 } |
| 332 | 335 |
| 333 if (speed >= 7) { | 336 if (speed >= 7) { |
| 334 sf->adaptive_rd_thresh = 3; | 337 sf->adaptive_rd_thresh = 3; |
| 335 sf->mv.search_method = FAST_DIAMOND; | 338 sf->mv.search_method = FAST_DIAMOND; |
| 336 sf->mv.fullpel_search_step_param = 10; | 339 sf->mv.fullpel_search_step_param = 10; |
| 337 sf->lpf_pick = LPF_PICK_MINIMAL_LPF; | 340 sf->lpf_pick = LPF_PICK_MINIMAL_LPF; |
| 338 } | 341 } |
| 339 | 342 if (speed >= 8) { |
| 340 if (speed >= 12) { | |
| 341 sf->adaptive_rd_thresh = 4; | 343 sf->adaptive_rd_thresh = 4; |
| 342 sf->mv.subpel_force_stop = 2; | 344 sf->mv.subpel_force_stop = 2; |
| 343 } | 345 } |
| 344 | |
| 345 if (speed >= 13) { | |
| 346 int i; | |
| 347 sf->max_intra_bsize = BLOCK_32X32; | |
| 348 for (i = 0; i < BLOCK_SIZES; ++i) | |
| 349 sf->inter_mode_mask[i] = INTER_NEAREST; | |
| 350 } | |
| 351 } | 346 } |
| 352 | 347 |
| 353 void vp9_set_speed_features_framesize_dependent(VP9_COMP *cpi) { | 348 void vp9_set_speed_features_framesize_dependent(VP9_COMP *cpi) { |
| 354 SPEED_FEATURES *const sf = &cpi->sf; | 349 SPEED_FEATURES *const sf = &cpi->sf; |
| 355 VP9_COMMON *const cm = &cpi->common; | 350 VP9_COMMON *const cm = &cpi->common; |
| 356 const VP9EncoderConfig *const oxcf = &cpi->oxcf; | 351 const VP9EncoderConfig *const oxcf = &cpi->oxcf; |
| 357 RD_OPT *const rd = &cpi->rd; | 352 RD_OPT *const rd = &cpi->rd; |
| 358 int i; | 353 int i; |
| 359 | 354 |
| 360 if (oxcf->mode == REALTIME) { | 355 if (oxcf->mode == REALTIME) { |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 491 | 486 |
| 492 x->optimize = sf->optimize_coefficients == 1 && oxcf->pass != 1; | 487 x->optimize = sf->optimize_coefficients == 1 && oxcf->pass != 1; |
| 493 | 488 |
| 494 x->min_partition_size = sf->default_min_partition_size; | 489 x->min_partition_size = sf->default_min_partition_size; |
| 495 x->max_partition_size = sf->default_max_partition_size; | 490 x->max_partition_size = sf->default_max_partition_size; |
| 496 | 491 |
| 497 if (!cpi->oxcf.frame_periodic_boost) { | 492 if (!cpi->oxcf.frame_periodic_boost) { |
| 498 sf->max_delta_qindex = 0; | 493 sf->max_delta_qindex = 0; |
| 499 } | 494 } |
| 500 } | 495 } |
| OLD | NEW |