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 88CAE48AF9 for ; Sat, 2 Mar 2024 15:03:42 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id DC14068D2D7; Sat, 2 Mar 2024 17:03:39 +0200 (EET) Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05olkn2011.outbound.protection.outlook.com [40.92.89.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9546F68D19E for ; Sat, 2 Mar 2024 17:03:33 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=h6WaUZhvU70yUybTHkUW6YawzZJy96DkQIFl8UsykjpBoRu8r8rbMxZBOlMnpdYk10avcGx5MLLxvhLQxyHsKk1L/hraY6ZEhAYiRxuG92Fruyphe4B+neFde+TbG9izKsYqxvMWiOaXbOawUT5ALoUdmqUQkMh0aqNYWXWJOkOShVMPGCrFqOW9ufp32YymKjINruu4cxvUB+tc+SwrzttsUPrNKWiUnCv10x1HUP79Eer011Ctvy6RJc2AhQhIPdd/8ZIx7Ju0Obh8sR7/XxRnIRhIdNN5xc8d+KxGjCrY8ck6KTguT0jeeSxekYphE3mQgn853s3bl3YeuoUuZQ== 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=CbbLxlKz2wv0YBXq8pGfIiT8lul4iTlsfxkIaUMRU5o=; b=eBSEYPoiTs2zpJnPZzSs9DEkeOUK5V4v19qetz+UUzYHrnLNiD/nFDYIMwD9F3MVy50XIdVAM158TObEm5eIJ7UYWzW6/ocqIp37d+Sq/vX1eGW6LnL4iMzpzvyszNloroRr4QkefcNeYS+Fi0oh2ci69Zb0mP5H3UFUAcROxkqO+6rn0WsyQYa2pyy6xGR3uGPljv1Bt1wJzDU10nT2edD+Dfp4HAmqEEdLTureP0OfnMLKhtbzsSH482khQsBfMwi84aaUl6WXPRg8D8acrEI6sZkitxwkx4yndoRcpIpyXUNv814eejnlsK9HUKmRzU/nIsUBhSYcN8N/whmBBA== 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=CbbLxlKz2wv0YBXq8pGfIiT8lul4iTlsfxkIaUMRU5o=; b=jFGC83IFfGzMRhAmDo0j37v5ZKfsHozfDg1+HYVOQ6AYyW6PN1An4bPIFHKPxwHAc/AZGiOkj8BtmuP5vEqJNoHVAdCqkTW6Kk2ZOWIP3+wttlbik5/4ps4nveKlLodWynIAN0doOM7YfxV1ASh+7FjENgkhZnxY9Xq0NPzfU0rcokcZRSfKr1HgTBRyAnvIjPwZCJVC9yGA8ShX62Fpy7SD7XYoW1Xju0nPTq73dPLEeQd0WW612Ubpv51ixaacpJG5hm071cf9usqrQ3dtGwFNZgMHVtLPo8KlzoyjloMkzYe44Jv5xmOwV9nhWhlp+CdW6WXzB4FpFoZNRfflGw== Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) by DB9P250MB0523.EURP250.PROD.OUTLOOK.COM (2603:10a6:10:338::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7316.33; Sat, 2 Mar 2024 15:03:32 +0000 Received: from AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d]) by AS8P250MB0744.EURP250.PROD.OUTLOOK.COM ([fe80::65aa:deb0:a18e:d48d%5]) with mapi id 15.20.7316.023; Sat, 2 Mar 2024 15:03:31 +0000 Message-ID: Date: Sat, 2 Mar 2024 16:05:30 +0100 User-Agent: Mozilla Thunderbird Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <29ed7620-f60f-4f31-bc22-3f0903456c07@gmail.com> From: Andreas Rheinhardt In-Reply-To: X-TMN: [o0q/TRlLn4F8i52TxkRspY43SPRnJ2597RGMXcGrr/0=] X-ClientProxiedBy: ZR0P278CA0169.CHEP278.PROD.OUTLOOK.COM (2603:10a6:910:45::16) To AS8P250MB0744.EURP250.PROD.OUTLOOK.COM (2603:10a6:20b:541::14) X-Microsoft-Original-Message-ID: <6dff4610-45ff-43d5-a7b7-bbd050c8945a@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8P250MB0744:EE_|DB9P250MB0523:EE_ X-MS-Office365-Filtering-Correlation-Id: 397129a9-892e-480f-6f36-08dc3ac9ecf5 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: W30HZZKy2vs7XODhazbNXqP7gjJqJeM1xZw4t3TVowYa/71H/Y213a/IVGLsdG1WSGBDHdtICkrsVIGivTkVoQNci2FCF9VuStR1azUQEyT3S9LChqsdFKz9BDKXHod0drlntqHFzTlRiLIMhzoG87pXsrt9jibOC0O1jEyYVhueJcIKkx/aXwi6tivq1gG/hz/POC2XAhJyic+A8nDctZP2kQW6M6ccNYVY00UnCrOzE+p5HuW4QNf+KZteIyiuy9ihauwONHnko8d2HxW0UH42a0F6/UVQGuX6jH555Td5d8dNFhUC/BeUd+YsNVLqqvBWZ/cPkx0ux5Gj9qn20ZCoxzYyt93cdS3K2mdI47P55rHZoEuKR2M14ppzBaRKhhmZco+uHwfAMnC8wUQ1aXI4tnNTtfFAXjDvaTgH1jD4HtPBQEBO6aAQq1Mg7GXIdgoC8DfRhLlbApDAavNFCtiO9+WTFqM2NZI1tkOibowSDSGwFO13+aVZuYa0U3KzpXSck8XRdAlKUywqUb14uaWERuSPLUTj2NNe/kcEatmL8SPvHkDgDEaDsCK7h1Cl X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y3ZaekZ5dFcwdVpJR1d4RFNrQU9mS2FCRllPb3d4RG0rbkwxUElISm9IbVh5?= =?utf-8?B?VG5idTNFT2I1WkxNRHRNUnVCcFd4ZTJiZG9rbkZMT3U4TDMxYzJydGFTclpt?= =?utf-8?B?em9QcllNd2U1YmZsTmw3OW82SEpwcXBUWXhLWDFKcXd5QmwxTXpUMzhMNjlB?= =?utf-8?B?L1hQTlFIbFlSakVOUlNzcHdYaXV5aTIwaUhyVFhnaVNsUFJWeG1nNDNEVmlT?= =?utf-8?B?Qm9HZ1M3VHN2NnlFZFc5OEJZZnpFa3pxMSt4aDdPS0NyczFUbXFIYm1UQXQ2?= =?utf-8?B?SUpWN0NTdUozL0pvaFdRNzN4VXlubHROaDI1Qy80Mkpqc0g2ZlF3ZjhEYkRm?= =?utf-8?B?eENtK2VJYldINGRpZnY0QVBNZjhOMVdLK0JDN2V3OGx5MWRYRFVCWjUzRkk0?= =?utf-8?B?QnB4cGY5Y2hKc2VMWmdtV01yNzNDK2pwNmYxUnpjQkNwZUxQWDY2OW53S1Vm?= =?utf-8?B?TjRkdlJGb2U4a2dTeUtvaVZEL2lrSjRUd1c0NHFtUi9hZm51dUVKNVdkQTd0?= =?utf-8?B?cFh6MUcxSWlNZy95aEhSWVJFbWhDVTdDU3hJL3dRdEltczlGeDk2blJYYTUw?= =?utf-8?B?K0JRaHBDeDhDUTBJbHBiWlFHZjRHWUlaamRXMVFQMTFjY1VTR2w5SGxqMGtY?= =?utf-8?B?STVFUnJCc3h5cFBqb3hUK1R5UWtVM3BVL1JtQ2ZldXNhNTQ4anJ4MjMxcWt1?= =?utf-8?B?UnJ3dm5ST2VYMUFUR0RFeGJvOGNtcFlkOGgzZHVjQzVZNVJka01aclovUUd0?= =?utf-8?B?ODU2d01RSDNvWTI3UVJLQjF0OHYwdWFEWkVZYnQxMG9mM2F6SkRlcm1KeFV0?= =?utf-8?B?THZwd0hXdWt5TmdWVTdqS3dqdENzdmIrSDBVVWVYSExWa2pWUSs1emd1ak9X?= =?utf-8?B?Mkx2VXdxeXllTnY5cHE3WlFXT1RaQTJ5OHFXSkk2SFByVmhJSDhyODhDRUdm?= =?utf-8?B?ZndpWTRFVThDYS9YaEU3YUVwRDAxeXhxS0dxayttR21URlRIZ0s0OTNONUlu?= =?utf-8?B?MUtUSmxMRGhod1psNk1xOFQ0Y09BT3d5YjdYZXg0V0xVY3pSY3FlWUg1L1Yy?= =?utf-8?B?blFRbmgzWE1xM1pOT2N6T3ZWUXpvZE1qb1NQa3hBYmFDaG5MVEo1MHAyTkpV?= =?utf-8?B?bElqVXYzSWpuNlRaTDgyaXJMMVZDTlZkSmtGRlU4aG5SVXB5YlFOa1ZQSXo2?= =?utf-8?B?R0drQ2R0bGJHOTlOamFrR0owaTNVZDhENFRVNWZ3VlJIbUhleTVyQVhPQTNT?= =?utf-8?B?U2kwOWtMQk5wamgyaHRkRGREQTMzMFkvOGwxOXVDeC94OFZwWXh6NkxlVDNI?= =?utf-8?B?NzJHb1dTRGpNbTFsRHY2ZnJxeXdOU1AveHVQVUN3M0pCZEZTMXhvL2x3WGll?= =?utf-8?B?Y2FzaWVSK2hmTElBcG9ZUWlocmlPS1ZmNGc3eitzT3MxK1c1WmNiUUEzMFNt?= =?utf-8?B?cnBQWkZlN0pueEJvWUdZdnFhMHJ6U2xNRmF3NXQzWlJMWlZyVjdIdmZ5cHRP?= =?utf-8?B?M01ZdlZuem5VZ3c4cVdPdSt0eVlrYkZGejMvbEE3L1liZWcwNE5iRCtaU0RS?= =?utf-8?B?Q3kvZnFxVnY1T3ZpbS92WTRrWFJ3b3ZRUFB2YjBmNUlBUGtHM2w2Umc1K0Mx?= =?utf-8?B?cUJjU3B4QWZ0RWMwRFg3VThhZ0paYWZUN21abGtFRU0yb0xjQUxTNjE3dzB5?= =?utf-8?B?c2lVQjhsZVhLT2ZJUnVTanhkNnJRU1d5VzlPaWxtcGR0cHJpVHVHd093PT0=?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 397129a9-892e-480f-6f36-08dc3ac9ecf5 X-MS-Exchange-CrossTenant-AuthSource: AS8P250MB0744.EURP250.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Mar 2024 15:03:31.9544 (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: DB9P250MB0523 Subject: Re: [FFmpeg-devel] [PATCH v4 1/3] avformat/flvdec: support enhanced flv PacketTypeMetadata 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: zhupengfei via ffmpeg-devel: > From: Zhu Pengfei <411294962@qq.com> > > Signed-off-by: Zhu Pengfei <411294962@qq.com> > --- > libavformat/flvdec.c | 178 ++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 177 insertions(+), 1 deletion(-) > > diff --git a/libavformat/flvdec.c b/libavformat/flvdec.c > index e25b5bd163..d0806c5338 100644 > --- a/libavformat/flvdec.c > +++ b/libavformat/flvdec.c > @@ -34,6 +34,7 @@ > #include "libavutil/intfloat.h" > #include "libavutil/intreadwrite.h" > #include "libavutil/mathematics.h" > +#include "libavutil/mastering_display_metadata.h" Order it alphabetically (for the muxer, too). > #include "avformat.h" > #include "demux.h" > #include "internal.h" > @@ -45,6 +46,28 @@ > > #define MAX_DEPTH 16 ///< arbitrary limit to prevent unbounded recursion > > +typedef struct FLVMasteringMeta { > + double r_x; > + double r_y; > + double g_x; > + double g_y; > + double b_x; > + double b_y; > + double white_x; > + double white_y; > + double max_luminance; > + double min_luminance; > +} FLVMasteringMeta; > + > +typedef struct FLVMetaVideoColor { > + uint64_t matrix_coefficients; > + uint64_t transfer_characteristics; > + uint64_t primaries; > + uint64_t max_cll; > + uint64_t max_fall; > + FLVMasteringMeta mastering_meta; > +} FLVMetaVideoColor; > + > typedef struct FLVContext { > const AVClass *class; ///< Class for private options. > int trust_metadata; ///< configure streams according onMetaData > @@ -80,6 +103,8 @@ typedef struct FLVContext { > int64_t time_offset; > int64_t time_pos; > > + FLVMetaVideoColor *metaVideoColor; > + int meta_color_info_flag; > } FLVContext; > > /* AMF date type */ > @@ -524,6 +549,7 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, > FLVContext *flv = s->priv_data; > AVIOContext *ioc; > AMFDataType amf_type; > + FLVMetaVideoColor *meta_video_color = flv->metaVideoColor; > char str_val[1024]; > double num_val; > amf_date date; > @@ -672,6 +698,43 @@ static int amf_parse_object(AVFormatContext *s, AVStream *astream, > } > } > > + if (meta_video_color) { > + if (amf_type == AMF_DATA_TYPE_NUMBER || > + amf_type == AMF_DATA_TYPE_BOOL) { > + if (!strcmp(key, "colorPrimaries")) { > + meta_video_color->primaries = num_val; > + } else if (!strcmp(key, "transferCharacteristics")) { > + meta_video_color->transfer_characteristics = num_val; > + } else if (!strcmp(key, "matrixCoefficients")) { > + meta_video_color->matrix_coefficients = num_val; > + } else if (!strcmp(key, "maxFall")) { > + meta_video_color->max_fall = num_val; > + } else if (!strcmp(key, "maxCLL")) { > + meta_video_color->max_cll = num_val; > + } else if (!strcmp(key, "redX")) { > + meta_video_color->mastering_meta.r_x = num_val; > + } else if (!strcmp(key, "redY")) { > + meta_video_color->mastering_meta.r_y = num_val; > + } else if (!strcmp(key, "greenX")) { > + meta_video_color->mastering_meta.g_x = num_val; > + } else if (!strcmp(key, "greenY")) { > + meta_video_color->mastering_meta.g_y = num_val; > + } else if (!strcmp(key, "blueX")) { > + meta_video_color->mastering_meta.b_x = num_val; > + } else if (!strcmp(key, "blueY")) { > + meta_video_color->mastering_meta.b_y = num_val; > + } else if (!strcmp(key, "whitePointX")) { > + meta_video_color->mastering_meta.white_x = num_val; > + } else if (!strcmp(key, "whitePointY")) { > + meta_video_color->mastering_meta.white_y = num_val; > + } else if (!strcmp(key, "maxLuminance")) { > + meta_video_color->mastering_meta.max_luminance = num_val; > + } else if (!strcmp(key, "minLuminance")) { > + meta_video_color->mastering_meta.min_luminance = num_val; > + } > + } > + } > + > if (amf_type == AMF_DATA_TYPE_OBJECT && s->nb_streams == 1 && > ((!apar && !strcmp(key, "audiocodecid")) || > (!vpar && !strcmp(key, "videocodecid")))) > @@ -824,6 +887,7 @@ static int flv_read_close(AVFormatContext *s) > av_freep(&flv->new_extradata[i]); > av_freep(&flv->keyframe_times); > av_freep(&flv->keyframe_filepositions); > + av_freep(&flv->metaVideoColor); > return 0; > } > > @@ -1028,6 +1092,104 @@ static int resync(AVFormatContext *s) > return AVERROR_EOF; > } > > +static int flv_parse_video_color_info(AVFormatContext *s, AVStream *st, int64_t next_pos) > +{ > + FLVContext *flv = s->priv_data; > + AMFDataType type; > + AVIOContext *ioc; > + char buffer[32]; > + ioc = s->pb; > + > + // first object needs to be "colorInfo" string > + type = avio_r8(ioc); > + if (type != AMF_DATA_TYPE_STRING || > + amf_get_string(ioc, buffer, sizeof(buffer)) < 0) > + return TYPE_UNKNOWN; > + > + if (strcmp(buffer, "colorInfo")) { > + av_log(s, AV_LOG_DEBUG, "Unknown type %s\n", buffer); > + return TYPE_UNKNOWN; > + } > + > + flv->metaVideoColor = av_mallocz(sizeof(FLVMetaVideoColor)); Why is this thing separately allocated? > + if (!flv->metaVideoColor) { > + return AVERROR(ENOMEM); > + } > + flv->meta_color_info_flag = 1; > + amf_parse_object(s, NULL, NULL, buffer, next_pos, 0); // parse metadata > + return 0; > +} > + > +static int flv_update_video_color_info(AVFormatContext *s, AVStream *st) > +{ > + FLVContext *flv = s->priv_data; > + const FLVMetaVideoColor* meta_video_color = flv->metaVideoColor; > + const FLVMasteringMeta *mastering_meta = &meta_video_color->mastering_meta; > + > + int has_mastering_primaries, has_mastering_luminance; > + // Mastering primaries are CIE 1931 coords, and must be > 0. > + has_mastering_primaries = > + mastering_meta->r_x > 0 && mastering_meta->r_y > 0 && > + mastering_meta->g_x > 0 && mastering_meta->g_y > 0 && > + mastering_meta->b_x > 0 && mastering_meta->b_y > 0 && > + mastering_meta->white_x > 0 && mastering_meta->white_y > 0; > + has_mastering_luminance = mastering_meta->max_luminance > 0 && mastering_meta->min_luminance > 0; > + > + if (meta_video_color->matrix_coefficients != AVCOL_SPC_RESERVED) > + st->codecpar->color_space = meta_video_color->matrix_coefficients; > + if (meta_video_color->primaries != AVCOL_PRI_RESERVED && > + meta_video_color->primaries != AVCOL_PRI_RESERVED0) > + st->codecpar->color_primaries = meta_video_color->primaries; > + if (meta_video_color->transfer_characteristics != AVCOL_TRC_RESERVED && > + meta_video_color->transfer_characteristics != AVCOL_TRC_RESERVED0) > + st->codecpar->color_trc = meta_video_color->transfer_characteristics; > + > + if (meta_video_color->max_cll && meta_video_color->max_fall) { > + size_t size = 0; > + AVContentLightMetadata *metadata = av_content_light_metadata_alloc(&size); > + if (!metadata) > + return AVERROR(ENOMEM); > + if (!av_packet_side_data_add(&st->codecpar->coded_side_data, &st->codecpar->nb_coded_side_data, > + AV_PKT_DATA_CONTENT_LIGHT_LEVEL, metadata, size, 0)) { > + av_freep(&metadata); > + return AVERROR(ENOMEM); > + } > + metadata->MaxCLL = meta_video_color->max_cll; > + metadata->MaxFALL = meta_video_color->max_fall; > + } > + > + if (has_mastering_primaries || has_mastering_luminance) { > + AVMasteringDisplayMetadata *metadata; > + AVPacketSideData *sd = av_packet_side_data_new(&st->codecpar->coded_side_data, > + &st->codecpar->nb_coded_side_data, > + AV_PKT_DATA_MASTERING_DISPLAY_METADATA, > + sizeof(AVMasteringDisplayMetadata), 0); > + if (!sd) > + return AVERROR(ENOMEM); > + metadata = (AVMasteringDisplayMetadata*)sd->data; > + memset(metadata, 0, sizeof(AVMasteringDisplayMetadata)); > + // hdrCll > + if (has_mastering_luminance) { > + metadata->max_luminance = av_d2q(mastering_meta->max_luminance, INT_MAX); > + metadata->min_luminance = av_d2q(mastering_meta->min_luminance, INT_MAX); > + metadata->has_luminance = 1; > + } > + // hdrMdcv > + if (has_mastering_primaries) { > + metadata->display_primaries[0][0] = av_d2q(mastering_meta->r_x, INT_MAX); > + metadata->display_primaries[0][1] = av_d2q(mastering_meta->r_y, INT_MAX); > + metadata->display_primaries[1][0] = av_d2q(mastering_meta->g_x, INT_MAX); > + metadata->display_primaries[1][1] = av_d2q(mastering_meta->g_y, INT_MAX); > + metadata->display_primaries[2][0] = av_d2q(mastering_meta->b_x, INT_MAX); > + metadata->display_primaries[2][1] = av_d2q(mastering_meta->b_y, INT_MAX); > + metadata->white_point[0] = av_d2q(mastering_meta->white_x, INT_MAX); > + metadata->white_point[1] = av_d2q(mastering_meta->white_y, INT_MAX); > + metadata->has_primaries = 1; > + } > + } > + return 0; > +} > + > static int flv_read_packet(AVFormatContext *s, AVPacket *pkt) > { > FLVContext *flv = s->priv_data; > @@ -1100,8 +1262,17 @@ retry: > video_codec_id = avio_rb32(s->pb); > size -= 4; > } > - if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_VIDEO_INFO_CMD) > + > + if (enhanced_flv && stream_type == FLV_STREAM_TYPE_VIDEO && (flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_VIDEO_INFO_CMD) { > + type = flags & 0x0F; > + if (type == PacketTypeMetadata) { > + int ret = flv_parse_video_color_info(s, st, next); > + av_log(s, AV_LOG_DEBUG, "enhanced flv parse metadata ret %d and skip\n", ret); > + } > + goto skip; > + } else if ((flags & FLV_VIDEO_FRAMETYPE_MASK) == FLV_FRAME_VIDEO_INFO_CMD) { > goto skip; > + } > } else if (type == FLV_TAG_TYPE_META) { > stream_type=FLV_STREAM_TYPE_SUBTITLE; > if (size > 13 + 1 + 4) { // Header-type metadata stuff > @@ -1287,6 +1458,11 @@ retry_duration: > goto leave; > } > > + if (enhanced_flv && stream_type == FLV_STREAM_TYPE_VIDEO && flv->meta_color_info_flag) { > + flv_update_video_color_info(s, st); // update av packet side data > + flv->meta_color_info_flag = 0; > + } > + > if (st->codecpar->codec_id == AV_CODEC_ID_H264 || st->codecpar->codec_id == AV_CODEC_ID_MPEG4 || > (st->codecpar->codec_id == AV_CODEC_ID_HEVC && type == PacketTypeCodedFrames)) { > // sign extension _______________________________________________ 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".