From patchwork Wed Sep 27 10:03:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 43972 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2493603pzh; Wed, 27 Sep 2023 03:07:03 -0700 (PDT) X-Google-Smtp-Source: AGHT+IE8NJP9MK9p/q6vwtxLacYLRSMd/eWbPzuy4ZSoULij1tP4u9oO3LW715B3CJPkBUXFMzHP X-Received: by 2002:a17:906:30ce:b0:9a2:ecd:d963 with SMTP id b14-20020a17090630ce00b009a20ecdd963mr1443015ejb.44.1695809222880; Wed, 27 Sep 2023 03:07:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695809222; cv=none; d=google.com; s=arc-20160816; b=r/USCUd77ixBvnMdgCHryopmhhD4DdfwcwS141xIsOx4rzgQ4JjxrC56dWEEWI0gY6 5+FmWSVaFH69jveVgJz9gBV/5yEP9QduwghrX8uEB0B7+micFUxAtIVSpDieg5jtWSq6 UFB/OMdSpOmRsyQHLP2TA+ekxUTLZ72/qzjGfUIxa5ZPz2r7flotwZ/OvyKxab+Jpj74 /Evl81VkhRQAizUD9cFFSwgbpp7VD/6zIRg8Unns5LIF8rU4hSSZ2KZ1q9VlSbo7qi6Y uOIQsb9hP0YSfkcn5zP7saZe/Bgx3NpbBaxonGugYpkmM9S+GkT45vFps0Bw7nnrG6Rg M6oA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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=qD4u15Dxnx7AowlwVEMEkKyCZ6cDiPqzJY7s2nQKfCM=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=WZ8Eo+UHB5ipF0UEwZAXI9hY6roLJ2XB5tmnO/derrES9LJarSEzONw5po/KaCirl6 YBoatHoP2Kve0FKCU2C/RTA3dYtG427jNSSdFdedCebUTy0HXIrh6jPSv6tzdndzdLRb LIcpk1/hjTGmiCpLmR3pkRG79nYhtg7wHurxMtn6/U69cZV7O05zlb2KaozJ+vZp60Wy wuYZNgkjCVEG3tvkqWMr6eE7NqjM/XbvQlSWgtpim2sdez7htFBkj+rl2I95uxdE0m7+ 95rTUXkOWg7IJtJq8ePl1enwIwfQY0Ya3Vpfufgu7qACWAiHhRgqMQEF0AlUFwp2i2hq OwEQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=o4bSoeMJ; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id d10-20020a170906370a00b009a5f1d1563fsi13317423ejc.809.2023.09.27.03.06.59; Wed, 27 Sep 2023 03:07: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=@haasn.xyz header.s=mail header.b=o4bSoeMJ; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C24C568CAD5; Wed, 27 Sep 2023 13:06:47 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5FB7168CAB1 for ; Wed, 27 Sep 2023 13:06:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 2308343600; Wed, 27 Sep 2023 12:06:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1695809200; bh=2CbpgMtRVjY9VOi1cjLCrS/bAfzjpkX/3raAO/2koA4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=o4bSoeMJ2dCCzhTXuzT2eVFVNkyXfs5wiGES8k3S2ABFQgImNK4m0SRkFMnf5954R 0wvRePJ6Ap1Bv+vz8ILhZQ6+Gj88x4ZA44GfkrT5xC3jM8qm+Ceoq3rdvPK/Gh+6SY XITj4rCotkFGTuVK4VeYnGZXz3osIAqXQgLMaKF0= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 12:03:52 +0200 Message-ID: <20230927100630.50510-2-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230927100630.50510-1-ffmpeg@haasn.xyz> References: <20230927100630.50510-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 1/5] avutil/rational: add av_abs_q 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 Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: rLMjEL6X7kZ5 From: Niklas Haas Seems like an obvious utility function to be missing, and useful in at least several places in the code. --- doc/APIchanges | 3 +++ libavutil/rational.h | 12 ++++++++++++ libavutil/version.h | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/doc/APIchanges b/doc/APIchanges index f333ff5b24f..2219e32ddc1 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -2,6 +2,9 @@ The last version increases of all libraries were on 2023-02-09 API changes, most recent first: +2023-09-27 - xxxxxxxxxx - lavu 58.26.100 - rational.h + Add av_abs_q() + 2023-09-19 - xxxxxxxxxx - lavu 58.25.100 - avutil.h Make AV_TIME_BASE_Q compatible with C++. diff --git a/libavutil/rational.h b/libavutil/rational.h index 8cbfc8e0669..7b559ce515d 100644 --- a/libavutil/rational.h +++ b/libavutil/rational.h @@ -162,6 +162,18 @@ static av_always_inline AVRational av_inv_q(AVRational q) return r; } +/** + * Take the absolute value of a rational. + * @param q value + * @return abs(q) + */ +static av_always_inline AVRational av_abs_q(AVRational q) +{ + if (q.num < 0) + q.num = -q.num; + return q; +} + /** * Convert a double precision floating point number to a rational. * diff --git a/libavutil/version.h b/libavutil/version.h index 00f229d2335..2dc1a647b8f 100644 --- a/libavutil/version.h +++ b/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 58 -#define LIBAVUTIL_VERSION_MINOR 25 +#define LIBAVUTIL_VERSION_MINOR 26 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From patchwork Wed Sep 27 10:03:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 43973 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2493675pzh; Wed, 27 Sep 2023 03:07:12 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHK8i7UB/TSFmbAOh452verBuvF6t9VrhetUyhhMGpFKCgWmEL5mamLSrXRCAkOqy+Kj738 X-Received: by 2002:aa7:d8c9:0:b0:532:c72e:26fb with SMTP id k9-20020aa7d8c9000000b00532c72e26fbmr1727111eds.6.1695809232145; Wed, 27 Sep 2023 03:07:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695809232; cv=none; d=google.com; s=arc-20160816; b=YERag06GdZN+wayLLpyQFXv0jtbjsTEU3jzXJNAxp5vjzT3EejL3kEZbA8DpnYg2ar tT37enIcYY2bH6egEhGnb2RV5iekkHE6RjAeuC5NsPKCo9t58utCO9aIyPQIU3DuQnfV VDYGdK/TuPe3GLp5M+qQ0iGtUA+4SWBZdC2SuZjIX/7apCXcEwOFKlLyW9NoDvNCrMXV PRAhjvpYPjjRp1AMi/w/IjQl1E9IBN/y73EU56eqa2wr/0Wc6NqGJx2tMAYPHb5o2oW1 ubOs4TExZfQoxZeVeV4kSq1dGtyya2FWrmzW3yUfEH/3gpxlsapT+BH4zjmWuAUSwyLD 0wNQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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=7wZ+iJ7d7AmHIzP+qQ3uQXw6GOK8oC2NStKlETi6mB4=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=Tku1wq1OVLNQcu+Amb1cdklc9KFDFpQOsdDb5mfLyQG1Aqbx7Ax5ISG1ycN04GyysX SNueyYwQUiyRqG4hbUxk1cuGOxvN/8qIPs4hSjwHkf1eYJWtwbr/40lqEtODc3Xx6En7 pwaxs4MJ6qUs7KLhF5Cpmu5ckQIGmXEKtRDvrUhUafpG8NYC3YUKhpOQ0Ic9rTdmarEX kpoT+jozVGOdtx0ca98xxd85WEIGzJJLqy5XE5RzcJzMNn18s1gC50qhir7exUHdwhAq tzKkHHvhpK4D6d2k7DyXlj44R1dEAU2gj6m4YDnraVfHiN37f0dS5bgkDTKDLI3Hy61q 2Ogw== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=QfFwA8OQ; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id z21-20020aa7d415000000b00534111ca95csi5822911edq.525.2023.09.27.03.07.09; Wed, 27 Sep 2023 03:07:12 -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=@haasn.xyz header.s=mail header.b=QfFwA8OQ; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9FFFD68CAB4; Wed, 27 Sep 2023 13:06:48 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A6A3968CAB1 for ; Wed, 27 Sep 2023 13:06:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 6152B43F09; Wed, 27 Sep 2023 12:06:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1695809200; bh=tEDWSb/WEOvJgvRRNxdOdF/iLbTSRNKcCPxSiH+qYd8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QfFwA8OQVDnJmh3mbZzTSydpqqrIplQc8YR9DjsL4JRGw1GybLg8hFmbq8VFiUmCy 8kJqRCx30H1bDp0+cjEkHSHinKqm4/R7mE6bxSxXWYYJF4L/S2XNUb9xlpi9stI/1Z qfYwx7yu6w3fGpkiPw1loGtHUSxO36hGqwp3vUXM= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 12:03:53 +0200 Message-ID: <20230927100630.50510-3-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230927100630.50510-1-ffmpeg@haasn.xyz> References: <20230927100630.50510-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 2/5] avutil/csp: re-use av_abs_q 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 Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: d0NRMXBCgkLy From: Niklas Haas --- libavutil/csp.c | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/libavutil/csp.c b/libavutil/csp.c index 7ef822c60bc..6522225a8d6 100644 --- a/libavutil/csp.c +++ b/libavutil/csp.c @@ -100,13 +100,6 @@ const AVColorPrimariesDesc *av_csp_primaries_desc_from_id(enum AVColorPrimaries return p; } -static av_always_inline AVRational abs_sub_q(AVRational r1, AVRational r2) -{ - AVRational diff = av_sub_q(r1, r2); - /* denominator assumed to be positive */ - return av_make_q(abs(diff.num), diff.den); -} - enum AVColorPrimaries av_csp_primaries_id_from_desc(const AVColorPrimariesDesc *prm) { AVRational delta; @@ -116,14 +109,14 @@ enum AVColorPrimaries av_csp_primaries_id_from_desc(const AVColorPrimariesDesc * if (!ref->prim.r.x.num) continue; - delta = abs_sub_q(prm->prim.r.x, ref->prim.r.x); - delta = av_add_q(delta, abs_sub_q(prm->prim.r.y, ref->prim.r.y)); - delta = av_add_q(delta, abs_sub_q(prm->prim.g.x, ref->prim.g.x)); - delta = av_add_q(delta, abs_sub_q(prm->prim.g.y, ref->prim.g.y)); - delta = av_add_q(delta, abs_sub_q(prm->prim.b.x, ref->prim.b.x)); - delta = av_add_q(delta, abs_sub_q(prm->prim.b.y, ref->prim.b.y)); - delta = av_add_q(delta, abs_sub_q(prm->wp.x, ref->wp.x)); - delta = av_add_q(delta, abs_sub_q(prm->wp.y, ref->wp.y)); + delta = av_abs_q(av_sub_q(prm->prim.r.x, ref->prim.r.x)); + delta = av_add_q(delta, av_abs_q(av_sub_q(prm->prim.r.y, ref->prim.r.y))); + delta = av_add_q(delta, av_abs_q(av_sub_q(prm->prim.g.x, ref->prim.g.x))); + delta = av_add_q(delta, av_abs_q(av_sub_q(prm->prim.g.y, ref->prim.g.y))); + delta = av_add_q(delta, av_abs_q(av_sub_q(prm->prim.b.x, ref->prim.b.x))); + delta = av_add_q(delta, av_abs_q(av_sub_q(prm->prim.b.y, ref->prim.b.y))); + delta = av_add_q(delta, av_abs_q(av_sub_q(prm->wp.x, ref->wp.x))); + delta = av_add_q(delta, av_abs_q(av_sub_q(prm->wp.y, ref->wp.y))); if (av_cmp_q(delta, av_make_q(1, 1000)) < 0) return p; From patchwork Wed Sep 27 10:03:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 43974 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2493751pzh; Wed, 27 Sep 2023 03:07:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEf/gLhoy+6SuzKggfvrtlwXt6P01AEQIlv+Yqe7veIxB6QXPHZs1cwdKZGQzvu5u+bSUXZ X-Received: by 2002:a17:907:b21:b0:9ae:68a2:3bf0 with SMTP id s1-20020a1709070b2100b009ae68a23bf0mr1321705ejl.28.1695809241679; Wed, 27 Sep 2023 03:07:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695809241; cv=none; d=google.com; s=arc-20160816; b=n16pP7v4iDl+M7MzzDb8qA6M2d5owB8NTwl9AeH/IgMvdNX/f+nkAel3E+YzJ9uwRB IVllgQTXsSoCB8IIISfhWn6g3i73qSDsfmbfCHZVj5J70218c4ZbAARDA/shtJrimL6m HKkwxWYFTvcfexSrWRPGy9jXFpLvMQ7o7xt1hb3L3PPcT1j53TNag4ry88RhRJJXXhCm mYYvt0D7iMAvgcS/Gh34eEhamglnxJ7b79Mq7VA3qg8URGXmk2dctkxhKbaELm4c8NZA cd21AoxLn3MEQMdWQxlVdinatauEPVN5RVdPX1jT1jnxH5OvUIzYCioGaP0xh3xARo1E 5AwA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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=oWnP8c8M8VmmZHSXx3U5i+5KUtFlcmNP1UaUvWNwlpk=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=DZBFpelZrK5aQM4z6R+iKcQBbUnOxZ5MI+DjLkj8xR5nm0U0LjCgLyRxJIH+oJKnEx YQS8+7Az0gUUT5a9wVwlEVkuiwu/clrYYEOJcDFsziHfMlseVq0JXGR9MoSqUQ/O67S3 RLjTs/GS+Za50UvvRsA6GTnMpdWaCxCJrQHcf+A8xBPtpSAoMbvetBzGANvDutrL3Cuz 0SLyDoFRbswv2JomPIyzF7svjuqDSpEb80bJIYcJGJtIxKJNyxOY7UzQlNTDMkmZybWf ZfoGyrG/gxmEaILdVGt/xr9LzvkFuPaFuBmGpz3P8IVjuq0tOhgJmGHO9mNcBCMDTktm 8EJA== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=IyUVOWsp; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id q12-20020a170906770c00b0099332c48e49si13075437ejm.133.2023.09.27.03.07.18; Wed, 27 Sep 2023 03:07:21 -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=@haasn.xyz header.s=mail header.b=IyUVOWsp; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 9BBB268CAE5; Wed, 27 Sep 2023 13:06:49 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E528A68CAB1 for ; Wed, 27 Sep 2023 13:06:40 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 9E8694B95C; Wed, 27 Sep 2023 12:06:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1695809200; bh=1Vtl9+h/Bf2D5n7fqf0O0pXGv/KmqX0eBz6uuDty9z4=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=IyUVOWsp2zu+T7L8CtqBUZRkgjw0lF9HD6RqI+iAh/TmayT7u3TyXaegnx1gMT2q1 8hS/BzOOOP4Oef9XM/7J+vaVm3fNxDl7hv8D2G/gUrUELJHaNeE5Ohymdh0Ur4cONd 7V28HP2nQde3NXaydvjgkiucZ8B/A9JuZKlVDo38= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 12:03:54 +0200 Message-ID: <20230927100630.50510-4-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230927100630.50510-1-ffmpeg@haasn.xyz> References: <20230927100630.50510-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] avcodec/fflcms2: add ff_icc_profile_sanitize 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 Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: 3A3c0oW/gjAg From: Niklas Haas Buggy ICCv4 profiles are unfortunately used in the wild, and it's quite easy to work around them by just forcing the white point to the correct value. Display a warning just in case. See-Also: https://trac.ffmpeg.org/ticket/9673 --- libavcodec/fflcms2.c | 45 ++++++++++++++++++++++++++++++++++++++++++++ libavcodec/fflcms2.h | 7 +++++++ 2 files changed, 52 insertions(+) diff --git a/libavcodec/fflcms2.c b/libavcodec/fflcms2.c index 5443f178bc9..41732c9c862 100644 --- a/libavcodec/fflcms2.c +++ b/libavcodec/fflcms2.c @@ -201,6 +201,51 @@ static av_always_inline void XYZ_xy(cmsCIEXYZ XYZ, AVCIExy *xy) xy->y = av_d2q(k * XYZ.Y, 100000); } +static const AVCIExy wp_d50 = { {3457, 10000}, {3585, 10000} }; /* CIE D50 */ + +int ff_icc_profile_sanitize(FFIccContext *s, cmsHPROFILE profile) +{ + cmsCIEXYZ *white, fixed; + AVCIExy wpxy; + AVRational diff, z; + if (!profile) + return 0; + + if (cmsGetEncodedICCversion(profile) >= 0x4000000) { // ICC v4 + switch (cmsGetHeaderRenderingIntent(profile)) { + case INTENT_RELATIVE_COLORIMETRIC: + case INTENT_ABSOLUTE_COLORIMETRIC: ; + /* ICC v4 colorimetric profiles are specified to always use D50 + * media white point, anything else is a violation of the spec. + * Sadly, such profiles are incredibly common (Apple...), so make + * an effort to fix them. */ + if (!(white = cmsReadTag(profile, cmsSigMediaWhitePointTag))) + return AVERROR_INVALIDDATA; + XYZ_xy(*white, &wpxy); + diff = av_add_q(av_abs_q(av_sub_q(wpxy.x, wp_d50.x)), + av_abs_q(av_sub_q(wpxy.y, wp_d50.y))); + if (av_cmp_q(diff, av_make_q(1, 1000)) > 0) { + av_log(s->avctx, AV_LOG_WARNING, "Invalid colorimetric ICCv4 " + "profile media white point tag (expected %.4f %.4f, " + "got %.4f %.4f)\n", + av_q2d(wp_d50.x), av_q2d(wp_d50.y), + av_q2d(wpxy.x), av_q2d(wpxy.y)); + /* x+y+z = 1 */ + z = av_sub_q(av_sub_q(av_make_q(1, 1), wp_d50.x), wp_d50.y); + fixed.X = av_q2d(av_div_q(wp_d50.x, wp_d50.y)) * white->Y; + fixed.Y = white->Y; + fixed.Z = av_q2d(av_div_q(z, wp_d50.y)) * white->Y; + if (!cmsWriteTag(profile, cmsSigMediaWhitePointTag, &fixed)) + return AVERROR_EXTERNAL; + } + break; + default: break; + } + } + + return 0; +} + int ff_icc_profile_read_primaries(FFIccContext *s, cmsHPROFILE profile, AVColorPrimariesDesc *out_primaries) { diff --git a/libavcodec/fflcms2.h b/libavcodec/fflcms2.h index af63c9a13c8..b54173e50e2 100644 --- a/libavcodec/fflcms2.h +++ b/libavcodec/fflcms2.h @@ -65,6 +65,13 @@ int ff_icc_profile_generate(FFIccContext *s, */ int ff_icc_profile_attach(FFIccContext *s, cmsHPROFILE profile, AVFrame *frame); +/** + * Sanitize an ICC profile to try and fix badly broken values. + * + * Returns 0 on success, or a negative error code. + */ +int ff_icc_profile_sanitize(FFIccContext *s, cmsHPROFILE profile); + /** * Read the color primaries and white point coefficients encoded by an ICC * profile, and return the raw values in `out_primaries`. From patchwork Wed Sep 27 10:03:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 43975 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2493824pzh; Wed, 27 Sep 2023 03:07:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFMH7vT6VyitzQQl7MQNEHmbU1YRY2GhLLJpxW7DZ+Bo3zr+tgcrKig0vXoyxqiCf/izObo X-Received: by 2002:a05:651c:103b:b0:2c0:18b8:9656 with SMTP id w27-20020a05651c103b00b002c018b89656mr1664240ljm.24.1695809252010; Wed, 27 Sep 2023 03:07:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695809251; cv=none; d=google.com; s=arc-20160816; b=pyum/7nLhD0bETtRVUs8Om/nKrwfsALi1rIg3aJpkN8YzyU7vbErvJKQ5qrAuDHN3t YKcSLk8OIL5X+A4jmm0WUFCCplQGi0ZZqBEBhkoKnwBYwMNQylhiTqG/3P6lCfm4yMDS 5VOHIN7fc17WkXFlQLVPy+5Gn3uVh6YWOx4qPU2xBElaxwfcdLGb16Ioy3UkZh3LjYDc ixfcRxqU5rWfEiVPksC+MrawJ1m5c2s2uylfLX+a81XlZy+YBfuFaML42yl0Y8H5Kay5 Cx6F+gfFBxBxB8sY+TanIGx4i8/NGID84oNPv1KvKcWjCHBBZ0I+F/hyaj1aYtlHKjit 8snw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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=nSvSVyS/QcjzerIBVYfh6ilcR8rPZREnqjvWZOzG0sU=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=X1leX+kEtBYhUoujo9bSsKBfXHiurz+YWSsHkZe46SIPPJDJ5bF+3bu6XVE8v5S3Nk YNRFzHn459BVJ+Muzati8eygxKMBSLXEajc8Fk+mHYxNGVvwDPfJHbks0r4zWV5H4Mn2 R4kF3tgjMAIyFtOW89xUv/ZJumxJoGbysE//ZV+sxZN9C/DCVBadLxS4B7w3wDOuAupf nbXeLT1Qz58JND9qa9PwHahGLnIOeFf/WndWC95/rpMgu9fI4KOwbyUVrIH4hrT2EuXC LSwB01Lz4a73Ct+a5bPnPEWvA2g2daPukuuiZSErvs+8LMUFZy2eSgbvqI/17vKrMvb+ IsUQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=OFQRsKg0; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id j4-20020a170906254400b009ad8059e428si13718597ejb.860.2023.09.27.03.07.28; Wed, 27 Sep 2023 03:07:31 -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=@haasn.xyz header.s=mail header.b=OFQRsKg0; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id A86EA68CAE9; Wed, 27 Sep 2023 13:06:50 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 291B668CAB8 for ; Wed, 27 Sep 2023 13:06:41 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id DB9B24B97C; Wed, 27 Sep 2023 12:06:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1695809200; bh=tYYhgSpMaB35HuIZ/CW7jUYOwD8PTXPHDtLUWzsOTD8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OFQRsKg0aWS2eeKhxXhG9hPoV1Ko08vTYLNPiE4PcRD12hNtFdguFny+plD7jSj2F X24mwfGsEeotQ7Coa5mJoPINI6xSk0SwDnMzcZIX8Bw/gjf39pYXEosyuYYq3CA2db zooQU/CDds2jSLH6kc9uoNkbc5eypFOKpiBn8xK4= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 12:03:55 +0200 Message-ID: <20230927100630.50510-5-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230927100630.50510-1-ffmpeg@haasn.xyz> References: <20230927100630.50510-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 4/5] avfilter/vf_iccdetect: use ff_icc_profile_sanitize 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 Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: eUKYwsagApHo From: Niklas Haas --- libavfilter/vf_iccdetect.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavfilter/vf_iccdetect.c b/libavfilter/vf_iccdetect.c index 5288b0320d2..16eacbbb560 100644 --- a/libavfilter/vf_iccdetect.c +++ b/libavfilter/vf_iccdetect.c @@ -93,7 +93,9 @@ static int iccdetect_filter_frame(AVFilterLink *inlink, AVFrame *frame) if (!profile) return AVERROR_INVALIDDATA; - ret = ff_icc_profile_read_primaries(&s->icc, profile, &coeffs); + ret = ff_icc_profile_sanitize(&s->icc, profile); + if (!ret) + ret = ff_icc_profile_read_primaries(&s->icc, profile, &coeffs); if (!ret) ret = ff_icc_profile_detect_transfer(&s->icc, profile, &s->profile_trc); cmsCloseProfile(profile); From patchwork Wed Sep 27 10:03:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Niklas Haas X-Patchwork-Id: 43976 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a20:2a18:b0:15d:8365:d4b8 with SMTP id e24csp2493867pzh; Wed, 27 Sep 2023 03:07:39 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGPvQby+q9bq/W+HjEH7XmtQcF9UZ7JGVWSnUcx4kWrqYXN/NzlOZ34Y0Jn9vzhT4FQoTME X-Received: by 2002:a17:906:99c7:b0:9b2:a783:3d0 with SMTP id s7-20020a17090699c700b009b2a78303d0mr4928330ejn.37.1695809258971; Wed, 27 Sep 2023 03:07:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695809258; cv=none; d=google.com; s=arc-20160816; b=pcQOyy6zo+NHP/ErlSN9gotOOz5TSYvP3Lq9l8PaGn9yITj9h3/MNQHTUHlbEmIilq 5uhTg9FfWOwnYvDsnu1k5OFAg13zYTBl1sGofqc4zQv30n9+mZoweCY6y3fXv1AP8+6a UWAz1h7TUFQx/+uMjZ1hW2roG172YlxVF21BJOhUX8m3b7NCOaUTdYEyhie84wUNlzey +pO2sUSflvblHNEHAKrn6XKlNLlhVhP7ICxIQ/7HeoxilUAgrcDtCwWxOP1U3UBZWkGu 5F7m5K2qsMyqn4Gs3Cmcj+/FuWqQ7cl2nci8YJDf/RQRZ9RN79DKTyZV83CZN4GhGRRe iWKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc: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=qCATyj8GcQ+HFjZFrvfWNcRxUYxwlaiv53EfPNrEwik=; fh=xmAeKtysnShNOmkhiJmYkS30uw4Fu2hvBJ7qlIwukxQ=; b=A6/3ElhwA02Kg0dyuwXNVq11D/Cp2Mydl2iyJDG/kgoe9F3U1VP4SIxKqzNaGQ7x0Q M2nTTUXglbPPLRjOK024NYnsb19Vl8FKFhjomTOF0uq3MqOir0nh9fLpenF5E/KEWjMh wqhs4rSYWgNdh5HonGA0Gw5AT8XTJhFS7+ICr8y4gK46NnJwo5C61cR/EOEQs3p9NgqW 8tU3U+3/oCkkFDw/ZaO0CsGCDrlbh7/HX2PHhdNK68kQh5UR5FGnJzOLz01NQjDv0PVI IgZg+YPNl/C4BVgE/DNRtfdxWthH88hRgDReNkn7//vv2m9fNlREMn0ZeQU5pM2DUUDl MIkQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@haasn.xyz header.s=mail header.b=OyeXsJo8; 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 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id l6-20020a170906a40600b0099cc50f304csi14214333ejz.291.2023.09.27.03.07.38; Wed, 27 Sep 2023 03:07:38 -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=@haasn.xyz header.s=mail header.b=OyeXsJo8; 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 Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 95E8068CAF3; Wed, 27 Sep 2023 13:06:51 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from haasn.dev (haasn.dev [78.46.187.166]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6E64768CAE9 for ; Wed, 27 Sep 2023 13:06:45 +0300 (EEST) Received: from haasn.dev (unknown [10.30.0.2]) by haasn.dev (Postfix) with ESMTP id 23D7F4B9D1; Wed, 27 Sep 2023 12:06:41 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=haasn.xyz; s=mail; t=1695809201; bh=xYGIxu1nb9iUxBrPDglbb37NKRlHV8Cub7Wf/fge4oY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OyeXsJo8UdYxuBhTqA7EGaS82RWUDlLxJF62Ws4DdyhEUerhhDafnuRyOssyfjy2/ HIcBcYU2CpcDQKRcfzfuIkvWqPuUsxzg5kEKb+B0yaeuDnJ7TRTSHX7O4c7a+VIWmF i7voOuH6zOBBs5CpK8ywtgdvx5mPLhIhk7PiC8lY= From: Niklas Haas To: ffmpeg-devel@ffmpeg.org Date: Wed, 27 Sep 2023 12:03:56 +0200 Message-ID: <20230927100630.50510-6-ffmpeg@haasn.xyz> X-Mailer: git-send-email 2.42.0 In-Reply-To: <20230927100630.50510-1-ffmpeg@haasn.xyz> References: <20230927100630.50510-1-ffmpeg@haasn.xyz> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 5/5] avcodec/decode: use ff_icc_profile_sanitize 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 Cc: Niklas Haas Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: os1qGPsBi19s From: Niklas Haas Fixes: https://trac.ffmpeg.org/ticket/9673 --- libavcodec/decode.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libavcodec/decode.c b/libavcodec/decode.c index 466c393c1e2..6f4ef7da0c2 100644 --- a/libavcodec/decode.c +++ b/libavcodec/decode.c @@ -536,7 +536,9 @@ static int detect_colorspace(AVCodecContext *avctx, AVFrame *frame) if (!profile) return AVERROR_INVALIDDATA; - ret = ff_icc_profile_read_primaries(&avci->icc, profile, &coeffs); + ret = ff_icc_profile_sanitize(&avci->icc, profile); + if (!ret) + ret = ff_icc_profile_read_primaries(&avci->icc, profile, &coeffs); if (!ret) ret = ff_icc_profile_detect_transfer(&avci->icc, profile, &trc); cmsCloseProfile(profile);