From patchwork Tue Sep 20 17:50:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 38108 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp2106050pzh; Tue, 20 Sep 2022 10:50:55 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4S0Du/5FazKkQ0P/SNlcdkRUcc2R1mg7XqiPc3cus094UZhWwZT1dRtK03Jk+Re0AL7qzy X-Received: by 2002:a17:907:97d3:b0:780:5b1c:b45e with SMTP id js19-20020a17090797d300b007805b1cb45emr17740563ejc.251.1663696254711; Tue, 20 Sep 2022 10:50:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663696254; cv=none; d=google.com; s=arc-20160816; b=S7iEQvya0fi9MSIj26H/wDpAjMxxsvzg+q4iKTYQ1e76ghjcJaJ0imUfC6gPrZVSJy sR0ZFZkRcPOADwulMDQyIbSp+CUDKgRHeWL9sO/BVQOtBcVpq5nuvT3kh4frgrSbXyU3 76i0qiZ8T1jtyP39SKjwBCakfdEmh479v5HAvx6vi3b5rcW9pjhAL95MkepWg1nU9hgN fbNz06Grs1Jv/gzwtJjFrv4FOejRepFotqLVUjahP2pUKsaeMNbw3GnG057c+lOAYz+K 9tKTMjcER6KYSu9r0uVe80/zq1AvjOsNrbpNBnMXblCKE6onKzW+3udcODdX40wZLi1B Zlqg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=Cms3acZJlsLWr1xLfgEeg8GJ+zfGDc+4nsdkYab7uUQ=; b=sOJ4Ypvy6kHrFXhMKKi2tBRN7VV9vrl4OMyAyUiLswobtHxCWXsBNUMKSI5tUWvxtA OJXafviIy5MdByWYX7lkWTCbht9F53N+tjB7/IR1X+4cFdtURPXsjNiTBFC5Y9h15a3Q /Ple62TDFOn7CH783tTx5rAY0Mlm1FUVEZ95YAdGUY7j/0sRV0U8u5SqT7nILtxQONPY qc+y4hOZcLfapE2kghELZjB0yuzrOVHF/ubg7Gsny1ROAOBD8zOBPVBLQz4Ty/5dhDKu /dPy6zgzB6bwLUZP8nZstS70FWmswdZaKJUd09pLtmZb8fb8v/2Xj30FsbVGLUMRiPgL 7yBw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=XYALwrgO; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id ne33-20020a1709077ba100b0078109a2a69dsi349009ejc.284.2022.09.20.10.50.54; Tue, 20 Sep 2022 10:50:54 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=XYALwrgO; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A3CEF68BB21; Tue, 20 Sep 2022 20:50:44 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qt1-f170.google.com (mail-qt1-f170.google.com [209.85.160.170]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5FAE368B5F7 for ; Tue, 20 Sep 2022 20:50:36 +0300 (EEST) Received: by mail-qt1-f170.google.com with SMTP id g12so2300555qts.1 for ; Tue, 20 Sep 2022 10:50:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date; bh=tTJVW/PTISN1fQYUZEQbfb6zYj39dW8NS5aUfQT0xww=; b=XYALwrgOXOE3Xe+MbDY0yd03EHm+dYJ+NDV/xhqyhBP9/WNbDBaSJ+LBqoFv62qDRn tt1NbH/IiwTqNV36tlv6xff8FP8hUeSIsDZi3nhE30DBexqfkKc/oecZI5CYBJEVCmNm fNLBmntvvyPUlEXNTQYQLhmRyrl2ZTQGk+TYxTwOWU7rxQDlHcO31+KPEGgL7cWGB+K0 SM24IP+55VX6WjrUF5Q9QGovuecLgMC3D3FY3P2LtufjTnUgsn51WlBcdin5JXn/XxsX A1hMqLD1sXPEyyYOkutJyzn1G7Vg+C0KaZRSzrJvbxoR4TcOX8yEd5zWokYdhMdRnPbi e9yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date; bh=tTJVW/PTISN1fQYUZEQbfb6zYj39dW8NS5aUfQT0xww=; b=DMxOEXo/d7qY8/ywfVDTUhaa8fhA2HZmr86I2y0q6ti6vgVW8roRAOAM8PiWB/o1Rg mxO9yP58QkMid3BTSNrQuDoL9Bj8H53tksVaX2CbxfAy5lLGifKzbov+P7WMUV4b9Aqj CgTNQa+XPZx7A8f9p4uDg4xGQeCJyWcC63MpoxWMwOPwFTP4ZghQmjTUdomVNHqEwSYA XsODNK2VC+FYnTZY4Vt1Ygrtv6HmSYw6VgNi7yzWvC2DaZSl6b2pzhWnqnkfb/WL1xtG qe2/35NbRGtpd5wxDiXCNsQ1YIQsSfsu/od5tzcEN5MrN5YFV2hsSmokSrmxSBeVUF2b vRYA== X-Gm-Message-State: ACrzQf0LVXZV8KI3LWlF6EO8tZy3B7hQsyxVPdRSBphKy4+wl9rRcNXo 2GpkTK/wPRdzrUb4FAg0fGmJgefmOpbk X-Received: by 2002:a05:622a:15ca:b0:35b:b99f:2e34 with SMTP id d10-20020a05622a15ca00b0035bb99f2e34mr20000463qty.506.1663696234417; Tue, 20 Sep 2022 10:50:34 -0700 (PDT) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:50a3:2f65:4798:4cad]) by smtp.gmail.com with ESMTPSA id o1-20020a05622a008100b003431446588fsm189017qtw.5.2022.09.20.10.50.33 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 20 Sep 2022 10:50:33 -0700 (PDT) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Sep 2022 12:50:15 -0500 Message-Id: <20220920175021.60790-2-rcombs@rcombs.me> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220920175021.60790-1-rcombs@rcombs.me> References: <20220920175021.60790-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/7] lavu/cpu: add av_cpu_job_count() X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 477Ddwo5eAv8 This estimates an appropriate number of jobs for a task to be broken up into. This may be higher than the core count in a heterogeneous system. Currently implemented only on Apple platforms; otherwise, we assume homogeneity. --- doc/APIchanges | 3 +++ libavutil/cpu.c | 37 +++++++++++++++++++++++++++++++++++++ libavutil/cpu.h | 11 +++++++++++ libavutil/version.h | 4 ++-- 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/doc/APIchanges b/doc/APIchanges index 729f56be7b..6059b495dd 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-09-20 - xxxxxxxxxx - lavu 57.37.100 - cpu.h + Add av_cpu_job_count() and av_cpu_force_job_count(). + 2022-09-03 - xxxxxxxxxx - lavu 57.36.100 - pixfmt.h Add AV_PIX_FMT_P012, AV_PIX_FMT_Y212, AV_PIX_FMT_XV30, AV_PIX_FMT_XV36 diff --git a/libavutil/cpu.c b/libavutil/cpu.c index 0035e927a5..b846a4a2d5 100644 --- a/libavutil/cpu.c +++ b/libavutil/cpu.c @@ -51,6 +51,7 @@ static atomic_int cpu_flags = ATOMIC_VAR_INIT(-1); static atomic_int cpu_count = ATOMIC_VAR_INIT(-1); +static atomic_int job_count = ATOMIC_VAR_INIT(-1); static int get_cpu_flags(void) { @@ -251,6 +252,42 @@ void av_cpu_force_count(int count) atomic_store_explicit(&cpu_count, count, memory_order_relaxed); } +int av_cpu_job_count(void) +{ + static atomic_int printed = ATOMIC_VAR_INIT(0); + int loaded = 0; + + int jobs = av_cpu_count(); + +#if __APPLE__ + int nperflevels = 1; + size_t len = sizeof(nperflevels); + + if (sysctlbyname("hw.nperflevels", &nperflevels, &len, NULL, 0) == -1) + nperflevels = 1; + + if (nperflevels > 1) + jobs *= 3; +#endif + + if (!atomic_exchange_explicit(&printed, 1, memory_order_relaxed)) + av_log(NULL, AV_LOG_DEBUG, "computed default job factor of %d\n", jobs); + + loaded = atomic_load_explicit(&job_count, memory_order_relaxed); + + if (loaded > 0) { + jobs = loaded; + av_log(NULL, AV_LOG_DEBUG, "overriding to job factor of %d\n", jobs); + } + + return jobs; +} + +void av_cpu_force_job_count(int factor) +{ + atomic_store_explicit(&job_count, factor, memory_order_relaxed); +} + size_t av_cpu_max_align(void) { #if ARCH_MIPS diff --git a/libavutil/cpu.h b/libavutil/cpu.h index 9711e574c5..20f037afe1 100644 --- a/libavutil/cpu.h +++ b/libavutil/cpu.h @@ -110,6 +110,17 @@ int av_cpu_count(void); */ void av_cpu_force_count(int count); +/** + * @return an estimated optimal maximum number of jobs for tasks to be sliced into. + */ +int av_cpu_job_count(void); + +/** + * Overrides job count computation and forces the specified count. + * Count < 1 disables forcing of specific count. + */ +void av_cpu_force_job_count(int count); + /** * Get the maximum data alignment that may be required by FFmpeg. * diff --git a/libavutil/version.h b/libavutil/version.h index 0585fa7b80..9c44cef6aa 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,8 +79,8 @@ */ #define LIBAVUTIL_VERSION_MAJOR 57 -#define LIBAVUTIL_VERSION_MINOR 36 -#define LIBAVUTIL_VERSION_MICRO 102 +#define LIBAVUTIL_VERSION_MINOR 37 +#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ From patchwork Tue Sep 20 17:50:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 38109 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp2106115pzh; Tue, 20 Sep 2022 10:51:03 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5Oh31KwP4VHla7XhSdVuBEeuOlizI1R+OfZ4cIzXZ688Weu88eSp7TeIBYUza9umyDSz2b X-Received: by 2002:a17:907:2d2a:b0:77e:def7:65e9 with SMTP id gs42-20020a1709072d2a00b0077edef765e9mr17733643ejc.85.1663696262898; Tue, 20 Sep 2022 10:51:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663696262; cv=none; d=google.com; s=arc-20160816; b=D6sU3M7nJSfKyHBxwHh6gOrbTGvPSLpDQaqkz1qRJjAPcdclR2zYmE1qU7AiSJi5wo w3KRmgrsfSkX2dJUf806EIOFTSONOvc9hWLcGzEMv0SE/Oa1oFWGS/LMjRgqp1rg+HZJ y13O37DXPt1yIt9F0BsVKr4W7oc1ONC9QifFv7aHKp/ehe7fqbXd10qwdpSMFJxDRHAy gkZOoGUngM63tXVWdCL4Q4gmzstVWARKUx5O/DmgytI/oasndi8rIPD/iTWAJ+Yq5G+F Zz2O6xhaqYGWDEAfBnJDGAPDy7XlBCCHU2k4n4IFiD18y2Zbp7yB64sIofTZRqJSb33I skuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=XbqbIoFffoqZU265CnAInmKHh3sxvIonsHp1N3FjTwg=; b=TCZY70URTGbmucqmMVTXCV73Xvdzlbbck+bceHAhVs6Ih0ooA0/jNHzLPcOakFJjny j16tbY1aqHokkLfXZJwC1MkmkZPaKz3mng2mWWd78IshGAz4vkBmq8qg23R5c+LxYx8Y s3bRWSbj+MGnsQEDaEAR5KIUSBRipsP7jU5vSJv3chaNgLoPLsk0xGdKOWwsubjTFenP rJswT9icj8pOsgjCSVjUeEGMcPy5nRvgy+cRK3C/ju3b5pSCePxaLrcRcHUho+tebfYp mdsd4TKGCQx7hOxmBrePNG31RS7KzTFykyBnGJ3gSEQcfS2I+/BEBnjP1/Z9WB2uHWrA 3rug== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=B4Xv2tzG; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id y20-20020aa7c254000000b004545af041d4si345601edo.84.2022.09.20.10.51.02; Tue, 20 Sep 2022 10:51:02 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=B4Xv2tzG; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 95E3C68BB2E; Tue, 20 Sep 2022 20:50:45 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f175.google.com (mail-qk1-f175.google.com [209.85.222.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 651CE68BA7A for ; Tue, 20 Sep 2022 20:50:37 +0300 (EEST) Received: by mail-qk1-f175.google.com with SMTP id d15so2175064qka.9 for ; Tue, 20 Sep 2022 10:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date; bh=D65m4sHSUQXhWVaBR01RLfgDGvZMQBgTU+qtfsgmbeY=; b=B4Xv2tzGtHjMayqIhbsxTs0cTqir+/+wNqFlDtXW5w6VJrvab3bkZMPncHJIs4ollR DGujpW7xxOhfz1Okbg7jp7rl9pmMcuI1xmKm8tXYgM0KhecrjC9+bqNWnbQR0U7zcMkl CrjFyO1K+9xuzxBb9Ic/Mddj8T761kUs6o0GUcuy7x5S0b8IHHfTXfrGBeIQ0emrmKxg 77vZVuQ09JjzSEssLxMztG9mEXSCuC/KCtvU0QOlEqGMgyVadt6PETsG7D1Sa0mDE3Kv MBNhFc3RlFyiVLl++FcD8ruyX+I1y1JdmBUmD8HeZh8suuxycxaOxrkOl2Ad1l6uXYrQ PlWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date; bh=D65m4sHSUQXhWVaBR01RLfgDGvZMQBgTU+qtfsgmbeY=; b=wWneUq27eVkQmHblXpxGyOfgjZjJLOSSV/9A2NXga9VkjjsdQxv5NAOdqRqthSBG1l qArLNYzjV4gb+7jXGhOpYsOnESov/6+tzIA7lUM34cOqRa7fRFeTHT9r6Wt9BH/ZT+Bk BZUPS7q6uyfPJUCb8hipkyO5qtED0O1TCMSty8p6IFeqnIUnv9sOIHmw1gLTesv7s9Pe vXn+Mhc+JN4houJ8h5mMSwipafYq9WRZ2LmqTHHjWWb/dh9BgkLSk8lgbeW/DogHkjko I4km/GZxYk1jLl8cfke8y8DPz2CFVrr9uylld/ELiEvBs3cYd+GtZbGIYqeWL09WGMGN ES5A== X-Gm-Message-State: ACrzQf1rKLiuXMv1sePKgDCx0w/qPWLK+d2tr1jq/Q6p48ajxP3wFH/c f3SfB9nODFADWfN12QlMAUUE/nuOqPbg X-Received: by 2002:ae9:c106:0:b0:6ce:33c8:c95d with SMTP id z6-20020ae9c106000000b006ce33c8c95dmr17154741qki.289.1663696235728; Tue, 20 Sep 2022 10:50:35 -0700 (PDT) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:50a3:2f65:4798:4cad]) by smtp.gmail.com with ESMTPSA id o1-20020a05622a008100b003431446588fsm189017qtw.5.2022.09.20.10.50.34 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 20 Sep 2022 10:50:34 -0700 (PDT) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Sep 2022 12:50:16 -0500 Message-Id: <20220920175021.60790-3-rcombs@rcombs.me> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220920175021.60790-1-rcombs@rcombs.me> References: <20220920175021.60790-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/7] sws: add jobs option, distinct from threads X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: nF2Hm0f/ffaO This allows for more efficient use of asymmetric-multiprocessing systems. --- libswscale/options.c | 2 ++ libswscale/swscale_internal.h | 1 + libswscale/utils.c | 9 ++++++--- libswscale/version.h | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/libswscale/options.c b/libswscale/options.c index 4d41b835b1..5765daa100 100644 --- a/libswscale/options.c +++ b/libswscale/options.c @@ -81,6 +81,8 @@ static const AVOption swscale_options[] = { { "threads", "number of threads", OFFSET(nb_threads), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, VE, "threads" }, { "auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, .flags = VE, "threads" }, + { "jobs", "number of jobs", OFFSET(nb_jobs), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, VE, "jobs" }, + { "auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, .flags = VE, "jobs" }, { NULL } }; diff --git a/libswscale/swscale_internal.h b/libswscale/swscale_internal.h index abeebbb002..602082e12c 100644 --- a/libswscale/swscale_internal.h +++ b/libswscale/swscale_internal.h @@ -339,6 +339,7 @@ typedef struct SwsContext { int vChrDrop; ///< Binary logarithm of extra vertical subsampling factor in source image chroma planes specified by user. int sliceDir; ///< Direction that slices are fed to the scaler (1 = top-to-bottom, -1 = bottom-to-top). int nb_threads; ///< Number of threads used for scaling + int nb_jobs; ///< Number of slice jobs used for scaling double param[2]; ///< Input parameters for scaling algorithms that need them. AVFrame *frame_src; diff --git a/libswscale/utils.c b/libswscale/utils.c index 45baa22b23..c9ff9db957 100644 --- a/libswscale/utils.c +++ b/libswscale/utils.c @@ -1277,18 +1277,21 @@ static int context_init_threaded(SwsContext *c, ff_sws_slice_worker, NULL, c->nb_threads); if (ret == AVERROR(ENOSYS)) { c->nb_threads = 1; + c->nb_jobs = 1; return 0; } else if (ret < 0) return ret; c->nb_threads = ret; + if (c->nb_jobs < 1) + c->nb_jobs = av_cpu_job_count(); - c->slice_ctx = av_calloc(c->nb_threads, sizeof(*c->slice_ctx)); - c->slice_err = av_calloc(c->nb_threads, sizeof(*c->slice_err)); + c->slice_ctx = av_calloc(c->nb_jobs, sizeof(*c->slice_ctx)); + c->slice_err = av_calloc(c->nb_jobs, sizeof(*c->slice_err)); if (!c->slice_ctx || !c->slice_err) return AVERROR(ENOMEM); - for (int i = 0; i < c->nb_threads; i++) { + for (int i = 0; i < c->nb_jobs; i++) { c->slice_ctx[i] = sws_alloc_context(); if (!c->slice_ctx[i]) return AVERROR(ENOMEM); diff --git a/libswscale/version.h b/libswscale/version.h index 9bb3b171a7..4529a2d7d4 100644 --- a/libswscale/version.h +++ b/libswscale/version.h @@ -29,7 +29,7 @@ #include "version_major.h" #define LIBSWSCALE_VERSION_MINOR 8 -#define LIBSWSCALE_VERSION_MICRO 112 +#define LIBSWSCALE_VERSION_MICRO 113 #define LIBSWSCALE_VERSION_INT AV_VERSION_INT(LIBSWSCALE_VERSION_MAJOR, \ LIBSWSCALE_VERSION_MINOR, \ From patchwork Tue Sep 20 17:50:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 38110 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp2106178pzh; Tue, 20 Sep 2022 10:51:11 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5J65V0AegLxJRoQQSsq8VfxGL55pMjEB7t/IY9fDHY8bL7e+AbQGahj3BpSdqr1+DWYJ2p X-Received: by 2002:a05:6402:b6c:b0:44e:2faf:1ba4 with SMTP id cb12-20020a0564020b6c00b0044e2faf1ba4mr21319067edb.191.1663696271434; Tue, 20 Sep 2022 10:51:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663696271; cv=none; d=google.com; s=arc-20160816; b=OIJqrxLpvVx3j86RENLNKzKASuHzlnRtUOOFMconZbPk1Dnm86SVVLTm8CWRbjaESq b0QVC1rRTbl5tEaTRz+TPcyWPsJ54hfrnPp9lXlxULOmemKih2MFMDP4adkbSc7pZXDA TWRBRbd6B8lwQmZPYTVKesWyvEJ7IFMiWzvfkVeMHHQXp89c/TOnZozODqxC9peRtkO+ mxE+Kc0Wd3BwQOvpbGSN9URdLzJ5ExfIcTYs8f9PojRJKUO/u0hWiURf9Hz+2fY8fY3u XcyQg9BgNCBjBKyWHeAvyYqjE7EZ3yXmhQrr6tKSkNWY94VT+Xqz5ODggT1P4KHx+Su7 xKdA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=Ooiiv/pOkYDuCWpKlCl4iR41HUicG7mmbpD6cgN74WM=; b=o1dLF1FSYsOM4YyNaB+miafMm96ywpwJknIQh6DDy+YPZO7AbIlrbmeIVDtXTj9bRg 041RY0lofjg3YCu+Mo/muBxJOaG3FTGG/DvmDCCmIyr6Csh73G7sx5oYIURq5DDnyHCL mLO2hTA0QXfwgekNLB7s6UzsP3J6zBcpJ8hjBHM0F48wmthlPt/JxxZ454N/z0qBDBkJ 2K6pnRL66xCYTJTXA96TqGmLyIzWbUYef/BPM3Ljj2fyKl0F0Mf+DLd1ddQ4P/Z5cbqr lfxU3pHOiyic0g0xXHQCgD45XrpWZGuzLQmSIceQi8kcNSFUlGKNFOWWEJnOlwQDbnbT hvng== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=PeTw9Mis; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id b10-20020a056402350a00b004513ce1a086si441580edd.56.2022.09.20.10.51.11; Tue, 20 Sep 2022 10:51:11 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=PeTw9Mis; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8A39768BA7C; Tue, 20 Sep 2022 20:50:46 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f177.google.com (mail-qk1-f177.google.com [209.85.222.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id A0F5268BABD for ; Tue, 20 Sep 2022 20:50:38 +0300 (EEST) Received: by mail-qk1-f177.google.com with SMTP id d17so2153345qko.13 for ; Tue, 20 Sep 2022 10:50:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date; bh=tCHZ5zh2pPeCXefV9OI4IZxKh7RFdvEHBc9WplugToc=; b=PeTw9MisKbD1qYdGSJp5Y0nTrnvEuYuDBzjTkE3sxaWLiJh8/TDGvQDQlAgJijhzx4 hLWhv7rWdsio+fxCYcfXlny/MOs8LwQQ+j/hwYwXtKYRDBH4ir4TLT6LhzAiqrzO6lOP eo7yyxQaJ2T1K8VkglkUR+mwjmhpYueuNd7iZFKCnKiK9MlX84A1WVjDszwEQyzan1KJ RWt5qk7s6wkjQUubAcT24D80ow5eWWTW3x/lRxnIE4J2dr9rn/wcWbcEw28XBLTA4WkB /oK9Y6gX4xdKQ3PtFiEhSyX/MqwxQTQXr82Tx2eCQMCArk2vcB4ZeuuP9tW9Ce/CiBWb bWnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date; bh=tCHZ5zh2pPeCXefV9OI4IZxKh7RFdvEHBc9WplugToc=; b=sDkT419OZ1UvZc2UCMaiSQ8nllbiuDMbrn3m20PxulbF2X/vqDsm7fyAf3Cs41KusZ pFMymtxXZ270YLyJCiBvRSXWFrYbLCetjZt97w8hsvB95ophVDx11FZz0FhSjvn1X/ER rGCmD7+1ziXHm9Gh6DntOv+WSOVw27uLSAvaWtC/U9+bp2NeWylbli5IJyMoXvYrXt2z eQOhIVG3mYjb53/pCoE/97R2a77cd28vPKYdOEoJoEblfKeH6evTVea/Y1V6ghu/2G43 Es+IQ3fRjW8Zgjjf4i+uujPs2JjoJt4uQLJwwfyRWNwrndOe1BkQAsv9R2TzTbhwWg+m W5Gw== X-Gm-Message-State: ACrzQf2WRHzyqVsvG8tC9JOTOtjDAjNtD6W8g+VEzrtFyTi58qcGNcEI pAYQxHFNlz1XMJcSv4MCtO8gSfX08dgq X-Received: by 2002:a37:6409:0:b0:6cd:f0ff:31d with SMTP id y9-20020a376409000000b006cdf0ff031dmr17156307qkb.21.1663696236891; Tue, 20 Sep 2022 10:50:36 -0700 (PDT) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:50a3:2f65:4798:4cad]) by smtp.gmail.com with ESMTPSA id o1-20020a05622a008100b003431446588fsm189017qtw.5.2022.09.20.10.50.35 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 20 Sep 2022 10:50:36 -0700 (PDT) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Sep 2022 12:50:17 -0500 Message-Id: <20220920175021.60790-4-rcombs@rcombs.me> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220920175021.60790-1-rcombs@rcombs.me> References: <20220920175021.60790-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/7] lavfi: add jobs args X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 5pIzcNG/TwOR This allows tuning the number of tasks that frames are sliced into independently from the number of execution pool threads, which can improve performance significantly on asymmetric-multiprocessing systems. --- doc/APIchanges | 3 +++ libavfilter/avfilter.c | 9 +++++++++ libavfilter/avfilter.h | 14 ++++++++++++++ libavfilter/avfiltergraph.c | 4 ++++ libavfilter/internal.h | 6 ++++++ libavfilter/pthread.c | 5 +++++ libavfilter/version.h | 2 +- 7 files changed, 42 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 6059b495dd..ae8b0bf0b4 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -14,6 +14,9 @@ libavutil: 2021-04-27 API changes, most recent first: +2022-09-20 - xxxxxxxxxx - lavfi 8.50.100 - avfilter.h + Add AVFilterContext.nb_jobs and AVFilterGraph.nb_jobs. + 2022-09-20 - xxxxxxxxxx - lavu 57.37.100 - cpu.h Add av_cpu_job_count() and av_cpu_force_job_count(). diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c index f34204e650..4e16e312c6 100644 --- a/libavfilter/avfilter.c +++ b/libavfilter/avfilter.c @@ -621,6 +621,8 @@ static const AVOption avfilter_options[] = { { "enable", "set enable expression", OFFSET(enable_str), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = TFLAGS }, { "threads", "Allowed number of threads", OFFSET(nb_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, FLAGS }, + { "jobs", "Allowed number of jobs", OFFSET(nb_jobs), AV_OPT_TYPE_INT, + { .i64 = 0 }, 0, INT_MAX, FLAGS }, { "extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, FLAGS }, { NULL }, @@ -797,6 +799,13 @@ int ff_filter_get_nb_threads(AVFilterContext *ctx) return ctx->graph->nb_threads; } +int ff_filter_get_nb_jobs(AVFilterContext *ctx) +{ + if (ctx->nb_jobs > 0) + return FFMIN(ctx->nb_jobs, ctx->graph->nb_jobs); + return ctx->graph->nb_jobs; +} + static int process_options(AVFilterContext *ctx, AVDictionary **options, const char *args) { diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h index 2e8197c9a6..aadeadd41c 100644 --- a/libavfilter/avfilter.h +++ b/libavfilter/avfilter.h @@ -492,6 +492,13 @@ struct AVFilterContext { * configured. */ int extra_hw_frames; + + /** + * Max number of jobs allowed in this filter instance. + * If <= 0, its value is ignored. + * Overrides global number of jobs set per filter graph. + */ + int nb_jobs; }; /** @@ -935,6 +942,13 @@ typedef struct AVFilterGraph { int sink_links_count; unsigned disable_auto_convert; + + /** + * Maximum number of jobs used by filters in this graph. May be set by + * the caller before adding any filters to the filtergraph. Zero (the + * default) means that the number of jobs is determined automatically. + */ + int nb_jobs; } AVFilterGraph; /** diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c index 53f468494d..4aac62c6c3 100644 --- a/libavfilter/avfiltergraph.c +++ b/libavfilter/avfiltergraph.c @@ -51,6 +51,9 @@ static const AVOption filtergraph_options[] = { { "threads", "Maximum number of threads", OFFSET(nb_threads), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, F|V|A, "threads"}, {"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, .flags = F|V|A, .unit = "threads"}, + { "jobs", "Maximum number of jobs", OFFSET(nb_jobs), AV_OPT_TYPE_INT, + { .i64 = 0 }, 0, INT_MAX, F|V|A, "jobs"}, + {"auto", "autodetect a suitable number of jobs to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, .flags = F|V|A, .unit = "jobs"}, {"scale_sws_opts" , "default scale filter options" , OFFSET(scale_sws_opts) , AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, F|V }, {"aresample_swr_opts" , "default aresample filter options" , OFFSET(aresample_swr_opts) , @@ -75,6 +78,7 @@ int ff_graph_thread_init(AVFilterGraph *graph) { graph->thread_type = 0; graph->nb_threads = 1; + graph->nb_jobs = 1; return 0; } #endif diff --git a/libavfilter/internal.h b/libavfilter/internal.h index 0128820be0..be05e8550b 100644 --- a/libavfilter/internal.h +++ b/libavfilter/internal.h @@ -384,6 +384,12 @@ int ff_filter_graph_run_once(AVFilterGraph *graph); */ int ff_filter_get_nb_threads(AVFilterContext *ctx) av_pure; +/** + * Get number of jobs for current filter instance. + * This number is always same or less than graph->nb_jobs. + */ +int ff_filter_get_nb_jobs(AVFilterContext *ctx) av_pure; + /** * Generic processing of user supplied commands that are set * in the same way as the filter options. diff --git a/libavfilter/pthread.c b/libavfilter/pthread.c index 1a063d3cc0..589e32e263 100644 --- a/libavfilter/pthread.c +++ b/libavfilter/pthread.c @@ -23,6 +23,7 @@ #include +#include "libavutil/cpu.h" #include "libavutil/error.h" #include "libavutil/macros.h" #include "libavutil/mem.h" @@ -98,10 +99,14 @@ int ff_graph_thread_init(AVFilterGraph *graph) av_freep(&graph->internal->thread); graph->thread_type = 0; graph->nb_threads = 1; + graph->nb_jobs = 1; return (ret < 0) ? ret : 0; } graph->nb_threads = ret; + if (graph->nb_jobs < 1) + graph->nb_jobs = av_cpu_job_count(); + graph->internal->thread_execute = thread_execute; return 0; diff --git a/libavfilter/version.h b/libavfilter/version.h index 5aac9c513a..436c2b8b17 100644 --- a/libavfilter/version.h +++ b/libavfilter/version.h @@ -31,7 +31,7 @@ #include "version_major.h" -#define LIBAVFILTER_VERSION_MINOR 49 +#define LIBAVFILTER_VERSION_MINOR 50 #define LIBAVFILTER_VERSION_MICRO 100 From patchwork Tue Sep 20 17:50:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 38111 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp2106276pzh; Tue, 20 Sep 2022 10:51:22 -0700 (PDT) X-Google-Smtp-Source: AMsMyM7cVjRNTu4x4E6tw+sRwzbNbVd8TMRIUKJGa3DFQSbAdSXiemN3MdqdQEaa+hrZi7c6xWCr X-Received: by 2002:a05:6402:f07:b0:450:bf95:59e9 with SMTP id i7-20020a0564020f0700b00450bf9559e9mr21361759eda.46.1663696282560; Tue, 20 Sep 2022 10:51:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663696282; cv=none; d=google.com; s=arc-20160816; b=cT/8XzkJIFchWVqcY3NNfR25s9WydtZ7MLVZ0OG6DWUa3bsKfm99WjTrbN9gVn1kzq DMtc8V3nip2jx2uAZ0GLBkx0AawjOLdFDgL+Q06U4WW1TbpFS0NBNHwTq1xY11t178AT J0o3DAthILGP/Kbs1y9t5pic05JFJN5hRn/yDQhK36OYcVeZroFDxZWiD4d/G4lfl7AD doGoA9mWz7PV+WnMOXM9NwhKRKppMnKtuSBuslwaWRZyjsxspeR9o4goksTmt3BghVIU 3AlgMFsTA3vZjPYk6qOea5g1LBgitKWT2d78mEjOZQFA4e22EmQ2qJrraiLBbZnIH6Jl Rvqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=CRSVPbuCTh2US4eFGy2qWD8ROkl1gK/l3bCt+KiLOds=; b=ArXoGhfRRbnoqfyFUOV2WXzOv5Jwzua416+OL81LBsIkr3qFVifPA0wE3yhZCgY4/d JBA5YMBNz2XAe8dROQwHMxkCPiflBa5Ehy4DtmU2jYEg7n+9RmpsVCVagxY8DbvMvf67 IUtcgAwGcY2SUm8/+UDa4h8khe7MH5qi2kwgLvRsB2FYF+jH9S8fGA9jKbr2UMl+VURq 8cnBrV4/XY4bfh/ycqF9EbNQmSZS7jV/bcum0p1N6jrX/97jmomN9yQYUyNbHcZ9dkQ6 Bj70sfh7f2mOdp3JX48icsDeuG9tB37KfCykLXhGSAsr0HsblFB3lIbMnuKTLfbPbWRN g1TA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=LRf2vU6o; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 2-20020a508e42000000b0043a6e796231si292830edx.544.2022.09.20.10.51.20; Tue, 20 Sep 2022 10:51:22 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=LRf2vU6o; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8879568BB52; Tue, 20 Sep 2022 20:50:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk1-f171.google.com (mail-qk1-f171.google.com [209.85.222.171]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 1514068BB26 for ; Tue, 20 Sep 2022 20:50:40 +0300 (EEST) Received: by mail-qk1-f171.google.com with SMTP id s9so2192756qkg.4 for ; Tue, 20 Sep 2022 10:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date; bh=ja+fWqQ1ECRGkZ4GnddTTCs/4/eijkN4pfhsx+57U90=; b=LRf2vU6oijCXqyPKdsgpsWt51TYQH+V+BQNkkpXqeW5vy8VqpO7d3Sb4phTe6+pimn 2j/uhdSXJ/Jq6jjuqKSkfS4OEGmVENNRkPkSu3Z/SJyKOy+hJvTQiH7mjHpNIGG1wYLE UjHUKk2GYWvIJ8ldWUbsvQF+JYuu7rjw5n2kIe9uPxMI5AJdUcEWvAUk2MeNKmhzIciz s8qGP517kyvOOmSpm1tQm/LY3PBghFp4cQE8GMt37j2WWvL7ZO/JD2iJclJ2Hfjy2KXI mqJYfmxFlfRiSO3N0x8iH+J1h2J+JvCX2ID7tAjyjwOAmtOVjieFsM/jSzGI4x3PzhHi RB6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date; bh=ja+fWqQ1ECRGkZ4GnddTTCs/4/eijkN4pfhsx+57U90=; b=NQx1usl4fCfJW82WKKeFNu3DTIV4HiY8e1kEUGZefOFT9phrAKzbAFaVN9DRoYnIxJ gvanpTPoRQEt1zLSW7sT+xqTRCZqKU05tIV3a7qbKXwFRssEaZAbISATrKkYKlU6MZbZ vAU5NBnSWiAdu7KgtDRhlRCuM7EgphhcQLJhVPqgluVSk/B4lJdmJAMzo+azKNSMTXCB /q5M73UKd1+bubRblZvgw8/FbE1+g2I+QqljQwo/VnW1v6ikrx9EuthZ6twOz9/CEVSF 4Ddd6BGQmFvSqWpYJAwg5U626GN4xYuM899Lb7c0GK03JPPkPC7Hi1yMQk2b5hivDOaG DXxQ== X-Gm-Message-State: ACrzQf36QtmyU+Sm0ePN1KqTd9USejpCCgahFw0a91zH8zgzqK1lt/s3 V1hfA2fdGDdOoEV/FpdUiOnBZ/l3l/Cb X-Received: by 2002:a05:620a:4589:b0:6ce:4b66:b05e with SMTP id bp9-20020a05620a458900b006ce4b66b05emr17674591qkb.235.1663696238295; Tue, 20 Sep 2022 10:50:38 -0700 (PDT) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:50a3:2f65:4798:4cad]) by smtp.gmail.com with ESMTPSA id o1-20020a05622a008100b003431446588fsm189017qtw.5.2022.09.20.10.50.37 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 20 Sep 2022 10:50:37 -0700 (PDT) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Sep 2022 12:50:18 -0500 Message-Id: <20220920175021.60790-5-rcombs@rcombs.me> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220920175021.60790-1-rcombs@rcombs.me> References: <20220920175021.60790-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/7] ffmpeg: add filter_jobs and filter_complex_jobs args X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 1UkudbRwWrdZ These are similar to filter_threads and filter_complex_threads, but control job count. --- doc/ffmpeg.texi | 12 ++++++++++++ fftools/ffmpeg.c | 1 + fftools/ffmpeg.h | 2 ++ fftools/ffmpeg_filter.c | 7 +++++++ fftools/ffmpeg_opt.c | 13 +++++++++++++ 5 files changed, 35 insertions(+) diff --git a/doc/ffmpeg.texi b/doc/ffmpeg.texi index 42440d93b4..6b8248df3b 100644 --- a/doc/ffmpeg.texi +++ b/doc/ffmpeg.texi @@ -789,6 +789,13 @@ Defines how many threads are used to process a filter pipeline. Each pipeline will produce a thread pool with this many threads available for parallel processing. The default is the number of available CPUs. +@item -filter_jobs @var{nb_jobs} (@emph{global}) +Defines how many jobs are used to process a filter pipeline. Each filter's work +may be split into up to this many tasks for parallel processing, which are then +dispatched to the thread pool of size @var{nb_threads}. +The default is the number of available CPUs, times a multiplier determined based on +the detected CPU topology. For homogenous systems, this multiplier is 1. + @item -pre[:@var{stream_specifier}] @var{preset_name} (@emph{output,per-stream}) Specify the preset for matching stream(s). @@ -1916,6 +1923,11 @@ Defines how many threads are used to process a filter_complex graph. Similar to filter_threads but used for @code{-filter_complex} graphs only. The default is the number of available CPUs. +@item -filter_complex_jobs @var{nb_jobs} (@emph{global}) +Defines how many jobs are used to process a filter_complex graph. +Similar to filter_jobs but used for @code{-filter_complex} graphs only. +The default is the number of available CPUs times a topology multiplier. + @item -lavfi @var{filtergraph} (@emph{global}) Define a complex filtergraph, i.e. one with arbitrary number of inputs and/or outputs. Equivalent to @option{-filter_complex}. diff --git a/fftools/ffmpeg.c b/fftools/ffmpeg.c index 0e1477299d..9ff48141cd 100644 --- a/fftools/ffmpeg.c +++ b/fftools/ffmpeg.c @@ -621,6 +621,7 @@ static void ffmpeg_cleanup(int ret) } av_freep(&vstats_filename); av_freep(&filter_nbthreads); + av_freep(&filter_nbjobs); av_freep(&input_streams); av_freep(&input_files); diff --git a/fftools/ffmpeg.h b/fftools/ffmpeg.h index ede0b2bd96..89ee9caca7 100644 --- a/fftools/ffmpeg.h +++ b/fftools/ffmpeg.h @@ -679,7 +679,9 @@ extern AVIOContext *progress_avio; extern float max_error_rate; extern char *filter_nbthreads; +extern char *filter_nbjobs; extern int filter_complex_nbthreads; +extern int filter_complex_nbjobs; extern int vstats_version; extern int auto_conversion_filters; diff --git a/fftools/ffmpeg_filter.c b/fftools/ffmpeg_filter.c index 7a5308425d..34e0fce7ab 100644 --- a/fftools/ffmpeg_filter.c +++ b/fftools/ffmpeg_filter.c @@ -998,6 +998,12 @@ int configure_filtergraph(FilterGraph *fg) av_opt_set(fg->graph, "threads", e->value, 0); } + if (filter_nbjobs) { + ret = av_opt_set(fg->graph, "jobs", filter_nbjobs, 0); + if (ret < 0) + goto fail; + } + args[0] = 0; e = NULL; while ((e = av_dict_get(ost->sws_dict, "", e, @@ -1020,6 +1026,7 @@ int configure_filtergraph(FilterGraph *fg) av_opt_set(fg->graph, "aresample_swr_opts", args, 0); } else { fg->graph->nb_threads = filter_complex_nbthreads; + fg->graph->nb_jobs = filter_complex_nbjobs; } if ((ret = avfilter_graph_parse2(fg->graph, graph_desc, &inputs, &outputs)) < 0) diff --git a/fftools/ffmpeg_opt.c b/fftools/ffmpeg_opt.c index 5febe319e4..196064d1b9 100644 --- a/fftools/ffmpeg_opt.c +++ b/fftools/ffmpeg_opt.c @@ -175,7 +175,9 @@ int qp_hist = 0; int stdin_interaction = 1; float max_error_rate = 2.0/3; char *filter_nbthreads; +char *filter_nbjobs; int filter_complex_nbthreads = 0; +int filter_complex_nbjobs = 0; int vstats_version = 2; int auto_conversion_filters = 1; int64_t stats_period = 500000; @@ -352,6 +354,13 @@ static int opt_filter_threads(void *optctx, const char *opt, const char *arg) return 0; } +static int opt_filter_jobs(void *optctx, const char *opt, const char *arg) +{ + av_free(filter_nbjobs); + filter_nbjobs = av_strdup(arg); + return 0; +} + static int opt_abort_on(void *optctx, const char *opt, const char *arg) { static const AVOption opts[] = { @@ -3961,6 +3970,8 @@ const OptionDef options[] = { "set stream filtergraph", "filter_graph" }, { "filter_threads", HAS_ARG, { .func_arg = opt_filter_threads }, "number of non-complex filter threads" }, + { "filter_jobs", HAS_ARG, { .func_arg = opt_filter_jobs }, + "number of non-complex filter jobs" }, { "filter_script", HAS_ARG | OPT_STRING | OPT_SPEC | OPT_OUTPUT, { .off = OFFSET(filter_scripts) }, "read stream filtergraph description from a file", "filename" }, { "reinit_filter", HAS_ARG | OPT_INT | OPT_SPEC | OPT_INPUT, { .off = OFFSET(reinit_filters) }, @@ -3969,6 +3980,8 @@ const OptionDef options[] = { "create a complex filtergraph", "graph_description" }, { "filter_complex_threads", HAS_ARG | OPT_INT, { &filter_complex_nbthreads }, "number of threads for -filter_complex" }, + { "filter_complex_jobs", HAS_ARG | OPT_INT, { &filter_complex_nbjobs }, + "number of jobs for -filter_complex" }, { "lavfi", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex }, "create a complex filtergraph", "graph_description" }, { "filter_complex_script", HAS_ARG | OPT_EXPERT, { .func_arg = opt_filter_complex_script }, From patchwork Tue Sep 20 17:50:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 38112 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp2106336pzh; Tue, 20 Sep 2022 10:51:30 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6XHKLaP+L8zyiajNo1Acv55hAqa3woarX3h7bTG9gDJD6GZDJ3fi03sqgrS/JvXwV3RGnb X-Received: by 2002:a17:906:9bdc:b0:77e:1ed1:b12 with SMTP id de28-20020a1709069bdc00b0077e1ed10b12mr17932058ejc.661.1663696290356; Tue, 20 Sep 2022 10:51:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663696290; cv=none; d=google.com; s=arc-20160816; b=LshGBjOO56KfZ8Sb828atR3s0eWLfmYqQmeeMCpFnFwZbV9lNQhh8kRJ4U+NKpHftB ODmVNFxNJVeZcsAZvZbjc3fEKCkndOSl4bmy9OmErT7NhLabYTOWJW5AhFBy64DvwHge 6GhsNipjlU6euz6WwVmuELhTyUbBJ0YCGeHDRK21yFvq8m2aBvQ6rMe+KNyrWj6eCJA1 8ozYt7xVoit5VFDoxbjxLe5rUqOzxc3OYSIII5QLQ8Z+NcYRnTulyX3TJNnYnP6jTt1R u2KT5K7Tjt9+KSpExzlj1eLEK/5gP0uIjoFpqYj9YiiuLOKxlB5avziK4q+wSDI843U4 732w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=r4GAQDP94ZroPAubWaL1E19LiGfhzKKAj9/LpMRLJ0E=; b=szzZyFWwlJcCICpBx1NuLgQcYFbFeJExZCpI6V/r5n/OCLOwJxsGFIOeQhjk0wu/My o6cBHlnpEazUJjtsamViAi8QpQ/FQjC89+fYxzjs82tE48kkmLZ0keKqd2ES0h2qu/oL CbokmMFOZZAGH1a15YpLFdDrCo9/PsZ/ruTcWuc76Ztf25K0xs8qPxsSnkA0QuV4kZRz d4/MuZJD1zToBA0upEUjsGZCMMiwWMmXdow8xNM1amDCYEChqlLyQHYPtKHw4vK9gUYw gxjDBLFHtZU+EsqYmMG9xMMI+uplBSZ2xbARHXT2laZ2NzbeKkmEIpRbVemUkpwdzHLU wjNA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=U1wwJWdD; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id h8-20020a05640250c800b004546a567d71si488761edb.14.2022.09.20.10.51.29; Tue, 20 Sep 2022 10:51:30 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=U1wwJWdD; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 95ED768BABD; Tue, 20 Sep 2022 20:50:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com [209.85.219.43]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3E51968BB39 for ; Tue, 20 Sep 2022 20:50:41 +0300 (EEST) Received: by mail-qv1-f43.google.com with SMTP id i15so2574253qvp.5 for ; Tue, 20 Sep 2022 10:50:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date; bh=DAE1Bo+CjIjMRWQnttWH55LL5maanhJGg4HJVeBfmlM=; b=U1wwJWdDl4rSM84Eu5MvCV+bU+rwa8wWBuuBXK43i3i7t9A/szqnqse5jkLMoEOTgE 1ctTC5KKsoYjxm/RAv4OhNB32hqZdrRU0Zq4rZ97p08fEzZMuf7CCuIbWDxsS6KS5Dra XWURgkdqJ0Y+zzy7e/+zbMMUlCnGaznbzj8FYb4LuVdC4u6xKxvLSQ0lVtamHOqcUN6f lclqXNC5buMiwf8y+DfTz9Hj7dbe5cLSqxrzX4Ni3fYau/kNeJ6FG1xL11/3RorXYPqC dkGOJEhhsJJMQyU4I0/muhQCNG7+UpOW7C+spJdlIuHu9dAAMkbAYtU7/FC1a5adseo+ RsQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date; bh=DAE1Bo+CjIjMRWQnttWH55LL5maanhJGg4HJVeBfmlM=; b=EoHS2LiHUJTx8a5ju2PxXQR5F84MesVfFK3vHrvp2ww53GeryTEFVUG5OdKrBiAORu GCE4CQL2V4PpGBMtjPnCYAW+CXghsmfsvWiNWkUhpge4RLgNOIzcul0siG2FpsdhUb+W e8HcMTIWbo0fBq0C6PNaoNFiMlSFZrcZLNu6mC46eSwcaRFTapEo/ML1mO8zCSujlNxI SxEw3mVNPnQB+OUMa69iXzl2Y7TGvFdsrZ5mUUl8y2gFN+F68PDBPXMRWTVAY4ebe/53 6avwMFDHhF2YsJUjxv8idBQWhFxYG+4FCh6falNE6UaTmx8JWDgPZCZLkUjh5e/UYUDY LtGw== X-Gm-Message-State: ACrzQf10WrfNDQM50zkoRosZwgCK6c74g81euxSVPFwwK4Om/IaUBeYX 2e/N6Vo9Oz/PapbB2NTXMGMQ3I9sUBVI X-Received: by 2002:a05:6214:5298:b0:4ac:c9f9:9091 with SMTP id kj24-20020a056214529800b004acc9f99091mr20564661qvb.25.1663696239395; Tue, 20 Sep 2022 10:50:39 -0700 (PDT) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:50a3:2f65:4798:4cad]) by smtp.gmail.com with ESMTPSA id o1-20020a05622a008100b003431446588fsm189017qtw.5.2022.09.20.10.50.38 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 20 Sep 2022 10:50:39 -0700 (PDT) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Sep 2022 12:50:19 -0500 Message-Id: <20220920175021.60790-6-rcombs@rcombs.me> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220920175021.60790-1-rcombs@rcombs.me> References: <20220920175021.60790-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/7] ffplay: add filter_jobs arg X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: A4L0+6hum6ED This is similar to filter_threads, but controls job count. --- doc/ffplay.texi | 5 +++++ fftools/ffplay.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/doc/ffplay.texi b/doc/ffplay.texi index 5dd860b846..abc857013f 100644 --- a/doc/ffplay.texi +++ b/doc/ffplay.texi @@ -196,6 +196,11 @@ will produce a thread pool with this many threads available for parallel processing. The default is 0 which means that the thread count will be determined by the number of available CPUs. +@item -filter_jobs @var{nb_jobs} +Defines how many distinct jobs a filter pipeline will break frames into. +The default is 0 which means that the thread count will be determined +by the CPU topology. + @end table @section While playing diff --git a/fftools/ffplay.c b/fftools/ffplay.c index bcc00afe31..bce1d20c49 100644 --- a/fftools/ffplay.c +++ b/fftools/ffplay.c @@ -355,6 +355,7 @@ static char *afilters = NULL; static int autorotate = 1; static int find_stream_info = 1; static int filter_nbthreads = 0; +static int filter_nbjobs = 0; /* current context */ static int is_full_screen; @@ -1963,6 +1964,7 @@ static int configure_audio_filters(VideoState *is, const char *afilters, int for if (!(is->agraph = avfilter_graph_alloc())) return AVERROR(ENOMEM); is->agraph->nb_threads = filter_nbthreads; + is->agraph->nb_jobs = filter_nbjobs; av_bprint_init(&bp, 0, AV_BPRINT_SIZE_AUTOMATIC); @@ -2168,6 +2170,7 @@ static int video_thread(void *arg) goto the_end; } graph->nb_threads = filter_nbthreads; + graph->nb_jobs = filter_nbjobs; if ((ret = configure_video_filters(graph, is, vfilters_list ? vfilters_list[is->vfilter_idx] : NULL, frame)) < 0) { SDL_Event event; event.type = FF_QUIT_EVENT; @@ -3615,6 +3618,7 @@ static const OptionDef options[] = { { "find_stream_info", OPT_BOOL | OPT_INPUT | OPT_EXPERT, { &find_stream_info }, "read and decode the streams to fill missing information with heuristics" }, { "filter_threads", HAS_ARG | OPT_INT | OPT_EXPERT, { &filter_nbthreads }, "number of filter threads per graph" }, + { "filter_jobs", HAS_ARG | OPT_INT | OPT_EXPERT, { &filter_nbjobs }, "number of filter jobs per graph" }, { NULL, }, }; From patchwork Tue Sep 20 17:50:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 38113 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp2106405pzh; Tue, 20 Sep 2022 10:51:39 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5kec9Q/oHKGZDuCE2tVqj4I0nmYJKLXX7tVmo0QuprXBv5g1gqKNyWSvp3OxKbrw9+S86r X-Received: by 2002:a17:907:6d8c:b0:781:e30f:3218 with SMTP id sb12-20020a1709076d8c00b00781e30f3218mr1857396ejc.430.1663696299056; Tue, 20 Sep 2022 10:51:39 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663696299; cv=none; d=google.com; s=arc-20160816; b=BKmkLG1kUS0EIpds0Vkd/84Ev+sfOyC4oJLX7CkU1tW5d660+gTq0SC3/G7kk8dbkF PWV9etA7sMAQoCoJ+e2DY8KpCQIePsoBcenXzkvWITbY1nVmFDfXY+7nLGdV2rolDRdV NqrZpqQ7Oja6AtTkbRBnG9YgOJ06b8j6schlvZThc2EQa7DQ5iH9M4nr0ZxjRTsS3KhL j3Yf3HcHA4QHVXRIAk8nI4Xw68Vk+Yj0HOeXzMcDOPgZeSkVw5o1WvcTcnyXOAN9hiYq 490qzF+YExtja6PUFoj9VYzEWNtYdwKWmv1gX9mv+mq6NvnBQyGNjbM9OQ6i0VPjMNHr 6EdQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=EI1oxauv0Z8c+7EoUkcEZt+FGLj8TivZTOLjwgXTM38=; b=t5coOuTqmdVvX72NxR22xl5ApZ1l0eh/knbQtOTJ9JnvCiSB8A1XG9l60S2oMpQyCo pCSbZdYAOznFlm10hupp9r4HL2ex3ilAxZPpo1fFLeWZiHw4lqhxE5cZQJg4C/RHXe0j B5MFpzrJyKywrq4RiS3WGFbXJ1u2WdvOGZ0kFxAmh3rMP7Bg/Qo4HLyqoSqtCc5q1os4 pOqmgQNuexlr2fi7pC1gQvtmhGUsSTXPCobPkESAoPZs9vjrISBfvzMHsgCRDqhxMqUF AeIF2/u6CfR4yaXWlEptjzRuD5ZMkiW1KCdhwQtEqtyNaHH3XGTplRSHKkiOIcBLir5M nvWw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=rr6aInX3; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id us5-20020a170906bfc500b0077082e784easi221116ejb.957.2022.09.20.10.51.38; Tue, 20 Sep 2022 10:51:39 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=rr6aInX3; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 92D7668BB5E; Tue, 20 Sep 2022 20:50:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f41.google.com (mail-qv1-f41.google.com [209.85.219.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3E04368BA91 for ; Tue, 20 Sep 2022 20:50:42 +0300 (EEST) Received: by mail-qv1-f41.google.com with SMTP id v15so2551329qvi.11 for ; Tue, 20 Sep 2022 10:50:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date; bh=FufZBOVAi/VB17UDWwlu2qz7Gpj9pHAfVHz40WDI2k8=; b=rr6aInX3tH0SdaVD99UkGcvJMEfInfdpshcsgMntb6auiSTsJZWLB7uuowPrOq+tl8 uUyRYwYER1intpkRpjeGlK9bKWtczVlRqf1Nb8OdzqbdQZm48XBdMt0BG4yuluqHzlyu ZRgjZvrRdlsSGSfjRXm4ZvzQp7st5sQfqEI/PjDXRbiiR4NG4P4Uz1juFF3dyspksZKv Sp/xHMMgkzYl0qOevtf88cqcsUZrohhy6wQfT4OcRe7HP21wKORQkWGfO/D6zj15+Gqt Eqxzc9hPEvFX0NGDh2/Vi0UInUNt0HvVnq2KoHLaKiyQ3hQsS43RrBVLWZKlzKJog8/s UpNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date; bh=FufZBOVAi/VB17UDWwlu2qz7Gpj9pHAfVHz40WDI2k8=; b=XE2hZ0Y7gm7YFwnYXPU8FgYal4xfmh3YW9RcSknitqJvXRuczRebo3gUdyl0aypIYh ZjafebIQRKTQZcNvd+/rOdHnxNrx7zuVfuypFLr1F9aZypH9y82LLcYdFACz+mDmAhvb g+bb/RSjA8mRk1TErdAZnQiYzaPuQyW2n+aSms9m1Ownw9gxhX94Zf/v/9ttzlSUTsdF /+5SssZeDEJFuA+QkTATjKLmIo6AbAvEch6MtTprV1rREmcCSqEj+njUWF0kp0CgLoP+ A/vG0t793EfBKagoTJYe+X7UZxI4vw2T1AIfijZ5vOeVQjtdFHkTtz+MX7ap4JuzWQjg a6jg== X-Gm-Message-State: ACrzQf2y/MQ/aPzqOLSTIlO4gtEJT0qW5OXQ/wNmQlN643jXJuoINQ5V lEnjnR2C4ncCDq66U3aW5Bnmk3IAxMIJ X-Received: by 2002:a05:6214:2342:b0:473:e142:f758 with SMTP id hu2-20020a056214234200b00473e142f758mr20479104qvb.83.1663696240643; Tue, 20 Sep 2022 10:50:40 -0700 (PDT) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:50a3:2f65:4798:4cad]) by smtp.gmail.com with ESMTPSA id o1-20020a05622a008100b003431446588fsm189017qtw.5.2022.09.20.10.50.39 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 20 Sep 2022 10:50:39 -0700 (PDT) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Sep 2022 12:50:20 -0500 Message-Id: <20220920175021.60790-7-rcombs@rcombs.me> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220920175021.60790-1-rcombs@rcombs.me> References: <20220920175021.60790-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 6/7] lavfi/vf_unsharp: use ff_filter_get_nb_jobs X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: brR04lsURAMB Improves performance by roughly 15% on M1 Max --- libavfilter/unsharp.h | 2 +- libavfilter/vf_unsharp.c | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/libavfilter/unsharp.h b/libavfilter/unsharp.h index 0da6f05036..7af32b0467 100644 --- a/libavfilter/unsharp.h +++ b/libavfilter/unsharp.h @@ -54,7 +54,7 @@ typedef struct UnsharpContext { int nb_planes; int bitdepth; int bps; - int nb_threads; + int nb_jobs; int (* apply_unsharp)(AVFilterContext *ctx, AVFrame *in, AVFrame *out); int (* unsharp_slice)(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs); } UnsharpContext; diff --git a/libavfilter/vf_unsharp.c b/libavfilter/vf_unsharp.c index e88e732c9e..9632058daf 100644 --- a/libavfilter/vf_unsharp.c +++ b/libavfilter/vf_unsharp.c @@ -166,7 +166,7 @@ static int apply_unsharp_c(AVFilterContext *ctx, AVFrame *in, AVFrame *out) td.dst_stride = out->linesize[i]; td.src_stride = in->linesize[i]; ff_filter_execute(ctx, s->unsharp_slice, &td, NULL, - FFMIN(plane_h[i], s->nb_threads)); + FFMIN(plane_h[i], s->nb_jobs)); } return 0; } @@ -229,12 +229,12 @@ static int init_filter_param(AVFilterContext *ctx, UnsharpFilterParam *fp, const av_log(ctx, AV_LOG_VERBOSE, "effect:%s type:%s msize_x:%d msize_y:%d amount:%0.2f\n", effect, effect_type, fp->msize_x, fp->msize_y, fp->amount / 65535.0); - fp->sr = av_malloc_array((MAX_MATRIX_SIZE - 1) * s->nb_threads, sizeof(uint32_t)); - fp->sc = av_calloc(fp->steps_y * s->nb_threads, 2 * sizeof(*fp->sc)); + fp->sr = av_malloc_array((MAX_MATRIX_SIZE - 1) * s->nb_jobs, sizeof(uint32_t)); + fp->sc = av_calloc(fp->steps_y * s->nb_jobs, 2 * sizeof(*fp->sc)); if (!fp->sr || !fp->sc) return AVERROR(ENOMEM); - for (z = 0; z < 2 * fp->steps_y * s->nb_threads; z++) + for (z = 0; z < 2 * fp->steps_y * s->nb_jobs; z++) if (!(fp->sc[z] = av_malloc_array(width + 2 * fp->steps_x, sizeof(*(fp->sc[z]))))) return AVERROR(ENOMEM); @@ -255,9 +255,9 @@ static int config_input(AVFilterLink *inlink) s->bps = s->bitdepth > 8 ? 2 : 1; s->unsharp_slice = s->bitdepth > 8 ? unsharp_slice_16 : unsharp_slice_8; - // ensure (height / nb_threads) > 4 * steps_y, + // ensure (height / nb_jobs) > 4 * steps_y, // so that we don't have too much overlap between two threads - s->nb_threads = FFMIN(ff_filter_get_nb_threads(inlink->dst), + s->nb_jobs = FFMIN(ff_filter_get_nb_jobs(inlink->dst), inlink->h / (4 * s->luma.steps_y)); ret = init_filter_param(inlink->dst, &s->luma, "luma", inlink->w); @@ -270,12 +270,12 @@ static int config_input(AVFilterLink *inlink) return 0; } -static void free_filter_param(UnsharpFilterParam *fp, int nb_threads) +static void free_filter_param(UnsharpFilterParam *fp, int nb_jobs) { int z; if (fp->sc) { - for (z = 0; z < 2 * fp->steps_y * nb_threads; z++) + for (z = 0; z < 2 * fp->steps_y * nb_jobs; z++) av_freep(&fp->sc[z]); av_freep(&fp->sc); } @@ -286,8 +286,8 @@ static av_cold void uninit(AVFilterContext *ctx) { UnsharpContext *s = ctx->priv; - free_filter_param(&s->luma, s->nb_threads); - free_filter_param(&s->chroma, s->nb_threads); + free_filter_param(&s->luma, s->nb_jobs); + free_filter_param(&s->chroma, s->nb_jobs); } static int filter_frame(AVFilterLink *link, AVFrame *in) From patchwork Tue Sep 20 17:50:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: rcombs X-Patchwork-Id: 38114 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:3b1c:b0:96:9ee8:5cfd with SMTP id c28csp2106471pzh; Tue, 20 Sep 2022 10:51:49 -0700 (PDT) X-Google-Smtp-Source: AMsMyM6Umg8JQVtLOW9YvJxnQCrhj+Dh4el50WVuq5IGmdXQ7px4LTcAqRBAMaVazxxEqMD36SlS X-Received: by 2002:a05:6402:3224:b0:44f:e1ff:8027 with SMTP id g36-20020a056402322400b0044fe1ff8027mr20720384eda.284.1663696309209; Tue, 20 Sep 2022 10:51:49 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1663696309; cv=none; d=google.com; s=arc-20160816; b=VMFVOCDgsTFWZRewSUbruIyg0/NImNhiwTI1QtiC/qb6mPbGG1+VWdjKZkyxxaeDgW jG9qudX0M2oNvjYx4WGcxuIxuy7NsomTzENFOpCwX4DTjzKD1kAVznk3D19jVsTfmaOI WLTVbOYxU2zRCGsitSQeZtPh7NGX/UgO1kl9vSUzbD9kbZWxf/ayISOsAWN+vCFvTXL0 8bmP90lKxprFCEvKtlODgcyqvbnazFnzJp9wtH62p9pEBwLH3PZh7zzOt6obbNfIbPeB DpH1A48QDv+XiUhVq9BoSkG88nENgEDfOda2+oPaAFX77Y99InZQnUUW+eqXwq1XTuP3 RPfQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:dkim-signature:delivered-to; bh=JQodrv7bx/OghqK/2alE0gTe98nIwbDfoNbS1BVkOCU=; b=HMEy8vThV+mdh3gU5Pl/J1ZZhWHqBqBBgmRfPSi5Dbo2B7jM5PhJaFZK7dyyZ5gWlr OZILtnGuDTD36wpdqLZ95bZ59n/wYBwwDbElymeDuY1mITWMCWDVpROiSnHpC03b6x3o ktaV976XWRuf59qvi83GuH/v9MT4MOzaL0+HqfEvDMsArcvZzAO1eeRHSxFVKRZsA2Ec iL1lOw15V/XLQ0DqcVhZrZiHK2Bq6jRO863zD3WeQ/RqgMMuu5i2th4bdOvzkE2KnFVx X2XnBmtMkrFxoAnVth38p0vtwqXKUJZnTiB4eDWTQVFlGaqBQjy8/CPI8DmpltH3wGMx yezA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=fscO+zCX; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q22-20020a50aa96000000b004477568d7a4si364095edc.215.2022.09.20.10.51.47; Tue, 20 Sep 2022 10:51:49 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@rcombs.me header.s=google header.b=fscO+zCX; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=rcombs.me Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9444468BB88; Tue, 20 Sep 2022 20:50:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qv1-f46.google.com (mail-qv1-f46.google.com [209.85.219.46]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4C21F68BB52 for ; Tue, 20 Sep 2022 20:50:43 +0300 (EEST) Received: by mail-qv1-f46.google.com with SMTP id s13so2556457qvq.10 for ; Tue, 20 Sep 2022 10:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rcombs.me; s=google; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date; bh=jajnxgj038Sfgi3UiR5pX7ytjAAom6QYuxGd/TtIWYs=; b=fscO+zCXvgJ4uDJOEQDoaHGiZZiZeJQYecbeXq2snpq1Um+UEbEP4BU+/df9vKAW+o Xhpot3WqhNk+VDYZWLOBApMMYMhqTZDdqgBb+KFk1NItOqmjhaNy+huz+XCbP0YC2Yw7 B+z/sH/acMhkN+dDp0suQifii7Yt0Au9QayCEaLDMHrTNLIC2p68FJ7jYw5rlKZkvnDs Y5k5FiQQ5GrEGuR5mPELrqEqyc4Fa0CWax5k//HdB5ihga4555yTwldmkKX7Nw50313S dQC+95ccMZXCXF/jHoDdN7S6oHLW6LI1oW5fwbpmatkSMP1BODI4t6mlbhdbKFG8y9G+ +VKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date; bh=jajnxgj038Sfgi3UiR5pX7ytjAAom6QYuxGd/TtIWYs=; b=ABh0LxN8dJ/qjMbD3oYBdplVqnVdq6KKlQnFU70z0RWxzw0XniuifPmkkoVqxdqT/s 5CHgOrwKaWxNVPWE5p1diqoonqsm4erMQsnzjrVzMMh9ofdtY7A4+0RBsBrZgkHcGKGs A9ac3Vr0YkSwW2d+oDgoJEn8ibbNVSuSiwUcbz+LJ94E4+gVbGDl24vsOLOr7kFSnHv/ 2OIZ6FqnSFD+PiYkzdL4USc9KIQbzzq7dNo1cdqiyXxbwlNwNTNM1OezLwh5pdm+k5AE nvT9YRsq3mEdTRIZJMR8EpcPQesJ+rxvv6U5f/v1k8JuIw97G5d+7NLapFU0LTgdY0+g VWAQ== X-Gm-Message-State: ACrzQf0ckrGVTQyPS9uGfecKR8fKkK8/6tfij5zkIj+RZJhAZTTnWTfj 9QfhJeoVsRUOyIsmsDAuwHxdnO4GLHPK X-Received: by 2002:a0c:d984:0:b0:4ac:b1a1:359f with SMTP id y4-20020a0cd984000000b004acb1a1359fmr20112335qvj.69.1663696241693; Tue, 20 Sep 2022 10:50:41 -0700 (PDT) Received: from rcombs-mbp.localdomain ([2601:243:2000:5ac:50a3:2f65:4798:4cad]) by smtp.gmail.com with ESMTPSA id o1-20020a05622a008100b003431446588fsm189017qtw.5.2022.09.20.10.50.40 for (version=TLS1_3 cipher=TLS_CHACHA20_POLY1305_SHA256 bits=256/256); Tue, 20 Sep 2022 10:50:41 -0700 (PDT) From: rcombs To: ffmpeg-devel@ffmpeg.org Date: Tue, 20 Sep 2022 12:50:21 -0500 Message-Id: <20220920175021.60790-8-rcombs@rcombs.me> X-Mailer: git-send-email 2.37.2 In-Reply-To: <20220920175021.60790-1-rcombs@rcombs.me> References: <20220920175021.60790-1-rcombs@rcombs.me> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 7/7] lavfi/vf_scale: set sws job count using ff_filter_get_nb_jobs X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: Y85Ru0TGTfi/ This mirrors the existing handling for thread count. --- libavfilter/vf_scale.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libavfilter/vf_scale.c b/libavfilter/vf_scale.c index 2b12cf283c..db984725bd 100644 --- a/libavfilter/vf_scale.c +++ b/libavfilter/vf_scale.c @@ -544,6 +544,7 @@ static int config_props(AVFilterLink *outlink) av_opt_set_int(s, "param0", scale->param[0], 0); av_opt_set_int(s, "param1", scale->param[1], 0); av_opt_set_int(s, "threads", ff_filter_get_nb_threads(ctx), 0); + av_opt_set_int(s, "jobs", ff_filter_get_nb_jobs(ctx), 0); if (scale->in_range != AVCOL_RANGE_UNSPECIFIED) av_opt_set_int(s, "src_range", scale->in_range == AVCOL_RANGE_JPEG, 0);