shithub: libvpx

Download patch

ref: 3035d5c547029d4df1266d89f5ef57fc0dc60e71
parent: 640b3195cb41d2166880e9441349a2d3b3024329
author: James Zern <jzern@google.com>
date: Wed Dec 19 19:10:47 EST 2018

vp9: limit lpf workers to min(threads,tiles,sb_rows)

this implementation does not scale well beyond that. this restores the
performance in v1.7.0.

BUG=webm:1574

Change-Id: I8f3464cfe871988fa06ebefe9954811fd002584e

--- a/vp9/common/vp9_thread_common.c
+++ b/vp9/common/vp9_thread_common.c
@@ -159,7 +159,12 @@
   const VPxWorkerInterface *const winterface = vpx_get_worker_interface();
   // Number of superblock rows and cols
   const int sb_rows = mi_cols_aligned_to_sb(cm->mi_rows) >> MI_BLOCK_SIZE_LOG2;
-  const int num_workers = VPXMIN(nworkers, sb_rows);
+  const int num_tile_cols = 1 << cm->log2_tile_cols;
+  // Limit the number of workers to prevent changes in frame dimensions from
+  // causing incorrect sync calculations when sb_rows < threads/tile_cols.
+  // Further restrict them by the number of tile columns should the user
+  // request more as this implementation doesn't scale well beyond that.
+  const int num_workers = VPXMIN(nworkers, VPXMIN(num_tile_cols, sb_rows));
   int i;
 
   if (!lf_sync->sync_range || sb_rows != lf_sync->rows ||