From patchwork Sun Sep 3 00:47:38 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: James Almer X-Patchwork-Id: 4962 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.15.201 with SMTP id 70csp1885030jao; Sat, 2 Sep 2017 17:47:59 -0700 (PDT) X-Received: by 10.28.109.220 with SMTP id b89mr1764588wmi.106.1504399679646; Sat, 02 Sep 2017 17:47:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1504399679; cv=none; d=google.com; s=arc-20160816; b=eLXcd1PzdCeYDIFwZdLwUE734C+wb/t4rNGj7sGiNOZ9unpzzCogPGvHRHVcqQy8Yj /jDnF/XtDPELYeQm9TQvqDSDINNnJUw7mgIv1ZmrYIs4WS6L9so+JHZX222r3fQa3781 bH5JUR8VoXKjTICntY01BoKjMCSrqAgbrZOqLGUAksPaMPQhgm4JIJzXrY7oS17wvl82 jfoc0Y7zkxexV/NS8DhQFJxiMfLq1kjl7+TTh/KIfNI590fnNWs8zNrty4cGDtMNmCKX FeqCbX8nNCs+O6sNGvF8zAiAx2IDnhwHZ8gPXZi6B44aQYjz431l47hXBxqMk7g5yITD Ks8g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=HBiOrfuCJOeune6d3ogG6XnFOh4fC4+Uu1ejpcPPxmI=; b=ooI1M9QWIh9mjTg8ioxWlmlen6+inkVX+i5T3bCeuS/14gL4SzhDDPpTH7Zdsg9+wq FVtt/WcAoR7vAyigoB8bZlnistd+PB7HMaEiI0WSl4MaLdZgYPe3qb6/cEq86cJudNdz 69CDMs4NOybI2suAyDehRyqAx8xmNFBLTWWRV/CRFqWm74WOflGVFw9nQF+Yd8YrasH8 y0xMQb7lYG41Dyx5WwvOdmt7RA/ei2VGf+oPaq8ZPxOvwtIS5SSY/y//nbe0gXeCL3yi DEyvoqTfuYrQBuuJzctd98QyJolyJl7GGGeJWOl9hgZ6yi5nXIxEOMjeeFUshuRM1KjE Pe8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=pUrEaWjL; 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=NONE sp=NONE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id 94si2690066wrh.401.2017.09.02.17.47.58; Sat, 02 Sep 2017 17:47:59 -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=@gmail.com header.s=20161025 header.b=pUrEaWjL; 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=NONE sp=NONE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 117AD689D07; Sun, 3 Sep 2017 03:47:56 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-qk0-f196.google.com (mail-qk0-f196.google.com [209.85.220.196]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id DF9C3689B7B for ; Sun, 3 Sep 2017 03:47:48 +0300 (EEST) Received: by mail-qk0-f196.google.com with SMTP id o63so2420388qkb.5 for ; Sat, 02 Sep 2017 17:47:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=WIxXEhgNoZVHcF145DyT5p3KMjtwU2Xki1VQznWOaFY=; b=pUrEaWjL1bLZCIjm6MC9mQQZmfl9Qqmo2MnurHh1RrbtpJcWBnxLMm6U4ZBmS+o192 2rL9jEAc3hwkFmn1UhWqevgrXm4rRZEG/yPvUTTUETi6UyirIIm52XGcouvJHRiLKpRu 1TjRyrAx2AHQLjcOPEJrQSiWUWlE8DCqKBrzLTJqBkmsEDUyqB/mKmFPfTnB7UDZkCIp T9njxpDBRYdsyva9k21ftnKC9M/dn5CZ2WjGZuXMi8ObNkC84mmfxIer2Szkj+qM95ZI VCRxS02g5L3HiROkDAwL6G2c396yE0PeY5JEzKChrLCWUg2RqYKpOcSqyATAxZAbTmkR oKAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=WIxXEhgNoZVHcF145DyT5p3KMjtwU2Xki1VQznWOaFY=; b=DMNdQAWLjwIqzWmm5s2c6hb2OrKI0sY+ZaAJ621+ksUW37pEyHqzJ/+hocd8NIlT9b Ni6JuKENv5HFWKjX1bbbdXeindgN/eh/F+a3WKnenYseotEzX34tEFtSrvq+lVtMT86c GAhceNkm44N93kRPagD9xlY3ujJPE4UdjIYPRCgo0bI00eXU8W5rAHEUWzw5ILIxTDGQ cHEwpQOreC4cBsZFAHuzIe31AFmblf/L8BVYf9BIg6aWfU4pPra/yGrRnR7P5UUZb9nB IoidoTkmGONeDmyeh96/1gr8GOqOLvd9m5TXvMJom//9fDtRUwZY/OWTFLhrrVfBpwas PWig== X-Gm-Message-State: AHPjjUga5bO4ZdOELo4XP6BygqInxKDQI3ilMaOaJTkCCNHCd0P6Etux /gnxoEQRdPCWhXnX X-Google-Smtp-Source: ADKCNb79peMsvMJeEakOaPMjtU4JljNgvg7jlpq/ARxXXhy4yVgx7EWJwEIUdzndjb3GUzu1G9q6CQ== X-Received: by 10.55.151.71 with SMTP id z68mr8321896qkd.342.1504399669429; Sat, 02 Sep 2017 17:47:49 -0700 (PDT) Received: from localhost.localdomain ([181.231.116.134]) by smtp.gmail.com with ESMTPSA id q76sm1599479qka.96.2017.09.02.17.47.48 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 02 Sep 2017 17:47:49 -0700 (PDT) From: James Almer To: ffmpeg-devel@ffmpeg.org Date: Sat, 2 Sep 2017 21:47:38 -0300 Message-Id: <20170903004738.8928-1-jamrial@gmail.com> X-Mailer: git-send-email 2.13.3 In-Reply-To: <20170902182943.GC21898@golem.pkh.me> References: <20170902182943.GC21898@golem.pkh.me> Subject: [FFmpeg-devel] [PATCH v2] cpu: add a function for querying maximum required data alignment X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" From: Anton Khirnov (cherry picked from commit e6bff23f1e11aefb16a2b5d6ee72bf7469c5a66e) Signed-off-by: James Almer --- This is (afaics) the last API introduced to libav before the major bump. Now checking all the x86 flags that would require aligment of 16 bytes or more. doc/APIchanges | 3 +++ libavutil/cpu.c | 35 +++++++++++++++++++++++++++++++++++ libavutil/cpu.h | 13 +++++++++++++ libavutil/version.h | 2 +- 4 files changed, 52 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index 4effbf9364..6a57c210a9 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -15,6 +15,9 @@ libavutil: 2015-08-28 API changes, most recent first: +2017-09-xx - xxxxxxx - lavu 55.75.100 / lavu 55.31.0 - cpu.h + Add av_cpu_max_align() for querying maximum required data alignment. + 2017-09-01 - xxxxxxx - lavf 57.81.100 - avio.h Add avio_read_partial(). diff --git a/libavutil/cpu.c b/libavutil/cpu.c index a22da0fa8c..4f04da2460 100644 --- a/libavutil/cpu.c +++ b/libavutil/cpu.c @@ -16,9 +16,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include +#include "attributes.h" #include "cpu.h" #include "cpu_internal.h" #include "config.h" @@ -299,3 +301,36 @@ int av_cpu_count(void) return nb_cpus; } + +size_t av_cpu_max_align(void) +{ + int av_unused flags = av_get_cpu_flags(); + +#if ARCH_ARM || ARCH_AARCH64 + if (flags & AV_CPU_FLAG_NEON) + return 16; +#elif ARCH_PPC + if (flags & AV_CPU_FLAG_ALTIVEC) + return 16; +#elif ARCH_X86 + if (flags & (AV_CPU_FLAG_AVX2 | + AV_CPU_FLAG_AVX | + AV_CPU_FLAG_FMA4 | + AV_CPU_FLAG_FMA3)) + return 32; + if (flags & (AV_CPU_FLAG_XOP | + AV_CPU_FLAG_AESNI | + AV_CPU_FLAG_SSE42 | + AV_CPU_FLAG_SSE4 | + AV_CPU_FLAG_SSSE3 | + AV_CPU_FLAG_SSE3 | + AV_CPU_FLAG_SSE2 | + AV_CPU_FLAG_SSE | + AV_CPU_FLAG_AVXSLOW | + AV_CPU_FLAG_SSE3SLOW | + AV_CPU_FLAG_SSE2SLOW)) + return 16; +#endif + + return 8; +} diff --git a/libavutil/cpu.h b/libavutil/cpu.h index de05593446..9e5d40affe 100644 --- a/libavutil/cpu.h +++ b/libavutil/cpu.h @@ -21,6 +21,8 @@ #ifndef AVUTIL_CPU_H #define AVUTIL_CPU_H +#include + #include "attributes.h" #define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ @@ -113,4 +115,15 @@ int av_parse_cpu_caps(unsigned *flags, const char *s); */ int av_cpu_count(void); +/** + * Get the maximum data alignment that may be required by FFmpeg. + * + * Note that this is affected by the build configuration and the CPU flags mask, + * so e.g. if the CPU supports AVX, but libavutil has been built with + * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through + * av_set_cpu_flags_mask(), then this function will behave as if AVX is not + * present. + */ +size_t av_cpu_max_align(void); + #endif /* AVUTIL_CPU_H */ diff --git a/libavutil/version.h b/libavutil/version.h index 6e25b4690c..d99eff5d15 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -80,7 +80,7 @@ #define LIBAVUTIL_VERSION_MAJOR 55 -#define LIBAVUTIL_VERSION_MINOR 74 +#define LIBAVUTIL_VERSION_MINOR 75 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \