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 34C7C407DE for ; Fri, 1 Apr 2022 13:31:29 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C9DD468AEFE; Fri, 1 Apr 2022 16:31:26 +0300 (EEST) Received: from EUR04-VI1-obe.outbound.protection.outlook.com (mail-oln040092075107.outbound.protection.outlook.com [40.92.75.107]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9336868005B for ; Fri, 1 Apr 2022 16:31:20 +0300 (EEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=e2FIN1VvPehkLUHpolKecK7xErUo0hoC0A8FyZBSxQol61eh0W6RAzD5W5YM/yCNnmylTcJ5aVT4Im1MuMT4zQi1xglMTRCl40Yx3yugJpg6n4Qor7q8yONc89+/MxYwZzTv5F5MnQHPS2mfkWOMlK6jLGGJi2t2oWXxzeuxEVtabcGPp42fbfg+kLVOmZLzkkKt05cPOxS5R8/+++x7bPqnnucBLMfmJmUGtXvSum+HxoDOYfvwcYwcpDFCglZoaWx5hPG20tYP7cUyGPGoYr69I1T3O8QZIxS5Uv2qiY4/k2ad6bgZQDAJEwWlQl0PeLErcqIUMiwXC03pTkqG+A== 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=OiwY9wlqg5A00J1Oal5G3dN7IJPVAotCVG8KbwiM/IM=; b=L3Oaxge0ievk2JJkdgFjn+t1tNUZLxqejbAMMvI34uFy21FsJbyG8T73bqMnuyGqRQ4EuVr/KtM5+rAN+HkbGZ92k27bneYDiFlIaHBgeJZyGPSMdfLZUC3ZeH9yrKOhiXV+BGWHXimxIlAMtUQG4d5cisoNHmCtK6GNI2IDi8mVahdV4Rd/Z2m2zywvvsyUlDMq5V0jh/hE5aLYm/u9s/l7NprJbDGz+FzWvmsa5vnBWCL8iejl63G/H3XQ4XePtqf0PsKuuBXBV8pQkOxg5ZC/3U5It0Q9Bxn3ZCW+9Z8L6cQE7EFe8iOEHlLXQ462D1bMuSDCkGhHdOwMemVRQQ== 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=OiwY9wlqg5A00J1Oal5G3dN7IJPVAotCVG8KbwiM/IM=; b=MflWJUPkkwRfZGak2gQCVgz/iO1vVN+FJtjp/jymOuQyJ9SpBsFErApzYotUEErYygKWGTjWs5D7kYSfGDXyJedOShyx1ccCXawb0JBEY5V57ZdVib0+mDF+gtD1Quu+zTi3LCe6oZPKZaqZueWQyQ46FATXMICITN4G/vBiNQl/HjIfp2u/P3RCw09th8yOLmPchZSOcoThqWAXibY77aKGAzXULpQf/iFMOHFksn/SW2tsX1p9cjCvkgHZ9bksM+8WKz3ge8x2e2l1BIUlhapCEIl7jOMo6EwKQ9UHkvLJ3wTn0nrO2tkyOObwUs2XLV17EZpSR1kpnFa0pVKuRw== Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) by VI1PR01MB3950.eurprd01.prod.exchangelabs.com (2603:10a6:802:5c::29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5123.21; Fri, 1 Apr 2022 13:31:18 +0000 Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8]) by AS1PR01MB9564.eurprd01.prod.exchangelabs.com ([fe80::9070:a5fd:e532:bdf8%3]) with mapi id 15.20.5102.022; Fri, 1 Apr 2022 13:31:18 +0000 Message-ID: Date: Fri, 1 Apr 2022 15:31:16 +0200 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220328152612.95684-1-ffmpeg@haasn.xyz> From: Andreas Rheinhardt In-Reply-To: <20220328152612.95684-1-ffmpeg@haasn.xyz> X-TMN: [yu44oYYstYBH4ISjojNlJh4aPryUUbPq] X-ClientProxiedBy: ZR0P278CA0075.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:22::8) To AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) X-Microsoft-Original-Message-ID: <16c4a085-b47c-f4ae-68ce-51fba5276f44@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 594c6b18-e038-4d90-a700-08da13e3e730 X-MS-TrafficTypeDiagnostic: VI1PR01MB3950:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: nRkltUXXRh7BA1LbPBJ4N+v1lMk4vVldPpIYXBbaUy/JleRoaxsonRvjSduJIgZWDXbhJylPoKNVTJ85u3SUxtUncVWkuZuQMqh7XbG3xaR5tyFJvaeanRNueIsNOs9Jm6wDrctMKAMycksfQfiqDakWFcHubSz+GbTQ7pqI3qaPNq+wOtZZmABMv8jO6fqhW6WgqJzOFA4wSOt54gVbOMwYxdSRb7y4/CBbTXO2e1hH01CFyuB2u1I7C6zLXl0LrYuDBSAk2vgzwJ54Z2cRhOvY/PF3xd9lAQd/BahbP5i9XRhb2ud1HW/qBw5wnNtG9BCWEWLEdUFyF/1YzTMoVbCA3dJCoA6Puu2r5lJcaj8YNv0iyWb77sXeTjFbtEd5CTNzUqshelINOih9a3MGuaAK8cQdDyMtlBqWr6d1r9BkWjMS38P8ryu4bkVAMmCWPXkscalb2a7AV5MpQIPuxbRY1U9/B13wdj8aPg73N28J2WrWX5Ta24YhAKXCMdWx5vzRtX0wtmSh7iC/YyGZ+ttdrfVKE3wVUdxOZhifZosIYSvV0Nxm7tMAYT9LLkbPqn5UHDo7lEkU9VsqFYwqhQ== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y2QyTEZFeDZhNDJYdzFjTFhQMERkakxXTkd0UWhFRmN3N29wR0JWOHVvczdD?= =?utf-8?B?b0JTTXVHd3JkV0NKeDh0ekZYbGtzb0hFV2t6djdZZkhVdXZYcUxDMHFjYXZk?= =?utf-8?B?ekt4QloydTA1bUdVY3E5QmZCOU1OUG9MR1VCSm9pYmxURzlPUWZVcWZvcjY0?= =?utf-8?B?dFJQRFN6SXpjK1dKRjlJVGhOaUo1NC9mOFRJRW9mYXQxWVRLZFpmVnRLbWhV?= =?utf-8?B?OHlNOE5FaHVYdUZIb0N2TzVqTmlsNUJLOVAxc1gvZE9aVjIvM01YRzRqQmRY?= =?utf-8?B?MEhSR3ZnNDB4UUhvMENJcVNiM3dTd1FhS1N2RkJFKzZUSVpwNHpoeDlhb0gr?= =?utf-8?B?K3ZEWHBJK2VUMENhcFhQTmV1SnlET1l6S0JodjREWDZ3c1AwTlZkbU1NWjFi?= =?utf-8?B?aEp5d3hhQ0lmWEdLWDB6MFRuZ0Zidkw1NmxJRUFXZENlcUJtVkhDSmdSS2lK?= =?utf-8?B?V1hVRkUyVXVJOEtpOEtUZitHb3hXazkxc1FFYUNGZ1A0bFpkS0NiMk04M0hx?= =?utf-8?B?VlNVRlFISEpSQU1Ub0Y4UjdBMDYxUmZNa25sdVVRazI4RGxpZFI2RW9CTXdu?= =?utf-8?B?R1JsUnhLNnZqL2N1TjV2RUg2cWUyQnpoQU50TGhVRVN1c1dxM1BRTG9laHR4?= =?utf-8?B?ckE5NzloWUdDWFJFUjAySFVuOElJdWpUZy9ycGdPajBidVJPR05UbFhieUdn?= =?utf-8?B?TTZDZGM5T0FEVWk5NmRJL2h6N2JUMmRHaWxtaTBKTTVPRUpLQlhWOFI5Smp6?= =?utf-8?B?R0Y5L2pzRkhBRC95SlZ1YmZqL2xGS3NyNC90QUFTaDFVRTJ4ZG1JNUc1SEd4?= =?utf-8?B?SE83OGw5ak94aFpiWVZoZ2lKQlJCUG1NTzZVMHpkMDhzUy9sVFV4a0ZiaS9n?= =?utf-8?B?R3Q4UndQeEtHNXl1NXRVbHErRE1rNDJ0cnQ1N3dKVmtOWE9tVUp5WGNBRGdl?= =?utf-8?B?T2IwVWVxSk1hUmlqWkFJK3NRMVR4dnZhcUxhVGdXeTh5WGp5V1RDc0tYWmZM?= =?utf-8?B?WmE4TWFyQzJ6emRFWm9hODE5WktVZ1FFWlF4akNmblBhM0d4QnN5TXl3ZDhR?= =?utf-8?B?TjlRR3pOeEtQanI2SFZ3ME9HbDVaS2tybnhxd3R2VU9NeWo2OHVnVVUwVWhz?= =?utf-8?B?aUlRcTBTbFJvdFd0Wk9QOVVEVFBxTWMwZS9MSHgwcUdHVjVZTHVuNnNXaHpr?= =?utf-8?B?YlJkYUN6UG5WSkVnYUJGTGhYYk80dFZIcmN4V25haWtWbnZlaGVnSHdINVJD?= =?utf-8?B?Vlp2RmJTOWZUczVaTCtZRVg4WWFzbDV6eXFpNmh1V2xCd2RYTDM0eGlzMTU1?= =?utf-8?B?V0ZNRFR3TndNZFhyTG05UnRnaG9IKzhLeXdIbWhnNUtpMmtLL0M4b0NFUXhx?= =?utf-8?B?bVlvSGo2TENSc3ZWR24wbUtPenUzeGNTQ1NuWFcxNFE1NlJFMFRPcy91eEU0?= =?utf-8?B?d1pzTEk0SVB6TGFEbjYvS3RJdm1YSWRET2ozWWo5QTRUNzR1QzRXaXh3a2s3?= =?utf-8?B?UlY3VGlNS2pOZFJZMU5rZ0xyR2duWHAwNy9hOHB4a2tzSHRwOVArTUI1NFpa?= =?utf-8?B?d2M5NDhtb0xkWFpsbzB0MzEyVTlKWUd1Zi9ybkViV3E0VzNscmYxZ2gyb2xQ?= =?utf-8?B?MTFoaEc3bFlocUhqTVVrbFNSZEJTWXdwaXF4SENTeVQ4d1BjUVZxR2NqN0VZ?= =?utf-8?B?NnZBYXNraWlHMXNoekJ0SDg5WXdWS0wvMGYxR1poMlQ0WnB3Q0NLYVFMM1lo?= =?utf-8?B?UjNudTh0ZmZiWVVOb2JmSDJNSVZXRWZJUlNJTnNYeDRYWVF3czFPdE1JNTFn?= =?utf-8?B?ak5NbnY0WDZDRlpLdk9kaU1ZVTM3YmZ6TGN1YzhnWnlzQWZyS0ZVY0JWemor?= =?utf-8?B?cXVoei8xRTVCYTVoSTFFa2V0VFhEUm5pMTQ3ZDJlaXVhL2xha0p1Z3ZPL2ky?= =?utf-8?B?eTdxRkFRNWRoZDFndXZKWUhqVXFLdE0rQmdGMVNWRnVFcHpobTRrTmYxSGZV?= =?utf-8?B?ellkSWVlb2VnPT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 594c6b18-e038-4d90-a700-08da13e3e730 X-MS-Exchange-CrossTenant-AuthSource: AS1PR01MB9564.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2022 13:31:18.6856 (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: VI1PR01MB3950 Subject: Re: [FFmpeg-devel] [PATCH v7 1/2] avcodec/pngenc: support writing iCCP 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: Niklas Haas: > From: Niklas Haas > > We re-use the PNGEncContext.zstream for deflate-related operations. > Other than that, the code is pretty straightforward. Special care needs > to be taken to avoid writing more than 79 characters of the profile > description (the maximum supported). > > To write the (dynamically sized) deflate-encoded data, we allocate extra > space in the packet and use that directly as a scratch buffer. Modify > png_write_chunk slightly to allow pre-writing the chunk contents like > this. > > Also add a FATE transcode test to ensure that the ICC profile gets > encoded correctly. > > Signed-off-by: Niklas Haas > --- > libavcodec/pngenc.c | 91 +++++++++++++++++++++++++++++++++++++++++- > tests/fate/image.mak | 10 ++++- > tests/ref/fate/png-icc | 43 ++++++++++++++++++++ > 3 files changed, 140 insertions(+), 4 deletions(-) > create mode 100644 tests/ref/fate/png-icc > > diff --git a/libavcodec/pngenc.c b/libavcodec/pngenc.c > index f67f90cd14..1571673f7c 100644 > --- a/libavcodec/pngenc.c > +++ b/libavcodec/pngenc.c > @@ -236,7 +236,8 @@ static void png_write_chunk(uint8_t **f, uint32_t tag, > bytestream_put_be32(f, av_bswap32(tag)); > if (length > 0) { > crc = av_crc(crc_table, crc, buf, length); > - memcpy(*f, buf, length); > + if (*f != buf) > + memcpy(*f, buf, length); > *f += length; > } > bytestream_put_be32(f, ~crc); > @@ -345,10 +346,54 @@ static int png_get_gama(enum AVColorTransferCharacteristic trc, uint8_t *buf) > return 1; > } > > +static int png_write_iccp(AVCodecContext *avctx, const AVFrameSideData *sd) Passing the PNGEncContext would be more natural. > +{ > + PNGEncContext *s = avctx->priv_data; > + z_stream *const zstream = &s->zstream.zstream; > + const AVDictionaryEntry *entry; > + const char *name; > + uint8_t *start, *buf; > + int ret; > + > + if (!sd || !sd->size) > + return 0; > + zstream->next_in = sd->data; > + zstream->avail_in = sd->size; > + > + /* write the chunk contents first */ > + start = s->bytestream + 8; /* make room for iCCP tag + length */ > + buf = start; > + > + /* profile description */ > + entry = av_dict_get(sd->metadata, "name", NULL, 0); > + name = (entry && entry->value[0]) ? entry->value : "icc"; > + for (int i = 0;; i++) { > + char c = (i == 79) ? 0 : name[i]; > + bytestream_put_byte(&buf, c); > + if (!c) > + break; > + } > + > + /* compression method and profile data */ > + bytestream_put_byte(&buf, 0); > + zstream->next_out = buf; > + zstream->avail_out = s->bytestream_end - buf; > + ret = deflate(zstream, Z_FINISH); > + deflateReset(zstream); > + if (ret != Z_STREAM_END) > + return AVERROR_EXTERNAL; > + > + /* rewind to the start and write the chunk header/crc */ > + png_write_chunk(&s->bytestream, MKTAG('i', 'C', 'C', 'P'), start, > + zstream->next_out - start); > + return 0; > +} > + > static int encode_headers(AVCodecContext *avctx, const AVFrame *pict) > { > AVFrameSideData *side_data; > PNGEncContext *s = avctx->priv_data; > + int ret; > > /* write png header */ > AV_WB32(s->buf, avctx->width); > @@ -401,7 +446,13 @@ static int encode_headers(AVCodecContext *avctx, const AVFrame *pict) > if (png_get_gama(pict->color_trc, s->buf)) > png_write_chunk(&s->bytestream, MKTAG('g', 'A', 'M', 'A'), s->buf, 4); > > - /* put the palette if needed */ > + side_data = av_frame_get_side_data(pict, AV_FRAME_DATA_ICC_PROFILE); > + if ((ret = png_write_iccp(avctx, side_data))) { > + av_log(avctx, AV_LOG_WARNING, "Failed writing iCCP chunk\n"); > + return ret; > + } > + > + /* put the palette if needed, must be after colorspace information */ > if (s->color_type == PNG_COLOR_TYPE_PALETTE) { > int has_alpha, alpha, i; > unsigned int v; > @@ -525,6 +576,38 @@ the_end: > return ret; > } > > +static int add_icc_profile_size(AVCodecContext *avctx, const AVFrame *pict, > + size_t *max_packet_size) Since db57a5370bd37105d389a45b04bf4970802407ec the callers' max_packet_size are not size_t any more, but always 64bit (so that there's no truncation in case size_t is 32bit). > +{ > + PNGEncContext *s = avctx->priv_data; > + const AVFrameSideData *sd; > + const int hdr_size = 128; > + size_t new_pkt_size; > + uLong bound; > + > + if (!pict) > + return 0; > + sd = av_frame_get_side_data(pict, AV_FRAME_DATA_ICC_PROFILE); > + if (!sd || !sd->size) > + return 0; > + if (sd->size > ULONG_MAX) ULONG_MAX is the maximum of unsigned long, yet deflateBound uses uLong. The latter is a currently typedef for unsigned long, but do we want to rely on that? The ordinary way to check for whethe a value can be represented in a type is by "if (sd->size != (uLong)sd->size)" > + goto overflow; > + > + bound = deflateBound(&s->zstream.zstream, sd->size); > + if (bound > INT32_MAX - hdr_size) > + goto overflow; > + > + new_pkt_size = *max_packet_size + bound + hdr_size; > + if (new_pkt_size < *max_packet_size) > + goto overflow; > + *max_packet_size = new_pkt_size; > + return 0; > + > +overflow: > + av_log(avctx, AV_LOG_WARNING, "ICC profile too large\n"); AV_LOG_WARNING makes no sense given that you error out afterwards. (And anyway: Is a log-message really needed for something that will never happen in reality?) > + return AVERROR_INVALIDDATA; > +} > + > static int encode_png(AVCodecContext *avctx, AVPacket *pkt, > const AVFrame *pict, int *got_packet) > { > @@ -541,6 +624,8 @@ static int encode_png(AVCodecContext *avctx, AVPacket *pkt, > enc_row_size + > 12 * (((int64_t)enc_row_size + IOBUF_SIZE - 1) / IOBUF_SIZE) // IDAT * ceil(enc_row_size / IOBUF_SIZE) > ); > + if ((ret = add_icc_profile_size(avctx, pict, &max_packet_size))) > + return ret; > ret = ff_alloc_packet(avctx, pkt, max_packet_size); > if (ret < 0) > return ret; > @@ -870,6 +955,8 @@ static int encode_apng(AVCodecContext *avctx, AVPacket *pkt, > enc_row_size + > (4 + 12) * (((int64_t)enc_row_size + IOBUF_SIZE - 1) / IOBUF_SIZE) // fdAT * ceil(enc_row_size / IOBUF_SIZE) > ); > + if ((ret = add_icc_profile_size(avctx, pict, &max_packet_size))) > + return ret; > if (max_packet_size > INT_MAX) > return AVERROR(ENOMEM); > > diff --git a/tests/fate/image.mak b/tests/fate/image.mak > index 573d398915..c6374c7d8a 100644 > --- a/tests/fate/image.mak > +++ b/tests/fate/image.mak > @@ -385,11 +385,15 @@ FATE_PNG_PROBE += fate-png-side-data > fate-png-side-data: CMD = run ffprobe$(PROGSSUF)$(EXESUF) -show_frames \ > -i $(TARGET_SAMPLES)/png1/lena-int_rgb24.png > > +FATE_PNG_TRANSCODE-$(call ENCDEC, PNG, IMAGE2) += fate-png-icc > +fate-png-icc: CMD = transcode png_pipe $(TARGET_SAMPLES)/png1/lena-int_rgb24.png image2 "-c png" "" "" "-show_frames" > + > FATE_PNG-$(call DEMDEC, IMAGE2, PNG) += $(FATE_PNG) > FATE_PNG_PROBE-$(call DEMDEC, IMAGE2, PNG) += $(FATE_PNG_PROBE) > FATE_IMAGE += $(FATE_PNG-yes) > FATE_IMAGE_PROBE += $(FATE_PNG_PROBE-yes) > -fate-png: $(FATE_PNG-yes) $(FATE_PNG_PROBE-yes) > +FATE_IMAGE_TRANSCODE += $(FATE_PNG_TRANSCODE-yes) > +fate-png: $(FATE_PNG-yes) $(FATE_PNG_PROBE-yes) $(FATE_PNG_TRANSCODE-yes) > > FATE_IMAGE-$(call DEMDEC, IMAGE2, PTX) += fate-ptx > fate-ptx: CMD = framecrc -i $(TARGET_SAMPLES)/ptx/_113kw_pic.ptx -pix_fmt rgb24 -vf scale > @@ -551,8 +555,10 @@ fate-xbm: $(FATE_XBM-yes) > > FATE_IMAGE += $(FATE_IMAGE-yes) > FATE_IMAGE_PROBE += $(FATE_IMAGE_PROBE-yes) > +FATE_IMAGE_TRANSCODE += $(FATE_IMAGE_TRANSCODE-yes) > > FATE_SAMPLES_FFMPEG += $(FATE_IMAGE) > FATE_SAMPLES_FFPROBE += $(FATE_IMAGE_PROBE) > +FATE_SAMPLES_FFMPEG_FFPROBE += $(FATE_IMAGE_TRANSCODE) > > -fate-image: $(FATE_IMAGE) $(FATE_IMAGE_PROBE) > +fate-image: $(FATE_IMAGE) $(FATE_IMAGE_PROBE) $(FATE_IMAGE_TRANSCODE) > diff --git a/tests/ref/fate/png-icc b/tests/ref/fate/png-icc > new file mode 100644 > index 0000000000..542bb76f9a > --- /dev/null > +++ b/tests/ref/fate/png-icc > @@ -0,0 +1,43 @@ > +a50d37a0e72bddea2fcbba6fb773e2a0 *tests/data/fate/png-icc.image2 > +49397 tests/data/fate/png-icc.image2 > +#tb 0: 1/25 > +#media_type 0: video > +#codec_id 0: rawvideo > +#dimensions 0: 128x128 > +#sar 0: 2835/2835 > +0, 0, 0, 1, 49152, 0xe0013dee > +[FRAME] > +media_type=video > +stream_index=0 > +key_frame=1 > +pts=0 > +pts_time=0.000000 > +pkt_dts=0 > +pkt_dts_time=0.000000 > +best_effort_timestamp=0 > +best_effort_timestamp_time=0.000000 > +pkt_duration=1 > +pkt_duration_time=0.040000 > +pkt_pos=0 > +pkt_size=49397 > +width=128 > +height=128 > +pix_fmt=rgb24 > +sample_aspect_ratio=1:1 > +pict_type=I > +coded_picture_number=0 > +display_picture_number=0 > +interlaced_frame=0 > +top_field_first=0 > +repeat_pict=0 > +color_range=pc > +color_space=unknown > +color_primaries=unknown > +color_transfer=unknown > +chroma_location=unspecified > +[SIDE_DATA] > +side_data_type=ICC profile > +name=Photoshop ICC profile > +size=3144 > +[/SIDE_DATA] > +[/FRAME] _______________________________________________ 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".