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 D135740EB7 for ; Sat, 1 Jan 2022 01:30:27 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2AF2F68B055; Sat, 1 Jan 2022 03:30:24 +0200 (EET) Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05olkn2105.outbound.protection.outlook.com [40.92.91.105]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 564BC68B02B for ; Sat, 1 Jan 2022 03:30:18 +0200 (EET) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=O0DGhNkw8EJpGkvoYxbfBo4sfH0BkJPCY5S3Tk1f1zItLXzxdjePr5yIBpPIwN7/UOBIhve7jhdbc0+8oFaecx/XzX/sIFwlYaybzf6Wqu4xNuie2RENhxLNN683EQDypdtK95z85mAFcynN6JTy9tSidA29XGYD8tLjq9SYYa7Nr1PVRT3iJnGm1jtC9MumYN0F2Y6CjXX9Wt8ZmMKfmZjj873GD8q5Bw51oKNO0WDVfHrRZ1NP6Qgo+A5B4rg/66/JSQFnlftOrSCkJgy4Og+s7WmGd3FbfacIBM9iRfqgYKjxZhZoVkfp/MhiuY3Q7nQtiQEqwIJ4mNCZ+/gpSw== 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=xJmW+1hUwz+IfHApnncaEu9IYEihaK1TjKJ+hHg0yIc=; b=fn9Z3NC5j1olRKxfJozwujgy4iPy73xdUr+e5EoaZsJHzPasZupEm7/eQ0Yj6rMg37WQaleYl+OQH1yRRtHHE7yMuBcTgHzkWr7uE+8k+3eBcQCh0sE7tGfBXm7zkwKCcKIjwsS57GsBohIxDXOphK4SIcjW0e+Whn4aoQj+nlQbi3wD1UHKbI6RMHPzo3X7v6c+OaH4G/3O4BgYBitMYZTH4Mn7blBb1SFMuj3EyntJiB3mUCnP0wnBfnmo8VAxksWxnHK69rGPIkL+Kellnf+AwQYKd4xmulLVMx/FECVvFRoNquTrwRhrzWlQXDM6Ls+PqS5I6BiB/Ol1kCuwyQ== 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=xJmW+1hUwz+IfHApnncaEu9IYEihaK1TjKJ+hHg0yIc=; b=T3XLdU1I7p03T7et/ZxAprw51IyvDZyDjj52ihjnbiW2sVv8i+/Pz2A7hLk3noyuqU1P1iSBeaxQudOGzTD80TxRZz6XlYKSWu0vrjC3SX2dhx+teHfSNR4a8rU9KHNwCtUmS9254+sKHmI9QOIqKEa38Esexhkvi2hIor+fOpAvAXPhQMbRGtFSxaSP+DzEb7rVoSxtgK1ytOcyueolChg3M9Sa+K++qovZmxVBKn8+BYg11NrMEEoBc2R6S2IOyHMk0nXt5vMGRD4jHS8dpuq4pv8kbzD24k2CcFXFSPl8aRF/Vpz+wKMwUxQGHIDZQ5Ru8xKqju4KhnMQJOXFAA== Received: from AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) by AM6PR03MB4776.eurprd03.prod.outlook.com (2603:10a6:20b:9::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4823.18; Sat, 1 Jan 2022 01:30:16 +0000 Received: from AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5]) by AM7PR03MB6660.eurprd03.prod.outlook.com ([fe80::19fc:be9f:2c9c:53f5%6]) with mapi id 15.20.4844.015; Sat, 1 Jan 2022 01:30:16 +0000 Message-ID: Date: Sat, 1 Jan 2022 02:30:15 +0100 Content-Language: en-US To: ffmpeg-devel@ffmpeg.org References: <20211214153001.2610297-1-tcChlisop0@gmail.com> <20211214153001.2610297-3-tcChlisop0@gmail.com> From: Andreas Rheinhardt In-Reply-To: <20211214153001.2610297-3-tcChlisop0@gmail.com> X-TMN: [RbrL78PngvvKg1zO1/zLIPlgKTU4DAia] X-ClientProxiedBy: AM6PR0202CA0055.eurprd02.prod.outlook.com (2603:10a6:20b:3a::32) To AM7PR03MB6660.eurprd03.prod.outlook.com (2603:10a6:20b:1c1::22) X-Microsoft-Original-Message-ID: <1af9d7cf-f347-6798-6a0e-836cf1578109@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 016dff94-59b3-44d7-86b9-08d9ccc643d9 X-MS-TrafficTypeDiagnostic: AM6PR03MB4776:EE_ X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 0l9AdOEnIghKlOCcc1L1NLz1dnGEZMYEaQO5HrDM/WfrTL38d9aw2Lks37r6OKF/tD5hvWnmf9dLDrBP/r10VKd2i1K6ItdHzL0DL/3nLjwll0DcJkfrzY3iApNf/RI/60MuaCAyr+lO+STX8XLWXWki0LFE66Do443v4kwEs8M9w6+DVKytTpaOAUKFCJrObM3Cjuo3OkZueP++6Q8B33wR523RN3o/rCF8mTkorflwLXyXzyAgThIqF6/2VBbIlxeHjqdnMshiRcuffozjLaXzRRSHa+7azap6H3jt8xV8D38dFpGNUvuOAldH72EynlaEmW2zErkDndlm6w7ZzFbg3Ul6N2qlTLMIAxAzL+P9L6TeVSFjLxtBMgiknlk8y4kgX20EaYmFnQjEuRB48WPTstvIuo4d/9Z4SEUrzgxkLSRS9HXIESQjeyBfOZk0i5zm4Vc3/XdggpjywAhaLIrHpaEcvRb7kTERtdtbcsTAGcWpMxzoaINF7VW76JJk+id6hgB9G9sWw6kympdZwMkAn5ZAZBBN/9BtDTDoyrSqz2/GkIU3tYi0P/8hjJXecZLDRcvQ3RmW0GTDSrcB0g== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WDUxQTRWS0h3NE5GS0dVMlZIb2ltalZNOGY3MUEzNm1rUlZXZkw3Sm4rOENV?= =?utf-8?B?Q05iZVoyZFFWRENNa2pWaERSb05hQlJMUU9Ra25FOVI2MGcrWmlPRFFUakpp?= =?utf-8?B?RXR5MTJVaDZ0cFIyL0p0dWZpRXB5TTZlN2ZZZXkxeHBrNnl3d29vUll1N21k?= =?utf-8?B?NUxqYnpKK0J1S2Y2YUUzdHZqck45aVdCS21JWHd2OHQwMEZ4dnRVV3gvU3Ix?= =?utf-8?B?U2ZEQ0dYTnFYa3BCOHR3b2NOWVAwb09rOHNsRFZsQWQ5NTVZUjd3blkzTlhq?= =?utf-8?B?cmEyREwxZ1JobENDRzRVeFZidDJOOUtybVA5SzBHZnQ5UGYyOTVBRis4RHQ2?= =?utf-8?B?TnNaY3Zqa0ZwWFVjY0prZk5wWTVsMCt5SGZOaDVVRCsybEZwZkZuUTI4bGtz?= =?utf-8?B?UTQ1Q1llSEIvdTd2ME9NMU5lNEYzQTFQYlRnQ29QV2xDcW1NMGk2OVlFTExa?= =?utf-8?B?WWJsQjNySFd5ZFZrNUhtTjZTSGxXeFRwd1Z3WGZGekMwU3N6azl0elMrVUJ1?= =?utf-8?B?cXVzbHVLU1VTbjBIdFVLM0hpTDR0ZE5XdXdYbXhjODYvekRkcGhObEt0VkUy?= =?utf-8?B?UzVGb2VVRXZLeWg4RGVPL3FJTURnNEdqS2wvNGUyeEZsUmxTdWFSSnNRMUFU?= =?utf-8?B?YXNQREdqT29sdVpFMmtvNWJGSlpwWUhNWTVSRjUvOEgzMm1hLzFnVXI3VzZh?= =?utf-8?B?cThXakI3WCtqaHpzTEZMaFhYMm9IUlVWTEFHWkxrbWxQOXNhRTYrajFCUFZE?= =?utf-8?B?MWJZQ25xYmh1elg2RkJ1YkE0dDFkK2VvNDNBVUwzYzNuVGpMeTg5K3E2ckpL?= =?utf-8?B?T3B2Vm8yZ0ROMzFVUzNta1hjMEIwUzRoWnBCVnZ3bEQzN2U0d3FaVS9OdGZ0?= =?utf-8?B?Rk04c2krV1JMYnhXZ25jeGYranFUZnV3N0tjOGcvYTJQS0hOQVhyT0NKdG5O?= =?utf-8?B?TTk4dTE5a25vZXBtK0IwMGpXaENqSVc1U2VUclFjY2dQOXBldVdvMXhnaWgy?= =?utf-8?B?cXo4RGpHQVJQSTlIWUticC9PcUNyTG9lVytPQmxrZERnVXpLRDhCenJoNlpw?= =?utf-8?B?bm42SjdWWUgwTGRHazRtbFIwQ2ZHS0RVYlE4UkRpOFNSZHVSTVAwR1BNeVRJ?= =?utf-8?B?TWIva3FEdkR6L0hQdHNEdys5OGg3YU9ldzdFOHQ3R0RzMGRQY3I0NDRjYXRF?= =?utf-8?B?QnNxNWRISkVCbmNlNnRZMXQ4akd4dVFsdFdETXhRNXM5b3VVaW10OFBnRHVt?= =?utf-8?B?NldvMGhCOGJHZ211M1ZQY0RIaENWWTY0YjM5WnZwUndJMDcwdz09?= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 016dff94-59b3-44d7-86b9-08d9ccc643d9 X-MS-Exchange-CrossTenant-AuthSource: AM7PR03MB6660.eurprd03.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Jan 2022 01:30:16.5578 (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: AM6PR03MB4776 Subject: Re: [FFmpeg-devel] [PATCH v10 2/5] avformat/matroska{dec, enc}: Parse BlockAdditionMapping elements 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: quietvoid: > Adds handling of dvcC/dvvC block addition mappings. > > The parsing creates AVDOVIDecoderConfigurationRecord side data. > The configuration block is written when muxing into Matroska, > if DOVI side data is present for the track. > > Most of the Matroska element parsing is based on Plex's FFmpeg source code. > > Signed-off-by: quietvoid > --- > libavformat/Makefile | 4 +-- > libavformat/matroska.h | 9 ++++++ > libavformat/matroskadec.c | 58 +++++++++++++++++++++++++++++++++++++-- > libavformat/matroskaenc.c | 37 +++++++++++++++++++++++++ > 4 files changed, 104 insertions(+), 4 deletions(-) > > diff --git a/libavformat/Makefile b/libavformat/Makefile > index 2b5caf9d33..bd12562a24 100644 > --- a/libavformat/Makefile > +++ b/libavformat/Makefile > @@ -314,11 +314,11 @@ OBJS-$(CONFIG_M4V_MUXER) += rawenc.o > OBJS-$(CONFIG_MATROSKA_DEMUXER) += matroskadec.o matroska.o \ > flac_picture.o isom_tags.o rmsipr.o \ > oggparsevorbis.o vorbiscomment.o \ > - qtpalette.o replaygain.o > + qtpalette.o replaygain.o dovi_isom.o > OBJS-$(CONFIG_MATROSKA_MUXER) += matroskaenc.o matroska.o \ > av1.o avc.o hevc.o isom_tags.o \ > flacenc_header.o avlanguage.o \ > - vorbiscomment.o wv.o > + vorbiscomment.o wv.o dovi_isom.o > OBJS-$(CONFIG_MCA_DEMUXER) += mca.o > OBJS-$(CONFIG_MCC_DEMUXER) += mccdec.o subtitles.o > OBJS-$(CONFIG_MD5_MUXER) += hashenc.o > diff --git a/libavformat/matroska.h b/libavformat/matroska.h > index 2d04a6838b..16491aae22 100644 > --- a/libavformat/matroska.h > +++ b/libavformat/matroska.h > @@ -111,6 +111,7 @@ > #define MATROSKA_ID_TRACKCONTENTENCODING 0x6240 > #define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F > #define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE > +#define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4 > > /* IDs in the trackvideo master */ > #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3 > @@ -189,6 +190,12 @@ > #define MATROSKA_ID_ENCODINGSIGKEYID 0x47E4 > #define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3 > > +/* IDs in the block addition mapping master */ > +#define MATROSKA_ID_BLKADDIDVALUE 0x41F0 > +#define MATROSKA_ID_BLKADDIDNAME 0x41A4 > +#define MATROSKA_ID_BLKADDIDTYPE 0x41E7 > +#define MATROSKA_ID_BLKADDIDEXTRADATA 0x41ED > + > /* ID in the cues master */ > #define MATROSKA_ID_POINTENTRY 0xBB > > @@ -385,4 +392,6 @@ extern const char * const ff_matroska_video_stereo_plane[MATROSKA_VIDEO_STEREO_P > > int ff_mkv_stereo3d_conv(AVStream *st, MatroskaVideoStereoModeType stereo_mode); > > +#define DVCC_DVVC_BLOCK_TYPE_NAME "Dolby Vision configuration" > + > #endif /* AVFORMAT_MATROSKA_H */ > diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c > index a4bbbe954e..6ce553205d 100644 > --- a/libavformat/matroskadec.c > +++ b/libavformat/matroskadec.c > @@ -53,6 +53,7 @@ > > #include "avformat.h" > #include "avio_internal.h" > +#include "dovi_isom.h" > #include "internal.h" > #include "isom.h" > #include "matroska.h" > @@ -239,6 +240,13 @@ typedef struct MatroskaTrackOperation { > EbmlList combine_planes; > } MatroskaTrackOperation; > > +typedef struct MatroskaBlockAdditionMapping { > + uint64_t value; > + char *name; > + uint64_t type; > + EbmlBin extradata; > +} MatroskaBlockAdditionMapping; > + > typedef struct MatroskaTrack { > uint64_t num; > uint64_t uid; > @@ -269,6 +277,7 @@ typedef struct MatroskaTrack { > int ms_compat; > int needs_decoding; > uint64_t max_block_additional_id; > + EbmlList block_addition_mappings; > > uint32_t palette[AVPALETTE_COUNT]; > int has_palette; > @@ -419,8 +428,8 @@ typedef struct MatroskaDemuxContext { > // incomplete type (6.7.2 in C90, 6.9.2 in C99). > // Removing the sizes breaks MSVC. > static EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_track_video_color[15], matroska_track_video[19], > - matroska_track[32], matroska_track_encoding[6], matroska_track_encodings[2], > - matroska_track_combine_planes[2], matroska_track_operation[2], matroska_tracks[2], > + matroska_track[33], matroska_track_encoding[6], matroska_track_encodings[2], > + matroska_track_combine_planes[2], matroska_track_operation[2], matroska_block_addition_mapping[5], matroska_tracks[2], > matroska_attachments[2], matroska_chapter_entry[9], matroska_chapter[6], matroska_chapters[2], > matroska_index_entry[3], matroska_index[2], matroska_tag[3], matroska_tags[2], matroska_seekhead[2], > matroska_blockadditions[2], matroska_blockgroup[8], matroska_cluster_parsing[8]; > @@ -570,6 +579,14 @@ static EbmlSyntax matroska_track_operation[] = { > CHILD_OF(matroska_track) > }; > > +static EbmlSyntax matroska_block_addition_mapping[] = { > + { MATROSKA_ID_BLKADDIDVALUE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, value) }, > + { MATROSKA_ID_BLKADDIDNAME, EBML_STR, 0, 0, offsetof(MatroskaBlockAdditionMapping, name) }, > + { MATROSKA_ID_BLKADDIDTYPE, EBML_UINT, 0, 0, offsetof(MatroskaBlockAdditionMapping, type) }, > + { MATROSKA_ID_BLKADDIDEXTRADATA, EBML_BIN, 0, 0, offsetof(MatroskaBlockAdditionMapping, extradata) }, > + CHILD_OF(matroska_track) > +}; > + > static EbmlSyntax matroska_track[] = { > { MATROSKA_ID_TRACKNUMBER, EBML_UINT, 0, 0, offsetof(MatroskaTrack, num) }, > { MATROSKA_ID_TRACKNAME, EBML_UTF8, 0, 0, offsetof(MatroskaTrack, name) }, > @@ -593,6 +610,7 @@ static EbmlSyntax matroska_track[] = { > { MATROSKA_ID_TRACKOPERATION, EBML_NEST, 0, 0, offsetof(MatroskaTrack, operation), { .n = matroska_track_operation } }, > { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST, 0, 0, 0, { .n = matroska_track_encodings } }, > { MATROSKA_ID_TRACKMAXBLKADDID, EBML_UINT, 0, 0, offsetof(MatroskaTrack, max_block_additional_id), { .u = 0 } }, > + { MATROSKA_ID_TRACKBLKADDMAPPING, EBML_NEST, 0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } }, > { MATROSKA_ID_SEEKPREROLL, EBML_UINT, 0, 0, offsetof(MatroskaTrack, seek_preroll), { .u = 0 } }, > { MATROSKA_ID_TRACKFLAGENABLED, EBML_NONE }, > { MATROSKA_ID_TRACKFLAGLACING, EBML_NONE }, > @@ -2311,6 +2329,38 @@ static int mkv_parse_video_projection(AVStream *st, const MatroskaTrack *track, > return 0; > } > > +static int mkv_parse_dvcc_dvvc(AVFormatContext *s, AVStream *st, const MatroskaTrack *track, > + EbmlBin *bin) > +{ > + return ff_isom_parse_dvcc_dvvc(s, st, bin->data, bin->size); > +} > + > +static int mkv_parse_block_addition_mappings(AVFormatContext *s, AVStream *st, const MatroskaTrack *track) > +{ > + const EbmlList *mappings_list = &track->block_addition_mappings; > + MatroskaBlockAdditionMapping *mappings = mappings_list->elem; > + int ret; > + > + for (int i = 0; i < mappings_list->nb_elem; i++) { > + MatroskaBlockAdditionMapping *mapping = &mappings[i]; > + > + switch (mapping->type) { > + case MKBETAG('d','v','c','C'): > + case MKBETAG('d','v','v','C'): > + if ((ret = mkv_parse_dvcc_dvvc(s, st, track, &mapping->extradata)) < 0) > + return ret; > + > + break; > + default: > + av_log(s, AV_LOG_DEBUG, > + "Unknown block additional mapping type 0x%"PRIx64", value %"PRIu64", name \"%s\"\n", > + mapping->type, mapping->value, mapping->name ? mapping->name : ""); > + } > + } > + > + return 0; > +} > + > static int get_qt_codec(MatroskaTrack *track, uint32_t *fourcc, enum AVCodecID *codec_id) > { > const AVCodecTag *codec_tags; > @@ -2898,6 +2948,10 @@ static int matroska_parse_tracks(AVFormatContext *s) > if (track->flag_textdescriptions) > st->disposition |= AV_DISPOSITION_DESCRIPTIONS; > } > + > + ret = mkv_parse_block_addition_mappings(s, st, track); > + if (ret < 0) > + return ret; > } > > return 0; > diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c > index 8c4cf4024a..31b7d7e171 100644 > --- a/libavformat/matroskaenc.c > +++ b/libavformat/matroskaenc.c > @@ -27,6 +27,7 @@ > #include "avformat.h" > #include "avio_internal.h" > #include "avlanguage.h" > +#include "dovi_isom.h" > #include "flacenc.h" > #include "internal.h" > #include "isom.h" > @@ -1120,6 +1121,37 @@ static int mkv_write_stereo_mode(AVFormatContext *s, AVIOContext *pb, > return 0; > } > > +static void mkv_write_dovi(AVFormatContext *s, AVIOContext *pb, AVStream *st) > +{ > + AVDOVIDecoderConfigurationRecord *dovi = (AVDOVIDecoderConfigurationRecord *) > + av_stream_get_side_data(st, AV_PKT_DATA_DOVI_CONF, NULL); > + > + if (dovi) { > + ebml_master mapping; > + uint8_t buf[ISOM_DVCC_DVVC_SIZE]; > + uint32_t type; > + > + uint64_t expected_size = (2 + 1 + (sizeof(DVCC_DVVC_BLOCK_TYPE_NAME) - 1)) > + + (2 + 1 + 4) + (2 + 1 + ISOM_DVCC_DVVC_SIZE); > + > + if (dovi->dv_profile > 7) { > + type = MKBETAG('d', 'v', 'v', 'C'); > + } else { > + type = MKBETAG('d', 'v', 'c', 'C'); > + } This here is wrong, as dv_profiles > 10 need dvwC, which is currently not supported in Matroska. The above check should be adapted to "dovi && dovi->dv_profile <= 10". > + > + ff_isom_put_dvcc_dvvc(s, buf, dovi); > + > + mapping = start_ebml_master(pb, MATROSKA_ID_TRACKBLKADDMAPPING, expected_size); > + > + put_ebml_string(pb, MATROSKA_ID_BLKADDIDNAME, DVCC_DVVC_BLOCK_TYPE_NAME); > + put_ebml_uint(pb, MATROSKA_ID_BLKADDIDTYPE, type); > + put_ebml_binary(pb, MATROSKA_ID_BLKADDIDEXTRADATA, buf, sizeof(buf)); > + > + end_ebml_master(pb, mapping); > + } > +} > + > static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, > AVStream *st, mkv_track *track, AVIOContext *pb, > int is_default) > @@ -1319,6 +1351,11 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv, > mkv_write_video_projection(s, pb, st); > > end_ebml_master(pb, subinfo); > + > + if (mkv->mode != MODE_WEBM) { > + mkv_write_dovi(s, pb, st); > + } > + > break; > > case AVMEDIA_TYPE_AUDIO: > _______________________________________________ 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".