|  | @@ -0,0 +1,713 @@
 | 
	
		
			
				|  |  | +// Copyright (c) Kuba Szczodrzyński 2022-1-16.
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#pragma once
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +enum class ElementId {
 | 
	
		
			
				|  |  | +	/** [sub-elements] Set the EBML characteristics of the data to follow. Each EBML document has to start with this. */
 | 
	
		
			
				|  |  | +	EBML = 0x1A45DFA3,
 | 
	
		
			
				|  |  | +	/** [u-integer] The version of EBML parser used to create the file. */
 | 
	
		
			
				|  |  | +	EBMLVersion = 0x4286,
 | 
	
		
			
				|  |  | +	/** [u-integer] The minimum EBML version a parser has to support to read this file. */
 | 
	
		
			
				|  |  | +	EBMLReadVersion = 0x42F7,
 | 
	
		
			
				|  |  | +	/** [u-integer] The maximum length of the IDs you'll find in this file (4 or less in Matroska). */
 | 
	
		
			
				|  |  | +	EBMLMaxIDLength = 0x42F2,
 | 
	
		
			
				|  |  | +	/** [u-integer] The maximum length of the sizes you'll find in this file (8 or less in Matroska). This does not
 | 
	
		
			
				|  |  | +	   override the element size indicated at the beginning of an element. Elements that have an indicated size which is
 | 
	
		
			
				|  |  | +	   larger than what is allowed by EBMLMaxSizeLength shall be considered invalid. */
 | 
	
		
			
				|  |  | +	EBMLMaxSizeLength = 0x42F3,
 | 
	
		
			
				|  |  | +	/** [string] A string that describes the type of document that follows this EBML header ('matroska' in our case). */
 | 
	
		
			
				|  |  | +	DocType = 0x4282,
 | 
	
		
			
				|  |  | +	/** [u-integer] The version of DocType interpreter used to create the file. */
 | 
	
		
			
				|  |  | +	DocTypeVersion = 0x4287,
 | 
	
		
			
				|  |  | +	/** [u-integer] The minimum DocType version an interpreter has to support to read this file. */
 | 
	
		
			
				|  |  | +	DocTypeReadVersion = 0x4285,
 | 
	
		
			
				|  |  | +	/** [binary] The CRC is computed on all the data from the last CRC element (or start of the upper level element), up
 | 
	
		
			
				|  |  | +	   to the CRC element, including other previous CRC elements. All level 1 elements should include a CRC-32. */
 | 
	
		
			
				|  |  | +	CRC32 = 0xBF,
 | 
	
		
			
				|  |  | +	/** [binary] Used to void damaged data, to avoid unexpected behaviors when using damaged data. The content is
 | 
	
		
			
				|  |  | +	   discarded. Also used to reserve space in a sub-element for later use. */
 | 
	
		
			
				|  |  | +	Void = 0xEC,
 | 
	
		
			
				|  |  | +	/** [sub-elements] Contain signature of some (coming) elements in the stream. */
 | 
	
		
			
				|  |  | +	SignatureSlot = 0x1B538667,
 | 
	
		
			
				|  |  | +	/** [u-integer] Signature algorithm used (1=RSA, 2=elliptic). */
 | 
	
		
			
				|  |  | +	SignatureAlgo = 0x7E8A,
 | 
	
		
			
				|  |  | +	/** [u-integer] Hash algorithm used (1=SHA1-160, 2=MD5). */
 | 
	
		
			
				|  |  | +	SignatureHash = 0x7E9A,
 | 
	
		
			
				|  |  | +	/** [binary] The public key to use with the algorithm (in the case of a PKI-based signature). */
 | 
	
		
			
				|  |  | +	SignaturePublicKey = 0x7EA5,
 | 
	
		
			
				|  |  | +	/** [binary] The signature of the data (until a new. */
 | 
	
		
			
				|  |  | +	Signature = 0x7EB5,
 | 
	
		
			
				|  |  | +	/** [sub-elements] Contains elements that will be used to compute the signature. */
 | 
	
		
			
				|  |  | +	SignatureElements = 0x7E5B,
 | 
	
		
			
				|  |  | +	/** [sub-elements] A list consists of a number of consecutive elements that represent one case where data is used in
 | 
	
		
			
				|  |  | +	   signature. Ex: Cluster|Block|BlockAdditional means that the BlockAdditional of all Blocks in all Clusters is used
 | 
	
		
			
				|  |  | +	   for encryption. */
 | 
	
		
			
				|  |  | +	SignatureElementList = 0x7E7B,
 | 
	
		
			
				|  |  | +	/** [binary] An element ID whose data will be used to compute the signature. */
 | 
	
		
			
				|  |  | +	SignedElement = 0x6532,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* ebml_matroska.xml */
 | 
	
		
			
				|  |  | +	/** [master] The Root Element that contains all other Top-Level Elements (Elements defined only at Level 1). A
 | 
	
		
			
				|  |  | +	   Matroska file is composed of 1 Segment. */
 | 
	
		
			
				|  |  | +	Segment = 0x18538067,
 | 
	
		
			
				|  |  | +	/** [master] Contains the Segment Position of other Top-Level Elements. */
 | 
	
		
			
				|  |  | +	SeekHead = 0x114D9B74,
 | 
	
		
			
				|  |  | +	/** [master] Contains a single seek entry to an EBML Element. */
 | 
	
		
			
				|  |  | +	Seek = 0x4DBB,
 | 
	
		
			
				|  |  | +	/** [binary] The binary ID corresponding to the Element name. */
 | 
	
		
			
				|  |  | +	SeekID = 0x53AB,
 | 
	
		
			
				|  |  | +	/** [uinteger] The Segment Position of the Element. */
 | 
	
		
			
				|  |  | +	SeekPosition = 0x53AC,
 | 
	
		
			
				|  |  | +	/** [master] Contains general information about the Segment. */
 | 
	
		
			
				|  |  | +	Info = 0x1549A966,
 | 
	
		
			
				|  |  | +	/** [binary] A randomly generated unique ID to identify the Segment amongst many others (128 bits). */
 | 
	
		
			
				|  |  | +	SegmentUID = 0x73A4,
 | 
	
		
			
				|  |  | +	/** [utf-8] A filename corresponding to this Segment. */
 | 
	
		
			
				|  |  | +	SegmentFilename = 0x7384,
 | 
	
		
			
				|  |  | +	/** [binary] A unique ID to identify the previous Segment of a Linked Segment (128 bits). */
 | 
	
		
			
				|  |  | +	PrevUID = 0x3CB923,
 | 
	
		
			
				|  |  | +	/** [utf-8] A filename corresponding to the file of the previous Linked Segment. */
 | 
	
		
			
				|  |  | +	PrevFilename = 0x3C83AB,
 | 
	
		
			
				|  |  | +	/** [binary] A unique ID to identify the next Segment of a Linked Segment (128 bits). */
 | 
	
		
			
				|  |  | +	NextUID = 0x3EB923,
 | 
	
		
			
				|  |  | +	/** [utf-8] A filename corresponding to the file of the next Linked Segment. */
 | 
	
		
			
				|  |  | +	NextFilename = 0x3E83BB,
 | 
	
		
			
				|  |  | +	/** [binary] A randomly generated unique ID that all Segments of a Linked Segment **MUST** share (128 bits). */
 | 
	
		
			
				|  |  | +	SegmentFamily = 0x4444,
 | 
	
		
			
				|  |  | +	/** [master] The mapping between this `Segment` and a segment value in the given Chapter Codec. */
 | 
	
		
			
				|  |  | +	ChapterTranslate = 0x6924,
 | 
	
		
			
				|  |  | +	/** [binary] The binary value used to represent this Segment in the chapter codec data. The format depends on the
 | 
	
		
			
				|  |  | +	   ChapProcessCodecID used; see (#chapprocesscodecid-element). */
 | 
	
		
			
				|  |  | +	ChapterTranslateID = 0x69A5,
 | 
	
		
			
				|  |  | +	/** [uinteger] This `ChapterTranslate` applies to this chapter codec of the given chapter edition(s); see
 | 
	
		
			
				|  |  | +	   (#chapprocesscodecid-element). */
 | 
	
		
			
				|  |  | +	ChapterTranslateCodec = 0x69BF,
 | 
	
		
			
				|  |  | +	/** [uinteger] Specify a chapter edition UID on which this `ChapterTranslate` applies. */
 | 
	
		
			
				|  |  | +	ChapterTranslateEditionUID = 0x69FC,
 | 
	
		
			
				|  |  | +	/** [uinteger] Timestamp scale in nanoseconds (1.000.000 means all timestamps in the Segment are expressed in
 | 
	
		
			
				|  |  | +	   milliseconds). */
 | 
	
		
			
				|  |  | +	TimestampScale = 0x2AD7B1,
 | 
	
		
			
				|  |  | +	/** [float] Duration of the Segment in nanoseconds based on TimestampScale. */
 | 
	
		
			
				|  |  | +	Duration = 0x4489,
 | 
	
		
			
				|  |  | +	/** [date] The date and time that the Segment was created by the muxing application or library. */
 | 
	
		
			
				|  |  | +	DateUTC = 0x4461,
 | 
	
		
			
				|  |  | +	/** [utf-8] General name of the Segment. */
 | 
	
		
			
				|  |  | +	Title = 0x7BA9,
 | 
	
		
			
				|  |  | +	/** [utf-8] Muxing application or library (example: "libmatroska-0.4.3"). */
 | 
	
		
			
				|  |  | +	MuxingApp = 0x4D80,
 | 
	
		
			
				|  |  | +	/** [utf-8] Writing application (example: "mkvmerge-0.3.3"). */
 | 
	
		
			
				|  |  | +	WritingApp = 0x5741,
 | 
	
		
			
				|  |  | +	/** [master] The Top-Level Element containing the (monolithic) Block structure. */
 | 
	
		
			
				|  |  | +	Cluster = 0x1F43B675,
 | 
	
		
			
				|  |  | +	/** [uinteger] Absolute timestamp of the cluster (based on TimestampScale). */
 | 
	
		
			
				|  |  | +	Timestamp = 0xE7,
 | 
	
		
			
				|  |  | +	/** [master] The list of tracks that are not used in that part of the stream. It is useful when using overlay tracks
 | 
	
		
			
				|  |  | +	   on seeking or to decide what track to use. */
 | 
	
		
			
				|  |  | +	SilentTracks = 0x5854,
 | 
	
		
			
				|  |  | +	/** [uinteger] One of the track number that are not used from now on in the stream. It could change later if not
 | 
	
		
			
				|  |  | +	   specified as silent in a further Cluster. */
 | 
	
		
			
				|  |  | +	SilentTrackNumber = 0x58D7,
 | 
	
		
			
				|  |  | +	/** [uinteger] The Segment Position of the Cluster in the Segment (0 in live streams). It might help to
 | 
	
		
			
				|  |  | +	   resynchronise offset on damaged streams. */
 | 
	
		
			
				|  |  | +	Position = 0xA7,
 | 
	
		
			
				|  |  | +	/** [uinteger] Size of the previous Cluster, in octets. Can be useful for backward playing. */
 | 
	
		
			
				|  |  | +	PrevSize = 0xAB,
 | 
	
		
			
				|  |  | +	/** [binary] Similar to Block, see (#block-structure), but without all the extra information, mostly used to reduced
 | 
	
		
			
				|  |  | +	   overhead when no extra feature is needed; see (#simpleblock-structure) on SimpleBlock Structure. */
 | 
	
		
			
				|  |  | +	SimpleBlock = 0xA3,
 | 
	
		
			
				|  |  | +	/** [master] Basic container of information containing a single Block and information specific to that Block. */
 | 
	
		
			
				|  |  | +	BlockGroup = 0xA0,
 | 
	
		
			
				|  |  | +	/** [binary] Block containing the actual data to be rendered and a timestamp relative to the Cluster Timestamp; see
 | 
	
		
			
				|  |  | +	   (#block-structure) on Block Structure. */
 | 
	
		
			
				|  |  | +	Block = 0xA1,
 | 
	
		
			
				|  |  | +	/** [binary] A Block with no data. It **MUST** be stored in the stream at the place the real Block would be in
 | 
	
		
			
				|  |  | +	   display order. */
 | 
	
		
			
				|  |  | +	BlockVirtual = 0xA2,
 | 
	
		
			
				|  |  | +	/** [master] Contain additional blocks to complete the main one. An EBML parser that has no knowledge of the Block
 | 
	
		
			
				|  |  | +	   structure could still see and use/skip these data. */
 | 
	
		
			
				|  |  | +	BlockAdditions = 0x75A1,
 | 
	
		
			
				|  |  | +	/** [master] Contain the BlockAdditional and some parameters. */
 | 
	
		
			
				|  |  | +	BlockMore = 0xA6,
 | 
	
		
			
				|  |  | +	/** [uinteger] An ID to identify the BlockAdditional level. If BlockAddIDType of the corresponding block is 0, this
 | 
	
		
			
				|  |  | +	   value is also the value of BlockAddIDType for the meaning of the content of BlockAdditional. */
 | 
	
		
			
				|  |  | +	BlockAddID = 0xEE,
 | 
	
		
			
				|  |  | +	/** [binary] Interpreted by the codec as it wishes (using the BlockAddID). */
 | 
	
		
			
				|  |  | +	BlockAdditional = 0xA5,
 | 
	
		
			
				|  |  | +	/** [uinteger] The duration of the Block (based on TimestampScale). The BlockDuration Element can be useful at the
 | 
	
		
			
				|  |  | +	   end of a Track to define the duration of the last frame (as there is no subsequent Block available), or when
 | 
	
		
			
				|  |  | +	   there is a break in a track like for subtitle tracks. */
 | 
	
		
			
				|  |  | +	BlockDuration = 0x9B,
 | 
	
		
			
				|  |  | +	/** [uinteger] This frame is referenced and has the specified cache priority. In cache only a frame of the same or
 | 
	
		
			
				|  |  | +	   higher priority can replace this frame. A value of 0 means the frame is not referenced. */
 | 
	
		
			
				|  |  | +	ReferencePriority = 0xFA,
 | 
	
		
			
				|  |  | +	/** [integer] A timestamp value, relative to the timestamp of the Block in this BlockGroup. This is used to
 | 
	
		
			
				|  |  | +	   reference other frames necessary to decode this frame. The relative value **SHOULD** correspond to a valid
 | 
	
		
			
				|  |  | +	   `Block` this `Block` depends on. Historically Matroska Writer didn't write the actual `Block(s)` this `Block`
 | 
	
		
			
				|  |  | +	   depends on, but *some* `Block` in the past.  The value "0" **MAY** also be used to signify this `Block` cannot be
 | 
	
		
			
				|  |  | +	   decoded on its own, but without knownledge of which `Block` is necessary. In this case, other `ReferenceBlock`
 | 
	
		
			
				|  |  | +	   **MUST NOT** be found in the same `BlockGroup`.  If the `BlockGroup` doesn't have any `ReferenceBlock` element,
 | 
	
		
			
				|  |  | +	   then the `Block` it contains can be decoded without using any other `Block` data. */
 | 
	
		
			
				|  |  | +	ReferenceBlock = 0xFB,
 | 
	
		
			
				|  |  | +	/** [integer] The Segment Position of the data that would otherwise be in position of the virtual block. */
 | 
	
		
			
				|  |  | +	ReferenceVirtual = 0xFD,
 | 
	
		
			
				|  |  | +	/** [binary] The new codec state to use. Data interpretation is private to the codec. This information **SHOULD**
 | 
	
		
			
				|  |  | +	   always be referenced by a seek entry. */
 | 
	
		
			
				|  |  | +	CodecState = 0xA4,
 | 
	
		
			
				|  |  | +	/** [integer] Duration in nanoseconds of the silent data added to the Block (padding at the end of the Block for
 | 
	
		
			
				|  |  | +	   positive value, at the beginning of the Block for negative value). The duration of DiscardPadding is not
 | 
	
		
			
				|  |  | +	   calculated in the duration of the TrackEntry and **SHOULD** be discarded during playback. */
 | 
	
		
			
				|  |  | +	DiscardPadding = 0x75A2,
 | 
	
		
			
				|  |  | +	/** [master] Contains slices description. */
 | 
	
		
			
				|  |  | +	Slices = 0x8E,
 | 
	
		
			
				|  |  | +	/** [master] Contains extra time information about the data contained in the Block. Being able to interpret this
 | 
	
		
			
				|  |  | +	   Element is not **REQUIRED** for playback. */
 | 
	
		
			
				|  |  | +	TimeSlice = 0xE8,
 | 
	
		
			
				|  |  | +	/** [uinteger] The reverse number of the frame in the lace (0 is the last frame, 1 is the next to last, etc). Being
 | 
	
		
			
				|  |  | +	   able to interpret this Element is not **REQUIRED** for playback. */
 | 
	
		
			
				|  |  | +	LaceNumber = 0xCC,
 | 
	
		
			
				|  |  | +	/** [uinteger] The number of the frame to generate from this lace with this delay (allow you to generate many frames
 | 
	
		
			
				|  |  | +	   from the same Block/Frame). */
 | 
	
		
			
				|  |  | +	FrameNumber = 0xCD,
 | 
	
		
			
				|  |  | +	/** [uinteger] The ID of the BlockAdditional Element (0 is the main Block). */
 | 
	
		
			
				|  |  | +	BlockAdditionID = 0xCB,
 | 
	
		
			
				|  |  | +	/** [uinteger] The (scaled) delay to apply to the Element. */
 | 
	
		
			
				|  |  | +	Delay = 0xCE,
 | 
	
		
			
				|  |  | +	/** [uinteger] The (scaled) duration to apply to the Element. */
 | 
	
		
			
				|  |  | +	SliceDuration = 0xCF,
 | 
	
		
			
				|  |  | +	/** [master] Contains information about the last reference frame. See [@?DivXTrickTrack]. */
 | 
	
		
			
				|  |  | +	ReferenceFrame = 0xC8,
 | 
	
		
			
				|  |  | +	/** [uinteger] The relative offset, in bytes, from the previous BlockGroup element for this Smooth FF/RW video track
 | 
	
		
			
				|  |  | +	   to the containing BlockGroup element. See [@?DivXTrickTrack]. */
 | 
	
		
			
				|  |  | +	ReferenceOffset = 0xC9,
 | 
	
		
			
				|  |  | +	/** [uinteger] The timecode of the BlockGroup pointed to by ReferenceOffset. See [@?DivXTrickTrack]. */
 | 
	
		
			
				|  |  | +	ReferenceTimestamp = 0xCA,
 | 
	
		
			
				|  |  | +	/** [binary] Similar to SimpleBlock, see (#simpleblock-structure), but the data inside the Block are Transformed
 | 
	
		
			
				|  |  | +	   (encrypt and/or signed). */
 | 
	
		
			
				|  |  | +	EncryptedBlock = 0xAF,
 | 
	
		
			
				|  |  | +	/** [master] A Top-Level Element of information with many tracks described. */
 | 
	
		
			
				|  |  | +	Tracks = 0x1654AE6B,
 | 
	
		
			
				|  |  | +	/** [master] Describes a track with all Elements. */
 | 
	
		
			
				|  |  | +	TrackEntry = 0xAE,
 | 
	
		
			
				|  |  | +	/** [uinteger] The track number as used in the Block Header (using more than 127 tracks is not encouraged, though
 | 
	
		
			
				|  |  | +	   the design allows an unlimited number). */
 | 
	
		
			
				|  |  | +	TrackNumber = 0xD7,
 | 
	
		
			
				|  |  | +	/** [uinteger] A unique ID to identify the Track. */
 | 
	
		
			
				|  |  | +	TrackUID = 0x73C5,
 | 
	
		
			
				|  |  | +	/** [uinteger] The `TrackType` defines the type of each frame found in the Track. The value **SHOULD** be stored on
 | 
	
		
			
				|  |  | +	   1 octet. */
 | 
	
		
			
				|  |  | +	TrackType = 0x83,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if the track is usable. It is possible to turn a not usable track into a usable track using
 | 
	
		
			
				|  |  | +	   chapter codecs or control tracks. */
 | 
	
		
			
				|  |  | +	FlagEnabled = 0xB9,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set if that track (audio, video or subs) **SHOULD** be eligible for automatic selection by the
 | 
	
		
			
				|  |  | +	   player; see (#default-track-selection) for more details. */
 | 
	
		
			
				|  |  | +	FlagDefault = 0x88,
 | 
	
		
			
				|  |  | +	/** [uinteger] Applies only to subtitles. Set if that track **SHOULD** be eligible for automatic selection by the
 | 
	
		
			
				|  |  | +	   player if it matches the user's language preference, even if the user's preferences would normally not enable
 | 
	
		
			
				|  |  | +	   subtitles with the selected audio track; this can be used for tracks containing only translations of
 | 
	
		
			
				|  |  | +	   foreign-language audio or onscreen text. See (#default-track-selection) for more details. */
 | 
	
		
			
				|  |  | +	FlagForced = 0x55AA,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if that track is suitable for users with hearing impairments, set to 0 if it is unsuitable
 | 
	
		
			
				|  |  | +	   for users with hearing impairments. */
 | 
	
		
			
				|  |  | +	FlagHearingImpaired = 0x55AB,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if that track is suitable for users with visual impairments, set to 0 if it is unsuitable
 | 
	
		
			
				|  |  | +	   for users with visual impairments. */
 | 
	
		
			
				|  |  | +	FlagVisualImpaired = 0x55AC,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if that track contains textual descriptions of video content, set to 0 if that track does
 | 
	
		
			
				|  |  | +	   not contain textual descriptions of video content. */
 | 
	
		
			
				|  |  | +	FlagTextDescriptions = 0x55AD,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if that track is in the content's original language, set to 0 if it is a translation. */
 | 
	
		
			
				|  |  | +	FlagOriginal = 0x55AE,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if that track contains commentary, set to 0 if it does not contain commentary. */
 | 
	
		
			
				|  |  | +	FlagCommentary = 0x55AF,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if the track **MAY** contain blocks using lacing. When set to 0 all blocks **MUST** have
 | 
	
		
			
				|  |  | +	   their lacing flags set to No lacing; see (#block-lacing) on Block Lacing. */
 | 
	
		
			
				|  |  | +	FlagLacing = 0x9C,
 | 
	
		
			
				|  |  | +	/** [uinteger] The minimum number of frames a player **SHOULD** be able to cache during playback. If set to 0, the
 | 
	
		
			
				|  |  | +	   reference pseudo-cache system is not used. */
 | 
	
		
			
				|  |  | +	MinCache = 0x6DE7,
 | 
	
		
			
				|  |  | +	/** [uinteger] The maximum cache size necessary to store referenced frames in and the current frame. 0 means no
 | 
	
		
			
				|  |  | +	   cache is needed. */
 | 
	
		
			
				|  |  | +	MaxCache = 0x6DF8,
 | 
	
		
			
				|  |  | +	/** [uinteger] Number of nanoseconds (not scaled via TimestampScale) per frame (frame in the Matroska sense -- one
 | 
	
		
			
				|  |  | +	   Element put into a (Simple)Block). */
 | 
	
		
			
				|  |  | +	DefaultDuration = 0x23E383,
 | 
	
		
			
				|  |  | +	/** [uinteger] The period in nanoseconds (not scaled by TimestampScale) between two successive fields at the output
 | 
	
		
			
				|  |  | +	   of the decoding process, see (#defaultdecodedfieldduration) for more information */
 | 
	
		
			
				|  |  | +	DefaultDecodedFieldDuration = 0x234E7A,
 | 
	
		
			
				|  |  | +	/** [float] DEPRECATED, DO NOT USE. The scale to apply on this track to work at normal speed in relation with other
 | 
	
		
			
				|  |  | +	   tracks (mostly used to adjust video speed when the audio length differs). */
 | 
	
		
			
				|  |  | +	TrackTimestampScale = 0x23314F,
 | 
	
		
			
				|  |  | +	/** [integer] A value to add to the Block's Timestamp. This can be used to adjust the playback offset of a track. */
 | 
	
		
			
				|  |  | +	TrackOffset = 0x537F,
 | 
	
		
			
				|  |  | +	/** [uinteger] The maximum value of BlockAddID ((#blockaddid-element)). A value 0 means there is no BlockAdditions
 | 
	
		
			
				|  |  | +	   ((#blockadditions-element)) for this track. */
 | 
	
		
			
				|  |  | +	MaxBlockAdditionID = 0x55EE,
 | 
	
		
			
				|  |  | +	/** [master] Contains elements that extend the track format, by adding content either to each frame, with BlockAddID
 | 
	
		
			
				|  |  | +	   ((#blockaddid-element)), or to the track as a whole with BlockAddIDExtraData. */
 | 
	
		
			
				|  |  | +	BlockAdditionMapping = 0x41E4,
 | 
	
		
			
				|  |  | +	/** [uinteger] If the track format extension needs content beside frames, the value refers to the BlockAddID
 | 
	
		
			
				|  |  | +	   ((#blockaddid-element)), value being described. To keep MaxBlockAdditionID as low as possible, small values
 | 
	
		
			
				|  |  | +	   **SHOULD** be used. */
 | 
	
		
			
				|  |  | +	BlockAddIDValue = 0x41F0,
 | 
	
		
			
				|  |  | +	/** [string] A human-friendly name describing the type of BlockAdditional data, as defined by the associated Block
 | 
	
		
			
				|  |  | +	   Additional Mapping. */
 | 
	
		
			
				|  |  | +	BlockAddIDName = 0x41A4,
 | 
	
		
			
				|  |  | +	/** [uinteger] Stores the registered identifier of the Block Additional Mapping to define how the BlockAdditional
 | 
	
		
			
				|  |  | +	   data should be handled. */
 | 
	
		
			
				|  |  | +	BlockAddIDType = 0x41E7,
 | 
	
		
			
				|  |  | +	/** [binary] Extra binary data that the BlockAddIDType can use to interpret the BlockAdditional data. The
 | 
	
		
			
				|  |  | +	   interpretation of the binary data depends on the BlockAddIDType value and the corresponding Block Additional
 | 
	
		
			
				|  |  | +	   Mapping. */
 | 
	
		
			
				|  |  | +	BlockAddIDExtraData = 0x41ED,
 | 
	
		
			
				|  |  | +	/** [utf-8] A human-readable track name. */
 | 
	
		
			
				|  |  | +	Name = 0x536E,
 | 
	
		
			
				|  |  | +	/** [string] Specifies the language of the track in the Matroska languages form; see (#language-codes) on language
 | 
	
		
			
				|  |  | +	   codes. This Element **MUST** be ignored if the LanguageIETF Element is used in the same TrackEntry. */
 | 
	
		
			
				|  |  | +	Language = 0x22B59C,
 | 
	
		
			
				|  |  | +	/** [string] Specifies the language of the track according to [@!BCP47] and using the IANA Language Subtag Registry
 | 
	
		
			
				|  |  | +	   [@!IANALangRegistry]. If this Element is used, then any Language Elements used in the same TrackEntry **MUST** be
 | 
	
		
			
				|  |  | +	   ignored. */
 | 
	
		
			
				|  |  | +	LanguageIETF = 0x22B59D,
 | 
	
		
			
				|  |  | +	/** [string] An ID corresponding to the codec, see [@!MatroskaCodec] for more info. */
 | 
	
		
			
				|  |  | +	CodecID = 0x86,
 | 
	
		
			
				|  |  | +	/** [binary] Private data only known to the codec. */
 | 
	
		
			
				|  |  | +	CodecPrivate = 0x63A2,
 | 
	
		
			
				|  |  | +	/** [utf-8] A human-readable string specifying the codec. */
 | 
	
		
			
				|  |  | +	CodecName = 0x258688,
 | 
	
		
			
				|  |  | +	/** [uinteger] The UID of an attachment that is used by this codec. */
 | 
	
		
			
				|  |  | +	AttachmentLink = 0x7446,
 | 
	
		
			
				|  |  | +	/** [utf-8] A string describing the encoding setting used. */
 | 
	
		
			
				|  |  | +	CodecSettings = 0x3A9697,
 | 
	
		
			
				|  |  | +	/** [string] A URL to find information about the codec used. */
 | 
	
		
			
				|  |  | +	CodecInfoURL = 0x3B4040,
 | 
	
		
			
				|  |  | +	/** [string] A URL to download about the codec used. */
 | 
	
		
			
				|  |  | +	CodecDownloadURL = 0x26B240,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if the codec can decode potentially damaged data. */
 | 
	
		
			
				|  |  | +	CodecDecodeAll = 0xAA,
 | 
	
		
			
				|  |  | +	/** [uinteger] Specify that this track is an overlay track for the Track specified (in the u-integer). That means
 | 
	
		
			
				|  |  | +	   when this track has a gap, see (#silenttracks-element) on SilentTracks, the overlay track **SHOULD** be used
 | 
	
		
			
				|  |  | +	   instead. The order of multiple TrackOverlay matters, the first one is the one that **SHOULD** be used. If not
 | 
	
		
			
				|  |  | +	   found it **SHOULD** be the second, etc. */
 | 
	
		
			
				|  |  | +	TrackOverlay = 0x6FAB,
 | 
	
		
			
				|  |  | +	/** [uinteger] CodecDelay is The codec-built-in delay in nanoseconds. This value **MUST** be subtracted from each
 | 
	
		
			
				|  |  | +	   block timestamp in order to get the actual timestamp. The value **SHOULD** be small so the muxing of tracks with
 | 
	
		
			
				|  |  | +	   the same actual timestamp are in the same Cluster. */
 | 
	
		
			
				|  |  | +	CodecDelay = 0x56AA,
 | 
	
		
			
				|  |  | +	/** [uinteger] After a discontinuity, SeekPreRoll is the duration in nanoseconds of the data the decoder **MUST**
 | 
	
		
			
				|  |  | +	   decode before the decoded data is valid. */
 | 
	
		
			
				|  |  | +	SeekPreRoll = 0x56BB,
 | 
	
		
			
				|  |  | +	/** [master] The mapping between this `TrackEntry` and a track value in the given Chapter Codec. */
 | 
	
		
			
				|  |  | +	TrackTranslate = 0x6624,
 | 
	
		
			
				|  |  | +	/** [binary] The binary value used to represent this `TrackEntry` in the chapter codec data. The format depends on
 | 
	
		
			
				|  |  | +	   the `ChapProcessCodecID` used; see (#chapprocesscodecid-element). */
 | 
	
		
			
				|  |  | +	TrackTranslateTrackID = 0x66A5,
 | 
	
		
			
				|  |  | +	/** [uinteger] This `TrackTranslate` applies to this chapter codec of the given chapter edition(s); see
 | 
	
		
			
				|  |  | +	   (#chapprocesscodecid-element). */
 | 
	
		
			
				|  |  | +	TrackTranslateCodec = 0x66BF,
 | 
	
		
			
				|  |  | +	/** [uinteger] Specify a chapter edition UID on which this `TrackTranslate` applies. */
 | 
	
		
			
				|  |  | +	TrackTranslateEditionUID = 0x66FC,
 | 
	
		
			
				|  |  | +	/** [master] Video settings. */
 | 
	
		
			
				|  |  | +	Video = 0xE0,
 | 
	
		
			
				|  |  | +	/** [uinteger] Specify whether the video frames in this track are interlaced or not. */
 | 
	
		
			
				|  |  | +	FlagInterlaced = 0x9A,
 | 
	
		
			
				|  |  | +	/** [uinteger] Specify the field ordering of video frames in this track. */
 | 
	
		
			
				|  |  | +	FieldOrder = 0x9D,
 | 
	
		
			
				|  |  | +	/** [uinteger] Stereo-3D video mode. There are some more details in (#multi-planar-and-3d-videos). */
 | 
	
		
			
				|  |  | +	StereoMode = 0x53B8,
 | 
	
		
			
				|  |  | +	/** [uinteger] Alpha Video Mode. Presence of this Element indicates that the BlockAdditional Element could contain
 | 
	
		
			
				|  |  | +	   Alpha data. */
 | 
	
		
			
				|  |  | +	AlphaMode = 0x53C0,
 | 
	
		
			
				|  |  | +	/** [uinteger] DEPRECATED, DO NOT USE. Bogus StereoMode value used in old versions of libmatroska. */
 | 
	
		
			
				|  |  | +	OldStereoMode = 0x53B9,
 | 
	
		
			
				|  |  | +	/** [uinteger] Width of the encoded video frames in pixels. */
 | 
	
		
			
				|  |  | +	PixelWidth = 0xB0,
 | 
	
		
			
				|  |  | +	/** [uinteger] Height of the encoded video frames in pixels. */
 | 
	
		
			
				|  |  | +	PixelHeight = 0xBA,
 | 
	
		
			
				|  |  | +	/** [uinteger] The number of video pixels to remove at the bottom of the image. */
 | 
	
		
			
				|  |  | +	PixelCropBottom = 0x54AA,
 | 
	
		
			
				|  |  | +	/** [uinteger] The number of video pixels to remove at the top of the image. */
 | 
	
		
			
				|  |  | +	PixelCropTop = 0x54BB,
 | 
	
		
			
				|  |  | +	/** [uinteger] The number of video pixels to remove on the left of the image. */
 | 
	
		
			
				|  |  | +	PixelCropLeft = 0x54CC,
 | 
	
		
			
				|  |  | +	/** [uinteger] The number of video pixels to remove on the right of the image. */
 | 
	
		
			
				|  |  | +	PixelCropRight = 0x54DD,
 | 
	
		
			
				|  |  | +	/** [uinteger] Width of the video frames to display. Applies to the video frame after cropping (PixelCrop*
 | 
	
		
			
				|  |  | +	   Elements). */
 | 
	
		
			
				|  |  | +	DisplayWidth = 0x54B0,
 | 
	
		
			
				|  |  | +	/** [uinteger] Height of the video frames to display. Applies to the video frame after cropping (PixelCrop*
 | 
	
		
			
				|  |  | +	   Elements). */
 | 
	
		
			
				|  |  | +	DisplayHeight = 0x54BA,
 | 
	
		
			
				|  |  | +	/** [uinteger] How DisplayWidth & DisplayHeight are interpreted. */
 | 
	
		
			
				|  |  | +	DisplayUnit = 0x54B2,
 | 
	
		
			
				|  |  | +	/** [uinteger] Specify the possible modifications to the aspect ratio. */
 | 
	
		
			
				|  |  | +	AspectRatioType = 0x54B3,
 | 
	
		
			
				|  |  | +	/** [binary] Specify the uncompressed pixel format used for the Track's data as a FourCC. This value is similar in
 | 
	
		
			
				|  |  | +	   scope to the biCompression value of AVI's `BITMAPINFO` [@?AVIFormat]. See the YUV video formats [@?FourCC-YUV]
 | 
	
		
			
				|  |  | +	   and RGB video formats [@?FourCC-RGB] for common values. */
 | 
	
		
			
				|  |  | +	UncompressedFourCC = 0x2EB524,
 | 
	
		
			
				|  |  | +	/** [float] Gamma Value. */
 | 
	
		
			
				|  |  | +	GammaValue = 0x2FB523,
 | 
	
		
			
				|  |  | +	/** [float] Number of frames per second. This value is Informational only. It is intended for constant frame rate
 | 
	
		
			
				|  |  | +	   streams, and **SHOULD NOT** be used for a variable frame rate TrackEntry. */
 | 
	
		
			
				|  |  | +	FrameRate = 0x2383E3,
 | 
	
		
			
				|  |  | +	/** [master] Settings describing the colour format. */
 | 
	
		
			
				|  |  | +	Colour = 0x55B0,
 | 
	
		
			
				|  |  | +	/** [uinteger] The Matrix Coefficients of the video used to derive luma and chroma values from red, green, and blue
 | 
	
		
			
				|  |  | +	   color primaries. For clarity, the value and meanings for MatrixCoefficients are adopted from Table 4 of ISO/IEC
 | 
	
		
			
				|  |  | +	   23001-8:2016 or ITU-T H.273. */
 | 
	
		
			
				|  |  | +	MatrixCoefficients = 0x55B1,
 | 
	
		
			
				|  |  | +	/** [uinteger] Number of decoded bits per channel. A value of 0 indicates that the BitsPerChannel is unspecified. */
 | 
	
		
			
				|  |  | +	BitsPerChannel = 0x55B2,
 | 
	
		
			
				|  |  | +	/** [uinteger] The amount of pixels to remove in the Cr and Cb channels for every pixel not removed horizontally.
 | 
	
		
			
				|  |  | +	   Example: For video with 4:2:0 chroma subsampling, the ChromaSubsamplingHorz **SHOULD** be set to 1. */
 | 
	
		
			
				|  |  | +	ChromaSubsamplingHorz = 0x55B3,
 | 
	
		
			
				|  |  | +	/** [uinteger] The amount of pixels to remove in the Cr and Cb channels for every pixel not removed vertically.
 | 
	
		
			
				|  |  | +	   Example: For video with 4:2:0 chroma subsampling, the ChromaSubsamplingVert **SHOULD** be set to 1. */
 | 
	
		
			
				|  |  | +	ChromaSubsamplingVert = 0x55B4,
 | 
	
		
			
				|  |  | +	/** [uinteger] The amount of pixels to remove in the Cb channel for every pixel not removed horizontally. This is
 | 
	
		
			
				|  |  | +	   additive with ChromaSubsamplingHorz. Example: For video with 4:2:1 chroma subsampling, the ChromaSubsamplingHorz
 | 
	
		
			
				|  |  | +	   **SHOULD** be set to 1 and CbSubsamplingHorz **SHOULD** be set to 1. */
 | 
	
		
			
				|  |  | +	CbSubsamplingHorz = 0x55B5,
 | 
	
		
			
				|  |  | +	/** [uinteger] The amount of pixels to remove in the Cb channel for every pixel not removed vertically. This is
 | 
	
		
			
				|  |  | +	   additive with ChromaSubsamplingVert. */
 | 
	
		
			
				|  |  | +	CbSubsamplingVert = 0x55B6,
 | 
	
		
			
				|  |  | +	/** [uinteger] How chroma is subsampled horizontally. */
 | 
	
		
			
				|  |  | +	ChromaSitingHorz = 0x55B7,
 | 
	
		
			
				|  |  | +	/** [uinteger] How chroma is subsampled vertically. */
 | 
	
		
			
				|  |  | +	ChromaSitingVert = 0x55B8,
 | 
	
		
			
				|  |  | +	/** [uinteger] Clipping of the color ranges. */
 | 
	
		
			
				|  |  | +	Range = 0x55B9,
 | 
	
		
			
				|  |  | +	/** [uinteger] The transfer characteristics of the video. For clarity, the value and meanings for
 | 
	
		
			
				|  |  | +	   TransferCharacteristics are adopted from Table 3 of ISO/IEC 23091-4 or ITU-T H.273. */
 | 
	
		
			
				|  |  | +	TransferCharacteristics = 0x55BA,
 | 
	
		
			
				|  |  | +	/** [uinteger] The colour primaries of the video. For clarity, the value and meanings for Primaries are adopted from
 | 
	
		
			
				|  |  | +	   Table 2 of ISO/IEC 23091-4 or ITU-T H.273. */
 | 
	
		
			
				|  |  | +	Primaries = 0x55BB,
 | 
	
		
			
				|  |  | +	/** [uinteger] Maximum brightness of a single pixel (Maximum Content Light Level) in candelas per square meter
 | 
	
		
			
				|  |  | +	   (cd/m^2^). */
 | 
	
		
			
				|  |  | +	MaxCLL = 0x55BC,
 | 
	
		
			
				|  |  | +	/** [uinteger] Maximum brightness of a single full frame (Maximum Frame-Average Light Level) in candelas per square
 | 
	
		
			
				|  |  | +	   meter (cd/m^2^). */
 | 
	
		
			
				|  |  | +	MaxFALL = 0x55BD,
 | 
	
		
			
				|  |  | +	/** [master] SMPTE 2086 mastering data. */
 | 
	
		
			
				|  |  | +	MasteringMetadata = 0x55D0,
 | 
	
		
			
				|  |  | +	/** [float] Red X chromaticity coordinate, as defined by CIE 1931. */
 | 
	
		
			
				|  |  | +	PrimaryRChromaticityX = 0x55D1,
 | 
	
		
			
				|  |  | +	/** [float] Red Y chromaticity coordinate, as defined by CIE 1931. */
 | 
	
		
			
				|  |  | +	PrimaryRChromaticityY = 0x55D2,
 | 
	
		
			
				|  |  | +	/** [float] Green X chromaticity coordinate, as defined by CIE 1931. */
 | 
	
		
			
				|  |  | +	PrimaryGChromaticityX = 0x55D3,
 | 
	
		
			
				|  |  | +	/** [float] Green Y chromaticity coordinate, as defined by CIE 1931. */
 | 
	
		
			
				|  |  | +	PrimaryGChromaticityY = 0x55D4,
 | 
	
		
			
				|  |  | +	/** [float] Blue X chromaticity coordinate, as defined by CIE 1931. */
 | 
	
		
			
				|  |  | +	PrimaryBChromaticityX = 0x55D5,
 | 
	
		
			
				|  |  | +	/** [float] Blue Y chromaticity coordinate, as defined by CIE 1931. */
 | 
	
		
			
				|  |  | +	PrimaryBChromaticityY = 0x55D6,
 | 
	
		
			
				|  |  | +	/** [float] White X chromaticity coordinate, as defined by CIE 1931. */
 | 
	
		
			
				|  |  | +	WhitePointChromaticityX = 0x55D7,
 | 
	
		
			
				|  |  | +	/** [float] White Y chromaticity coordinate, as defined by CIE 1931. */
 | 
	
		
			
				|  |  | +	WhitePointChromaticityY = 0x55D8,
 | 
	
		
			
				|  |  | +	/** [float] Maximum luminance. Represented in candelas per square meter (cd/m^2^). */
 | 
	
		
			
				|  |  | +	LuminanceMax = 0x55D9,
 | 
	
		
			
				|  |  | +	/** [float] Minimum luminance. Represented in candelas per square meter (cd/m^2^). */
 | 
	
		
			
				|  |  | +	LuminanceMin = 0x55DA,
 | 
	
		
			
				|  |  | +	/** [master] Describes the video projection details. Used to render spherical, VR videos or flipping videos
 | 
	
		
			
				|  |  | +	   horizontally/vertically. */
 | 
	
		
			
				|  |  | +	Projection = 0x7670,
 | 
	
		
			
				|  |  | +	/** [uinteger] Describes the projection used for this video track. */
 | 
	
		
			
				|  |  | +	ProjectionType = 0x7671,
 | 
	
		
			
				|  |  | +	/** [binary] Private data that only applies to a specific projection.  *  If `ProjectionType` equals 0
 | 
	
		
			
				|  |  | +	   (Rectangular),      then this element must not be present. *  If `ProjectionType` equals 1 (Equirectangular),
 | 
	
		
			
				|  |  | +	   then this element must be present and contain the same binary data that would be stored inside       an ISOBMFF
 | 
	
		
			
				|  |  | +	   Equirectangular Projection Box ('equi'). *  If `ProjectionType` equals 2 (Cubemap), then this element must be
 | 
	
		
			
				|  |  | +	   present and contain the same binary data that would be stored       inside an ISOBMFF Cubemap Projection Box
 | 
	
		
			
				|  |  | +	   ('cbmp'). *  If `ProjectionType` equals 3 (Mesh), then this element must be present and contain the same binary
 | 
	
		
			
				|  |  | +	   data that would be stored inside        an ISOBMFF Mesh Projection Box ('mshp'). */
 | 
	
		
			
				|  |  | +	ProjectionPrivate = 0x7672,
 | 
	
		
			
				|  |  | +	/** [float] Specifies a yaw rotation to the projection.  Value represents a clockwise rotation, in degrees, around
 | 
	
		
			
				|  |  | +	   the up vector. This rotation must be applied before any `ProjectionPosePitch` or `ProjectionPoseRoll` rotations.
 | 
	
		
			
				|  |  | +	   The value of this element **MUST** be in the -180 to 180 degree range, both included.  Setting
 | 
	
		
			
				|  |  | +	   `ProjectionPoseYaw` to 180 or -180 degrees, with the `ProjectionPoseRoll` and `ProjectionPosePitch` set to 0
 | 
	
		
			
				|  |  | +	   degrees flips the image horizontally. */
 | 
	
		
			
				|  |  | +	ProjectionPoseYaw = 0x7673,
 | 
	
		
			
				|  |  | +	/** [float] Specifies a pitch rotation to the projection.  Value represents a counter-clockwise rotation, in
 | 
	
		
			
				|  |  | +	   degrees, around the right vector. This rotation must be applied after the `ProjectionPoseYaw` rotation and before
 | 
	
		
			
				|  |  | +	   the `ProjectionPoseRoll` rotation. The value of this element **MUST** be in the -90 to 90 degree range, both
 | 
	
		
			
				|  |  | +	   included. */
 | 
	
		
			
				|  |  | +	ProjectionPosePitch = 0x7674,
 | 
	
		
			
				|  |  | +	/** [float] Specifies a roll rotation to the projection.  Value represents a counter-clockwise rotation, in degrees,
 | 
	
		
			
				|  |  | +	   around the forward vector. This rotation must be applied after the `ProjectionPoseYaw` and `ProjectionPosePitch`
 | 
	
		
			
				|  |  | +	   rotations. The value of this element **MUST** be in the -180 to 180 degree range, both included.  Setting
 | 
	
		
			
				|  |  | +	   `ProjectionPoseRoll` to 180 or -180 degrees, the `ProjectionPoseYaw` to 180 or -180 degrees with
 | 
	
		
			
				|  |  | +	   `ProjectionPosePitch` set to 0 degrees flips the image vertically.  Setting `ProjectionPoseRoll` to 180 or -180
 | 
	
		
			
				|  |  | +	   degrees, with the `ProjectionPoseYaw` and `ProjectionPosePitch` set to 0 degrees flips the image horizontally and
 | 
	
		
			
				|  |  | +	   vertically. */
 | 
	
		
			
				|  |  | +	ProjectionPoseRoll = 0x7675,
 | 
	
		
			
				|  |  | +	/** [master] Audio settings. */
 | 
	
		
			
				|  |  | +	Audio = 0xE1,
 | 
	
		
			
				|  |  | +	/** [float] Sampling frequency in Hz. */
 | 
	
		
			
				|  |  | +	SamplingFrequency = 0xB5,
 | 
	
		
			
				|  |  | +	/** [float] Real output sampling frequency in Hz (used for SBR techniques). */
 | 
	
		
			
				|  |  | +	OutputSamplingFrequency = 0x78B5,
 | 
	
		
			
				|  |  | +	/** [uinteger] Numbers of channels in the track. */
 | 
	
		
			
				|  |  | +	Channels = 0x9F,
 | 
	
		
			
				|  |  | +	/** [binary] Table of horizontal angles for each successive channel. */
 | 
	
		
			
				|  |  | +	ChannelPositions = 0x7D7B,
 | 
	
		
			
				|  |  | +	/** [uinteger] Bits per sample, mostly used for PCM. */
 | 
	
		
			
				|  |  | +	BitDepth = 0x6264,
 | 
	
		
			
				|  |  | +	/** [master] Operation that needs to be applied on tracks to create this virtual track. For more details look at
 | 
	
		
			
				|  |  | +	   (#track-operation). */
 | 
	
		
			
				|  |  | +	TrackOperation = 0xE2,
 | 
	
		
			
				|  |  | +	/** [master] Contains the list of all video plane tracks that need to be combined to create this 3D track */
 | 
	
		
			
				|  |  | +	TrackCombinePlanes = 0xE3,
 | 
	
		
			
				|  |  | +	/** [master] Contains a video plane track that need to be combined to create this 3D track */
 | 
	
		
			
				|  |  | +	TrackPlane = 0xE4,
 | 
	
		
			
				|  |  | +	/** [uinteger] The trackUID number of the track representing the plane. */
 | 
	
		
			
				|  |  | +	TrackPlaneUID = 0xE5,
 | 
	
		
			
				|  |  | +	/** [uinteger] The kind of plane this track corresponds to. */
 | 
	
		
			
				|  |  | +	TrackPlaneType = 0xE6,
 | 
	
		
			
				|  |  | +	/** [master] Contains the list of all tracks whose Blocks need to be combined to create this virtual track */
 | 
	
		
			
				|  |  | +	TrackJoinBlocks = 0xE9,
 | 
	
		
			
				|  |  | +	/** [uinteger] The trackUID number of a track whose blocks are used to create this virtual track. */
 | 
	
		
			
				|  |  | +	TrackJoinUID = 0xED,
 | 
	
		
			
				|  |  | +	/** [uinteger] The TrackUID of the Smooth FF/RW video in the paired EBML structure corresponding to this video
 | 
	
		
			
				|  |  | +	   track. See [@?DivXTrickTrack]. */
 | 
	
		
			
				|  |  | +	TrickTrackUID = 0xC0,
 | 
	
		
			
				|  |  | +	/** [binary] The SegmentUID of the Segment containing the track identified by TrickTrackUID. See [@?DivXTrickTrack].
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	TrickTrackSegmentUID = 0xC1,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if this video track is a Smooth FF/RW track. If set to 1, MasterTrackUID and
 | 
	
		
			
				|  |  | +	   MasterTrackSegUID should must be present and BlockGroups for this track must contain ReferenceFrame structures.
 | 
	
		
			
				|  |  | +	   Otherwise, TrickTrackUID and TrickTrackSegUID must be present if this track has a corresponding Smooth FF/RW
 | 
	
		
			
				|  |  | +	   track. See [@?DivXTrickTrack]. */
 | 
	
		
			
				|  |  | +	TrickTrackFlag = 0xC6,
 | 
	
		
			
				|  |  | +	/** [uinteger] The TrackUID of the video track in the paired EBML structure that corresponds to this Smooth FF/RW
 | 
	
		
			
				|  |  | +	   track. See [@?DivXTrickTrack]. */
 | 
	
		
			
				|  |  | +	TrickMasterTrackUID = 0xC7,
 | 
	
		
			
				|  |  | +	/** [binary] The SegmentUID of the Segment containing the track identified by MasterTrackUID. See
 | 
	
		
			
				|  |  | +	   [@?DivXTrickTrack]. */
 | 
	
		
			
				|  |  | +	TrickMasterTrackSegmentUID = 0xC4,
 | 
	
		
			
				|  |  | +	/** [master] Settings for several content encoding mechanisms like compression or encryption. */
 | 
	
		
			
				|  |  | +	ContentEncodings = 0x6D80,
 | 
	
		
			
				|  |  | +	/** [master] Settings for one content encoding like compression or encryption. */
 | 
	
		
			
				|  |  | +	ContentEncoding = 0x6240,
 | 
	
		
			
				|  |  | +	/** [uinteger] Tells when this modification was used during encoding/muxing starting with 0 and counting upwards.
 | 
	
		
			
				|  |  | +	   The decoder/demuxer has to start with the highest order number it finds and work its way down. This value has to
 | 
	
		
			
				|  |  | +	   be unique over all ContentEncodingOrder Elements in the TrackEntry that contains this ContentEncodingOrder
 | 
	
		
			
				|  |  | +	   element. */
 | 
	
		
			
				|  |  | +	ContentEncodingOrder = 0x5031,
 | 
	
		
			
				|  |  | +	/** [uinteger] A bit field that describes which Elements have been modified in this way. Values (big-endian) can be
 | 
	
		
			
				|  |  | +	   OR'ed. */
 | 
	
		
			
				|  |  | +	ContentEncodingScope = 0x5032,
 | 
	
		
			
				|  |  | +	/** [uinteger] A value describing what kind of transformation is applied. */
 | 
	
		
			
				|  |  | +	ContentEncodingType = 0x5033,
 | 
	
		
			
				|  |  | +	/** [master] Settings describing the compression used. This Element **MUST** be present if the value of
 | 
	
		
			
				|  |  | +	   ContentEncodingType is 0 and absent otherwise. Each block **MUST** be decompressable even if no previous block is
 | 
	
		
			
				|  |  | +	   available in order not to prevent seeking. */
 | 
	
		
			
				|  |  | +	ContentCompression = 0x5034,
 | 
	
		
			
				|  |  | +	/** [uinteger] The compression algorithm used. */
 | 
	
		
			
				|  |  | +	ContentCompAlgo = 0x4254,
 | 
	
		
			
				|  |  | +	/** [binary] Settings that might be needed by the decompressor. For Header Stripping (`ContentCompAlgo`=3), the
 | 
	
		
			
				|  |  | +	   bytes that were removed from the beginning of each frames of the track. */
 | 
	
		
			
				|  |  | +	ContentCompSettings = 0x4255,
 | 
	
		
			
				|  |  | +	/** [master] Settings describing the encryption used. This Element **MUST** be present if the value of
 | 
	
		
			
				|  |  | +	   `ContentEncodingType` is 1 (encryption) and **MUST** be ignored otherwise. */
 | 
	
		
			
				|  |  | +	ContentEncryption = 0x5035,
 | 
	
		
			
				|  |  | +	/** [uinteger] The encryption algorithm used. The value "0" means that the contents have not been encrypted. */
 | 
	
		
			
				|  |  | +	ContentEncAlgo = 0x47E1,
 | 
	
		
			
				|  |  | +	/** [binary] For public key algorithms this is the ID of the public key the the data was encrypted with. */
 | 
	
		
			
				|  |  | +	ContentEncKeyID = 0x47E2,
 | 
	
		
			
				|  |  | +	/** [master] Settings describing the encryption algorithm used. If `ContentEncAlgo` != 5 this **MUST** be ignored.
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	ContentEncAESSettings = 0x47E7,
 | 
	
		
			
				|  |  | +	/** [uinteger] The AES cipher mode used in the encryption. */
 | 
	
		
			
				|  |  | +	AESSettingsCipherMode = 0x47E8,
 | 
	
		
			
				|  |  | +	/** [binary] A cryptographic signature of the contents. */
 | 
	
		
			
				|  |  | +	ContentSignature = 0x47E3,
 | 
	
		
			
				|  |  | +	/** [binary] This is the ID of the private key the data was signed with. */
 | 
	
		
			
				|  |  | +	ContentSigKeyID = 0x47E4,
 | 
	
		
			
				|  |  | +	/** [uinteger] The algorithm used for the signature. */
 | 
	
		
			
				|  |  | +	ContentSigAlgo = 0x47E5,
 | 
	
		
			
				|  |  | +	/** [uinteger] The hash algorithm used for the signature. */
 | 
	
		
			
				|  |  | +	ContentSigHashAlgo = 0x47E6,
 | 
	
		
			
				|  |  | +	/** [master] A Top-Level Element to speed seeking access. All entries are local to the Segment. */
 | 
	
		
			
				|  |  | +	Cues = 0x1C53BB6B,
 | 
	
		
			
				|  |  | +	/** [master] Contains all information relative to a seek point in the Segment. */
 | 
	
		
			
				|  |  | +	CuePoint = 0xBB,
 | 
	
		
			
				|  |  | +	/** [uinteger] Absolute timestamp according to the Segment time base. */
 | 
	
		
			
				|  |  | +	CueTime = 0xB3,
 | 
	
		
			
				|  |  | +	/** [master] Contain positions for different tracks corresponding to the timestamp. */
 | 
	
		
			
				|  |  | +	CueTrackPositions = 0xB7,
 | 
	
		
			
				|  |  | +	/** [uinteger] The track for which a position is given. */
 | 
	
		
			
				|  |  | +	CueTrack = 0xF7,
 | 
	
		
			
				|  |  | +	/** [uinteger] The Segment Position of the Cluster containing the associated Block. */
 | 
	
		
			
				|  |  | +	CueClusterPosition = 0xF1,
 | 
	
		
			
				|  |  | +	/** [uinteger] The relative position inside the Cluster of the referenced SimpleBlock or BlockGroup with 0 being the
 | 
	
		
			
				|  |  | +	   first possible position for an Element inside that Cluster. */
 | 
	
		
			
				|  |  | +	CueRelativePosition = 0xF0,
 | 
	
		
			
				|  |  | +	/** [uinteger] The duration of the block according to the Segment time base. If missing the track's DefaultDuration
 | 
	
		
			
				|  |  | +	   does not apply and no duration information is available in terms of the cues. */
 | 
	
		
			
				|  |  | +	CueDuration = 0xB2,
 | 
	
		
			
				|  |  | +	/** [uinteger] Number of the Block in the specified Cluster. */
 | 
	
		
			
				|  |  | +	CueBlockNumber = 0x5378,
 | 
	
		
			
				|  |  | +	/** [uinteger] The Segment Position of the Codec State corresponding to this Cue Element. 0 means that the data is
 | 
	
		
			
				|  |  | +	   taken from the initial Track Entry. */
 | 
	
		
			
				|  |  | +	CueCodecState = 0xEA,
 | 
	
		
			
				|  |  | +	/** [master] The Clusters containing the referenced Blocks. */
 | 
	
		
			
				|  |  | +	CueReference = 0xDB,
 | 
	
		
			
				|  |  | +	/** [uinteger] Timestamp of the referenced Block. */
 | 
	
		
			
				|  |  | +	CueRefTime = 0x96,
 | 
	
		
			
				|  |  | +	/** [uinteger] The Segment Position of the Cluster containing the referenced Block. */
 | 
	
		
			
				|  |  | +	CueRefCluster = 0x97,
 | 
	
		
			
				|  |  | +	/** [uinteger] Number of the referenced Block of Track X in the specified Cluster. */
 | 
	
		
			
				|  |  | +	CueRefNumber = 0x535F,
 | 
	
		
			
				|  |  | +	/** [uinteger] The Segment Position of the Codec State corresponding to this referenced Element. 0 means that the
 | 
	
		
			
				|  |  | +	   data is taken from the initial Track Entry. */
 | 
	
		
			
				|  |  | +	CueRefCodecState = 0xEB,
 | 
	
		
			
				|  |  | +	/** [master] Contain attached files. */
 | 
	
		
			
				|  |  | +	Attachments = 0x1941A469,
 | 
	
		
			
				|  |  | +	/** [master] An attached file. */
 | 
	
		
			
				|  |  | +	AttachedFile = 0x61A7,
 | 
	
		
			
				|  |  | +	/** [utf-8] A human-friendly name for the attached file. */
 | 
	
		
			
				|  |  | +	FileDescription = 0x467E,
 | 
	
		
			
				|  |  | +	/** [utf-8] Filename of the attached file. */
 | 
	
		
			
				|  |  | +	FileName = 0x466E,
 | 
	
		
			
				|  |  | +	/** [string] MIME type of the file. */
 | 
	
		
			
				|  |  | +	FileMimeType = 0x4660,
 | 
	
		
			
				|  |  | +	/** [binary] The data of the file. */
 | 
	
		
			
				|  |  | +	FileData = 0x465C,
 | 
	
		
			
				|  |  | +	/** [uinteger] Unique ID representing the file, as random as possible. */
 | 
	
		
			
				|  |  | +	FileUID = 0x46AE,
 | 
	
		
			
				|  |  | +	/** [binary] A binary value that a track/codec can refer to when the attachment is needed. */
 | 
	
		
			
				|  |  | +	FileReferral = 0x4675,
 | 
	
		
			
				|  |  | +	/** [uinteger] The timecode at which this optimized font attachment comes into context, based on the Segment
 | 
	
		
			
				|  |  | +	   TimecodeScale. This element is reserved for future use and if written must be the segment start time. See
 | 
	
		
			
				|  |  | +	   [@?DivXWorldFonts]. */
 | 
	
		
			
				|  |  | +	FileUsedStartTime = 0x4661,
 | 
	
		
			
				|  |  | +	/** [uinteger] The timecode at which this optimized font attachment goes out of context, based on the Segment
 | 
	
		
			
				|  |  | +	   TimecodeScale. This element is reserved for future use and if written must be the segment end time. See
 | 
	
		
			
				|  |  | +	   [@?DivXWorldFonts]. */
 | 
	
		
			
				|  |  | +	FileUsedEndTime = 0x4662,
 | 
	
		
			
				|  |  | +	/** [master] A system to define basic menus and partition data. For more detailed information, look at the Chapters
 | 
	
		
			
				|  |  | +	   explanation in (#chapters). */
 | 
	
		
			
				|  |  | +	Chapters = 0x1043A770,
 | 
	
		
			
				|  |  | +	/** [master] Contains all information about a Segment edition. */
 | 
	
		
			
				|  |  | +	EditionEntry = 0x45B9,
 | 
	
		
			
				|  |  | +	/** [uinteger] A unique ID to identify the edition. It's useful for tagging an edition. */
 | 
	
		
			
				|  |  | +	EditionUID = 0x45BC,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if an edition is hidden. Hidden editions **SHOULD NOT** be available to the user interface
 | 
	
		
			
				|  |  | +	   (but still to Control Tracks; see (#chapter-flags) on Chapter flags). */
 | 
	
		
			
				|  |  | +	EditionFlagHidden = 0x45BD,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if the edition **SHOULD** be used as the default one. */
 | 
	
		
			
				|  |  | +	EditionFlagDefault = 0x45DB,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if the chapters can be defined multiple times and the order to play them is enforced; see
 | 
	
		
			
				|  |  | +	   (#editionflagordered). */
 | 
	
		
			
				|  |  | +	EditionFlagOrdered = 0x45DD,
 | 
	
		
			
				|  |  | +	/** [master] Contains the atom information to use as the chapter atom (apply to all tracks). */
 | 
	
		
			
				|  |  | +	ChapterAtom = 0xB6,
 | 
	
		
			
				|  |  | +	/** [uinteger] A unique ID to identify the Chapter. */
 | 
	
		
			
				|  |  | +	ChapterUID = 0x73C4,
 | 
	
		
			
				|  |  | +	/** [utf-8] A unique string ID to identify the Chapter. Use for WebVTT cue identifier storage [@!WebVTT]. */
 | 
	
		
			
				|  |  | +	ChapterStringUID = 0x5654,
 | 
	
		
			
				|  |  | +	/** [uinteger] Timestamp of the start of Chapter (not scaled). */
 | 
	
		
			
				|  |  | +	ChapterTimeStart = 0x91,
 | 
	
		
			
				|  |  | +	/** [uinteger] Timestamp of the end of Chapter (timestamp excluded, not scaled). The value **MUST** be greater than
 | 
	
		
			
				|  |  | +	   or equal to the `ChapterTimeStart` of the same `ChapterAtom`. */
 | 
	
		
			
				|  |  | +	ChapterTimeEnd = 0x92,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if a chapter is hidden. Hidden chapters **SHOULD NOT** be available to the user interface
 | 
	
		
			
				|  |  | +	   (but still to Control Tracks; see (#chapterflaghidden) on Chapter flags). */
 | 
	
		
			
				|  |  | +	ChapterFlagHidden = 0x98,
 | 
	
		
			
				|  |  | +	/** [uinteger] Set to 1 if the chapter is enabled. It can be enabled/disabled by a Control Track. When disabled, the
 | 
	
		
			
				|  |  | +	   movie **SHOULD** skip all the content between the TimeStart and TimeEnd of this chapter; see (#chapter-flags) on
 | 
	
		
			
				|  |  | +	   Chapter flags. */
 | 
	
		
			
				|  |  | +	ChapterFlagEnabled = 0x4598,
 | 
	
		
			
				|  |  | +	/** [binary] The SegmentUID of another Segment to play during this chapter. */
 | 
	
		
			
				|  |  | +	ChapterSegmentUID = 0x6E67,
 | 
	
		
			
				|  |  | +	/** [uinteger] The EditionUID to play from the Segment linked in ChapterSegmentUID. If ChapterSegmentEditionUID is
 | 
	
		
			
				|  |  | +	   undeclared, then no Edition of the linked Segment is used; see (#medium-linking) on medium-linking Segments. */
 | 
	
		
			
				|  |  | +	ChapterSegmentEditionUID = 0x6EBC,
 | 
	
		
			
				|  |  | +	/** [uinteger] Specify the physical equivalent of this ChapterAtom like "DVD" (60) or "SIDE" (50); see
 | 
	
		
			
				|  |  | +	   (#physical-types) for a complete list of values. */
 | 
	
		
			
				|  |  | +	ChapterPhysicalEquiv = 0x63C3,
 | 
	
		
			
				|  |  | +	/** [master] List of tracks on which the chapter applies. If this Element is not present, all tracks apply */
 | 
	
		
			
				|  |  | +	ChapterTrack = 0x8F,
 | 
	
		
			
				|  |  | +	/** [uinteger] UID of the Track to apply this chapter to. In the absence of a control track, choosing this chapter
 | 
	
		
			
				|  |  | +	   will select the listed Tracks and deselect unlisted tracks. Absence of this Element indicates that the Chapter
 | 
	
		
			
				|  |  | +	   **SHOULD** be applied to any currently used Tracks. */
 | 
	
		
			
				|  |  | +	ChapterTrackUID = 0x89,
 | 
	
		
			
				|  |  | +	/** [master] Contains all possible strings to use for the chapter display. */
 | 
	
		
			
				|  |  | +	ChapterDisplay = 0x80,
 | 
	
		
			
				|  |  | +	/** [utf-8] Contains the string to use as the chapter atom. */
 | 
	
		
			
				|  |  | +	ChapString = 0x85,
 | 
	
		
			
				|  |  | +	/** [string] A language corresponding to the string, in the bibliographic ISO-639-2 form [@!ISO639-2]. This Element
 | 
	
		
			
				|  |  | +	 **MUST** be ignored if a ChapLanguageIETF Element is used within the same ChapterDisplay Element. */
 | 
	
		
			
				|  |  | +	ChapLanguage = 0x437C,
 | 
	
		
			
				|  |  | +	/** [string] Specifies a language corresponding to the ChapString in the format defined in [@!BCP47] and using the
 | 
	
		
			
				|  |  | +	   IANA Language Subtag Registry [@!IANALangRegistry]. If a ChapLanguageIETF Element is used, then any ChapLanguage
 | 
	
		
			
				|  |  | +	   and ChapCountry Elements used in the same ChapterDisplay **MUST** be ignored. */
 | 
	
		
			
				|  |  | +	ChapLanguageIETF = 0x437D,
 | 
	
		
			
				|  |  | +	/** [string] A country corresponding to the string, using the same 2 octets country-codes as in Internet domains
 | 
	
		
			
				|  |  | +	   [@!IANADomains] based on [@!ISO3166-1] alpha-2 codes. This Element **MUST** be ignored if a ChapLanguageIETF
 | 
	
		
			
				|  |  | +	   Element is used within the same ChapterDisplay Element. */
 | 
	
		
			
				|  |  | +	ChapCountry = 0x437E,
 | 
	
		
			
				|  |  | +	/** [master] Contains all the commands associated to the Atom. */
 | 
	
		
			
				|  |  | +	ChapProcess = 0x6944,
 | 
	
		
			
				|  |  | +	/** [uinteger] Contains the type of the codec used for the processing. A value of 0 means native Matroska processing
 | 
	
		
			
				|  |  | +	   (to be defined), a value of 1 means the DVD command set is used; see (#menu-features) on DVD menus. More codec
 | 
	
		
			
				|  |  | +	   IDs can be added later. */
 | 
	
		
			
				|  |  | +	ChapProcessCodecID = 0x6955,
 | 
	
		
			
				|  |  | +	/** [binary] Some optional data attached to the ChapProcessCodecID information.     For ChapProcessCodecID = 1, it
 | 
	
		
			
				|  |  | +	   is the "DVD level" equivalent; see (#menu-features) on DVD menus. */
 | 
	
		
			
				|  |  | +	ChapProcessPrivate = 0x450D,
 | 
	
		
			
				|  |  | +	/** [master] Contains all the commands associated to the Atom. */
 | 
	
		
			
				|  |  | +	ChapProcessCommand = 0x6911,
 | 
	
		
			
				|  |  | +	/** [uinteger] Defines when the process command **SHOULD** be handled */
 | 
	
		
			
				|  |  | +	ChapProcessTime = 0x6922,
 | 
	
		
			
				|  |  | +	/** [binary] Contains the command information. The data **SHOULD** be interpreted depending on the
 | 
	
		
			
				|  |  | +	   ChapProcessCodecID value. For ChapProcessCodecID = 1, the data correspond to the binary DVD cell pre/post
 | 
	
		
			
				|  |  | +	   commands; see (#menu-features) on DVD menus. */
 | 
	
		
			
				|  |  | +	ChapProcessData = 0x6933,
 | 
	
		
			
				|  |  | +	/** [master] Element containing metadata describing Tracks, Editions, Chapters, Attachments, or the Segment as a
 | 
	
		
			
				|  |  | +	   whole. A list of valid tags can be found in [@!MatroskaTags]. */
 | 
	
		
			
				|  |  | +	Tags = 0x1254C367,
 | 
	
		
			
				|  |  | +	/** [master] A single metadata descriptor. */
 | 
	
		
			
				|  |  | +	Tag = 0x7373,
 | 
	
		
			
				|  |  | +	/** [master] Specifies which other elements the metadata represented by the Tag applies to. If empty or not present,
 | 
	
		
			
				|  |  | +	   then the Tag describes everything in the Segment. */
 | 
	
		
			
				|  |  | +	Targets = 0x63C0,
 | 
	
		
			
				|  |  | +	/** [uinteger] A number to indicate the logical level of the target. */
 | 
	
		
			
				|  |  | +	TargetTypeValue = 0x68CA,
 | 
	
		
			
				|  |  | +	/** [string] An informational string that can be used to display the logical level of the target like "ALBUM",
 | 
	
		
			
				|  |  | +	   "TRACK", "MOVIE", "CHAPTER", etc ; see Section 6.4 of [@!MatroskaTags]. */
 | 
	
		
			
				|  |  | +	TargetType = 0x63CA,
 | 
	
		
			
				|  |  | +	/** [uinteger] A unique ID to identify the Track(s) the tags belong to. */
 | 
	
		
			
				|  |  | +	TagTrackUID = 0x63C5,
 | 
	
		
			
				|  |  | +	/** [uinteger] A unique ID to identify the EditionEntry(s) the tags belong to. */
 | 
	
		
			
				|  |  | +	TagEditionUID = 0x63C9,
 | 
	
		
			
				|  |  | +	/** [uinteger] A unique ID to identify the Chapter(s) the tags belong to. */
 | 
	
		
			
				|  |  | +	TagChapterUID = 0x63C4,
 | 
	
		
			
				|  |  | +	/** [uinteger] A unique ID to identify the Attachment(s) the tags belong to. */
 | 
	
		
			
				|  |  | +	TagAttachmentUID = 0x63C6,
 | 
	
		
			
				|  |  | +	/** [master] Contains general information about the target. */
 | 
	
		
			
				|  |  | +	SimpleTag = 0x67C8,
 | 
	
		
			
				|  |  | +	/** [utf-8] The name of the Tag that is going to be stored. */
 | 
	
		
			
				|  |  | +	TagName = 0x45A3,
 | 
	
		
			
				|  |  | +	/** [string] Specifies the language of the tag specified, in the Matroska languages form; see (#language-codes) on
 | 
	
		
			
				|  |  | +	   language codes. This Element **MUST** be ignored if the TagLanguageIETF Element is used within the same SimpleTag
 | 
	
		
			
				|  |  | +	   Element. */
 | 
	
		
			
				|  |  | +	TagLanguage = 0x447A,
 | 
	
		
			
				|  |  | +	/** [string] Specifies the language used in the TagString according to [@!BCP47] and using the IANA Language Subtag
 | 
	
		
			
				|  |  | +	   Registry [@!IANALangRegistry]. If this Element is used, then any TagLanguage Elements used in the same SimpleTag
 | 
	
		
			
				|  |  | +	   **MUST** be ignored. */
 | 
	
		
			
				|  |  | +	TagLanguageIETF = 0x447B,
 | 
	
		
			
				|  |  | +	/** [uinteger] A boolean value to indicate if this is the default/original language to use for the given tag. */
 | 
	
		
			
				|  |  | +	TagDefault = 0x4484,
 | 
	
		
			
				|  |  | +	/** [uinteger] A variant of the TagDefault element with a bogus Element ID; see (#tagdefault-element). */
 | 
	
		
			
				|  |  | +	TagDefaultBogus = 0x44B4,
 | 
	
		
			
				|  |  | +	/** [utf-8] The value of the Tag. */
 | 
	
		
			
				|  |  | +	TagString = 0x4487,
 | 
	
		
			
				|  |  | +	/** [binary] The values of the Tag, if it is binary. Note that this cannot be used in the same SimpleTag as
 | 
	
		
			
				|  |  | +	   TagString. */
 | 
	
		
			
				|  |  | +	TagBinary = 0x4485,
 | 
	
		
			
				|  |  | +};
 |