1 /* GStreamer Matroska muxer/demuxer
2 * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
4 * matroska-ids.h: matroska file/stream data IDs
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
16 * You should have received a copy of the GNU Library General Public
17 * License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
22 #ifndef __GST_MATROSKA_IDS_H__
23 #define __GST_MATROSKA_IDS_H__
26 #include <gst/video/video-info.h>
34 #define GST_MATROSKA_DOCTYPE_MATROSKA "matroska"
35 #define GST_MATROSKA_DOCTYPE_WEBM "webm"
38 * Matroska element IDs. max. 32-bit.
41 /* toplevel Segment */
42 #define GST_MATROSKA_ID_SEGMENT 0x18538067
44 /* matroska top-level master IDs, childs of Segment */
45 #define GST_MATROSKA_ID_SEGMENTINFO 0x1549A966
46 #define GST_MATROSKA_ID_TRACKS 0x1654AE6B
47 #define GST_MATROSKA_ID_CUES 0x1C53BB6B
48 #define GST_MATROSKA_ID_TAGS 0x1254C367
49 #define GST_MATROSKA_ID_SEEKHEAD 0x114D9B74
50 #define GST_MATROSKA_ID_CLUSTER 0x1F43B675
51 #define GST_MATROSKA_ID_ATTACHMENTS 0x1941A469
52 #define GST_MATROSKA_ID_CHAPTERS 0x1043A770
54 /* IDs in the SegmentInfo master */
55 #define GST_MATROSKA_ID_TIMECODESCALE 0x2AD7B1
56 #define GST_MATROSKA_ID_DURATION 0x4489
57 #define GST_MATROSKA_ID_WRITINGAPP 0x5741
58 #define GST_MATROSKA_ID_MUXINGAPP 0x4D80
59 #define GST_MATROSKA_ID_DATEUTC 0x4461
60 #define GST_MATROSKA_ID_SEGMENTUID 0x73A4
61 #define GST_MATROSKA_ID_SEGMENTFILENAME 0x7384
62 #define GST_MATROSKA_ID_PREVUID 0x3CB923
63 #define GST_MATROSKA_ID_PREVFILENAME 0x3C83AB
64 #define GST_MATROSKA_ID_NEXTUID 0x3EB923
65 #define GST_MATROSKA_ID_NEXTFILENAME 0x3E83BB
66 #define GST_MATROSKA_ID_TITLE 0x7BA9
67 #define GST_MATROSKA_ID_SEGMENTFAMILY 0x4444
68 #define GST_MATROSKA_ID_CHAPTERTRANSLATE 0x6924
70 /* IDs in the ChapterTranslate master */
71 #define GST_MATROSKA_ID_CHAPTERTRANSLATEEDITIONUID 0x69FC
72 #define GST_MATROSKA_ID_CHAPTERTRANSLATECODEC 0x69BF
73 #define GST_MATROSKA_ID_CHAPTERTRANSLATEID 0x69A5
75 /* ID in the Tracks master */
76 #define GST_MATROSKA_ID_TRACKENTRY 0xAE
78 /* IDs in the TrackEntry master */
79 #define GST_MATROSKA_ID_TRACKNUMBER 0xD7
80 #define GST_MATROSKA_ID_TRACKUID 0x73C5
81 #define GST_MATROSKA_ID_TRACKTYPE 0x83
82 #define GST_MATROSKA_ID_TRACKAUDIO 0xE1
83 #define GST_MATROSKA_ID_TRACKVIDEO 0xE0
84 #define GST_MATROSKA_ID_CONTENTENCODINGS 0x6D80
85 #define GST_MATROSKA_ID_CODECID 0x86
86 #define GST_MATROSKA_ID_CODECPRIVATE 0x63A2
87 #define GST_MATROSKA_ID_CODECNAME 0x258688
88 #define GST_MATROSKA_ID_TRACKNAME 0x536E
89 #define GST_MATROSKA_ID_TRACKLANGUAGE 0x22B59C
90 #define GST_MATROSKA_ID_TRACKFLAGENABLED 0xB9
91 #define GST_MATROSKA_ID_TRACKFLAGDEFAULT 0x88
92 #define GST_MATROSKA_ID_TRACKFLAGFORCED 0x55AA
93 #define GST_MATROSKA_ID_TRACKFLAGLACING 0x9C
94 #define GST_MATROSKA_ID_TRACKMINCACHE 0x6DE7
95 #define GST_MATROSKA_ID_TRACKMAXCACHE 0x6DF8
96 #define GST_MATROSKA_ID_TRACKDEFAULTDURATION 0x23E383
97 #define GST_MATROSKA_ID_TRACKTIMECODESCALE 0x23314F
98 #define GST_MATROSKA_ID_MAXBLOCKADDITIONID 0x55EE
99 #define GST_MATROSKA_ID_TRACKATTACHMENTLINK 0x7446
100 #define GST_MATROSKA_ID_TRACKOVERLAY 0x6FAB
101 #define GST_MATROSKA_ID_TRACKTRANSLATE 0x6624
103 #define GST_MATROSKA_ID_TRACKOFFSET 0x537F
105 #define GST_MATROSKA_ID_CODECSETTINGS 0x3A9697
107 #define GST_MATROSKA_ID_CODECINFOURL 0x3B4040
109 #define GST_MATROSKA_ID_CODECDOWNLOADURL 0x26B240
111 #define GST_MATROSKA_ID_CODECDECODEALL 0xAA
112 #define GST_MATROSKA_ID_SEEKPREROLL 0x56BB
113 #define GST_MATROSKA_ID_CODECDELAY 0x56AA
115 /* IDs in the TrackTranslate master */
116 #define GST_MATROSKA_ID_TRACKTRANSLATEEDITIONUID 0x66FC
117 #define GST_MATROSKA_ID_TRACKTRANSLATECODEC 0x66BF
118 #define GST_MATROSKA_ID_TRACKTRANSLATETRACKID 0x66A5
121 /* IDs in the TrackVideo master */
122 /* NOTE: This one is here only for backward compatibility.
123 * Use _TRACKDEFAULDURATION */
124 #define GST_MATROSKA_ID_VIDEOFRAMERATE 0x2383E3
125 #define GST_MATROSKA_ID_VIDEODISPLAYWIDTH 0x54B0
126 #define GST_MATROSKA_ID_VIDEODISPLAYHEIGHT 0x54BA
127 #define GST_MATROSKA_ID_VIDEODISPLAYUNIT 0x54B2
128 #define GST_MATROSKA_ID_VIDEOPIXELWIDTH 0xB0
129 #define GST_MATROSKA_ID_VIDEOPIXELHEIGHT 0xBA
130 #define GST_MATROSKA_ID_VIDEOPIXELCROPBOTTOM 0x54AA
131 #define GST_MATROSKA_ID_VIDEOPIXELCROPTOP 0x54BB
132 #define GST_MATROSKA_ID_VIDEOPIXELCROPLEFT 0x54CC
133 #define GST_MATROSKA_ID_VIDEOPIXELCROPRIGHT 0x54DD
134 #define GST_MATROSKA_ID_VIDEOFLAGINTERLACED 0x9A
136 #define GST_MATROSKA_ID_VIDEOSTEREOMODE 0x53B8
137 #define GST_MATROSKA_ID_VIDEOASPECTRATIOTYPE 0x54B3
138 #define GST_MATROSKA_ID_VIDEOCOLOURSPACE 0x2EB524
140 #define GST_MATROSKA_ID_VIDEOGAMMAVALUE 0x2FB523
142 #define GST_MATROSKA_ID_VIDEOCOLOUR 0x55B0
143 /* IDs in the Colour master*/
144 #define GST_MATROSKA_ID_VIDEOMATRIXCOEFFICIENTS 0x55B1
145 #define GST_MATROSKA_ID_VIDEORANGE 0x55B9
146 #define GST_MATROSKA_ID_VIDEOTRANSFERCHARACTERISTICS 0x55BA
147 #define GST_MATROSKA_ID_VIDEOPRIMARIES 0x55BB
149 /* IDs in the TrackAudio master */
150 #define GST_MATROSKA_ID_AUDIOSAMPLINGFREQ 0xB5
151 #define GST_MATROSKA_ID_AUDIOBITDEPTH 0x6264
152 #define GST_MATROSKA_ID_AUDIOCHANNELS 0x9F
154 #define GST_MATROSKA_ID_AUDIOCHANNELPOSITIONS 0x7D7B
155 #define GST_MATROSKA_ID_AUDIOOUTPUTSAMPLINGFREQ 0x78B5
157 /* IDs in the TrackContentEncoding master */
158 #define GST_MATROSKA_ID_CONTENTENCODING 0x6240
160 /* IDs in the ContentEncoding master */
161 #define GST_MATROSKA_ID_CONTENTENCODINGORDER 0x5031
162 #define GST_MATROSKA_ID_CONTENTENCODINGSCOPE 0x5032
163 #define GST_MATROSKA_ID_CONTENTENCODINGTYPE 0x5033
164 #define GST_MATROSKA_ID_CONTENTCOMPRESSION 0x5034
165 #define GST_MATROSKA_ID_CONTENTENCRYPTION 0x5035
167 /* IDs in the ContentCompression master */
168 #define GST_MATROSKA_ID_CONTENTCOMPALGO 0x4254
169 #define GST_MATROSKA_ID_CONTENTCOMPSETTINGS 0x4255
171 /* IDs in the ContentEncryption master */
172 #define GST_MATROSKA_ID_CONTENTENCALGO 0x47E1
173 #define GST_MATROSKA_ID_CONTENTENCKEYID 0x47E2
174 #define GST_MATROSKA_ID_CONTENTSIGNATURE 0x47E3
175 #define GST_MATROSKA_ID_CONTENTSIGKEYID 0x47E4
176 #define GST_MATROSKA_ID_CONTENTSIGALGO 0x47E5
177 #define GST_MATROSKA_ID_CONTENTSIGHASHALGO 0x47E6
178 /* Added in WebM spec */
179 #define GST_MATROSKA_ID_CONTENTENCAESSETTINGS 0x47E7
180 #define GST_MATROSKA_ID_AESSETTINGSCIPHERMODE 0x47E8
182 /* ID in the CUEs master */
183 #define GST_MATROSKA_ID_POINTENTRY 0xBB
185 /* IDs in the pointentry master */
186 #define GST_MATROSKA_ID_CUETIME 0xB3
187 #define GST_MATROSKA_ID_CUETRACKPOSITIONS 0xB7
189 /* IDs in the CueTrackPositions master */
190 #define GST_MATROSKA_ID_CUETRACK 0xF7
191 #define GST_MATROSKA_ID_CUECLUSTERPOSITION 0xF1
192 #define GST_MATROSKA_ID_CUEBLOCKNUMBER 0x5378
194 #define GST_MATROSKA_ID_CUECODECSTATE 0xEA
196 #define GST_MATROSKA_ID_CUEREFERENCE 0xDB
198 /* IDs in the CueReference master */
200 #define GST_MATROSKA_ID_CUEREFTIME 0x96
202 #define GST_MATROSKA_ID_CUEREFCLUSTER 0x97
204 #define GST_MATROSKA_ID_CUEREFNUMBER 0x535F
206 #define GST_MATROSKA_ID_CUEREFCODECSTATE 0xEB
208 /* IDs in the Tags master */
209 #define GST_MATROSKA_ID_TAG 0x7373
211 /* in the Tag master */
212 #define GST_MATROSKA_ID_SIMPLETAG 0x67C8
213 #define GST_MATROSKA_ID_TARGETS 0x63C0
215 /* in the SimpleTag master */
216 #define GST_MATROSKA_ID_TAGNAME 0x45A3
217 #define GST_MATROSKA_ID_TAGSTRING 0x4487
218 #define GST_MATROSKA_ID_TAGLANGUAGE 0x447A
219 #define GST_MATROSKA_ID_TAGDEFAULT 0x4484
220 #define GST_MATROSKA_ID_TAGBINARY 0x4485
222 /* in the Targets master */
223 #define GST_MATROSKA_ID_TARGETTYPEVALUE 0x68CA
224 #define GST_MATROSKA_ID_TARGETTYPE 0x63CA
225 #define GST_MATROSKA_ID_TARGETTRACKUID 0x63C5
226 #define GST_MATROSKA_ID_TARGETEDITIONUID 0x63C9
227 #define GST_MATROSKA_ID_TARGETCHAPTERUID 0x63C4
228 #define GST_MATROSKA_ID_TARGETATTACHMENTUID 0x63C6
230 /* IDs in the SeekHead master */
231 #define GST_MATROSKA_ID_SEEKENTRY 0x4DBB
233 /* IDs in the SeekEntry master */
234 #define GST_MATROSKA_ID_SEEKID 0x53AB
235 #define GST_MATROSKA_ID_SEEKPOSITION 0x53AC
237 /* IDs in the Cluster master */
238 #define GST_MATROSKA_ID_CLUSTERTIMECODE 0xE7
239 #define GST_MATROSKA_ID_BLOCKGROUP 0xA0
240 #define GST_MATROSKA_ID_SIMPLEBLOCK 0xA3
241 #define GST_MATROSKA_ID_REFERENCEBLOCK 0xFB
242 #define GST_MATROSKA_ID_POSITION 0xA7
243 #define GST_MATROSKA_ID_PREVSIZE 0xAB
245 #define GST_MATROSKA_ID_ENCRYPTEDBLOCK 0xAF
246 #define GST_MATROSKA_ID_SILENTTRACKS 0x5854
248 /* IDs in the SilentTracks master */
249 #define GST_MATROSKA_ID_SILENTTRACKNUMBER 0x58D7
251 /* IDs in the BlockGroup master */
252 #define GST_MATROSKA_ID_BLOCK 0xA1
253 #define GST_MATROSKA_ID_BLOCKDURATION 0x9B
255 #define GST_MATROSKA_ID_BLOCKVIRTUAL 0xA2
256 #define GST_MATROSKA_ID_REFERENCEBLOCK 0xFB
257 #define GST_MATROSKA_ID_BLOCKADDITIONS 0x75A1
258 #define GST_MATROSKA_ID_REFERENCEPRIORITY 0xFA
260 #define GST_MATROSKA_ID_REFERENCEVIRTUAL 0xFD
262 #define GST_MATROSKA_ID_CODECSTATE 0xA4
263 #define GST_MATROSKA_ID_SLICES 0x8E
264 #define GST_MATROSKA_ID_DISCARDPADDING 0x75A2
266 /* IDs in the BlockAdditions master */
267 #define GST_MATROSKA_ID_BLOCKMORE 0xA6
269 /* IDs in the BlockMore master */
270 #define GST_MATROSKA_ID_BLOCKADDID 0xEE
271 #define GST_MATROSKA_ID_BLOCKADDITIONAL 0xA5
273 /* IDs in the Slices master */
274 #define GST_MATROSKA_ID_TIMESLICE 0xE8
276 /* IDs in the TimeSlice master */
277 #define GST_MATROSKA_ID_LACENUMBER 0xCC
279 #define GST_MATROSKA_ID_FRAMENUMBER 0xCD
281 #define GST_MATROSKA_ID_BLOCKADDITIONID 0xCB
283 #define GST_MATROSKA_ID_TIMESLICEDELAY 0xCE
284 #define GST_MATROSKA_ID_TIMESLICEDURATION 0xCF
286 /* IDs in the Attachments master */
287 #define GST_MATROSKA_ID_ATTACHEDFILE 0x61A7
289 /* IDs in the AttachedFile master */
290 #define GST_MATROSKA_ID_FILEDESCRIPTION 0x467E
291 #define GST_MATROSKA_ID_FILENAME 0x466E
292 #define GST_MATROSKA_ID_FILEMIMETYPE 0x4660
293 #define GST_MATROSKA_ID_FILEDATA 0x465C
294 #define GST_MATROSKA_ID_FILEUID 0x46AE
296 #define GST_MATROSKA_ID_FILEREFERRAL 0x4675
298 /* IDs in the Chapters master */
299 #define GST_MATROSKA_ID_EDITIONENTRY 0x45B9
301 /* IDs in the EditionEntry master */
302 #define GST_MATROSKA_ID_EDITIONUID 0x45BC
303 #define GST_MATROSKA_ID_EDITIONFLAGHIDDEN 0x45BD
304 #define GST_MATROSKA_ID_EDITIONFLAGDEFAULT 0x45DB
305 #define GST_MATROSKA_ID_EDITIONFLAGORDERED 0x45DD
306 #define GST_MATROSKA_ID_CHAPTERATOM 0xB6
308 /* IDs in the ChapterAtom master */
309 #define GST_MATROSKA_ID_CHAPTERUID 0x73C4
310 #define GST_MATROSKA_ID_CHAPTERSTRINGUID 0x5654
311 #define GST_MATROSKA_ID_CHAPTERTIMESTART 0x91
312 #define GST_MATROSKA_ID_CHAPTERTIMESTOP 0x92
313 #define GST_MATROSKA_ID_CHAPTERFLAGHIDDEN 0x98
314 #define GST_MATROSKA_ID_CHAPTERFLAGENABLED 0x4598
315 #define GST_MATROSKA_ID_CHAPTERSEGMENTUID 0x6E67
316 #define GST_MATROSKA_ID_CHAPTERSEGMENTEDITIONUID 0x6EBC
317 #define GST_MATROSKA_ID_CHAPTERPHYSICALEQUIV 0x63C3
318 #define GST_MATROSKA_ID_CHAPTERTRACK 0x8F
319 #define GST_MATROSKA_ID_CHAPTERDISPLAY 0x80
320 #define GST_MATROSKA_ID_CHAPPROCESS 0x6944
322 /* IDs in the ChapProcess master */
323 #define GST_MATROSKA_ID_CHAPPROCESSCODECID 0x6955
324 #define GST_MATROSKA_ID_CHAPPROCESSPRIVATE 0x450D
325 #define GST_MATROSKA_ID_CHAPPROCESSCOMMAND 0x6911
327 /* IDs in the ChapProcessCommand master */
328 #define GST_MATROSKA_ID_CHAPPROCESSTIME 0x6922
329 #define GST_MATROSKA_ID_CHAPPROCESSDATA 0x6933
331 /* IDs in the ChapterDisplay master */
332 #define GST_MATROSKA_ID_CHAPSTRING 0x85
333 #define GST_MATROSKA_ID_CHAPLANGUAGE 0x437C
334 #define GST_MATROSKA_ID_CHAPCOUNTRY 0x437E
336 /* IDs in the ChapterTrack master */
337 #define GST_MATROSKA_ID_CHAPTERTRACKNUMBER 0x89
340 * Matroska Codec IDs. Strings.
343 #define GST_MATROSKA_CODEC_ID_VIDEO_VFW_FOURCC "V_MS/VFW/FOURCC"
344 #define GST_MATROSKA_CODEC_ID_VIDEO_UNCOMPRESSED "V_UNCOMPRESSED"
345 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_SP "V_MPEG4/ISO/SP"
346 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_ASP "V_MPEG4/ISO/ASP"
347 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AP "V_MPEG4/ISO/AP"
348 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AVC "V_MPEG4/ISO/AVC"
349 #define GST_MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3 "V_MPEG4/MS/V3"
350 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG1 "V_MPEG1"
351 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG2 "V_MPEG2"
352 /* FIXME: not (yet) in the spec! */
353 #define GST_MATROSKA_CODEC_ID_VIDEO_MJPEG "V_MJPEG"
354 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO1 "V_REAL/RV10"
355 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO2 "V_REAL/RV20"
356 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO3 "V_REAL/RV30"
357 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO4 "V_REAL/RV40"
358 #define GST_MATROSKA_CODEC_ID_VIDEO_THEORA "V_THEORA"
359 #define GST_MATROSKA_CODEC_ID_VIDEO_QUICKTIME "V_QUICKTIME"
360 #define GST_MATROSKA_CODEC_ID_VIDEO_SNOW "V_SNOW"
361 #define GST_MATROSKA_CODEC_ID_VIDEO_DIRAC "V_DIRAC"
362 #define GST_MATROSKA_CODEC_ID_VIDEO_VP8 "V_VP8"
363 #define GST_MATROSKA_CODEC_ID_VIDEO_VP9 "V_VP9"
364 #define GST_MATROSKA_CODEC_ID_VIDEO_AV1 "V_AV1"
365 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEGH_HEVC "V_MPEGH/ISO/HEVC"
366 #define GST_MATROSKA_CODEC_ID_VIDEO_PRORES "V_PRORES"
368 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L1 "A_MPEG/L1"
369 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L2 "A_MPEG/L2"
370 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L3 "A_MPEG/L3"
371 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_INT_BE "A_PCM/INT/BIG"
372 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_INT_LE "A_PCM/INT/LIT"
373 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_FLOAT "A_PCM/FLOAT/IEEE"
374 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3 "A_AC3"
375 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3_BSID9 "A_AC3/BSID9"
376 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3_BSID10 "A_AC3/BSID10"
377 #define GST_MATROSKA_CODEC_ID_AUDIO_EAC3 "A_EAC3"
378 #define GST_MATROSKA_CODEC_ID_AUDIO_TRUEHD "A_TRUEHD"
379 #define GST_MATROSKA_CODEC_ID_AUDIO_DTS "A_DTS"
380 #define GST_MATROSKA_CODEC_ID_AUDIO_VORBIS "A_VORBIS"
381 #define GST_MATROSKA_CODEC_ID_AUDIO_FLAC "A_FLAC"
382 /* FIXME: not yet in the spec */
383 #define GST_MATROSKA_CODEC_ID_AUDIO_SPEEX "A_SPEEX"
384 #define GST_MATROSKA_CODEC_ID_AUDIO_ACM "A_MS/ACM"
385 #define GST_MATROSKA_CODEC_ID_AUDIO_TTA "A_TTA1"
386 #define GST_MATROSKA_CODEC_ID_AUDIO_WAVPACK4 "A_WAVPACK4"
387 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_14_4 "A_REAL/14_4"
388 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_28_8 "A_REAL/28_8"
389 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_COOK "A_REAL/COOK"
390 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_SIPR "A_REAL/SIPR"
391 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_RALF "A_REAL/RALF"
392 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_ATRC "A_REAL/ATRC"
393 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC "A_AAC"
394 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC_MPEG2 "A_AAC/MPEG2/"
395 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC_MPEG4 "A_AAC/MPEG4/"
396 #define GST_MATROSKA_CODEC_ID_AUDIO_QUICKTIME_QDMC "A_QUICKTIME/QDMC"
397 #define GST_MATROSKA_CODEC_ID_AUDIO_QUICKTIME_QDM2 "A_QUICKTIME/QDM2"
398 #define GST_MATROSKA_CODEC_ID_AUDIO_OPUS "A_OPUS"
399 /* Undefined for now:
400 #define GST_MATROSKA_CODEC_ID_AUDIO_MPC "A_MPC"
403 #define GST_MATROSKA_CODEC_ID_SUBTITLE_ASCII "S_TEXT/ASCII"
404 #define GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8 "S_TEXT/UTF8"
405 #define GST_MATROSKA_CODEC_ID_SUBTITLE_SSA "S_TEXT/SSA"
406 #define GST_MATROSKA_CODEC_ID_SUBTITLE_ASS "S_TEXT/ASS"
407 #define GST_MATROSKA_CODEC_ID_SUBTITLE_USF "S_TEXT/USF"
408 #define GST_MATROSKA_CODEC_ID_SUBTITLE_VOBSUB "S_VOBSUB"
409 #define GST_MATROSKA_CODEC_ID_SUBTITLE_HDMVPGS "S_HDMV/PGS"
410 #define GST_MATROSKA_CODEC_ID_SUBTITLE_BMP "S_IMAGE/BMP"
411 #define GST_MATROSKA_CODEC_ID_SUBTITLE_KATE "S_KATE"
414 * Matroska tags. Strings.
417 #define GST_MATROSKA_TAG_ID_TITLE "TITLE"
418 #define GST_MATROSKA_TAG_ID_AUTHOR "AUTHOR"
419 #define GST_MATROSKA_TAG_ID_ARTIST "ARTIST"
420 #define GST_MATROSKA_TAG_ID_ALBUM "ALBUM"
421 #define GST_MATROSKA_TAG_ID_COMMENTS "COMMENTS"
422 #define GST_MATROSKA_TAG_ID_COMMENT "COMMENT"
423 #define GST_MATROSKA_TAG_ID_BITSPS "BITSPS"
424 #define GST_MATROSKA_TAG_ID_BPS "BPS"
425 #define GST_MATROSKA_TAG_ID_ENCODER "ENCODER"
426 #define GST_MATROSKA_TAG_ID_ISRC "ISRC"
427 #define GST_MATROSKA_TAG_ID_COPYRIGHT "COPYRIGHT"
428 #define GST_MATROSKA_TAG_ID_BPM "BPM"
429 #define GST_MATROSKA_TAG_ID_TERMS_OF_USE "TERMS_OF_USE"
430 #define GST_MATROSKA_TAG_ID_DATE "DATE"
431 #define GST_MATROSKA_TAG_ID_COMPOSER "COMPOSER"
432 #define GST_MATROSKA_TAG_ID_LEAD_PERFORMER "LEAD_PERFOMER"
433 #define GST_MATROSKA_TAG_ID_GENRE "GENRE"
434 #define GST_MATROSKA_TAG_ID_TOTAL_PARTS "TOTAL_PARTS"
435 #define GST_MATROSKA_TAG_ID_PART_NUMBER "PART_NUMBER"
436 #define GST_MATROSKA_TAG_ID_SUBTITLE "SUBTITLE"
437 #define GST_MATROSKA_TAG_ID_ACCOMPANIMENT "ACCOMPANIMENT"
438 #define GST_MATROSKA_TAG_ID_LYRICS "LYRICS"
439 #define GST_MATROSKA_TAG_ID_CONDUCTOR "CONDUCTOR"
440 #define GST_MATROSKA_TAG_ID_ENCODED_BY "ENCODED_BY"
441 #define GST_MATROSKA_TAG_ID_DESCRIPTION "DESCRIPTION"
442 #define GST_MATROSKA_TAG_ID_KEYWORDS "KEYWORDS"
443 #define GST_MATROSKA_TAG_ID_DATE_RELEASED "DATE_RELEASED"
444 #define GST_MATROSKA_TAG_ID_DATE_RECORDED "DATE_RECORDED"
445 #define GST_MATROSKA_TAG_ID_DATE_ENCODED "DATE_ENCODED"
446 #define GST_MATROSKA_TAG_ID_DATE_TAGGED "DATE_TAGGED"
447 #define GST_MATROSKA_TAG_ID_DATE_DIGITIZED "DATE_DIGITIZED"
448 #define GST_MATROSKA_TAG_ID_DATE_WRITTEN "DATE_WRITTEN"
449 #define GST_MATROSKA_TAG_ID_DATE_PURCHASED "DATE_PURCHASED"
450 #define GST_MATROSKA_TAG_ID_RECORDING_LOCATION "RECORDING_LOCATION"
451 #define GST_MATROSKA_TAG_ID_PRODUCTION_COPYRIGHT "PRODUCTION_COPYRIGHT"
452 #define GST_MATROSKA_TAG_ID_LICENSE "LICENSE"
455 * TODO: add this tag & mappings
456 * "REPLAYGAIN_GAIN" -> GST_TAG_*_GAIN see http://replaygain.hydrogenaudio.org/rg_data_format.html
457 * "REPLAYGAIN_PEAK" -> GST_TAG_*_PEAK see http://replaygain.hydrogenaudio.org/peak_data_format.html
458 * both are depending on the target (track, album?)
460 * "TOTAL_PARTS" -> GST_TAG_TRACK_COUNT depending on target
461 * "PART_NUMBER" -> GST_TAG_TRACK_NUMBER depending on target
463 * "SORT_WITH" -> nested in other elements, GST_TAG_TITLE_SORTNAME, etc
465 * TODO: maybe add custom gstreamer tags for other standard matroska tags,
466 * see http://matroska.org/technical/specs/tagging/index.html
468 * TODO: handle tag targets and nesting correctly
472 * Enumerations for various types (mapping from binary
473 * value to what it actually means).
477 GST_MATROSKA_TRACK_TYPE_VIDEO = 0x1,
478 GST_MATROSKA_TRACK_TYPE_AUDIO = 0x2,
479 GST_MATROSKA_TRACK_TYPE_COMPLEX = 0x3,
480 GST_MATROSKA_TRACK_TYPE_LOGO = 0x10,
481 GST_MATROSKA_TRACK_TYPE_SUBTITLE = 0x11,
482 GST_MATROSKA_TRACK_TYPE_BUTTONS = 0x12,
483 GST_MATROSKA_TRACK_TYPE_CONTROL = 0x20,
484 } GstMatroskaTrackType;
487 GST_MATROSKA_ASPECT_RATIO_MODE_FREE = 0x0,
488 GST_MATROSKA_ASPECT_RATIO_MODE_KEEP = 0x1,
489 GST_MATROSKA_ASPECT_RATIO_MODE_FIXED = 0x2,
490 } GstMatroskaAspectRatioMode;
493 * These aren't in any way "matroska-form" things,
494 * it's just something I use in the muxer/demuxer.
498 GST_MATROSKA_TRACK_ENABLED = (1<<0),
499 GST_MATROSKA_TRACK_DEFAULT = (1<<1),
500 GST_MATROSKA_TRACK_LACING = (1<<2),
501 GST_MATROSKA_TRACK_FORCED = (1<<3),
502 GST_MATROSKA_TRACK_SHIFT = (1<<16)
503 } GstMatroskaTrackFlags;
506 GST_MATROSKA_INTERLACE_MODE_UNKNOWN = 0,
507 GST_MATROSKA_INTERLACE_MODE_INTERLACED = 1,
508 GST_MATROSKA_INTERLACE_MODE_PROGRESSIVE = 2,
509 } GstMatroskaInterlaceMode;
512 GST_MATROSKA_STEREO_MODE_SBS_LR = 0x1,
513 GST_MATROSKA_STEREO_MODE_TB_RL = 0x2,
514 GST_MATROSKA_STEREO_MODE_TB_LR = 0x3,
515 GST_MATROSKA_STEREO_MODE_CHECKER_RL = 0x4,
516 GST_MATROSKA_STEREO_MODE_CHECKER_LR = 0x5,
517 GST_MATROSKA_STEREO_MODE_SBS_RL = 0x9,
518 GST_MATROSKA_STEREO_MODE_FBF_LR = 0xD,
519 GST_MATROSKA_STEREO_MODE_FBF_RL = 0xE
520 } GstMatroskaStereoMode;
523 GST_MATROSKA_ENCODING_COMPRESSION = 0x00,
524 GST_MATROSKA_ENCODING_ENCRYPTION = 0x01
525 } GstMatroskaEncodingType;
529 GST_MATROSKA_BLOCK_ENCRYPTED = 0x01,
530 GST_MATROSKA_BLOCK_PARTITIONED = 0x02
531 } GstMatroskaEncryptedBlockFlags;
533 typedef struct _GstMatroskaTrackContext GstMatroskaTrackContext;
535 /* TODO: check if all fields are used */
536 struct _GstMatroskaTrackContext {
540 /* reverse playback */
541 GstClockTime from_time;
547 gint index_writer_id;
549 /* some often-used info */
550 gchar *codec_id, *codec_name, *name, *language;
552 gsize codec_priv_size;
553 gpointer codec_state;
554 gsize codec_state_size;
555 GstMatroskaTrackType type;
557 GstMatroskaTrackFlags flags;
558 guint64 default_duration;
560 gdouble timecodescale;
561 guint64 seek_preroll;
564 gboolean set_discont; /* TRUE = set DISCONT flag on next buffer */
566 /* Queue to save the GST_PROTECTION events which will be sent before the first source buffer */
567 GQueue protection_event_queue;
568 /* Protection information structure which will be added in protection metadata for each encrypted buffer */
569 GstStructure * protection_info;
571 /* Stream header buffer, to put into caps and send before any other buffers */
572 GstBufferList * stream_headers;
573 gboolean send_stream_headers;
575 /* Special flag for VobSub, for which we have to send colour table info
576 * (if available) first before sending any data, and just testing
577 * for time == 0 is not enough to detect that. Used by demuxer */
578 gboolean send_dvd_event;
580 /* Special counter for muxer to skip the first N vorbis/theora headers -
581 * they are put into codec private data, not muxed into the stream */
582 guint xiph_headers_to_skip;
584 /* Used for postprocessing a frame before it is pushed from the demuxer */
585 GstFlowReturn (*postprocess_frame) (GstElement *element,
586 GstMatroskaTrackContext *context,
589 /* List of tags for this stream */
591 /* Tags changed and should be pushed again */
592 gboolean tags_changed;
594 /* A GArray of GstMatroskaTrackEncoding structures which contain the
595 * encoding (compression/encryption) settings for this track, if any */
598 /* Whether the stream is EOS */
601 /* any alignment we need our output buffers to have */
604 /* for compatibility with VFW files, where timestamp represents DTS */
607 /* indicate that the track is raw (jpeg,raw variants) and so pts=dts */
611 typedef struct _GstMatroskaTrackVideoContext {
612 GstMatroskaTrackContext parent;
614 guint pixel_width, pixel_height;
615 guint display_width, display_height;
617 GstMatroskaAspectRatioMode asr_mode;
620 GstMatroskaInterlaceMode interlace_mode;
622 GstVideoMultiviewMode multiview_mode;
623 GstVideoMultiviewFlags multiview_flags;
626 GstClockTime earliest_time;
628 GstBuffer *dirac_unit;
629 GstVideoColorimetry colorimetry;
630 } GstMatroskaTrackVideoContext;
632 typedef struct _GstMatroskaTrackAudioContext {
633 GstMatroskaTrackContext parent;
635 guint samplerate, channels, bitdepth;
637 guint32 wvpk_block_index;
638 } GstMatroskaTrackAudioContext;
640 typedef struct _GstMatroskaTrackSubtitleContext {
641 GstMatroskaTrackContext parent;
643 gboolean check_utf8; /* buffers should be valid UTF-8 */
644 gboolean check_markup; /* check if buffers contain markup
645 * or plaintext and escape characters */
646 gboolean invalid_utf8; /* work around broken files */
647 gboolean seen_markup_tag; /* markup found in text */
648 } GstMatroskaTrackSubtitleContext;
650 typedef struct _GstMatroskaIndex {
651 guint64 pos; /* of the corresponding *cluster*! */
652 GstClockTime time; /* in nanoseconds */
653 guint32 block; /* number of the block in the cluster */
654 guint16 track; /* reference to 'num' */
657 typedef struct _Wavpack4Header {
658 guchar ck_id [4]; /* "wvpk" */
659 guint32 ck_size; /* size of entire frame (minus 8, of course) */
660 guint16 version; /* 0x403 for now */
661 guint8 track_no; /* track number (0 if not used, like now) */
662 guint8 index_no; /* remember these? (0 if not used, like now) */
663 guint32 total_samples; /* for entire file (-1 if unknown) */
664 guint32 block_index; /* index of first sample in block (to file begin) */
665 guint32 block_samples; /* # samples in this block */
666 guint32 flags; /* various flags for id and decoding */
667 guint32 crc; /* crc for actual decoded data */
671 GST_MATROSKA_TRACK_ENCODING_SCOPE_FRAME = (1<<0),
672 GST_MATROSKA_TRACK_ENCODING_SCOPE_CODEC_DATA = (1<<1),
673 GST_MATROSKA_TRACK_ENCODING_SCOPE_NEXT_CONTENT_ENCODING = (1<<2)
674 } GstMatroskaTrackEncodingScope;
676 #define MATROSKA_TRACK_ENCODING_SCOPE_TYPE (matroska_track_encoding_scope_get_type())
677 GType matroska_track_encoding_scope_get_type (void);
680 GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_ZLIB = 0,
681 GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_BZLIB = 1,
682 GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_LZO1X = 2,
683 GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_HEADERSTRIP = 3
684 } GstMatroskaTrackCompressionAlgorithm;
686 /* The encryption algorithm used. The value '0' means that the contents
687 * have not been encrypted but only signed.
688 * Predefined values: 1 - DES; 2 - 3DES; 3 - Twofish; 4 - Blowfish; 5 - AES.
689 * WebM only supports a value of 5 (AES).
692 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_NONE = 0,
693 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_DES = 1,
694 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_3DES = 2,
695 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_TWOFISH = 3,
696 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_BLOWFISH = 4,
697 GST_MATROSKA_TRACK_ENCRYPTION_ALGORITHM_AES = 5
698 } GstMatroskaTrackEncryptionAlgorithm;
700 #define MATROSKA_TRACK_ENCRYPTION_ALGORITHM_TYPE (matroska_track_encryption_algorithm_get_type())
701 GType matroska_track_encryption_algorithm_get_type (void);
703 /* Defined only in WebM spec.
704 * The cipher mode used in the encryption. Predefined values: 1 - CTR
707 GST_MATROSKA_TRACK_ENCRYPTION_CIPHER_MODE_NONE = 0,
708 GST_MATROSKA_TRACK_ENCRYPTION_CIPHER_MODE_CTR = 1
709 } GstMatroskaTrackEncryptionCipherMode;
711 #define MATROSKA_TRACK_ENCRYPTION_CIPHER_MODE_TYPE (matroska_track_encryption_cipher_mode_get_type())
712 GType matroska_track_encryption_cipher_mode_get_type (void);
715 typedef struct _GstMatroskaTrackEncoding {
720 guint8 *comp_settings;
721 guint comp_settings_length;
723 guint enc_cipher_mode : 2;
724 } GstMatroskaTrackEncoding;
726 gboolean gst_matroska_track_init_video_context (GstMatroskaTrackContext ** p_context);
727 gboolean gst_matroska_track_init_audio_context (GstMatroskaTrackContext ** p_context);
728 gboolean gst_matroska_track_init_subtitle_context (GstMatroskaTrackContext ** p_context);
730 void gst_matroska_register_tags (void);
732 GstBufferList * gst_matroska_parse_xiph_stream_headers (gpointer codec_data,
733 gsize codec_data_size);
735 GstBufferList * gst_matroska_parse_speex_stream_headers (gpointer codec_data,
736 gsize codec_data_size);
738 GstBufferList * gst_matroska_parse_opus_stream_headers (gpointer codec_data,
739 gsize codec_data_size);
741 GstBufferList * gst_matroska_parse_flac_stream_headers (gpointer codec_data,
742 gsize codec_data_size);
743 void gst_matroska_track_free (GstMatroskaTrackContext * track);
744 GstClockTime gst_matroska_track_get_buffer_timestamp (GstMatroskaTrackContext * track, GstBuffer *buf);
746 #endif /* __GST_MATROSKA_IDS_H__ */