]> granicus.if.org Git - libvpx/commitdiff
vp9-rtc: Some speedups to speed 5 real-time mode
authorMarco Paniconi <marpan@google.com>
Fri, 17 Apr 2020 18:58:01 +0000 (11:58 -0700)
committerMarco Paniconi <marpan@google.com>
Mon, 20 Apr 2020 03:37:25 +0000 (20:37 -0700)
Enable use_source_sad at speed 5 and use it to
condition min_partition_size in nonrd_select_partition.
Also disable checking rectangular partitions in
nonrd_pick_partition for speed >= 5.

~5-8% speedup for HD clip on x86.
bdrate loss of ~1% on rtc set.

Change-Id: Ia643b34a51191e3929a443de77e271561e7c877d

vp9/encoder/vp9_encodeframe.c
vp9/encoder/vp9_speed_features.c

index 13f9a1fbd2522448cdcd9c3a7de4be44e6c7b511..e7360691315de6b7805e58ceaa961d29a4ec62c1 100644 (file)
@@ -5086,8 +5086,8 @@ static void nonrd_pick_partition(VP9_COMP *cpi, ThreadData *td,
 
   (void)*tp_orig;
 
-  // Avoid checking for rectangular partitions for speed >= 6.
-  if (cpi->oxcf.speed >= 6) do_rect = 0;
+  // Avoid checking for rectangular partitions for speed >= 5.
+  if (cpi->oxcf.speed >= 5) do_rect = 0;
 
   assert(num_8x8_blocks_wide_lookup[bsize] ==
          num_8x8_blocks_high_lookup[bsize]);
@@ -5345,6 +5345,11 @@ static void nonrd_select_partition(VP9_COMP *cpi, ThreadData *td,
              subsize >= subsize_ref) {
     x->max_partition_size = BLOCK_32X32;
     x->min_partition_size = BLOCK_8X8;
+    if (subsize_ref == BLOCK_16X16 && !xd->mi[0]->segment_id &&
+        x->content_state_sb != kVeryHighSad &&
+        x->content_state_sb != kLowVarHighSumdiff &&
+        x->content_state_sb != kHighSadHighSumdiff)
+      x->min_partition_size = BLOCK_16X16;
     nonrd_pick_partition(cpi, td, tile_data, tp, mi_row, mi_col, bsize, rd_cost,
                          0, INT64_MAX, pc_tree);
   } else if (bsize == BLOCK_16X16 && partition != PARTITION_NONE) {
index dea17e124599c9b3def5e5ce76ec6c300df3cb94..5bbe54923689dfbf3fab41156d2a2635c60d2cba 100644 (file)
@@ -634,6 +634,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) {
@@ -646,8 +647,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 =