Added a speed feature use_square_partition_only
authorYaowu Xu <yaowu@google.com>
Thu, 27 Jun 2013 19:07:07 +0000 (12:07 -0700)
committerYaowu Xu <yaowu@google.com>
Tue, 2 Jul 2013 23:40:15 +0000 (16:40 -0700)
This commit adds a speed feature where only squared partition are
evaluated in partition picking. Enable this feature in cpu-used 2
reduces encoding time by ~30%.

loss of compression:
-0.9% on cif set
-1.23% on stdhd

Change-Id: Ia6fad11210f0b78365abb889f9245604513be5b9

vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_onyx_if.c
vp9/encoder/vp9_onyx_int.h

index 2c833ab..d3bcb5a 100644 (file)
@@ -1488,7 +1488,8 @@ static void rd_pick_partition(VP9_COMP *cpi, TOKENEXTRA **tp, int mi_row,
           *(get_sb_partitioning(x, bsize)) = bsize;
       }
     }
-    if (!cpi->sf.less_rectangular_check || !larger_is_better) {
+    if (!cpi->sf.use_square_partition_only &&
+        (!cpi->sf.less_rectangular_check ||!larger_is_better)) {
       // PARTITION_HORZ
       if (bsize >= BLOCK_SIZE_SB8X8 && mi_col + (ms >> 1) < cm->mi_cols) {
         int r2, r = 0;
index 3265726..4c6c34b 100644 (file)
@@ -709,6 +709,7 @@ void vp9_set_speed_features(VP9_COMP *cpi) {
   sf->partition_by_variance = 0;
   sf->use_one_partition_size_always = 0;
   sf->less_rectangular_check = 0;
+  sf->use_square_partition_only = 0;
   sf->use_partitions_less_than = 0;
   sf->less_than_block_size = BLOCK_SIZE_MB16X16;
   sf->use_partitions_greater_than = 0;
@@ -749,25 +750,25 @@ void vp9_set_speed_features(VP9_COMP *cpi) {
                                       cpi->common.intra_only ||
                                       cpi->common.show_frame == 0) ?
                                      USE_FULL_RD :
-                                     USE_LARGESTINTRA);
+                                     USE_LARGESTALL);
+        sf->conditional_oblique_intramodes = 1;
         sf->disable_splitmv =
             (MIN(cpi->common.width, cpi->common.height) >= 720)? 1 : 0;
-        sf->conditional_oblique_intramodes = 1;
+        sf->use_square_partition_only = !(cpi->common.frame_type == KEY_FRAME ||
+                                   cpi->common.intra_only ||
+                                   cpi->common.show_frame == 0);
       }
       if (speed == 2) {
         sf->adjust_thresholds_by_speed = 1;
         sf->less_rectangular_check  = 1;
+        sf->use_square_partition_only = 1;
         sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES;
         sf->reduce_first_step_size = 1;
         sf->optimize_coefficients = 0;
         sf->use_lastframe_partitioning = 1;
         sf->adjust_partitioning_from_last_frame = 1;
         sf->last_partitioning_redo_frequency = 3;
-        sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME ||
-                                      cpi->common.intra_only ||
-                                      cpi->common.show_frame == 0) ?
-                                     USE_FULL_RD :
-                                     USE_LARGESTALL);
+        sf->tx_size_search_method = USE_LARGESTALL;
         sf->conditional_oblique_intramodes = 1;
       }
       if (speed == 3) {
index c947fe4..d325896 100644 (file)
@@ -234,6 +234,7 @@ typedef struct {
   int partition_by_variance;
   int use_one_partition_size_always;
   int less_rectangular_check;
+  int use_square_partition_only;
   BLOCK_SIZE_TYPE always_this_block_size;
   int use_partitions_greater_than;
   BLOCK_SIZE_TYPE greater_than_block_size;