From: James Zern Date: Thu, 20 Dec 2018 08:10:47 +0000 (-0800) Subject: vp9: limit lpf workers to min(threads,tiles,sb_rows) X-Git-Tag: v1.8.0~40^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3035d5c547029d4df1266d89f5ef57fc0dc60e71;p=libvpx 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 --- diff --git a/vp9/common/vp9_thread_common.c b/vp9/common/vp9_thread_common.c index ba9aa69d0..b008ed5cf 100644 --- a/vp9/common/vp9_thread_common.c +++ b/vp9/common/vp9_thread_common.c @@ -159,7 +159,12 @@ static void loop_filter_rows_mt(YV12_BUFFER_CONFIG *frame, VP9_COMMON *cm, 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 ||