From patchwork Sun Nov 6 15:08:54 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Steve Lhomme X-Patchwork-Id: 39206 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a05:6a21:999a:b0:a4:2148:650a with SMTP id ve26csp1600203pzb; Sun, 6 Nov 2022 07:10:59 -0800 (PST) X-Google-Smtp-Source: AMsMyM7XqJiU/wqfTUcvuOLmDOP1qK3hdfNZJhywck2jspmWt6kjz68lqIVRBDQ6KvYp4Gas37au X-Received: by 2002:a50:ed82:0:b0:461:ab45:df1a with SMTP id h2-20020a50ed82000000b00461ab45df1amr45512645edr.295.1667747459575; Sun, 06 Nov 2022 07:10:59 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1667747459; cv=none; d=google.com; s=arc-20160816; b=QxDih6p1/Pm6KWEHAly0GGBusujhuV1Pl212rH2GVpoPIjG3tdZC+N6O/2KnhktX8Q uXMgor2caDYefplZf7rMWZcJnk3iMilhyNQUP82511JmYylD/lPK8qDhL7TIzKTd8Xfp CrDH9AK6hI6SlXC4xmAXKGgIRqFasugWs3H1uigsS2L/wFedYYTlcHdcNKcXEwNIEq8o 3wcIZpjxVLu9yjLwrRqDv0G1rgz3Oxx7UwRJA4PFkeRBcUZHPYwYV8yDNtQXaf+GOTuv 3WkYv7XOUD6lV9O48sESq2LY20BAV5P3r2zkKcDaP9uRJtnUfEuzPOx8LwZ4RP8VmQAw 1Yig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:reply-to:list-subscribe :list-help:list-post:list-archive:list-unsubscribe:list-id :precedence:subject:mime-version:references:in-reply-to:message-id :date:to:from:delivered-to; bh=brXdQ3ZKWwXJb88cMApvrZlEKR050E0J+EIiqqF6vN8=; b=yhyRiBD55UEPcb3nR/wuC5vnviyRngE0cHU0Fil7ctGmhi9EdoQfnUugMi94o9zu/b g3shGEEGkPi/+Dq+UjDgzDaT2XlKU5u9+vqnKWfp9rEEjKLCahjQwLASPJ8RL8yW93Hl eOBpDl4qc9e2CIxqJ/kXrzdn6iqa9AxfmOIffL0qB8upnN+mlGLF5IOTeOSuZVnupkFO p//8rKujhL19MyfcyE5vsmVA6btlkRAygkUMvr2LRcSM9EnpKagWEgiqXt+A6a+znF2/ T6o2DUASPbKWJmF2sGWh7OaP9ROb0RybmDmf6R4ge0sx5ayiSQTl7b9T7F0e46uVR8xi 7H6A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id qw12-20020a1709066a0c00b007a39ad3da43si6597066ejc.714.2022.11.06.07.10.59; Sun, 06 Nov 2022 07:10:59 -0800 (PST) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 7AF0D68B9A4; Sun, 6 Nov 2022 17:09:19 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mout-p-102.mailbox.org (mout-p-102.mailbox.org [80.241.56.152]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 0195368B773 for ; Sun, 6 Nov 2022 17:09:02 +0200 (EET) Received: from smtp2.mailbox.org (smtp2.mailbox.org [IPv6:2001:67c:2050:b231:465::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4N4ySD6zFWz9sR8 for ; Sun, 6 Nov 2022 16:09:00 +0100 (CET) From: Steve Lhomme To: ffmpeg-devel@ffmpeg.org Date: Sun, 6 Nov 2022 16:08:54 +0100 Message-Id: <20221106150854.9528-13-robux4@ycbcr.xyz> In-Reply-To: <20221106150854.9528-1-robux4@ycbcr.xyz> References: <20221106150854.9528-1-robux4@ycbcr.xyz> MIME-Version: 1.0 X-Rspamd-Queue-Id: 4N4ySD6zFWz9sR8 Subject: [FFmpeg-devel] [PATCH 12/12] avformat/matroska: add missing 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 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: K6qFCLvegRnQ They are not mapped into structures but the IDs and their allowed position is set properly. --- libavformat/matroska_ids.h | 93 ++++++++++++++++++++++++++++++++++++++ libavformat/matroskasem.c | 58 +++++++++++++++++++++--- libavformat/matroskasem.h | 2 +- 3 files changed, 145 insertions(+), 8 deletions(-) diff --git a/libavformat/matroska_ids.h b/libavformat/matroska_ids.h index 59dda4da9d..365ee05ad6 100644 --- a/libavformat/matroska_ids.h +++ b/libavformat/matroska_ids.h @@ -41,6 +41,13 @@ /* IDs in the info master */ #define MATROSKA_ID_TIMECODESCALE 0x2AD7B1 +#define MATROSKA_ID_SEGMENTFILENAME 0x7384 +#define MATROSKA_ID_PREVUID 0x3CB923 +#define MATROSKA_ID_PREVFILENAME 0x3C83AB +#define MATROSKA_ID_NEXTUID 0x3EB923 +#define MATROSKA_ID_NEXTFILENAME 0x3E83BB +#define MATROSKA_ID_SEGMENTFAMILY 0x4444 +#define MATROSKA_ID_CHAPTERTRANSLATE 0x6924 #define MATROSKA_ID_DURATION 0x4489 #define MATROSKA_ID_TITLE 0x7BA9 #define MATROSKA_ID_WRITINGAPP 0x5741 @@ -48,6 +55,11 @@ #define MATROSKA_ID_DATEUTC 0x4461 #define MATROSKA_ID_SEGMENTUID 0x73A4 +/* IDs in the chaptertranslate master */ +#define MATROSKA_ID_CHAPTERTRANSLATEID 0x69A5 +#define MATROSKA_ID_CHAPTERTRANSLATECODEC 0x69BF +#define MATROSKA_ID_CHAPTERTRANSLATEEDITIONUID 0x69FC + /* IDs in the tracks master */ #define MATROSKA_ID_TRACKENTRY 0xAE @@ -63,19 +75,31 @@ #define MATROSKA_ID_TRACKFLAGTEXTDESCRIPTIONS 0x55AD #define MATROSKA_ID_TRACKFLAGORIGINAL 0x55AE #define MATROSKA_ID_TRACKFLAGCOMMENTARY 0x55AF +#define MATROSKA_ID_TRACKDEFAULTDECODEDFIELDDURATION 0x234E7A #define MATROSKA_ID_TRACKTIMECODESCALE 0x23314F +#define MATROSKA_ID_TRACKOFFSET 0x537F #define MATROSKA_ID_TRACKMAXBLKADDID 0x55EE #define MATROSKA_ID_TRACKBLKADDMAPPING 0x41E4 #define MATROSKA_ID_TRACKNAME 0x536E #define MATROSKA_ID_TRACKLANGUAGE 0x22B59C +#define MATROSKA_ID_TRACKLANGUAGEIETF 0x22B59D #define MATROSKA_ID_CODECID 0x86 #define MATROSKA_ID_CODECPRIVATE 0x63A2 #define MATROSKA_ID_CODECNAME 0x258688 +#define MATROSKA_ID_TRACKATTACHMENTLINK 0x7446 +#define MATROSKA_ID_CODECSETTINGS 0x3A9697 #define MATROSKA_ID_CODECINFOURL 0x3B4040 #define MATROSKA_ID_CODECDOWNLOADURL 0x26B240 #define MATROSKA_ID_CODECDECODEALL 0xAA +#define MATROSKA_ID_TRACKOVERLAY 0x6FAB #define MATROSKA_ID_CODECDELAY 0x56AA #define MATROSKA_ID_SEEKPREROLL 0x56BB +#define MATROSKA_ID_TRACKTRANSLATE 0x6624 +#define MATROSKA_ID_TRICKTRACKUID 0xC0 +#define MATROSKA_ID_TRICKTRACKSEGMENTUID 0xC1 +#define MATROSKA_ID_TRICKTRACKFLAG 0xC6 +#define MATROSKA_ID_TRICKMASTERTRACKUID 0xC7 +#define MATROSKA_ID_TRICKMASTERTRACKSEGMENTUID 0xC4 #define MATROSKA_ID_TRACKFLAGENABLED 0xB9 #define MATROSKA_ID_TRACKFLAGDEFAULT 0x88 #define MATROSKA_ID_TRACKFLAGFORCED 0x55AA @@ -115,9 +139,11 @@ #define MATROSKA_ID_ENCODINGSIGNATURE 0x47E3 /* IDs in the contentencaessettings master */ +#define MATROSKA_ID_TRACKAESSETTINGSCIPHERMODE 0x47E8 /* IDs in the trackoperation master */ #define MATROSKA_ID_TRACKCOMBINEPLANES 0xE3 +#define MATROSKA_ID_TRACKJOINBLOCKS 0xE9 /* IDs in the trackcombineplanes master */ #define MATROSKA_ID_TRACKPLANE 0xE4 @@ -126,6 +152,14 @@ #define MATROSKA_ID_TRACKPLANEUID 0xE5 #define MATROSKA_ID_TRACKPLANETYPE 0xE6 +/* IDs in the trackjoinblocks master */ +#define MATROSKA_ID_TRACKJOINUID 0xED + +/* IDs in the tracktranslate master */ +#define MATROSKA_ID_TRACKTRANSLATETRACKID 0x66A5 +#define MATROSKA_ID_TRACKTRANSLATECODEC 0x66BF +#define MATROSKA_ID_TRACKTRANSLATEEDITIONUID 0x66FC + /* IDs in the trackvideo master */ #define MATROSKA_ID_VIDEOFRAMERATE 0x2383E3 #define MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0 @@ -141,8 +175,10 @@ #define MATROSKA_ID_VIDEOFIELDORDER 0x9D #define MATROSKA_ID_VIDEOSTEREOMODE 0x53B8 #define MATROSKA_ID_VIDEOALPHAMODE 0x53C0 +#define MATROSKA_ID_VIDEOOLDSTEREOMODE 0x53B9 #define MATROSKA_ID_VIDEOASPECTRATIO 0x54B3 #define MATROSKA_ID_VIDEOCOLORSPACE 0x2EB524 +#define MATROSKA_ID_VIDEOGAMMAVALUE 0x2FB523 #define MATROSKA_ID_VIDEOCOLOR 0x55B0 #define MATROSKA_ID_VIDEOPROJECTION 0x7670 @@ -184,6 +220,7 @@ /* IDs in the trackaudio master */ #define MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5 #define MATROSKA_ID_AUDIOOUTSAMPLINGFREQ 0x78B5 +#define MATROSKA_ID_AUDIOCHANNELPOSITIONS 0x7D7B #define MATROSKA_ID_AUDIOBITDEPTH 0x6264 #define MATROSKA_ID_AUDIOCHANNELS 0x9F @@ -200,6 +237,14 @@ #define MATROSKA_ID_CUERELATIVEPOSITION 0xF0 #define MATROSKA_ID_CUEDURATION 0xB2 #define MATROSKA_ID_CUEBLOCKNUMBER 0x5378 +#define MATROSKA_ID_CUECODECSTATE 0xEA +#define MATROSKA_ID_CUEREFERENCE 0xDB + +/* IDs in the cuereference master */ +#define MATROSKA_ID_CUEREFTIME 0x96 +#define MATROSKA_ID_CUEREFCLUSTER 0x97 +#define MATROSKA_ID_CUEREFCODECSTATE 0xEB +#define MATROSKA_ID_CUEREFNUMBER 0x535F /* IDs in the tags master */ #define MATROSKA_ID_TAG 0x7373 @@ -210,7 +255,9 @@ /* IDs in the simpletag master */ #define MATROSKA_ID_TAGLANG 0x447A +#define MATROSKA_ID_TAGLANGUAGEIETF 0x447B #define MATROSKA_ID_TAGDEFAULT 0x4484 +#define MATROSKA_ID_TAGBINARY 0x4485 #define MATROSKA_ID_TAGSTRING 0x4487 #define MATROSKA_ID_TAGDEFAULT_BUG 0x44B4 #define MATROSKA_ID_TAGNAME 0x45A3 @@ -219,6 +266,7 @@ #define MATROSKA_ID_TAGTARGETS_TYPE 0x63CA #define MATROSKA_ID_TAGTARGETS_TYPEVALUE 0x68CA #define MATROSKA_ID_TAGTARGETS_TRACKUID 0x63C5 +#define MATROSKA_ID_TAGEDITIONUID 0x63C9 #define MATROSKA_ID_TAGTARGETS_CHAPTERUID 0x63C4 #define MATROSKA_ID_TAGTARGETS_ATTACHUID 0x63C6 @@ -231,21 +279,31 @@ #define MATROSKA_ID_FILEMIMETYPE 0x4660 #define MATROSKA_ID_FILEDATA 0x465C #define MATROSKA_ID_FILEUID 0x46AE +#define MATROSKA_ID_FILEREFERRAL 0x4675 +#define MATROSKA_ID_FILEUSEDSTARTTIME 0x4661 +#define MATROSKA_ID_FILEUSEDENDTIME 0x4662 /* IDs in the cluster master */ #define MATROSKA_ID_CLUSTERTIMECODE 0xE7 +#define MATROSKA_ID_SILENTTRACKS 0x5854 #define MATROSKA_ID_CLUSTERPOSITION 0xA7 #define MATROSKA_ID_CLUSTERPREVSIZE 0xAB #define MATROSKA_ID_BLOCKGROUP 0xA0 +#define MATROSKA_ID_ENCRYPTEDBLOCK 0xAF #define MATROSKA_ID_SIMPLEBLOCK 0xA3 /* IDs in the blockgroup master */ #define MATROSKA_ID_BLOCK 0xA1 +#define MATROSKA_ID_BLOCKVIRTUAL 0xA2 #define MATROSKA_ID_BLOCKADDITIONS 0x75A1 #define MATROSKA_ID_BLOCKDURATION 0x9B +#define MATROSKA_ID_REFERENCEPRIORITY 0xFA #define MATROSKA_ID_BLOCKREFERENCE 0xFB +#define MATROSKA_ID_REFERENCEVIRTUAL 0xFD #define MATROSKA_ID_CODECSTATE 0xA4 #define MATROSKA_ID_DISCARDPADDING 0x75A2 +#define MATROSKA_ID_SLICES 0x8E +#define MATROSKA_ID_REFERENCEFRAME 0xC8 /* IDs in the blockadditions master */ #define MATROSKA_ID_BLOCKMORE 0xA6 @@ -254,6 +312,23 @@ #define MATROSKA_ID_BLOCKADDID 0xEE #define MATROSKA_ID_BLOCKADDITIONAL 0xA5 +/* IDs in the referenceframe master */ +#define MATROSKA_ID_REFERENCEOFFSET 0xC9 +#define MATROSKA_ID_REFERENCETIMESTAMP 0xCA + +/* IDs in the slices master */ +#define MATROSKA_ID_TIMESLICE 0xE8 + +/* IDs in the timeslice master */ +#define MATROSKA_ID_BLOCKADDITIONID 0xCB +#define MATROSKA_ID_LACENUMBER 0xCC +#define MATROSKA_ID_FRAMENUMBER 0xCD +#define MATROSKA_ID_DELAY 0xCE +#define MATROSKA_ID_SLICEDURATION 0xCF + +/* IDs in the silenttracks master */ +#define MATROSKA_ID_SILENTTRACKNUMBER 0x58D7 + /* IDs in the seekhead master */ #define MATROSKA_ID_SEEKENTRY 0x4DBB @@ -273,18 +348,36 @@ /* IDs in the chapteratom master */ #define MATROSKA_ID_CHAPTERUID 0x73C4 +#define MATROSKA_ID_CHAPTERSTRINGUID 0x5654 #define MATROSKA_ID_CHAPTERTIMESTART 0x91 #define MATROSKA_ID_CHAPTERTIMEEND 0x92 #define MATROSKA_ID_CHAPTERFLAGHIDDEN 0x98 +#define MATROSKA_ID_CHAPTERSEGMENTUID 0x6E67 +#define MATROSKA_ID_CHAPTERSEGMENTEDITIONUID 0x6EBC #define MATROSKA_ID_CHAPTERPHYSEQUIV 0x63C3 #define MATROSKA_ID_CHAPTERDISPLAY 0x80 +#define MATROSKA_ID_CHAPPROCESS 0x6944 #define MATROSKA_ID_CHAPTERFLAGENABLED 0x4598 +#define MATROSKA_ID_CHAPTERTRACK 0x8F + +/* IDs in the chapprocess master */ +#define MATROSKA_ID_CHAPPROCESSPRIVATE 0x450D +#define MATROSKA_ID_CHAPPROCESSCOMMAND 0x6911 +#define MATROSKA_ID_CHAPPROCESSCODECID 0x6955 + +/* IDs in the chapprocesscommand master */ +#define MATROSKA_ID_CHAPPROCESSTIME 0x6922 +#define MATROSKA_ID_CHAPPROCESSDATA 0x6933 /* IDs in the chapterdisplay master */ #define MATROSKA_ID_CHAPSTRING 0x85 #define MATROSKA_ID_CHAPLANG 0x437C +#define MATROSKA_ID_CHAPLANGUAGEIETF 0x437D #define MATROSKA_ID_CHAPCOUNTRY 0x437E +/* IDs in the chaptertrack master */ +#define MATROSKA_ID_CHAPTERTRACKUID 0x89 + typedef enum { MATROSKA_TRACK_TYPE_NONE = 0x0, MATROSKA_TRACK_TYPE_VIDEO = 0x1, diff --git a/libavformat/matroskasem.c b/libavformat/matroskasem.c index cdef0dbff4..0ebcee27f7 100644 --- a/libavformat/matroskasem.c +++ b/libavformat/matroskasem.c @@ -42,24 +42,24 @@ // incomplete type (6.7.2 in C90, 6.9.2 in C99). // Removing the sizes breaks MSVC. static EbmlSyntax matroska_seekhead[2]; -static EbmlSyntax matroska_info[8]; +static EbmlSyntax matroska_info[15]; static EbmlSyntax matroska_blockadditions[2]; -// static EbmlSyntax matroska_blockgroup[8]; +// static EbmlSyntax matroska_blockgroup[13]; // static EbmlSyntax matroska_cluster_parsing[8]; static EbmlSyntax matroska_track_video_color[15]; -static EbmlSyntax matroska_track_video[19]; +static EbmlSyntax matroska_track_video[21]; static EbmlSyntax matroska_track_combine_planes[2]; -static EbmlSyntax matroska_track_operation[2]; +static EbmlSyntax matroska_track_operation[3]; static EbmlSyntax matroska_track_encoding_encryption[8]; static EbmlSyntax matroska_track_encoding[6]; static EbmlSyntax matroska_track_encodings[2]; -static EbmlSyntax matroska_track[33]; +static EbmlSyntax matroska_track[45]; static EbmlSyntax matroska_tracks[2]; -static EbmlSyntax matroska_index_pos[6]; +static EbmlSyntax matroska_index_pos[8]; static EbmlSyntax matroska_index_entry[3]; static EbmlSyntax matroska_index[2]; static EbmlSyntax matroska_attachments[2]; -static EbmlSyntax matroska_chapter_entry[9]; +static EbmlSyntax matroska_chapter_entry[14]; static EbmlSyntax matroska_chapter[6]; static EbmlSyntax matroska_chapters[2]; static EbmlSyntax matroska_tag[3]; @@ -138,7 +138,9 @@ static EbmlSyntax matroska_track_video[] = { { MATROSKA_ID_VIDEOFLAGINTERLACED, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, interlaced), { .u = MATROSKA_VIDEO_INTERLACE_FLAG_UNDETERMINED } }, { MATROSKA_ID_VIDEOFIELDORDER, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, field_order), { .u = MATROSKA_VIDEO_FIELDORDER_UNDETERMINED } }, { MATROSKA_ID_VIDEOALPHAMODE, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, alpha_mode) }, + { MATROSKA_ID_VIDEOOLDSTEREOMODE, EBML_NONE }, { MATROSKA_ID_VIDEOCOLORSPACE, EBML_BIN, 0, 0, offsetof(MatroskaTrackVideo, color_space) }, + { MATROSKA_ID_VIDEOGAMMAVALUE, EBML_NONE }, { MATROSKA_ID_VIDEOCOLOR, EBML_NEST, 0, sizeof(MatroskaTrackVideoColor), offsetof(MatroskaTrackVideo, color), { .n = matroska_track_video_color } }, { MATROSKA_ID_VIDEOPROJECTION, EBML_NEST, 0, 0, offsetof(MatroskaTrackVideo, projection), { .n = matroska_track_video_projection } }, { MATROSKA_ID_VIDEOSTEREOMODE, EBML_UINT, 0, 0, offsetof(MatroskaTrackVideo, stereo_mode), { .u = MATROSKA_VIDEO_STEREOMODE_TYPE_NB } }, @@ -159,6 +161,7 @@ static EbmlSyntax matroska_track_combine_planes[] = { static EbmlSyntax matroska_track_operation[] = { { MATROSKA_ID_TRACKCOMBINEPLANES, EBML_NEST, 0, 0, 0, { .n = matroska_track_combine_planes } }, + { MATROSKA_ID_TRACKJOINBLOCKS, EBML_NONE }, CHILD_OF(matroska_track) }; @@ -204,6 +207,7 @@ static EbmlSyntax matroska_block_addition_mapping[] = { static EbmlSyntax matroska_track_audio[] = { { MATROSKA_ID_AUDIOSAMPLINGFREQ, EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, samplerate), { .f = 8000.0 } }, { MATROSKA_ID_AUDIOOUTSAMPLINGFREQ, EBML_FLOAT, 0, 0, offsetof(MatroskaTrackAudio, out_samplerate) }, + { MATROSKA_ID_AUDIOCHANNELPOSITIONS, EBML_NONE }, { MATROSKA_ID_AUDIOBITDEPTH, EBML_UINT, 0, 0, offsetof(MatroskaTrackAudio, bitdepth) }, { MATROSKA_ID_AUDIOCHANNELS, EBML_UINT, 0, 0, offsetof(MatroskaTrackAudio, channels), { .u = 1 } }, CHILD_OF(matroska_track) @@ -233,14 +237,26 @@ static EbmlSyntax matroska_track[] = { { MATROSKA_ID_TRACKFLAGLACING, EBML_NONE }, { MATROSKA_ID_TRACKMINCACHE, EBML_NONE }, { MATROSKA_ID_TRACKMAXCACHE, EBML_NONE }, + { MATROSKA_ID_TRACKDEFAULTDECODEDFIELDDURATION, EBML_NONE }, + { MATROSKA_ID_TRACKOFFSET, EBML_NONE }, { MATROSKA_ID_TRACKMAXBLKADDID, EBML_UINT, 0, 0, offsetof(MatroskaTrack, max_block_additional_id) }, { MATROSKA_ID_TRACKBLKADDMAPPING, EBML_NEST, 0, sizeof(MatroskaBlockAdditionMapping), offsetof(MatroskaTrack, block_addition_mappings), { .n = matroska_block_addition_mapping } }, + { MATROSKA_ID_TRACKLANGUAGEIETF, EBML_NONE }, { MATROSKA_ID_CODECNAME, EBML_NONE }, + { MATROSKA_ID_TRACKATTACHMENTLINK, EBML_NONE }, + { MATROSKA_ID_CODECSETTINGS, EBML_NONE }, { MATROSKA_ID_CODECINFOURL, EBML_NONE }, { MATROSKA_ID_CODECDOWNLOADURL, EBML_NONE }, { MATROSKA_ID_CODECDECODEALL, EBML_NONE }, + { MATROSKA_ID_TRACKOVERLAY, EBML_NONE }, { MATROSKA_ID_SEEKPREROLL, EBML_UINT, 0, 0, offsetof(MatroskaTrack, seek_preroll) }, + { MATROSKA_ID_TRACKTRANSLATE, EBML_NONE }, { MATROSKA_ID_TRACKOPERATION, EBML_NEST, 0, 0, offsetof(MatroskaTrack, operation), { .n = matroska_track_operation } }, + { MATROSKA_ID_TRICKTRACKUID, EBML_NONE }, + { MATROSKA_ID_TRICKTRACKSEGMENTUID, EBML_NONE }, + { MATROSKA_ID_TRICKTRACKFLAG, EBML_NONE }, + { MATROSKA_ID_TRICKMASTERTRACKUID, EBML_NONE }, + { MATROSKA_ID_TRICKMASTERTRACKSEGMENTUID, EBML_NONE }, { MATROSKA_ID_TRACKCONTENTENCODINGS, EBML_NEST, 0, 0, 0, { .n = matroska_track_encodings } }, CHILD_OF(matroska_tracks) }; @@ -254,6 +270,7 @@ static EbmlSyntax matroska_tagtargets[] = { { MATROSKA_ID_TAGTARGETS_TYPE, EBML_STR, 0, 0, offsetof(MatroskaTagTarget, type) }, { MATROSKA_ID_TAGTARGETS_TYPEVALUE, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, typevalue), { .u = 50 } }, { MATROSKA_ID_TAGTARGETS_TRACKUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, trackuid) }, + { MATROSKA_ID_TAGEDITIONUID, EBML_NONE }, { MATROSKA_ID_TAGTARGETS_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, chapteruid) }, { MATROSKA_ID_TAGTARGETS_ATTACHUID, EBML_UINT, 0, 0, offsetof(MatroskaTagTarget, attachuid) }, CHILD_OF(matroska_tag) @@ -263,7 +280,9 @@ static EbmlSyntax matroska_simpletag[] = { { MATROSKA_ID_TAGNAME, EBML_UTF8, 0, 0, offsetof(MatroskaTag, name) }, { MATROSKA_ID_TAGSTRING, EBML_UTF8, 0, 0, offsetof(MatroskaTag, string) }, { MATROSKA_ID_TAGLANG, EBML_STR, 0, 0, offsetof(MatroskaTag, lang), { .s = "und" } }, + { MATROSKA_ID_TAGLANGUAGEIETF, EBML_NONE }, { MATROSKA_ID_TAGDEFAULT, EBML_UINT, 0, 0, offsetof(MatroskaTag, def), { .u = 1 } }, + { MATROSKA_ID_TAGBINARY, EBML_NONE }, { MATROSKA_ID_TAGDEFAULT_BUG, EBML_UINT, 0, 0, offsetof(MatroskaTag, def), { .u = 1 } }, { MATROSKA_ID_SIMPLETAG, EBML_NEST, 0, sizeof(MatroskaTag), offsetof(MatroskaTag, sub), { .n = matroska_simpletag } }, CHILD_OF(matroska_tag) @@ -293,6 +312,13 @@ static EbmlSyntax matroska_seekhead[] = { static EbmlSyntax matroska_info[] = { { MATROSKA_ID_TIMECODESCALE, EBML_UINT, 0, 0, offsetof(MatroskaDemuxContext, time_scale), { .u = 1000000 } }, + { MATROSKA_ID_SEGMENTFILENAME, EBML_NONE }, + { MATROSKA_ID_PREVUID, EBML_NONE }, + { MATROSKA_ID_PREVFILENAME, EBML_NONE }, + { MATROSKA_ID_NEXTUID, EBML_NONE }, + { MATROSKA_ID_NEXTFILENAME, EBML_NONE }, + { MATROSKA_ID_SEGMENTFAMILY, EBML_NONE }, + { MATROSKA_ID_CHAPTERTRANSLATE, EBML_NONE }, { MATROSKA_ID_DURATION, EBML_FLOAT, 0, 0, offsetof(MatroskaDemuxContext, duration) }, { MATROSKA_ID_TITLE, EBML_UTF8, 0, 0, offsetof(MatroskaDemuxContext, title) }, { MATROSKA_ID_WRITINGAPP, EBML_NONE }, @@ -308,6 +334,8 @@ static EbmlSyntax matroska_index_pos[] = { { MATROSKA_ID_CUERELATIVEPOSITION, EBML_NONE }, { MATROSKA_ID_CUEDURATION, EBML_NONE }, { MATROSKA_ID_CUEBLOCKNUMBER, EBML_NONE }, + { MATROSKA_ID_CUECODECSTATE, EBML_NONE }, + { MATROSKA_ID_CUEREFERENCE, EBML_NONE }, CHILD_OF(matroska_index_entry) }; @@ -338,8 +366,13 @@ EbmlSyntax matroska_blockgroup[] = { { MATROSKA_ID_BLOCKADDITIONS, EBML_NEST, 0, 0, 0, { .n = matroska_blockadditions } }, { MATROSKA_ID_BLOCKDURATION, EBML_UINT, 0, 0, offsetof(MatroskaBlock, duration) }, { MATROSKA_ID_DISCARDPADDING, EBML_SINT, 0, 0, offsetof(MatroskaBlock, discard_padding) }, + { MATROSKA_ID_BLOCKVIRTUAL, EBML_NONE }, + { MATROSKA_ID_REFERENCEPRIORITY, EBML_NONE }, { MATROSKA_ID_BLOCKREFERENCE, EBML_SINT, 1, 0, offsetof(MatroskaBlock, reference) }, + { MATROSKA_ID_REFERENCEVIRTUAL, EBML_NONE }, { MATROSKA_ID_CODECSTATE, EBML_NONE }, + { MATROSKA_ID_SLICES, EBML_NONE }, + { MATROSKA_ID_REFERENCEFRAME, EBML_NONE }, { 1, EBML_UINT, 0, 0, offsetof(MatroskaBlock, non_simple), { .u = 1 } }, CHILD_OF(matroska_cluster_parsing) }; @@ -350,8 +383,10 @@ EbmlSyntax matroska_cluster_parsing[] = { { MATROSKA_ID_SIMPLEBLOCK, EBML_BIN, 0, 0, offsetof(MatroskaBlock, bin) }, { MATROSKA_ID_BLOCKGROUP, EBML_NEST, 0, 0, 0, { .n = matroska_blockgroup } }, { MATROSKA_ID_CLUSTERTIMECODE, EBML_UINT, 0, 0, offsetof(MatroskaCluster, timecode) }, + { MATROSKA_ID_SILENTTRACKS, EBML_NONE }, { MATROSKA_ID_CLUSTERPOSITION, EBML_NONE }, { MATROSKA_ID_CLUSTERPREVSIZE, EBML_NONE }, + { MATROSKA_ID_ENCRYPTEDBLOCK, EBML_NONE }, { MATROSKA_ID_SIMPLEBLOCK, EBML_STOP }, { MATROSKA_ID_BLOCKGROUP, EBML_STOP }, CHILD_OF(matroska_segment) @@ -360,6 +395,7 @@ EbmlSyntax matroska_cluster_parsing[] = { static EbmlSyntax matroska_chapter_display[] = { { MATROSKA_ID_CHAPSTRING, EBML_UTF8, 0, 0, offsetof(MatroskaChapter, title) }, { MATROSKA_ID_CHAPLANG, EBML_NONE }, + { MATROSKA_ID_CHAPLANGUAGEIETF, EBML_NONE }, { MATROSKA_ID_CHAPCOUNTRY, EBML_NONE }, CHILD_OF(matroska_chapter_entry) }; @@ -369,9 +405,14 @@ static EbmlSyntax matroska_chapter_entry[] = { { MATROSKA_ID_CHAPTERTIMEEND, EBML_UINT, 0, 0, offsetof(MatroskaChapter, end), { .u = AV_NOPTS_VALUE } }, { MATROSKA_ID_CHAPTERUID, EBML_UINT, 0, 0, offsetof(MatroskaChapter, uid) }, { MATROSKA_ID_CHAPTERDISPLAY, EBML_NEST, 0, 0, 0, { .n = matroska_chapter_display } }, + { MATROSKA_ID_CHAPTERSTRINGUID, EBML_NONE }, { MATROSKA_ID_CHAPTERFLAGHIDDEN, EBML_NONE }, + { MATROSKA_ID_CHAPTERSEGMENTUID, EBML_NONE }, + { MATROSKA_ID_CHAPTERSEGMENTEDITIONUID, EBML_NONE }, { MATROSKA_ID_CHAPTERPHYSEQUIV, EBML_NONE }, + { MATROSKA_ID_CHAPPROCESS, EBML_NONE }, { MATROSKA_ID_CHAPTERFLAGENABLED, EBML_NONE }, + { MATROSKA_ID_CHAPTERTRACK, EBML_NONE }, { MATROSKA_ID_CHAPTERATOM, EBML_NONE }, CHILD_OF(matroska_chapter) }; @@ -395,6 +436,9 @@ static EbmlSyntax matroska_attachment[] = { { MATROSKA_ID_FILENAME, EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, filename) }, { MATROSKA_ID_FILEMIMETYPE, EBML_STR, 0, 0, offsetof(MatroskaAttachment, mime) }, { MATROSKA_ID_FILEDATA, EBML_BIN, 0, 0, offsetof(MatroskaAttachment, bin) }, + { MATROSKA_ID_FILEREFERRAL, EBML_NONE }, + { MATROSKA_ID_FILEUSEDSTARTTIME, EBML_NONE }, + { MATROSKA_ID_FILEUSEDENDTIME, EBML_NONE }, { MATROSKA_ID_FILEDESC, EBML_UTF8, 0, 0, offsetof(MatroskaAttachment, description) }, CHILD_OF(matroska_attachments) }; diff --git a/libavformat/matroskasem.h b/libavformat/matroskasem.h index 55ce97ef7a..3f30d6223c 100644 --- a/libavformat/matroskasem.h +++ b/libavformat/matroskasem.h @@ -381,7 +381,7 @@ typedef struct MatroskaDemuxContext { // a tentative definition with internal linkage must not be an // incomplete type (6.7.2 in C90, 6.9.2 in C99). // Removing the sizes breaks MSVC. -EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_blockgroup[8], matroska_cluster_parsing[8]; +EbmlSyntax ebml_syntax[3], matroska_segment[9], matroska_blockgroup[13], matroska_cluster_parsing[10]; EbmlSyntax matroska_segments[2]; EbmlSyntax matroska_cluster_enter[2];