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 999FA478EC for ; Wed, 27 Sep 2023 10:19:32 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id B2AD768CAB6; Wed, 27 Sep 2023 13:19:30 +0300 (EEST) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2055.outbound.protection.outlook.com [40.92.89.55]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7EFF868CAA0 for ; Wed, 27 Sep 2023 13:19:24 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Padon5qPlrDg5ovmtkDtQ5DEydxh4Eocah0dtNIgzjtshahTlh38ZvOS2H2qCw+tP7mTJBmIOTQAmmtKmXvCFkPUys9TvCwEk5108JB3WK1/RWej+A9S4WUGGbcNYOecme3ji+IaFXKvWHuEH8jAJkRpI4412I0N6hK7erJntpgeVpiZ5pEDeE/pi20+VOMC+Y8s4Njtah+knExjZkflgofPFBeMg/5CmH3oThaM7InLkrLAIO27KrhQ0bsesWX1IzEjlxkJ6J63s3r4kiSENVaLHXh6+cDLl2yqoJHpp82oHz0zF2iyOgtwNW5I32o0kpQr1sQZSRuRuy/OUW9e9w== 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=w4eeqaGffekDxggU8JSmxkdEKByp4Lbig2+f1611heo=; b=WApU6LpxdQbO9PUmrM4R9jypX3GoKgyID+J+z/vC2dIkXVu+PllW+pjWvCV1ZCE6ATv1kJWkKfWDZIhUWhi9G9avbXoBK0z0nZbJ/xweODANjNXp0zeLwCDzjiV9jvJwCZpopSe9XZ1ZsM1rMwPFab5vy9oXN8eJpnOvbi6nP5qt53V4KdrL7B6+Db0Rq+dfFH6SuCmwZS97YEM5FDUQI5Ra+Lj6wkGJfvmPCii8yd3QqKe7oyloBsDLm6Vsc6+dKC/y6T/+ZY0xj9h8ql44NVNtbOqvQdmBAlEKFd/wErEU8RiYqiV4kIK4LUQ7PHS09DO6ARguGYcr7Bdfl+Zuww== 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=w4eeqaGffekDxggU8JSmxkdEKByp4Lbig2+f1611heo=; b=hHXq/oM30CJOWq9oTDaHdok42wz84WZ7x9NWvTcM215h2Wv+2kYhRmh8WiV7q89z0w2YQQArVgT3Pfw9UqXf3bh5SefxvNEBuov2u3wASn0VBNA9w0KWQwKWFBvnX5a4jlsP4a/xHiuy+/p8mOeJR9RTzg5T63QZY4d8PQBdb3pPdgVgvj3Nb56BPxoKxxTFSAgIvjYe04Nuv2GnZ1DSBFnv8zwhDYWHo4w22AEpDFRGyV7nkTlBIWYjsDBQAbwr5X0rhL8zCwP4bhTs7UvYtYysIA5J6vm8GQtpzQZSlyRS2l+aCNHhbGQZYFwSjlghA/xysjCHvZUBFM4tw8KdRg== Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) by AS8P250MB0007.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:35a::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.21; Wed, 27 Sep 2023 10:19:22 +0000 Received: from GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::9d42:7b4f:71ef:c76a]) by GV1P250MB0737.EURP250.PROD.OUTLOOK.COM ([fe80::9d42:7b4f:71ef:c76a%3]) with mapi id 15.20.6813.027; Wed, 27 Sep 2023 10:19:22 +0000 Message-ID: Date: Wed, 27 Sep 2023 12:20:37 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230927100630.50510-1-ffmpeg@haasn.xyz> <20230927100630.50510-4-ffmpeg@haasn.xyz> From: Andreas Rheinhardt In-Reply-To: <20230927100630.50510-4-ffmpeg@haasn.xyz> X-TMN: [WNWHq/DsMxsFUFOmVpXo0KdoKgFEjiGa] X-ClientProxiedBy: FR0P281CA0007.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:15::12) To GV1P250MB0737.EURP250.PROD.OUTLOOK.COM (2603:10a6:150:8e::17) X-Microsoft-Original-Message-ID: <4a9b136d-8e5b-50a0-530b-65b79e7afd50@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV1P250MB0737:EE_|AS8P250MB0007:EE_ X-MS-Office365-Filtering-Correlation-Id: 2733547d-50d2-4774-05fd-08dbbf4337d9 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HPM4HU1A8WiTydKQPufsER4XDbgmyS1e50mizLHUaPRCm1i/Mmbm97a1ye+0Zj88MX3XH0WrXPqjCzk7bMPeRVjhfYOtOssW7gssRm7JsO6lA8JZhtfkoUHQX4foeva6lw2cgipRptygmq+6De6koucqWrAYrprsOZHrSeFq08d9dU7aRW/5r7eujkJv/BK5swLpX13KNSJiTUkYevlcPQakLRYZ90T/mv6jnmarp8c67TO0wrkH6HcyMWGyWlyC6KpEUODkS9kyUgE/ddsvniVikkAODue+IvI642e/7KDwMsriVIxAnbWJcsHuP39XubcYHPeuELnoUnr40E935n4Z84YtFCWLCkPQeUliVNOqbZU8PVOKRtfNZSArNXSU8jy5n+Gk+gXB0+6IGN9sBuiyOpKwi/p6goHX9VWiyuEtaJth3lN4nTWmeku5dmR1FIQm8nTVka4/IINsdIs1jSd4dwId4iX4hls0oGHXiJSX0YYXcuzo1/UcGb3GI4MYEUFmRJtaybLVMGQeBfs7Cuyo4odayyMvfPxlDqFqze8S8Fym3IgFvCbmidS7Lzc1YrmBFvFJa+509fmpeBE6yk3Iil2AO/YV+F+WFWwRsD4= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Vmd0V3k5V3M1NTBJNlpXZFE4WWlaZHMvYmduRy9UdWhIa3ZBVytXWmlkNVZH?= =?utf-8?B?c0NlNU1pQUx5UnppSEpYZ2NudVZDc0lycW45cUZiUmcrWXdHZEprZ3FORzN1?= =?utf-8?B?QjJ2ZEMxcFlZU2Rxa09lTVFzNEFIZERtaC9veG5FdDlzNG55VVk5UXc5QWtM?= =?utf-8?B?U0J6YU9RaWYrUnFnWVRUVEhqY1NENjZBSTNmNEZsTlphUFpPK0psN3BqZlRv?= =?utf-8?B?UCt6UUtaWm5uYmY2QXNDMXF6ZVhWWWFiN3JFSEUxVEdDYXVBSFhoV2FJbThy?= =?utf-8?B?eUg3U3d6SkhIOEFScVdRdEl4WmFKY0lscUxvTlkzV1RhY3ZpUHNjQjVEbUhw?= =?utf-8?B?ejU5SS9wTnR0cHg0ZFBlVWVHaGlzVUtWMWtncFo1aEd4eXBvdnFkUk15Uk9S?= =?utf-8?B?UzA2dXhJZUYxUnlhVkNlWVRNT0V2NXRtaHBKRjc5QlZEM3dpQ1BWNnBsYlRx?= =?utf-8?B?MmNTdUNBNXdHdksxUHNIdlA1SWxzTU5heDlrckdIOThoY284cDZKK0l3a3k4?= =?utf-8?B?TGl5NHozQ1pFWTVYekU0K01URThBT0JJSFphSitXT0NDdHJlUmRweEtwSERC?= =?utf-8?B?SFBOWE55TFZadTFjZlFNb1pjNk45ZlBid1k0bHd5cUNETElqdVRUTzJ1aWJS?= =?utf-8?B?ZTI5N1N5c1I0SnJpVWl0K0pKWFlId1RQWUhVbXZjNk5JMllNKzFuY0ZsWmpz?= =?utf-8?B?bVhKUUk0SUV5eWxMSlhyN0pVaUdIT0hpUVlBT3pPcmd2dmhIbGU5WTdLVnZw?= =?utf-8?B?VWo3TlRjVDRuMExNeGtZb3JuNG9iRURXeFNIKysyTmxtenpIQzlocjg1R1Uy?= =?utf-8?B?MUZBRWowYThIL3Yxckh3a3c4RC9FZnVFRFdWMUpVSFM1V2VkMGsyS1haQWJJ?= =?utf-8?B?ZmozVHY2OFJZemZ1TXJHK3krRkZSQmNVYzBUR05JUFBPdGQxdUZLeUZBUkZX?= =?utf-8?B?aGdsREpIdDIyb21wc200Zll2bitMMTcxWUVqWXlYNEtzNFZjYjI2R2JVL2pB?= =?utf-8?B?TnVxVkJPRGtaMU54a1UxZXVILzNzamlLSk1iZDdnN0pOcjJWQnpTVUsrYXlH?= =?utf-8?B?MnFvdnMzRUpFa2xIWjI3MEEvd0lzUUZybnE5YTIvc3M2YTJGT0N6VnhpMk4v?= =?utf-8?B?a0I5d3FqcVNwcmhQd0VXUVpKcEpQU3Z0ZnoyaCtIZkRETUVqUDhKbGhSOXNl?= =?utf-8?B?U29oTHliRGx5R2NGNVd3a0dnZVo4ZzVzRkpUM3lWNkdlZUlFdlNvc21Ddi9K?= =?utf-8?B?WlIwdjlqbC9Fd1VlOEY2U0JoSlBlSXNaMkZtQjFCVTI0UlpDVUxqdUkvNlc2?= =?utf-8?B?QTVTSy9KMkFUclJDVkdwbm1wMjBQU2ZIUi96emNESno0UmpFRDdZbkoxVEg0?= =?utf-8?B?YzlhUGpOTFcxbzA4a0tFSnFFaldpMnVoNjVDOGNsQ0ZqQlN5Qm8zK3ZlalhX?= =?utf-8?B?aWkvc2t5N1VUU0lLelRZeVIxNElqUDc2c3k5dVRSRmVwMGs1VjMzdjJwTm1B?= =?utf-8?B?QmV2bjNrZjVIc04rR0NLS29HNUtHLytSSWZzV3ZEdG5pQlFjaERTTzgzaXJ2?= =?utf-8?B?ekJuNXdMaS8wRVcxT29vYVBWSTlJT1d3bDhwMlBxMEhwNHNOYks0eG84UWxR?= =?utf-8?B?M0ZCOTVOc0Jpa2x5TnRpcmx3TENFY3FXV0VZMnREOGVSRUphZ2FPRU92ZzZj?= =?utf-8?Q?VPAT1XV6jIg7Y/4ywHk0?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2733547d-50d2-4774-05fd-08dbbf4337d9 X-MS-Exchange-CrossTenant-AuthSource: GV1P250MB0737.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Sep 2023 10:19:22.6785 (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: AS8P250MB0007 Subject: Re: [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 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: Niklas Haas: > 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)); Will this warn on every frame? > + /* 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); Why is this a separate function and not just a new parameter to ff_icc_profile_read_primaries() given that these seem to always be used a pair? - Andreas _______________________________________________ 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".