]> granicus.if.org Git - libvpx/commitdiff
vp9: Speed 6 adapt_partition for live/vbr usage.
authorMarco <marpan@google.com>
Mon, 21 Aug 2017 23:39:56 +0000 (16:39 -0700)
committerMarco <marpan@google.com>
Fri, 25 Aug 2017 18:36:34 +0000 (11:36 -0700)
Enable adapt_partition for vbr mode for speed 6.
This allows the usage of the pickmode-based partition
(used in speed 5), but only selectively for superblocks
with high source sad, otherwise the faster variance based
partition scheme is used.

For speed 6 on ytlive set: avgPSNR/SSIM metrics up by ~0.6%,
several clips up by ~1.5%. Small/negligible decrease in speed.

Change-Id: I12f3efef6b3e059391de330fdbe5a44c2587f1f8

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

index 0051361bba3cad49a3bca44c5f0fa58cba89d3bd..39c94adf3ac779f1ea64ba19fc41542b85e4288c 100644 (file)
@@ -4178,7 +4178,10 @@ static void encode_nonrd_sb_row(VP9_COMP *cpi, ThreadData *td,
       int shift = cpi->Source->y_stride * (mi_row << 3) + (mi_col << 3);
       int sb_offset2 = ((cm->mi_cols + 7) >> 3) * (mi_row >> 3) + (mi_col >> 3);
       int64_t source_sad = avg_source_sad(cpi, x, shift, sb_offset2);
-      if (sf->adapt_partition_source_sad && source_sad > 40000)
+      if (sf->adapt_partition_source_sad &&
+          (cpi->oxcf.rc_mode == VPX_VBR &&
+           source_sad > sf->adapt_partition_thresh &&
+           cpi->refresh_golden_frame))
         partition_search_type = REFERENCE_PARTITION;
     }
 
index 43ef4254d229ba70eb76e68c42b4950c694fec06..c4baa4fdbb0d6ef4722ed8d43f139f449cc9a220 100644 (file)
@@ -535,8 +535,9 @@ static void set_rt_speed_feature_framesize_independent(
     if (!cpi->external_resize && cm->width <= 1920) sf->use_source_sad = 1;
 
     if (sf->use_source_sad) {
-      if (cm->width * cm->height <= 640 * 360)
-        sf->adapt_partition_source_sad = 1;
+      sf->adapt_partition_source_sad = 1;
+      sf->adapt_partition_thresh =
+          (cm->width * cm->height <= 640 * 360) ? 40000 : 80000;
       if (cpi->content_state_sb_fd == NULL &&
           (!cpi->use_svc ||
            cpi->svc.spatial_layer_id == cpi->svc.number_spatial_layers - 1)) {
index 11e3154a0c9725705081c46c9478c918c0072565..bf266c4a36be23b8bbb8c237b7e8c9d8db2b908c 100644 (file)
@@ -491,9 +491,11 @@ typedef struct SPEED_FEATURES {
 
   int use_simple_block_yrd;
 
-  // If source sad of superblock is high, will switch from VARIANCE_PARTITION to
-  // REFERENCE_PARTITION (which selects partition based on the nonrd-pickmode).
+  // If source sad of superblock is high (> adapt_partition_thresh), will switch
+  // from VARIANCE_PARTITION to REFERENCE_PARTITION (which selects partition
+  // based on the nonrd-pickmode).
   int adapt_partition_source_sad;
+  int adapt_partition_thresh;
 } SPEED_FEATURES;
 
 struct VP9_COMP;