From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id AD45442FCC for ; Tue, 17 May 2022 14:10:01 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C2C4B68B3D5; Tue, 17 May 2022 17:09:58 +0300 (EEST) Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-oln040092070039.outbound.protection.outlook.com [40.92.70.39]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 44D2B68B1DF for ; Tue, 17 May 2022 17:09:52 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=WnyJ3pvuYKIkhR13OrYQ8ks3Cno79uSNBXpYpx5pxLvmNYdSsATMQCLd/sHaL6gYvJ+58MuIHAlAdj41v5qaMXIx1RSyF9n9SBcp0xlGdR0XlWxniHjbG9eeE8s2dwmkkIYPD0cEws02mGhgloL/yCBg8aFlIH+d34D7GFx9UG/6eoHOp19BN49ZzA/05gqiItL5jUAPS9YIXJUAhHIq/mTv52ySY9M99uwgtz078cNQt+SNPf2VCGdT4L7FoD9Vk86k4eCRqJtfGzrIKoaK6afMFKcA++V6uMay68dxdgkNb2lkjPKMRPwPSaTXodS4k3dGjlI5+eREzo/tQwbnXw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QomkDuHywERzAPBrwk27dAUEvHk6HcTHtzgRvaNNA8M=; b=T9Pg+UJSOzC9l0RI8v9nAjGgKl/ClqRsHXPUZpCqcZm7foQEobOlFhqwk1CyL8jhffah+Vz//V45Ms+g37vekuNamIvWPclLxRBWc+48VQ4dr2jINLixZQntGH+iwl58tfH7OskSYKsuto3hED3pziZTKOudksdOPpyUh1nwHwIqpGunEo4u0ASeqoZMRgOZLugLy3KKrZ5abaP/EgoeJehwP+qbOoORFa91XnCYzW2XFfEprRd4Nw3zuh2KUGLimWFtjIDXVkR+iG5pk60vZPJlOhQtebbo52mQnrw4JJGrtoFfAefXvzmezEP3jd9Ip1QuBHlIrsIjK/qSrpCEwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QomkDuHywERzAPBrwk27dAUEvHk6HcTHtzgRvaNNA8M=; b=Pnc6FGbsf+l8L1sV8a9G39/SD6mr2NhczhthHJMaMsVCGsfJwT81R5AF1DEGFU8pyrQYtnliRTOcEquzmZEoVx6FdMussElj5/65bfJtzxH/LMGR3Kr+mm3HyZ4G2XjeWtHX1VcleRUfVCtKVRnz8wAjZn+bRdFJ0UAc/CJchMsX9Lo4vUYvkeEqIOurk77H4xeH/6SRDJMsliO1YKG0WBwjUcmtdInlqy52LFNt7JPQH9Qpa5CJDcxW22sTkdfAlqD14lxvj+em/yqgXOyxEpt4PGFD26yeB0EF2W1zE+k1sFl/Ief9ov99CZiuWoJRnUUfj993IMPHoounJNbneA== Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) by AM0PR01MB6146.eurprd01.prod.exchangelabs.com (2603:10a6:208:163::31) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5250.16; Tue, 17 May 2022 14:09:49 +0000 Received: from DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c]) by DB6PR0101MB2214.eurprd01.prod.exchangelabs.com ([fe80::60b9:9f29:40cc:f01c%10]) with mapi id 15.20.5250.018; Tue, 17 May 2022 14:09:49 +0000 Message-ID: Date: Tue, 17 May 2022 16:09:47 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220517140335.8567-1-leo.izen@gmail.com> From: Andreas Rheinhardt In-Reply-To: <20220517140335.8567-1-leo.izen@gmail.com> X-TMN: [OGTE5uajJUJXyER0WeYqpI8LMxtBZqa1] X-ClientProxiedBy: AS8PR04CA0010.eurprd04.prod.outlook.com (2603:10a6:20b:310::15) To DB6PR0101MB2214.eurprd01.prod.exchangelabs.com (2603:10a6:4:42::27) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aa7a0c6f-c214-428b-e69b-08da380ee755 X-MS-TrafficTypeDiagnostic: AM0PR01MB6146:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: F9ocwHL6cK4x77F9OD4sTz76vaFp2/OeCNjDjqzwRLLAd35Ir0QF2Z3cz22cCh6DVrFbT1cx0RZ0uCHaQnfwpPBvRo6KlpKW7dGL+B9oz//JCFD3GpQjp8/hbKwicUDRHpnmtwlsp4AU8QVhac7phKg0bBpVzs4XHiBylC1X3ozIQN3i3UrlKe1MzGFkT1w5SosG1aJQK7hgqFktyET/fcdkZ0HIE2WKJvNSZNw9DpTWpd0/n4lV3XT6Wvw1D1OsHS65xjLO4XxkqsJqRNVct1AqHgcHYFDc6p8Y8CYqB3z6CmIiRSztoQfoHx9jjyFfx8b/jsUlgMEG4QLUGiikWy0YUE5Etvi3otAmyunLeUwflqfiUbb4CsZ8GDq4P0qSvaxtRHTPq6lNpbLLnHENOYJ9lYlD1uS2PKbFnTn9SMMULTPv/Stg4KkDq0ImqzTWlM8zo9b7Zrl4iac8Dp/HQX+Qlb8qo5wCVGGW0s7ZNBXRNTZ5MiyHwtPeuNcJLcDTttOkKiApmZGLc2A1srlqOPWSvmcppEhQnGKFxbnI7iV28oG2TFbEevIzg8/ytunlPh+MS+9KKGAzWGT2OiJUwtMflMVHWeNLwdIV3YUqg8TH5pWACToPFXJMnSdrAlY5 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?S202cG5QT0piNWk2dE1ZWFMwclBkY1pHSkNUU2lENmc0OUdVaWEyaVlnSlZW?= =?utf-8?B?dTBXK1FlbGJmaWZ6amM3NG9JUksxaUUvNGtEZFNKcnBjbWtwOVp2S3h6cDNQ?= =?utf-8?B?cUowMm55ZXFrQllmYTJJY2VKM01pWkRSeEtJLzV4RFZibFJlMlFZeTFDMkZQ?= =?utf-8?B?eHdEcDRwVEJGc0hTS1JBUFg2Smhhdlc4anJrcUZyQXBQUkJ0UUpXVlZ4UTEz?= =?utf-8?B?UWdDRlpIZFllYmRrUUppY1JPelNpU3ZsazR0a2hZQWw5U3E1eW1kVU04Uk1v?= =?utf-8?B?MG1VQnBTQjhoekVxbXVkYUJxTVk1MVlzckVIRlJrQUJ6Tkt4OVVpNE8wN1lx?= =?utf-8?B?OEFsK2VYZzJDelhRMFRUNzVPWUFRdVRXUFF6MXBRdW55dnRDM1plUlhmMTMr?= =?utf-8?B?dkFuS0EwUlNad3ZtYy95em1WMjd6R0NiRUZxbTdIcFZOTk1DZGdmd0JITHhx?= =?utf-8?B?eEtWKzNhUGMwKzJoWDViMFlzZWdXMXN3L1Rhb1hZUkE3WUhhVHZVNnVaRXY0?= =?utf-8?B?TUFEcis4OHFRUmtha0lnbzJpRmhsUnB6M3hrcDROc2lwQmRkYXRUY3FYU0xG?= =?utf-8?B?VFJuRWZmTko3UmlBVWduWFN2Z1Rwa05SNnErSVdVZStReG5qbDNYT2pQb2VO?= =?utf-8?B?TGxFWDBQM3BJWmdmUjhEam45M3czZ1M0YWxaNWd3L0tWRVo3YnBOeXNTNHVP?= =?utf-8?B?SnZaNDU2Vll1NnlrQkhDSnhadWtWZnhvRVVhMnlRWW1RRUdDd0hQRnV4MXla?= =?utf-8?B?WE52bGxSWldiQ1BWNFJRVVhJZ244NlZ4N2VDaHZybTFScTZrYm9EU2RKa3Vp?= =?utf-8?B?Kzc5R3hpUG1OaVdzazA0WDJJeGdKTzBPK3B6MmV6emY1L29VNEx6dDhsTHF5?= =?utf-8?B?bU5iYktITGlxTlVkb21aYWpxMmJaa1VuMWhrUVlIT1p2MXVtM0UvTVQ5NjhH?= =?utf-8?B?ektXWmZMMDJXdXBINEJBbHI3bWtaNm5YdUVwVlAxU0dGWWxmSlViVDVwSFJ3?= =?utf-8?B?UVREdFRkalFrOWI5SkhnNVE0Sk53SGRmanJNRUtvZDcrRFBueEhkSjdPbngz?= =?utf-8?B?N2pmRUl5bURWbDJUcmVweTIwOGxnVGRtS1NuYm1qNVRMUnM2QzRETFArM3pS?= =?utf-8?B?R08yTUpzeVovdUNHUnV1MUV1dWFnQWllL01WeE5JY0pnOUw2Z1JzV1FtY0hC?= =?utf-8?B?TUdDcUg3RFJ2cE1rYndFaVV1TmFKWU1iaWdQZnJTdGFoVGJlR2NVbVZQeWxP?= =?utf-8?B?UHRhdlAxV0FOem5tZyt1WHdPdkZjK2M2SGZOYkRpQmZFRm9LRFlmQWdUcVJU?= =?utf-8?B?OXBsMTJ4Z1Zmdml6TlZOWGtRZEZMRTVET3VDanlhMmNjU0htbU54ckQwMzAv?= =?utf-8?B?UThYMXFPU2ZoYkw0R1JoMUdwRjFzTnArS3NGS2NEWHNVU0tZdWhhWWc3M0pp?= =?utf-8?B?ZHJMTW1xdTJtdWR0MlJVcTRqeHpZcnhwWWVhTmhRQWp1NWdFTnM2MkFKOFNZ?= =?utf-8?B?YlY4MEx2NGRzUmZTTUkySUNCckp2SFJqazFpU0Eva0tTbVF5NldGS0p3Z3BU?= =?utf-8?B?bTUyc3ZWUzhrV2lkNWFxcE56c0FNQzd4TzFObXhZaStYdTJlNXIxMDAweVhN?= =?utf-8?B?MzBtb0E0dmhLMmh2RkNZT01pN1FWQ0NTTW8vd09iV3cxck9LcWpHd1FKV2Np?= =?utf-8?B?Zmk1alFyY0pQTU1ucDV5TGVHRldydFF3SFBXZkdiZ3g2ODFsL1Rhemh2SlNB?= =?utf-8?B?SVB0VDJIZUMzeVlTTTRCc2JnQ3dCS2NxYkdXQjkrY0Q0bURZRVJIb3Nieko2?= =?utf-8?B?V3h4R0pnS1M4YVVDWnh2OWZZL2tLS040L2pBRTVxbXBMa0NpRTZCVmloRW50?= =?utf-8?B?YkNnRHF2VmlCVmRNZU5KTm9ZekVMbzhxMklNQkkwa24rT0huVWVlU1lzVmRE?= =?utf-8?B?VHBpSWhmRVdDY24vYlMvUjhzYjhma0RYSnNZT2g4SWd4TzR0SURxaXo0Ukps?= =?utf-8?B?UXRhU1N5R2pnPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: aa7a0c6f-c214-428b-e69b-08da380ee755 X-MS-Exchange-CrossTenant-AuthSource: DB6PR0101MB2214.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 May 2022 14:09:49.1647 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR01MB6146 Subject: Re: [FFmpeg-devel] [PATCH v2] avutil/csp: create public API for colorspace structs 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 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: Leo Izen: > This commit moves some of the functionality from avfilter/colorspace > into avutil/csp and exposes it as a public API so it can be used by > libavcodec and/or libavformat. > --- > libavfilter/colorspace.c | 94 +----------------------------- > libavfilter/colorspace.h | 31 ++-------- > libavfilter/fflcms2.c | 11 ++-- > libavfilter/fflcms2.h | 4 +- > libavfilter/vf_colorspace.c | 19 +++--- > libavfilter/vf_iccdetect.c | 5 +- > libavfilter/vf_tonemap.c | 15 +---- > libavutil/Makefile | 2 + > libavutil/csp.c | 111 ++++++++++++++++++++++++++++++++++++ > libavutil/csp.h | 49 ++++++++++++++++ > libavutil/version.h | 4 +- > 11 files changed, 195 insertions(+), 150 deletions(-) > create mode 100644 libavutil/csp.c > create mode 100644 libavutil/csp.h > > diff --git a/libavutil/csp.c b/libavutil/csp.c > new file mode 100644 > index 0000000000..deecefbffc > --- /dev/null > +++ b/libavutil/csp.c > @@ -0,0 +1,111 @@ > +/* > + * Copyright (c) 2016 Ronald S. Bultje > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +#include "csp.h" > +#include "frame.h" ? > +#include "mastering_display_metadata.h" ? > +#include "pixfmt.h" > + > +/* > + * All constants explained in e.g. https://linuxtv.org/downloads/v4l-dvb-apis/ch02s06.html > + * The older ones (bt470bg/m) are also explained in their respective ITU docs > + * (e.g. https://www.itu.int/dms_pubrec/itu-r/rec/bt/R-REC-BT.470-5-199802-S!!PDF-E.pdf) > + * whereas the newer ones can typically be copied directly from wikipedia :) > + */ > +static const struct AVLumaCoefficients luma_coefficients[AVCOL_SPC_NB] = { > + [AVCOL_SPC_FCC] = { 0.30, 0.59, 0.11 }, > + [AVCOL_SPC_BT470BG] = { 0.299, 0.587, 0.114 }, > + [AVCOL_SPC_SMPTE170M] = { 0.299, 0.587, 0.114 }, > + [AVCOL_SPC_BT709] = { 0.2126, 0.7152, 0.0722 }, > + [AVCOL_SPC_SMPTE240M] = { 0.212, 0.701, 0.087 }, > + [AVCOL_SPC_YCOCG] = { 0.25, 0.5, 0.25 }, > + [AVCOL_SPC_RGB] = { 1, 1, 1 }, > + [AVCOL_SPC_BT2020_NCL] = { 0.2627, 0.6780, 0.0593 }, > + [AVCOL_SPC_BT2020_CL] = { 0.2627, 0.6780, 0.0593 }, > +}; > + > +const struct AVLumaCoefficients *av_get_luma_coefficients(enum AVColorSpace csp) > +{ > + const AVLumaCoefficients *coeffs; > + > + if (csp >= AVCOL_SPC_NB) > + return NULL; > + coeffs = &luma_coefficients[csp]; > + if (!coeffs->cr) > + return NULL; > + > + return coeffs; > +} > + > +#define WP_D65 { 0.3127, 0.3290 } > +#define WP_C { 0.3100, 0.3160 } > +#define WP_DCI { 0.3140, 0.3510 } > +#define WP_E { 1/3.0f, 1/3.0f } > + > +static const AVColorPrimariesDesc color_primaries[AVCOL_PRI_NB] = { > + [AVCOL_PRI_BT709] = { WP_D65, { 0.640, 0.330, 0.300, 0.600, 0.150, 0.060 } }, > + [AVCOL_PRI_BT470M] = { WP_C, { 0.670, 0.330, 0.210, 0.710, 0.140, 0.080 } }, > + [AVCOL_PRI_BT470BG] = { WP_D65, { 0.640, 0.330, 0.290, 0.600, 0.150, 0.060 } }, > + [AVCOL_PRI_SMPTE170M] = { WP_D65, { 0.630, 0.340, 0.310, 0.595, 0.155, 0.070 } }, > + [AVCOL_PRI_SMPTE240M] = { WP_D65, { 0.630, 0.340, 0.310, 0.595, 0.155, 0.070 } }, > + [AVCOL_PRI_SMPTE428] = { WP_E, { 0.735, 0.265, 0.274, 0.718, 0.167, 0.009 } }, > + [AVCOL_PRI_SMPTE431] = { WP_DCI, { 0.680, 0.320, 0.265, 0.690, 0.150, 0.060 } }, > + [AVCOL_PRI_SMPTE432] = { WP_D65, { 0.680, 0.320, 0.265, 0.690, 0.150, 0.060 } }, > + [AVCOL_PRI_FILM] = { WP_C, { 0.681, 0.319, 0.243, 0.692, 0.145, 0.049 } }, > + [AVCOL_PRI_BT2020] = { WP_D65, { 0.708, 0.292, 0.170, 0.797, 0.131, 0.046 } }, > + [AVCOL_PRI_JEDEC_P22] = { WP_D65, { 0.630, 0.340, 0.295, 0.605, 0.155, 0.077 } }, > +}; > + > +const AVColorPrimariesDesc *av_get_color_primaries(enum AVColorPrimaries prm) > +{ > + const AVColorPrimariesDesc *p; > + > + if (prm >= AVCOL_PRI_NB) > + return NULL; > + p = &color_primaries[prm]; > + if (!p->prim.xr) > + return NULL; > + > + return p; > +} > + > +enum AVColorPrimaries av_detect_color_primaries(const AVColorPrimariesDesc *prm) > +{ > + double delta; > + > + for (enum AVColorPrimaries p = 0; p < AVCOL_PRI_NB; p++) { > + const AVColorPrimariesDesc *ref = &color_primaries[p]; > + if (!ref->prim.xr) > + continue; > + > + delta = fabs(prm->prim.xr - ref->prim.xr) + > + fabs(prm->prim.yr - ref->prim.yr) + > + fabs(prm->prim.yg - ref->prim.yg) + > + fabs(prm->prim.yg - ref->prim.yg) + > + fabs(prm->prim.yb - ref->prim.yb) + > + fabs(prm->prim.yb - ref->prim.yb) + > + fabs(prm->wp.xw - ref->wp.xw) + > + fabs(prm->wp.yw - ref->wp.yw); > + > + if (delta < 0.001) > + return p; > + } > + > + return AVCOL_PRI_UNSPECIFIED; > +} > diff --git a/libavutil/csp.h b/libavutil/csp.h > new file mode 100644 > index 0000000000..0b4ed0028e > --- /dev/null > +++ b/libavutil/csp.h > @@ -0,0 +1,49 @@ > +/* > + * Copyright (c) 2016 Ronald S. Bultje > + * This file is part of FFmpeg. > + * > + * FFmpeg is free software; you can redistribute it and/or > + * modify it under the terms of the GNU Lesser General Public > + * License as published by the Free Software Foundation; either > + * version 2.1 of the License, or (at your option) any later version. > + * > + * FFmpeg is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + * Lesser General Public License for more details. > + * > + * You should have received a copy of the GNU Lesser General Public > + * License along with FFmpeg; if not, write to the Free Software > + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > + */ > + > +#ifndef AVUTIL_CSP_H > +#define AVUTIL_CSP_H > + > +#include "libavutil/frame.h" Once again: ? > +#include "libavutil/pixfmt.h" > + > +typedef struct AVLumaCoefficients { > + double cr, cg, cb; > +} AVLumaCoefficients; > + > +typedef struct AVPrimaryCoefficients { > + double xr, yr, xg, yg, xb, yb; > +} AVPrimaryCoefficients; > + > +typedef struct AVWhitepointCoefficients { > + double xw, yw; > +} AVWhitepointCoefficients; > + > +typedef struct AVColorPrimariesDesc { > + AVWhitepointCoefficients wp; > + AVPrimaryCoefficients prim; > +} AVColorPrimariesDesc; > + > +/* Returns AVCOL_PRI_UNSPECIFIED if no clear match can be identified */ > +enum AVColorPrimaries av_detect_color_primaries(const AVColorPrimariesDesc *prm); > + > +const AVColorPrimariesDesc *av_get_color_primaries(enum AVColorPrimaries prm); > +const AVLumaCoefficients *av_get_luma_coefficients(enum AVColorSpace csp); > + > +#endif /* AVUTIL_CSP_H */ _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".