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 8EE6442543 for ; Fri, 18 Mar 2022 15:37:51 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id EA40B68B0C3; Fri, 18 Mar 2022 17:37:48 +0200 (EET) Received: from EUR01-VE1-obe.outbound.protection.outlook.com (mail-oln040092066020.outbound.protection.outlook.com [40.92.66.20]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8002968AD9E for ; Fri, 18 Mar 2022 17:37:42 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IgAW4zYGaj/ydLBWWe2rzHM3jlgYIGurm5inYcSrRS+W6yL86OkEmtVPcRut+TeIFuepGqd5LGQRF8NpuSRavDs/ZDG0GpCZdUPA8Gq3JzO/sewc/u3MOZKDF/OEkUqHXd83O+BLyR/ekjoB95zDEEQCScn4FlgXCsPAExxjvnlal9a9mpP4p1Xox+F4jP8Sm5tWlxyAcTtA+sGIJB3K97Goe0Jv4PuQZ5nLQZV1X5Sex/3SHxOYYAVtwemZGXocHZdvTS0DsAIXcvDd9xt8mTdu5TZhZSqkxLixzuhAlBGMHZDvQdWocy0phJ/b6dHt+ZrA27/11GHsZj1UdN420w== 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=gorcEfOdRnvOykk06kffNHWbIGc8lZPgI2NxlzqIRgg=; b=kW4JWp/AtW+7a/ORuO47JUnfEIZJdV5xayD8o2ZNkziLqaSYzO0YAyED+cHaq/TEeFrLObAKcqJeF5WObTL4FAPawkTa6sPaHH0dmTzB4TO9IxqR4RRXqZTEf9wLXVKDRT7lykj7CEcYvfS1QMiiFzSaSh7U3L7qAe9uzC5gCDIbAdQWO/sEmYa6pkfDbPkXzVf1LfkbubLhIM1mHBj5zxCbu/WY5aPtCDAB75gVRsTf3DeLNtoOem8H+aEBA9TqBau6MgAPDHqLJufbiZyXIFEjH/tv10ztYKkNT7e70WHaTrZkOEDnJYbe06aQfx0tcrXiLbOJw0M7UjvJZfM06g== 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=gorcEfOdRnvOykk06kffNHWbIGc8lZPgI2NxlzqIRgg=; b=nhEta92ACEr+iG0gPB2jV4oFv1ESp04Z/eSFmpntVqcdjwU8B7ArxxQZfHrlUYPS8Q8h+HNfBsx0O1S1F5OA1Nhes5xlh6VyKZ9ZtZ5+OqgfVJ2bIUBstrmlO5wQXBahfX+kkH86j+kezXS+8dCu3N1bGkpWcSe5Y+p+ssNTZPrqK0dg5S9fOccD+bsVY+Zxzx5dMG7GYK0uQtXVUvzh3pBFsixrUSJ12+7dUqGXHFOUeO+7oYHtZc5bnMNdh27Z7zU6KoFx6Hc3QouOcw5D7YypUz+CwuaAxs6xNKVQnWzX09WtTTf8tmtfVgMWloo2vqeyLYtowX4v8KfSODUzcw== Received: from AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) by DB9PR01MB7435.eurprd01.prod.exchangelabs.com (2603:10a6:10:214::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5081.16; Fri, 18 Mar 2022 15:37:41 +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.5081.016; Fri, 18 Mar 2022 15:37:41 +0000 Message-ID: Date: Fri, 18 Mar 2022 16:37:39 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20220310131542.58255-1-ffmpeg@haasn.xyz> <20220315115913.45724-1-ffmpeg@haasn.xyz> From: Andreas Rheinhardt In-Reply-To: <20220315115913.45724-1-ffmpeg@haasn.xyz> X-TMN: [aquegiykGupQG/3YzzxyjytYIIDc5B+K] X-ClientProxiedBy: AM6P195CA0071.EURP195.PROD.OUTLOOK.COM (2603:10a6:209:87::48) To AS1PR01MB9564.eurprd01.prod.exchangelabs.com (2603:10a6:20b:4d1::16) X-Microsoft-Original-Message-ID: <47ecfa4e-52aa-1c9d-b223-c77892fe1821@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7d4849e8-3a36-4998-de1f-08da08f53cdf X-MS-TrafficTypeDiagnostic: DB9PR01MB7435:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: wANqH3uRgRem7VX94btLYcw6dnA/8bdxfjkDooUAy3mFNJZNZBKdqiSM1Knzl4alksYuPWbrxArx3Lb42IuQSVrDSWteKrxkNqf9VmowT2tphVhg5flMDtTVjzfgWHjB6Fa6JmmCOxBxizK7Cx8KbknUjeLDvbKfL+52OPNWIgra82v6HH/Rx6P1NvCXOe1ExJu4VTJYFi0vh1P1HtgJAl6DWc/nsmggBy1qMBWIW03P/xDoVrZUiz9SKC7DJdrCZ8T/2t/uzkMD6T21XXMcOmmVLEK7Umpd38waUTpy7n7D7ESbcyPq68s1JuyPD6FVMSFDpxNxO6KzTTRePNIUKzbfmzBMRFR++0Bf0W6uySqOsNqsnTl9pXCEaVF3KPQxQIBEk0vvpJUV329yl2Chh0gXoAsF9JRmI0VgUyhLJ9M7RNW8DOfEjVuSmxw5SCAK3fGTYMI08vJt5xmqZaJbjfaxqPtEOmtpWqRAm5jdQ+TlXBNu07OfNB3rQe47B93wSNnQja+tmsC9lTbXwO9fptAyslMAEz6GuKJmw78jlLrkQ7law83m2i+5Hkh6Y8HiGp8ANTbEloaC2QTZf0lawA== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K0dqZnVmV3h3NUxNVk1RYUZ4alNMdTQxZlh2WmlUdXJUUW15UGlHV3VVa1R1?= =?utf-8?B?MUJIdFlRSmZLbjJrUTMvN1JvTnA1MVYvdVAyenZiZnhZWVVVclE0ZE1Uakhq?= =?utf-8?B?ZG5uVmdvb3NmVUhaVTZKelJDUEdnWnV1Y21KR1pML2k1S29lMTFZSlUzY0J1?= =?utf-8?B?U0o4MlgzeG5ITGlrOUhRSFNURmt1MkJrVHdMWGVZdTVmYlFJT1RvU3c4RmRZ?= =?utf-8?B?NDNsRTZxaG45NHZPNHRZL24weEt5Y2NkOXYyRVV2RitxNlNVMVFkaE1uZk5T?= =?utf-8?B?dUxqRC9KTDNTTDg5RmhLMHVET01uRXlEZllPYytCQllCTXRGRGEwTHJQM3JH?= =?utf-8?B?dXhTUElGaC9NTGhRRVlKUko0U3RKT0xOMEJjQ3BGLzVCWjRqRlpqckxWN2kr?= =?utf-8?B?dG5UU01CVWFuZ1ZKbzZDYllRajl1bFQ1Mm9tNHZiWEZPTTNLSlZXWnZYNjhq?= =?utf-8?B?UFJ3TGJkRVJJYWJWVGZENnh2RUdKRHRqOSs0bDJTWjBKcnArTGFGaDNLUm9L?= =?utf-8?B?bTRURzVyanlqVHpyLzJab0dQMUVudFZKYkp5VG5xWjNMTmlrTWpJakxZc2cv?= =?utf-8?B?V2xMT1hTTUZ3QnRGcURLNmFBckZMWUVoRjMrYVI4ZXB2eEl4bFduVlduMHJS?= =?utf-8?B?NTFoeDVGK3VKUW0rNXIzVzNQdnBFdXN3Qks0eGIrVkJLUXdWVUlCbXoyN2h5?= =?utf-8?B?VnFrWEVPUzhJZDM1MVRhVW9nTEN1UGIxalVzMElOU2NMQ3FRcGNFZjJwQzg2?= =?utf-8?B?WnVPYlZySm00cWs4bVFlRXVXUzcwVm5LSStXTVVZNmlkb0ZwZUhGejllZnFx?= =?utf-8?B?d0JhQUZZYUNIM3VzQnZJdlN3RWZsdzgrb0JrZ1IvbVRXUFZCUGwzWVQ3eDhz?= =?utf-8?B?Nm9hMFp2dDZET000RlgwL1dKN3FMemZRbE5PV1Nvbm1US0pKVmZ4RkpGSi9N?= =?utf-8?B?RGRjRVhyQVRoWmRwRkd0dm5HOEVTN1JwQXJtK09BWUFmTzVwME9ub0w0QU52?= =?utf-8?B?SGZENjBVMHBqbDFjbVMrVEhMZHdMQW1xNXB1eEwwK0FVNEJhNGMzaWNEOUpR?= =?utf-8?B?N0JURm5uaGFrTkk5aTZ0dHhodUp1VXZtZzhjaGxzN1ZFS0VaQnNxUjVvUExp?= =?utf-8?B?MUpGaFdvenlZRUQ4RVFvdzhpbHZMeHdYeEdQcVhVUVdrR1BHY0lxT0RYeDlS?= =?utf-8?B?OStBRVlpQkJhUW9VZmZ2TjM4alg4RVJLSjZMK3dZSzY3QTExTlFhc2pjcmQy?= =?utf-8?B?QTFrUzFNOGxPVnpFdFoxeWRnVWdVVWpUVDhkak13SWJoYmxXSk1JWEtYSDdT?= =?utf-8?B?TzhMNEVpenBtcE5tS3c4MVlOSXFXQU9UUzhKSHFxVE15RU01cDVQdUxDWFYz?= =?utf-8?B?UG1CUWd6dWJmOVJQeDJDd3dLQU9TMm03cC9UZERLcUloSnlvL04xS1FHMnhT?= =?utf-8?B?ZTRmVHlBUCtRSVBzT3Vrd3hwVW5ZRDRiYkxGRTdoT0w2ZlpYRmJnekU1c2JU?= =?utf-8?B?eXlVT1F0amN3WVVQZGpKckhNVFVyUnFudWhSbkxwa1J0Mk9NMXJhOGdUTitM?= =?utf-8?Q?Fvqg38w5iPkDUxZEnxTrtpNGir9YdlGCLzxX6bIFkUosZp?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7d4849e8-3a36-4998-de1f-08da08f53cdf X-MS-Exchange-CrossTenant-AuthSource: AS1PR01MB9564.eurprd01.prod.exchangelabs.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2022 15:37:40.9863 (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: DB9PR01MB7435 Subject: Re: [FFmpeg-devel] [PATCH v2] avcodec/mjpegenc: support writing ICC profiles 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 > > This is mostly straightforward. The major complication is that, as a > result of the 16-bit chunk size limitation, ICC profiles may need to be > split up into multiple chunks. > > We also need to make sure to allocate enough extra space in the packet > to fit the ICC profile, so modify both mpegvideo_enc.c and ljpegenc.c to > take into account this extra overhead. > > Also add a FATE transcode test to ensure that the ICC profile gets > written (and read) correctly. Note that this ICC profile is smaller than > 64 kB, so this doesn't test the APP2 chunk re-arranging code at all. > > Signed-off-by: Niklas Haas > --- > Changes in v2: > - Merge FATE test into this commit > - Fix possible segfault (when no AVFrame is available) When could this ever happen? IMO it can't. > --- > libavcodec/ljpegenc.c | 6 ++++- > libavcodec/mjpegenc.c | 3 ++- > libavcodec/mjpegenc_common.c | 43 +++++++++++++++++++++++++++++++++--- > libavcodec/mjpegenc_common.h | 2 +- > libavcodec/mpegvideo_enc.c | 3 +++ > tests/fate/image.mak | 3 +++ > tests/ref/fate/jpg-icc | 42 +++++++++++++++++++++++++++++++++++ > 7 files changed, 96 insertions(+), 6 deletions(-) > create mode 100644 tests/ref/fate/jpg-icc > > diff --git a/libavcodec/ljpegenc.c b/libavcodec/ljpegenc.c > index e15f448f90..c54450c338 100644 > --- a/libavcodec/ljpegenc.c > +++ b/libavcodec/ljpegenc.c > @@ -216,6 +216,7 @@ static int ljpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, > { > LJpegEncContext *s = avctx->priv_data; > PutBitContext pb; > + const AVFrameSideData *sd; > const int width = avctx->width; > const int height = avctx->height; > const int mb_width = (width + s->hsample[0] - 1) / s->hsample[0]; > @@ -233,12 +234,15 @@ static int ljpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, > * s->hsample[0] * s->vsample[0]; > } > > + if ((sd = av_frame_get_side_data(pict, AV_FRAME_DATA_ICC_PROFILE))) > + max_pkt_size += sd->size; This does not account for the chunk overhead. > + > if ((ret = ff_alloc_packet(avctx, pkt, max_pkt_size)) < 0) > return ret; > > init_put_bits(&pb, pkt->data, pkt->size); > > - ff_mjpeg_encode_picture_header(avctx, &pb, NULL, &s->scantable, > + ff_mjpeg_encode_picture_header(avctx, &pb, pict, NULL, &s->scantable, > s->pred, s->matrix, s->matrix); > > header_bits = put_bits_count(&pb); > diff --git a/libavcodec/mjpegenc.c b/libavcodec/mjpegenc.c > index 08671b0df7..d7c0c763a1 100644 > --- a/libavcodec/mjpegenc.c > +++ b/libavcodec/mjpegenc.c > @@ -77,7 +77,8 @@ static av_cold void init_uni_ac_vlc(const uint8_t huff_size_ac[256], > > static void mjpeg_encode_picture_header(MpegEncContext *s) > { > - ff_mjpeg_encode_picture_header(s->avctx, &s->pb, s->mjpeg_ctx, > + const AVFrame *frame = s->picture->f; > + ff_mjpeg_encode_picture_header(s->avctx, &s->pb, frame, s->mjpeg_ctx, > &s->intra_scantable, 0, > s->intra_matrix, s->chroma_intra_matrix); > > diff --git a/libavcodec/mjpegenc_common.c b/libavcodec/mjpegenc_common.c > index 995e2b7670..5594a8d239 100644 > --- a/libavcodec/mjpegenc_common.c > +++ b/libavcodec/mjpegenc_common.c > @@ -130,8 +130,10 @@ static void jpeg_table_header(AVCodecContext *avctx, PutBitContext *p, > AV_WB16(ptr, size); > } > > -static void jpeg_put_comments(AVCodecContext *avctx, PutBitContext *p) > +static void jpeg_put_comments(AVCodecContext *avctx, PutBitContext *p, > + const AVFrame *frame) > { > + const AVFrameSideData *sd = NULL; > int size; > uint8_t *ptr; > > @@ -161,6 +163,41 @@ static void jpeg_put_comments(AVCodecContext *avctx, PutBitContext *p) > put_bits(p, 8, 0); /* thumbnail height */ > } > > + /* ICC profile */ > + if (frame) > + sd = av_frame_get_side_data(frame, AV_FRAME_DATA_ICC_PROFILE); > + if (sd && sd->size) { > + static const uint8_t hdr_size = strlen("ICC_PROFILE")+5; This is illegal as initializers for static objects need to be constant expressions or string literals. Which this thing isn't. You are basically presuming that strlen be evaluated at compile-time. > + static const uint16_t max_chunk_size = UINT16_MAX - hdr_size; > + const uint8_t *data = sd->data; > + size_t remaining = sd->size; > + size_t nb_chunks = (remaining + max_chunk_size - 1) / max_chunk_size; There is a potential overflow here. You could avoid it by checking whether remaining is > 255 * max_chunk_size. > + if (nb_chunks > 255) { > + av_log(avctx, AV_LOG_WARNING, > + "Cannot store %zu byte ICC profile: too large for JPEG\n", We use SIZE_SPECIFIER for compatibility with old versions of MSVC. Note that I do not know whether this is still needed, as all currently supported MSVC versions might already support #zu. > + sd->size); > + nb_chunks = remaining = 0; > + } > + > + for (int i = 0; i < nb_chunks; i++) { > + size = FFMIN(remaining, max_chunk_size); > + av_assert1(size > 0); > + put_marker(p, APP2); > + put_bits(p, 16, size + hdr_size); > + ff_put_string(p, "ICC_PROFILE", 1); > + put_bits(p, 8, i+1); > + put_bits(p, 8, nb_chunks); > + flush_put_bits(p); > + ptr = put_bits_ptr(p); > + skip_put_bytes(p, size); > + memcpy(ptr, data, size); > + remaining -= size; Everything that you are doing here is byte-aligned, so I think it would be cleaner (and less code) to write everything directly and skip_put_bytes once afterwards. > + data += size; > + } > + > + av_assert1(!remaining); > + } > + > /* comment */ > if (!(avctx->flags & AV_CODEC_FLAG_BITEXACT)) { > put_marker(p, COM); > @@ -213,7 +250,7 @@ void ff_mjpeg_init_hvsample(AVCodecContext *avctx, int hsample[4], int vsample[4 > } > > void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, > - MJpegContext *m, > + const AVFrame *frame, struct MJpegContext *m, > ScanTable *intra_scantable, int pred, > uint16_t luma_intra_matrix[64], > uint16_t chroma_intra_matrix[64]) > @@ -233,7 +270,7 @@ void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, > if (avctx->codec_id == AV_CODEC_ID_AMV) > return; > > - jpeg_put_comments(avctx, pb); > + jpeg_put_comments(avctx, pb, frame); > > jpeg_table_header(avctx, pb, m, intra_scantable, > luma_intra_matrix, chroma_intra_matrix, hsample); > diff --git a/libavcodec/mjpegenc_common.h b/libavcodec/mjpegenc_common.h > index ac753bf153..3c0a7addac 100644 > --- a/libavcodec/mjpegenc_common.h > +++ b/libavcodec/mjpegenc_common.h > @@ -30,7 +30,7 @@ > struct MJpegContext; > > void ff_mjpeg_encode_picture_header(AVCodecContext *avctx, PutBitContext *pb, > - struct MJpegContext *m, > + const AVFrame *frame, struct MJpegContext *m, > ScanTable *intra_scantable, int pred, > uint16_t luma_intra_matrix[64], > uint16_t chroma_intra_matrix[64]); > diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c > index c69114ea15..932dfa34f7 100644 > --- a/libavcodec/mpegvideo_enc.c > +++ b/libavcodec/mpegvideo_enc.c > @@ -1686,10 +1686,13 @@ int ff_mpv_encode_picture(AVCodecContext *avctx, AVPacket *pkt, > > /* output? */ > if (s->new_picture.f->data[0]) { > + const AVFrameSideData *sd; > int growing_buffer = context_count == 1 && !pkt->data && !s->data_partitioning; > int pkt_size = growing_buffer ? FFMAX(s->mb_width*s->mb_height*64+10000, avctx->internal->byte_buffer_size) - AV_INPUT_BUFFER_PADDING_SIZE > : > s->mb_width*s->mb_height*(MAX_MB_BYTES+100)+10000; > + if ((sd = av_frame_get_side_data(s->new_picture.f, AV_FRAME_DATA_ICC_PROFILE))) > + pkt_size += sd->size; This does not account for the chunk overhead and it is also not targeted to MJPEG. > if ((ret = ff_alloc_packet(avctx, pkt, pkt_size)) < 0) > return ret; > if (s->mb_info) { > diff --git a/tests/fate/image.mak b/tests/fate/image.mak > index 573d398915..8b72890fbe 100644 > --- a/tests/fate/image.mak > +++ b/tests/fate/image.mak > @@ -337,6 +337,9 @@ fate-jpg-12bpp: CMD = framecrc -idct simple -i $(TARGET_SAMPLES)/jpg/12bpp.jpg - > FATE_JPG += fate-jpg-jfif > fate-jpg-jfif: CMD = framecrc -idct simple -i $(TARGET_SAMPLES)/jpg/20242.jpg > > +FATE_JPG += fate-jpg-icc > +fate-jpg-icc: CMD = transcode png_pipe $(TARGET_SAMPLES)/png1/lena-int_rgb24.png mjpeg "-vf scale" "" "" "-show_frames" This needs an ffprobe dependency. > + > FATE_JPG-$(call DEMDEC, IMAGE2, MJPEG) += $(FATE_JPG) > FATE_IMAGE += $(FATE_JPG-yes) > fate-jpg: $(FATE_JPG-yes) > diff --git a/tests/ref/fate/jpg-icc b/tests/ref/fate/jpg-icc > new file mode 100644 > index 0000000000..220146555e > --- /dev/null > +++ b/tests/ref/fate/jpg-icc > @@ -0,0 +1,42 @@ > +0a323df5cdfb9574e329b9831be054a6 *tests/data/fate/jpg-icc.mjpeg > +11010 tests/data/fate/jpg-icc.mjpeg > +#tb 0: 1/25 > +#media_type 0: video > +#codec_id 0: rawvideo > +#dimensions 0: 128x128 > +#sar 0: 1/1 > +0, 0, 0, 1, 49152, 0xaac06b42 > +[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=11010 > +width=128 > +height=128 > +pix_fmt=yuvj444p > +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=bt470bg > +color_primaries=unknown > +color_transfer=unknown > +chroma_location=center > +[SIDE_DATA] > +side_data_type=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".