ref: 0bedb351ff8e3a323b9950b72dfed7cb8154e73d
parent: 0c5fd59efdb234fe0231615c858e1f9c9945cbfa
author: Hui Su <[email protected]>
date: Mon Oct 15 16:45:07 EDT 2018
ML_VAR_PARTITION: enable at speed 5 When the ML_VAR_PARTITION experiment is turned on, replace REFERENCE_PARTITION with ML_BASED_PARTITION at speed 5. Coding gains(avg_psnr) compared to baseline: ytlivehr 1.63% ytlivelr 0.07% Tested encoding speed with several clips from ytlivehr and ytlivelr on linux desktop(rt, vbr, 4 threads). Encoder speed is on average faster than baseline: 360p: 14% faster 720p: 7% faster 1080p: 1.5% faster Change-Id: I39b00078176ff516f7306818f33ba2b1ea53dfa1
--- a/vp9/encoder/vp9_encodeframe.c
+++ b/vp9/encoder/vp9_encodeframe.c
@@ -4539,7 +4539,7 @@
vpx_clear_system_state();
{
- const float thresh = 0.0f;
+ const float thresh = cpi->oxcf.speed <= 5 ? 1.25f : 0.0f;
float features[FEATURES] = { 0.0f };
const int dc_q = vp9_dc_quant(cm->base_qindex, 0, cm->bit_depth);
int feature_idx = 0;
@@ -4581,7 +4581,7 @@
assert(feature_idx == FEATURES);
nn_predict(features, nn_config, score);
if (score[0] > thresh) return PARTITION_SPLIT;
- if (score[0] < thresh) return PARTITION_NONE;
+ if (score[0] < -thresh) return PARTITION_NONE;
return -1;
}
}
--- a/vp9/encoder/vp9_speed_features.c
+++ b/vp9/encoder/vp9_speed_features.c
@@ -570,6 +570,16 @@
(frames_since_key % (sf->last_partitioning_redo_frequency << 1) == 1);
sf->max_delta_qindex = is_keyframe ? 20 : 15;
sf->partition_search_type = REFERENCE_PARTITION;
+#if CONFIG_ML_VAR_PARTITION
+ if (!frame_is_intra_only(cm) && cm->width >= 360 && cm->height >= 360)
+ sf->partition_search_type = ML_BASED_PARTITION;
+ else
+ sf->partition_search_type = REFERENCE_PARTITION;
+#if CONFIG_VP9_HIGHBITDEPTH
+ if (cpi->Source->flags & YV12_FLAG_HIGHBITDEPTH)
+ sf->partition_search_type = REFERENCE_PARTITION;
+#endif // CONFIG_VP9_HIGHBITDEPTH
+#endif // CONFIG_ML_VAR_PARTITION
if (cpi->oxcf.rc_mode == VPX_VBR && cpi->oxcf.lag_in_frames > 0 &&
cpi->rc.is_src_frame_alt_ref) {
sf->partition_search_type = VAR_BASED_PARTITION;
@@ -631,9 +641,7 @@
sf->use_compound_nonrd_pickmode = 1;
}
#if CONFIG_ML_VAR_PARTITION
- if (!frame_is_intra_only(cm) && cm->width >= 360 && cm->height >= 360)
- sf->partition_search_type = ML_BASED_PARTITION;
- else
+ if (frame_is_intra_only(cm) || cm->width < 360 || cm->height < 360)
sf->partition_search_type = VAR_BASED_PARTITION;
#if CONFIG_VP9_HIGHBITDEPTH
if (cpi->Source->flags & YV12_FLAG_HIGHBITDEPTH)