]> granicus.if.org Git - libvpx/commitdiff
vp9-svc: Enbale scale partition reference frames.
authorMarco <marpan@google.com>
Fri, 17 Nov 2017 17:47:03 +0000 (09:47 -0800)
committerMarco <marpan@google.com>
Fri, 17 Nov 2017 22:52:20 +0000 (14:52 -0800)
For reference frames: enable scale partition for
superblocks with low source sad or if bsize on lower-resoln
is at least 32x32.

Keep feature disabled for base temporal layer.

Small regression in avgPNSR/SSIM metrics, ~0.5-1%.
Speedup ~2-3% on mac for SVC (3 spatial/3 temporal layers) at speed 7.

Change-Id: I5987eb7763845b680059128b538bb5188be0cca5

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

index e3ec823d2ab510d7d9090bbf8fff4f02a1bb5216..d46a76074e8bc9af2e13b446c0e0c2748a90f389 100644 (file)
@@ -962,6 +962,12 @@ static int scale_partitioning_svc(VP9_COMP *cpi, MACROBLOCK *x, MACROBLOCKD *xd,
   // The block size is too big for boundaries. Do variance based partitioning.
   if ((!has_rows || !has_cols) && bsize_low > BLOCK_16X16) return 1;
 
+  // For reference frames: return 1 (do variance-based partitioning) if the
+  // superblock is not low source sad and lower-resoln bsize is below 32x32.
+  if (!cpi->svc.non_reference_frame && !x->skip_low_source_sad &&
+      bsize_low < BLOCK_32X32)
+    return 1;
+
   // Scale up block size by 2x2. Force 64x64 for size larger than 32x32.
   if (bsize_low < BLOCK_32X32) {
     bsize_high = bsize_low + 3;
index 7e52c2b5b8786d76c0ef4f72132dd5e4a9f0cf41..a05db60c652190d86ad9586d93eb8bfdad20cfa3 100644 (file)
@@ -607,10 +607,9 @@ static void set_rt_speed_feature_framesize_independent(
     }
     // For SVC: enable use of lower resolution partition for higher resolution,
     // only for 3 spatial layers and when config/top resolution is above VGA.
-    // Enable only for top temporal enhancement layer (which are non-reference
-    // frames for the fixed SVC patterns).
+    // Enable only for non-base temporal layer frames.
     if (cpi->use_svc && cpi->svc.number_spatial_layers == 3 &&
-        cpi->svc.temporal_layer_id == cpi->svc.number_temporal_layers - 1 &&
+        cpi->svc.temporal_layer_id > 0 &&
         cpi->oxcf.width * cpi->oxcf.height > 640 * 480)
       sf->svc_use_lowres_part = 1;
   }