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 1E9F143E10 for ; Thu, 16 Mar 2023 01:31:58 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 29EF268BD50; Thu, 16 Mar 2023 03:31:55 +0200 (EET) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-vi1eur04olkn2054.outbound.protection.outlook.com [40.92.75.54]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3ACA568A829 for ; Thu, 16 Mar 2023 03:31:49 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fduA+wIOxTOXqexhP4sFKlRa7TAL+JBrjUxpprynDGoX3G8AI1Hvk7/CpafgXAl0Ca9peOwQ3jh5SCD+75yLQY3zYuFiV98oqGyKBp5grb85ZfneFju6heBqsujFlom/KIqo/Uxeqb/KQPptImL/YskThy1R1CEI3Ox8mvNZ3AWAyJF70MrksNWzNYWvtiJBsrG74ZvDhGnTd0pjzk3jW/EURVOK09EVm2ur2z6K/ZTvVI21C/pd6QAuHIo8zX0+t6gWx1xQf88Cd6FXFZWdV0tLygIhcEOcZvMjz64tI0OoGXbEmjsEd5CVLpOLiRa2VF8Isj/FSGsAjKmYJiLJXQ== 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=u2/fcBCKTvspqIjMxLrbK5bIUT1Xhe+NKfJFqwiSsag=; b=cvhha4+c3uT1mPGHGW6F/9aWOVLzbj12Iqms7AdIOXf969MC4vsblSZ+XHsPKQZkDQZbpOTfjHwywMetoUQ7Vmxg0nZf1nsqQhmdNz4v89BJEblXao8WI31lVle2NhPPHBb1jiQd13EoHX6s/fmLFaraQgg4cf87VHq2QTvw+Btljp779CjOlz9/gtbbP0CfoubsrlUcmsVl2317Ue5GQHVXNJgNDB0U25cirkAkfff70aqDGYRQRuuHDThxNnCOYsr88Mvf25dxMOkI2rnXtl/XDkmLpUM91jXrTkju5ousAQfqjjr86Ev4At+5MMbhEphQklyjXnCVus5gGbAJAA== 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=u2/fcBCKTvspqIjMxLrbK5bIUT1Xhe+NKfJFqwiSsag=; b=hYlh4ozLzpiMTNBNh5QvBTdeT7nrzPnKqNKA+Bbkoqec1GhsiS7+RKck1disNoTiDCWo9JEEHJv/y3Tk6oVa4u/ChX03jXDlqUU4VdwDsXJq7xxjed+RqWeNad2zVzMfKIdfOWHQV3HltlbjeT3kydyTbPatYhk/Qi5/ZW/Pjbtqn7WyTk2jVlym1ftVh2uKSeQFLwVao8QKrEDq3i/JJJP1FyRjkapj4tsbNEOVIa9bYo/FpEtWXz0PMArjbQQuMzGtBn+a6z3KPZnCUBa7if+nIkBBkWVHeWMNpER/PrNIoe3x8+tzLYxf7+sIKacms9fNncVLE7cFTPa8FHbPJw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by AM8P250MB0264.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:32b::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6178.29; Thu, 16 Mar 2023 01:31:47 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::73a:bd4b:26f3:cc2b]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::73a:bd4b:26f3:cc2b%3]) with mapi id 15.20.6178.015; Thu, 16 Mar 2023 01:31:47 +0000 Message-ID: Date: Thu, 16 Mar 2023 02:32:23 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20230308200316.45476-1-leo.izen@gmail.com> <20230308200316.45476-2-leo.izen@gmail.com> From: Andreas Rheinhardt In-Reply-To: <20230308200316.45476-2-leo.izen@gmail.com> X-TMN: [tI3vceUJsEeb++XUd8vtfqVTnZn8/kXXQo4tBCJNzUI=] X-ClientProxiedBy: ZR0P278CA0191.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:44::10) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|AM8P250MB0264:EE_ X-MS-Office365-Filtering-Correlation-Id: 4ac27508-4ed3-461e-dc43-08db25be3587 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: /EVYVlT+iXvF2Bvxb/xfhNs/eDsGEMakR3euOHI83TWEjPgMOGN5iL7DBr+dZHjtZB6ncpjJiJXFlXwqruGKybOiv7qSyYxl2JXTXE/bWfrmuVX4E7V1fuzdEDMNkfIJxAvNHMKrWLOkU+7S7pr9RIvg1B9hZS3zbwoFaxcS0nzn+coFZQ0z7m9JC1l9ca59scgf5bKExpbjBLS6b9oVUf/J+3fPezI2ibyAh3GwH6FHtxyxNqElHEGNDnoCaF5uvrWWUmZYnmTYLt7JQdWMDdj/zjhFmbyYbpg/4TVgrZI5+BztE+cMkCen2v53D+S5bn/wjL3oL2EEICcuELmpcfQHGwV+eshm5riQXOxxhRT/0HMatbbXxqShGLnYC0tpVPcyxDvfWu0CM+gSDYSdJbZLNgDuRz5nhGeSWkyTrRaoDx5WUuIIY0g9qBpvNPO2EphHq5wELh7d4XvxQTYy5xcm/D+klpY7Of04Go/lTntf3qT+6drHH2tBLo8UHYx4NbYW1aJ0t9FzTUGC17wp+NtVmHsZCXMZt5FQwMhNfEPeIlP60/IDTLoSSMu+ijurkC2F0q0RtOyVBt7i8Hzyb5F5N/FKtQ3GPlsZ3efDhy1vxyZKek4ajPChQFxwJu+FYR2MrWiAME/IeegODx7lTMfJmEjHCbsgC0Jmg8bUqgI= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?alhaRDJ6L2hrNk42OHZseG1sWWJNYXExOHpBN1JyUkR6YXd3L2xwbVFhb3Zh?= =?utf-8?B?djhkOGRmeFFBMzVGRlZrMkRObm5oMmxRZzBDS2hIV0sxK2t2VUlKSk1ud2Vx?= =?utf-8?B?dE5IcXVza3RQMDl4MHFLbkloTi8vUGY0bWFYMGtxRWxadXZ6YjR2SDlFMEdS?= =?utf-8?B?WWdSWEFod1VvT1R6RlhGM0h2TFlGVjJJaS9McUlvQ2xpUzJsM0ZFNExKbEZI?= =?utf-8?B?QzA2L2J5OWJmMzJkZXlDSWVualR1N3UzTUxBRkZTQ2JZeFR2TnI0ZGxNWkt2?= =?utf-8?B?ZzczUFFHT0gzQjZ0Wlh2cmlLNkdsUFBIaVNtUUtuMHNSTTYxQWlHeHJRa0ZN?= =?utf-8?B?Y2FLVVhES0xZWm9Sbkc3QU81TzdyRWk1WE9zWmFZK0M5eWl2VG5NT3k2Zzky?= =?utf-8?B?dWJPM1RtVDk4L0dGSGxiOFluaVFMNkFFR2JnRGdmdktYeCsrMEErZTFQL2Ft?= =?utf-8?B?UVhyUkNiNXovcnpLRnUxK1dmTExhN0lNYzBrSjZadUxVZ09xaC9yTFQ1Mjho?= =?utf-8?B?a2I2VDl6dzVuMmx5Wnk4NlU2eFBSdE9KUHBsd1paa1M4S1Y5T1NGYzJFUC81?= =?utf-8?B?cjNNeXBrT3pCcHM3bHE1ak1BMjh1S1hnSUNOcHlFVzJ2UGRsTVgxN0U4M0Jo?= =?utf-8?B?WlNUcmphdGg3aXJZd3FsQkd0OC9ZSzZ4c2NVUFZKakJGeE1xZmc3QnhFdzZm?= =?utf-8?B?VEVmUExRb1RlL0U2YXlHQ3VIS3NVUWJrQVNGdE16MVE2dTRubXhKZ1hRa2sy?= =?utf-8?B?aEVHSGRLdGJGbDlmcGZLR1BCbEsrR0Fubk9oRzNoQ1NZOFo1Qno2eUE1eTdS?= =?utf-8?B?M2JPZW9IanBidFg0UXJjdVFWbzdVcGovRUEvZjBBSTU1NW9uMFJIT1F2Nk0r?= =?utf-8?B?ejFZVjlJTUNIdDBOS1pETHFod1RTUFZwTktPQzVaN2ZndDY2NGtpOTVlMkFW?= =?utf-8?B?MXFaaWdWYnlnS01VRi9oSVNReUJHZ096ZWlGY2hyemhMRnliaHJRdWVnY0dF?= =?utf-8?B?RjY4VnU1akZSSWV6NnVGeWZOeUdJN3pjMU54bW1oYWxqK254ajlXemVDZVdD?= =?utf-8?B?Ny9ZNCtuV2ZGVVI2b25yR0dvZzM4eVJualAxVzY4K3Q0cEdOMkVSNWJ3VEFq?= =?utf-8?B?RmdsNld0cWVZK2gwYVZzbXdCcEZmMm9TNUdBbVVsSEt4OURrcjJHcFBuZWZQ?= =?utf-8?B?ZDJjOThNOStETllyU0dDb1I1VTlxS0hQRUd4cWJKNHlJWkx3enlXWFJ6dUNI?= =?utf-8?B?MXVEYzNCdXRualR4SGFjU0ZLMGd4TXJncnQ0T0o2d1pUNVRjVU10TkFPMmZi?= =?utf-8?B?YUhoWmlwM21VMGJLQnRjSGVYY1JTYWVwdEQydkRqMFFUc3BRYnNBclFJaEh4?= =?utf-8?B?N1kvemZkdkVJejhaYStjcjBNMUVRUWRCVUNlUzFTbmpVaWFldy9GOUJwZ0NB?= =?utf-8?B?VUJBMis1MFRPZFRrdHJST05RYnhSYlBucHFwYjdFYVJkVjQ4MERWOUtDVjZz?= =?utf-8?B?a0w2aDRRYmVGeW4xdk4zWTQvREVzTE1vL0cvTTFJMFdRUkxXNzVEOCt0alZG?= =?utf-8?B?eTFDM1NlQXNna3ZWbzMvYlhvWUdlM21IVVFnNjM3WmhVUGVRK1l6MWNTSXQ1?= =?utf-8?B?SnBleWpoRHhtbjlEM09zV0pJZU8yUjRCVWQrU1Nod2VCS0N5NmRPQXBYTEp4?= =?utf-8?B?WWZYNmp2K2JqamVzenFDNjFBbk91L2U1OVE0LzdKY2RWME4vTENjWUZkV3pY?= =?utf-8?Q?1b76NVh5VP2eSRtc/MutUcfuQxxYPiDYufTjbpM?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4ac27508-4ed3-461e-dc43-08db25be3587 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Mar 2023 01:31:47.8459 (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: AM8P250MB0264 Subject: Re: [FFmpeg-devel] [PATCH v2 1/2] avcodec/pngdec: support sBIT chunks 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: > Add support for reading sBIT chunks, which mark the significant > bit depth of the PNG file. This passes the metadata using the field > bits_per_raw_sample of AVCodecContext. > > Signed-off-by: Leo Izen > --- > libavcodec/pngdec.c | 45 ++++++++++++++++++++++++++++++++++++++++++++ > libavcodec/version.h | 2 +- > 2 files changed, 46 insertions(+), 1 deletion(-) > > diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c > index 9403d72f2f..3c91896c9b 100644 > --- a/libavcodec/pngdec.c > +++ b/libavcodec/pngdec.c > @@ -98,6 +98,7 @@ typedef struct PNGDecContext { > int bpp; > int has_trns; > uint8_t transparent_color_be[6]; > + int significant_bits; > > uint32_t palette[256]; > uint8_t *crow_buf; > @@ -716,6 +717,14 @@ static int populate_avctx_color_fields(AVCodecContext *avctx, AVFrame *frame) > avctx->colorspace = frame->colorspace = AVCOL_SPC_RGB; > avctx->color_range = frame->color_range = AVCOL_RANGE_JPEG; > > + /* > + * tRNS sets alpha depth to full, so we ignore sBIT if set. > + * As a result we must wait until now to set > + * avctx->bits_per_raw_sample in case tRNS appears after sBIT > + */ > + if (!s->has_trns && s->significant_bits > 0) > + avctx->bits_per_raw_sample = s->significant_bits; > + > return 0; > } > > @@ -996,6 +1005,38 @@ fail: > return ret; > } > > +static int decode_sbit_chunk(AVCodecContext *avctx, PNGDecContext *s, > + GetByteContext *gb) > +{ > + int bits = 0; > + int channels; > + > + if (!(s->hdr_state & PNG_IHDR)) { > + av_log(avctx, AV_LOG_ERROR, "sBIT before IHDR\n"); > + return AVERROR_INVALIDDATA; > + } > + > + if (s->pic_state & PNG_IDAT) { > + av_log(avctx, AV_LOG_ERROR, "sBIT after IDAT\n"); > + return AVERROR_INVALIDDATA; > + } > + > + channels = ff_png_get_nb_channels(s->color_type); > + > + for (int i = 0; i < channels; i++) { > + int b = bytestream2_get_byteu(gb); What ensures that there is enough input left? > + bits = FFMAX(b, bits); > + } > + > + if (bits < 0 || bits > s->bit_depth) { > + av_log(avctx, AV_LOG_ERROR, "Invalid significant bits: %d\n", bits); > + return AVERROR_INVALIDDATA; > + } > + s->significant_bits = bits; > + > + return 0; > +} > + > static void handle_small_bpp(PNGDecContext *s, AVFrame *p) > { > if (s->bits_per_pixel == 1 && s->color_type == PNG_COLOR_TYPE_PALETTE) { > @@ -1440,6 +1481,10 @@ static int decode_frame_common(AVCodecContext *avctx, PNGDecContext *s, > > break; > } > + case MKTAG('s', 'B', 'I', 'T'): > + if ((ret = decode_sbit_chunk(avctx, s, &gb_chunk)) < 0) > + goto fail; > + break; > case MKTAG('g', 'A', 'M', 'A'): { > AVBPrint bp; > char *gamma_str; > diff --git a/libavcodec/version.h b/libavcodec/version.h > index da54f87887..39dbec0208 100644 > --- a/libavcodec/version.h > +++ b/libavcodec/version.h > @@ -30,7 +30,7 @@ > #include "version_major.h" > > #define LIBAVCODEC_VERSION_MINOR 6 > -#define LIBAVCODEC_VERSION_MICRO 100 > +#define LIBAVCODEC_VERSION_MICRO 101 > > #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ > LIBAVCODEC_VERSION_MINOR, \ _______________________________________________ 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".