Tizen 2.0 Release
[framework/multimedia/gst-plugins-good0.10.git] / gst / matroska / matroska-ids.h
1 /* GStreamer Matroska muxer/demuxer
2  * (c) 2003 Ronald Bultje <rbultje@ronald.bitfreak.net>
3  *
4  * matroska-ids.h: matroska file/stream data IDs
5  *
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.
10  *
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.
15  *
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., 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21
22 #ifndef __GST_MATROSKA_IDS_H__
23 #define __GST_MATROSKA_IDS_H__
24
25 #include <gst/gst.h>
26
27 #include "ebml-ids.h"
28
29 #define MKV_DEMUX_MODIFICATION /* for enabling changes */
30
31 /*
32  * EBML DocType.
33  */
34
35 #define GST_MATROSKA_DOCTYPE_MATROSKA              "matroska"
36 #define GST_MATROSKA_DOCTYPE_WEBM                  "webm"
37
38 /*
39  * Matroska element IDs. max. 32-bit.
40  */
41
42 /* toplevel Segment */
43 #define GST_MATROSKA_ID_SEGMENT                    0x18538067
44
45 /* matroska top-level master IDs, childs of Segment */
46 #define GST_MATROSKA_ID_SEGMENTINFO                0x1549A966
47 #define GST_MATROSKA_ID_TRACKS                     0x1654AE6B
48 #define GST_MATROSKA_ID_CUES                       0x1C53BB6B
49 #define GST_MATROSKA_ID_TAGS                       0x1254C367
50 #define GST_MATROSKA_ID_SEEKHEAD                   0x114D9B74
51 #define GST_MATROSKA_ID_CLUSTER                    0x1F43B675
52 #define GST_MATROSKA_ID_ATTACHMENTS                0x1941A469
53 #define GST_MATROSKA_ID_CHAPTERS                   0x1043A770
54
55 /* IDs in the SegmentInfo master */
56 #define GST_MATROSKA_ID_TIMECODESCALE              0x2AD7B1
57 #define GST_MATROSKA_ID_DURATION                   0x4489
58 #define GST_MATROSKA_ID_WRITINGAPP                 0x5741
59 #define GST_MATROSKA_ID_MUXINGAPP                  0x4D80
60 #define GST_MATROSKA_ID_DATEUTC                    0x4461
61 #define GST_MATROSKA_ID_SEGMENTUID                 0x73A4
62 #define GST_MATROSKA_ID_SEGMENTFILENAME            0x7384
63 #define GST_MATROSKA_ID_PREVUID                    0x3CB923
64 #define GST_MATROSKA_ID_PREVFILENAME               0x3C83AB
65 #define GST_MATROSKA_ID_NEXTUID                    0x3EB923
66 #define GST_MATROSKA_ID_NEXTFILENAME               0x3E83BB
67 #define GST_MATROSKA_ID_TITLE                      0x7BA9
68 #define GST_MATROSKA_ID_SEGMENTFAMILY              0x4444
69 #define GST_MATROSKA_ID_CHAPTERTRANSLATE           0x6924
70
71 /* IDs in the ChapterTranslate master */
72 #define GST_MATROSKA_ID_CHAPTERTRANSLATEEDITIONUID 0x69FC
73 #define GST_MATROSKA_ID_CHAPTERTRANSLATECODEC      0x69BF
74 #define GST_MATROSKA_ID_CHAPTERTRANSLATEID         0x69A5
75
76 /* ID in the Tracks master */
77 #define GST_MATROSKA_ID_TRACKENTRY                 0xAE
78
79 /* IDs in the TrackEntry master */
80 #define GST_MATROSKA_ID_TRACKNUMBER                0xD7
81 #define GST_MATROSKA_ID_TRACKUID                   0x73C5
82 #define GST_MATROSKA_ID_TRACKTYPE                  0x83
83 #define GST_MATROSKA_ID_TRACKAUDIO                 0xE1
84 #define GST_MATROSKA_ID_TRACKVIDEO                 0xE0
85 #define GST_MATROSKA_ID_CONTENTENCODINGS           0x6D80
86 #define GST_MATROSKA_ID_CODECID                    0x86
87 #define GST_MATROSKA_ID_CODECPRIVATE               0x63A2
88 #define GST_MATROSKA_ID_CODECNAME                  0x258688
89 #define GST_MATROSKA_ID_TRACKNAME                  0x536E
90 #define GST_MATROSKA_ID_TRACKLANGUAGE              0x22B59C
91 #define GST_MATROSKA_ID_TRACKFLAGENABLED           0xB9
92 #define GST_MATROSKA_ID_TRACKFLAGDEFAULT           0x88
93 #define GST_MATROSKA_ID_TRACKFLAGFORCED            0x55AA
94 #define GST_MATROSKA_ID_TRACKFLAGLACING            0x9C
95 #define GST_MATROSKA_ID_TRACKMINCACHE              0x6DE7
96 #define GST_MATROSKA_ID_TRACKMAXCACHE              0x6DF8
97 #define GST_MATROSKA_ID_TRACKDEFAULTDURATION       0x23E383
98 #define GST_MATROSKA_ID_TRACKTIMECODESCALE         0x23314F
99 #define GST_MATROSKA_ID_MAXBLOCKADDITIONID         0x55EE
100 #define GST_MATROSKA_ID_TRACKATTACHMENTLINK        0x7446
101 #define GST_MATROSKA_ID_TRACKOVERLAY               0x6FAB
102 #define GST_MATROSKA_ID_TRACKTRANSLATE             0x6624
103 /* semi-draft */
104 #define GST_MATROSKA_ID_TRACKOFFSET                0x537F
105 /* semi-draft */
106 #define GST_MATROSKA_ID_CODECSETTINGS              0x3A9697
107 /* semi-draft */
108 #define GST_MATROSKA_ID_CODECINFOURL               0x3B4040
109 /* semi-draft */
110 #define GST_MATROSKA_ID_CODECDOWNLOADURL           0x26B240
111 /* semi-draft */
112 #define GST_MATROSKA_ID_CODECDECODEALL             0xAA
113
114 /* IDs in the TrackTranslate master */
115 #define GST_MATROSKA_ID_TRACKTRANSLATEEDITIONUID   0x66FC
116 #define GST_MATROSKA_ID_TRACKTRANSLATECODEC        0x66BF
117 #define GST_MATROSKA_ID_TRACKTRANSLATETRACKID      0x66A5
118
119
120 /* IDs in the TrackVideo master */
121 /* NOTE: This one is here only for backward compatibility.
122  * Use _TRACKDEFAULDURATION */
123 #define GST_MATROSKA_ID_VIDEOFRAMERATE             0x2383E3
124 #define GST_MATROSKA_ID_VIDEODISPLAYWIDTH          0x54B0
125 #define GST_MATROSKA_ID_VIDEODISPLAYHEIGHT         0x54BA
126 #define GST_MATROSKA_ID_VIDEODISPLAYUNIT           0x54B2
127 #define GST_MATROSKA_ID_VIDEOPIXELWIDTH            0xB0
128 #define GST_MATROSKA_ID_VIDEOPIXELHEIGHT           0xBA
129 #define GST_MATROSKA_ID_VIDEOPIXELCROPBOTTOM       0x54AA
130 #define GST_MATROSKA_ID_VIDEOPIXELCROPTOP          0x54BB
131 #define GST_MATROSKA_ID_VIDEOPIXELCROPLEFT         0x54CC
132 #define GST_MATROSKA_ID_VIDEOPIXELCROPRIGHT        0x54DD
133 #define GST_MATROSKA_ID_VIDEOFLAGINTERLACED        0x9A
134 /* semi-draft */
135 #define GST_MATROSKA_ID_VIDEOSTEREOMODE            0x53B8
136 #define GST_MATROSKA_ID_VIDEOASPECTRATIOTYPE       0x54B3
137 #define GST_MATROSKA_ID_VIDEOCOLOURSPACE           0x2EB524
138 /* semi-draft */
139 #define GST_MATROSKA_ID_VIDEOGAMMAVALUE            0x2FB523
140
141 /* IDs in the TrackAudio master */
142 #define GST_MATROSKA_ID_AUDIOSAMPLINGFREQ          0xB5
143 #define GST_MATROSKA_ID_AUDIOBITDEPTH              0x6264
144 #define GST_MATROSKA_ID_AUDIOCHANNELS              0x9F
145 /* semi-draft */
146 #define GST_MATROSKA_ID_AUDIOCHANNELPOSITIONS      0x7D7B
147 #define GST_MATROSKA_ID_AUDIOOUTPUTSAMPLINGFREQ    0x78B5
148
149 /* IDs in the TrackContentEncoding master */
150 #define GST_MATROSKA_ID_CONTENTENCODING            0x6240
151
152 /* IDs in the ContentEncoding master */
153 #define GST_MATROSKA_ID_CONTENTENCODINGORDER       0x5031
154 #define GST_MATROSKA_ID_CONTENTENCODINGSCOPE       0x5032
155 #define GST_MATROSKA_ID_CONTENTENCODINGTYPE        0x5033
156 #define GST_MATROSKA_ID_CONTENTCOMPRESSION         0x5034
157 #define GST_MATROSKA_ID_CONTENTENCRYPTION          0x5035
158
159 /* IDs in the ContentCompression master */
160 #define GST_MATROSKA_ID_CONTENTCOMPALGO            0x4254
161 #define GST_MATROSKA_ID_CONTENTCOMPSETTINGS        0x4255
162
163 /* IDs in the ContentEncryption master */
164 #define GST_MATROSKA_ID_CONTENTENCALGO             0x47E1
165 #define GST_MATROSKA_ID_CONTENTENCKEYID            0x47E2
166 #define GST_MATROSKA_ID_CONTENTSIGNATURE           0x47E3
167 #define GST_MATROSKA_ID_CONTENTSIGKEYID            0x47E4
168 #define GST_MATROSKA_ID_CONTENTSIGALGO             0x47E5
169 #define GST_MATROSKA_ID_CONTENTSIGHASHALGO         0x47E6
170
171 /* ID in the CUEs master */
172 #define GST_MATROSKA_ID_POINTENTRY                 0xBB
173
174 /* IDs in the pointentry master */
175 #define GST_MATROSKA_ID_CUETIME                    0xB3
176 #define GST_MATROSKA_ID_CUETRACKPOSITIONS          0xB7
177
178 /* IDs in the CueTrackPositions master */
179 #define GST_MATROSKA_ID_CUETRACK                   0xF7
180 #define GST_MATROSKA_ID_CUECLUSTERPOSITION         0xF1
181 #define GST_MATROSKA_ID_CUEBLOCKNUMBER             0x5378
182 /* semi-draft */
183 #define GST_MATROSKA_ID_CUECODECSTATE              0xEA
184 /* semi-draft */
185 #define GST_MATROSKA_ID_CUEREFERENCE               0xDB
186
187 /* IDs in the CueReference master */
188 /* semi-draft */
189 #define GST_MATROSKA_ID_CUEREFTIME                 0x96
190 /* semi-draft */
191 #define GST_MATROSKA_ID_CUEREFCLUSTER              0x97
192 /* semi-draft */
193 #define GST_MATROSKA_ID_CUEREFNUMBER               0x535F
194 /* semi-draft */
195 #define GST_MATROSKA_ID_CUEREFCODECSTATE           0xEB
196
197 /* IDs in the Tags master */
198 #define GST_MATROSKA_ID_TAG                        0x7373
199
200 /* in the Tag master */
201 #define GST_MATROSKA_ID_SIMPLETAG                  0x67C8
202 #define GST_MATROSKA_ID_TARGETS                    0x63C0
203
204 /* in the SimpleTag master */
205 #define GST_MATROSKA_ID_TAGNAME                    0x45A3
206 #define GST_MATROSKA_ID_TAGSTRING                  0x4487
207 #define GST_MATROSKA_ID_TAGLANGUAGE                0x447A
208 #define GST_MATROSKA_ID_TAGDEFAULT                 0x4484
209 #define GST_MATROSKA_ID_TAGBINARY                  0x4485
210
211 /* in the Targets master */
212 #define GST_MATROSKA_ID_TARGETTYPEVALUE            0x68CA
213 #define GST_MATROSKA_ID_TARGETTYPE                 0x63CA
214 #define GST_MATROSKA_ID_TARGETTRACKUID             0x63C5
215 #define GST_MATROSKA_ID_TARGETEDITIONUID           0x63C5
216 #define GST_MATROSKA_ID_TARGETCHAPTERUID           0x63C4
217 #define GST_MATROSKA_ID_TARGETATTACHMENTUID        0x63C6
218
219 /* IDs in the SeekHead master */
220 #define GST_MATROSKA_ID_SEEKENTRY                  0x4DBB
221
222 /* IDs in the SeekEntry master */
223 #define GST_MATROSKA_ID_SEEKID                     0x53AB
224 #define GST_MATROSKA_ID_SEEKPOSITION               0x53AC
225
226 /* IDs in the Cluster master */
227 #define GST_MATROSKA_ID_CLUSTERTIMECODE            0xE7
228 #define GST_MATROSKA_ID_BLOCKGROUP                 0xA0
229 #define GST_MATROSKA_ID_SIMPLEBLOCK                0xA3
230 #define GST_MATROSKA_ID_REFERENCEBLOCK             0xFB
231 #define GST_MATROSKA_ID_POSITION                   0xA7
232 #define GST_MATROSKA_ID_PREVSIZE                   0xAB
233 /* semi-draft */
234 #define GST_MATROSKA_ID_ENCRYPTEDBLOCK             0xAF
235 #define GST_MATROSKA_ID_SILENTTRACKS               0x5854
236
237 /* IDs in the SilentTracks master */
238 #define GST_MATROSKA_ID_SILENTTRACKNUMBER          0x58D7
239
240 /* IDs in the BlockGroup master */
241 #define GST_MATROSKA_ID_BLOCK                      0xA1
242 #define GST_MATROSKA_ID_BLOCKDURATION              0x9B
243 /* semi-draft */
244 #define GST_MATROSKA_ID_BLOCKVIRTUAL               0xA2
245 #define GST_MATROSKA_ID_REFERENCEBLOCK             0xFB
246 #define GST_MATROSKA_ID_BLOCKADDITIONS             0x75A1
247 #define GST_MATROSKA_ID_REFERENCEPRIORITY          0xFA
248 /* semi-draft */
249 #define GST_MATROSKA_ID_REFERENCEVIRTUAL           0xFD
250 /* semi-draft */
251 #define GST_MATROSKA_ID_CODECSTATE                 0xA4
252 #define GST_MATROSKA_ID_SLICES                     0x8E
253
254 /* IDs in the BlockAdditions master */
255 #define GST_MATROSKA_ID_BLOCKMORE                  0xA6
256
257 /* IDs in the BlockMore master */
258 #define GST_MATROSKA_ID_BLOCKADDID                 0xEE
259 #define GST_MATROSKA_ID_BLOCKADDITIONAL            0xA5
260
261 /* IDs in the Slices master */
262 #define GST_MATROSKA_ID_TIMESLICE                  0xE8
263
264 /* IDs in the TimeSlice master */
265 #define GST_MATROSKA_ID_LACENUMBER                 0xCC
266 /* semi-draft */
267 #define GST_MATROSKA_ID_FRAMENUMBER                0xCD
268 /* semi-draft */
269 #define GST_MATROSKA_ID_BLOCKADDITIONID            0xCB
270 /* semi-draft */
271 #define GST_MATROSKA_ID_TIMESLICEDELAY             0xCE
272 #define GST_MATROSKA_ID_TIMESLICEDURATION          0xCF
273
274 /* IDs in the Attachments master */
275 #define GST_MATROSKA_ID_ATTACHEDFILE               0x61A7
276
277 /* IDs in the AttachedFile master */
278 #define GST_MATROSKA_ID_FILEDESCRIPTION            0x467E
279 #define GST_MATROSKA_ID_FILENAME                   0x466E
280 #define GST_MATROSKA_ID_FILEMIMETYPE               0x4660
281 #define GST_MATROSKA_ID_FILEDATA                   0x465C
282 #define GST_MATROSKA_ID_FILEUID                    0x46AE
283 /* semi-draft */
284 #define GST_MATROSKA_ID_FILEREFERRAL               0x4675
285
286 /* IDs in the Chapters master */
287 #define GST_MATROSKA_ID_EDITIONENTRY               0x45B9
288
289 /* IDs in the EditionEntry master */
290 #define GST_MATROSKA_ID_EDITIONUID                 0x45BC
291 #define GST_MATROSKA_ID_EDITIONFLAGHIDDEN          0x45BD
292 #define GST_MATROSKA_ID_EDITIONFLAGDEFAULT         0x45DB
293 #define GST_MATROSKA_ID_EDITIONFLAGORDERED         0x45DD
294 #define GST_MATROSKA_ID_CHAPTERATOM                0xB6
295
296 /* IDs in the ChapterAtom master */
297 #define GST_MATROSKA_ID_CHAPTERUID                 0x73C4
298 #define GST_MATROSKA_ID_CHAPTERTIMESTART           0x91
299 #define GST_MATROSKA_ID_CHAPTERTIMESTOP            0x92
300 #define GST_MATROSKA_ID_CHAPTERFLAGHIDDEN          0x98
301 #define GST_MATROSKA_ID_CHAPTERFLAGENABLED         0x4598
302 #define GST_MATROSKA_ID_CHAPTERSEGMENTUID          0x6E67
303 #define GST_MATROSKA_ID_CHAPTERSEGMENTEDITIONUID   0x6EBC
304 #define GST_MATROSKA_ID_CHAPTERPHYSICALEQUIV       0x63C3
305 #define GST_MATROSKA_ID_CHAPTERTRACK               0x8F
306 #define GST_MATROSKA_ID_CHAPTERDISPLAY             0x80
307 #define GST_MATROSKA_ID_CHAPPROCESS                0x6944
308
309 /* IDs in the ChapProcess master */
310 #define GST_MATROSKA_ID_CHAPPROCESSCODECID         0x6955
311 #define GST_MATROSKA_ID_CHAPPROCESSPRIVATE         0x450D
312 #define GST_MATROSKA_ID_CHAPPROCESSCOMMAND         0x6911
313
314 /* IDs in the ChapProcessCommand master */
315 #define GST_MATROSKA_ID_CHAPPROCESSTIME            0x6922
316 #define GST_MATROSKA_ID_CHAPPROCESSDATA            0x6933
317
318 /* IDs in the ChapterDisplay master */
319 #define GST_MATROSKA_ID_CHAPSTRING                 0x85
320 #define GST_MATROSKA_ID_CHAPLANGUAGE               0x437C
321 #define GST_MATROSKA_ID_CHAPCOUNTRY                0x437E
322
323 /* IDs in the ChapterTrack master */
324 #define GST_MATROSKA_ID_CHAPTERTRACKNUMBER         0x89
325
326 /*
327  * Matroska Codec IDs. Strings.
328  */
329
330 #define GST_MATROSKA_CODEC_ID_VIDEO_VFW_FOURCC   "V_MS/VFW/FOURCC"
331 #define GST_MATROSKA_CODEC_ID_VIDEO_UNCOMPRESSED "V_UNCOMPRESSED"
332 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_SP     "V_MPEG4/ISO/SP"
333 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_ASP    "V_MPEG4/ISO/ASP"
334 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AP     "V_MPEG4/ISO/AP"
335 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG4_AVC    "V_MPEG4/ISO/AVC"
336 #define GST_MATROSKA_CODEC_ID_VIDEO_MSMPEG4V3    "V_MPEG4/MS/V3"
337 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG1        "V_MPEG1"
338 #define GST_MATROSKA_CODEC_ID_VIDEO_MPEG2        "V_MPEG2"
339 /* FIXME: not (yet) in the spec! */
340 #define GST_MATROSKA_CODEC_ID_VIDEO_MJPEG        "V_MJPEG"
341 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO1   "V_REAL/RV10"
342 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO2   "V_REAL/RV20"
343 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO3   "V_REAL/RV30"
344 #define GST_MATROSKA_CODEC_ID_VIDEO_REALVIDEO4   "V_REAL/RV40"
345 #define GST_MATROSKA_CODEC_ID_VIDEO_THEORA       "V_THEORA"
346 #define GST_MATROSKA_CODEC_ID_VIDEO_QUICKTIME    "V_QUICKTIME"
347 #define GST_MATROSKA_CODEC_ID_VIDEO_SNOW         "V_SNOW"
348 #define GST_MATROSKA_CODEC_ID_VIDEO_DIRAC        "V_DIRAC"
349 #define GST_MATROSKA_CODEC_ID_VIDEO_VP8          "V_VP8"
350
351 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L1       "A_MPEG/L1"
352 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L2       "A_MPEG/L2"
353 #define GST_MATROSKA_CODEC_ID_AUDIO_MPEG1_L3       "A_MPEG/L3"
354 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_INT_BE     "A_PCM/INT/BIG"
355 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_INT_LE     "A_PCM/INT/LIT"
356 #define GST_MATROSKA_CODEC_ID_AUDIO_PCM_FLOAT      "A_PCM/FLOAT/IEEE"
357 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3            "A_AC3"
358 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3_BSID9      "A_AC3/BSID9"
359 #define GST_MATROSKA_CODEC_ID_AUDIO_AC3_BSID10     "A_AC3/BSID10"
360 #define GST_MATROSKA_CODEC_ID_AUDIO_EAC3           "A_EAC3"
361 #define GST_MATROSKA_CODEC_ID_AUDIO_DTS            "A_DTS"
362 #define GST_MATROSKA_CODEC_ID_AUDIO_VORBIS         "A_VORBIS"
363 #define GST_MATROSKA_CODEC_ID_AUDIO_FLAC           "A_FLAC"
364 /* FIXME: not yet in the spec */
365 #define GST_MATROSKA_CODEC_ID_AUDIO_SPEEX          "A_SPEEX"
366 #define GST_MATROSKA_CODEC_ID_AUDIO_ACM            "A_MS/ACM"
367 #define GST_MATROSKA_CODEC_ID_AUDIO_TTA            "A_TTA1"
368 #define GST_MATROSKA_CODEC_ID_AUDIO_WAVPACK4       "A_WAVPACK4"
369 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_14_4      "A_REAL/14_4"
370 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_28_8      "A_REAL/28_8"
371 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_COOK      "A_REAL/COOK"
372 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_SIPR      "A_REAL/SIPR"
373 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_RALF      "A_REAL/RALF"
374 #define GST_MATROSKA_CODEC_ID_AUDIO_REAL_ATRC      "A_REAL/ATRC"
375 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC            "A_AAC"
376 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC_MPEG2      "A_AAC/MPEG2/"
377 #define GST_MATROSKA_CODEC_ID_AUDIO_AAC_MPEG4      "A_AAC/MPEG4/"
378 #define GST_MATROSKA_CODEC_ID_AUDIO_QUICKTIME_QDMC "A_QUICKTIME/QDMC"
379 #define GST_MATROSKA_CODEC_ID_AUDIO_QUICKTIME_QDM2 "A_QUICKTIME/QDM2"
380 /* Undefined for now:
381 #define GST_MATROSKA_CODEC_ID_AUDIO_MPC            "A_MPC"
382 */
383
384 #define GST_MATROSKA_CODEC_ID_SUBTITLE_ASCII     "S_TEXT/ASCII"
385 #define GST_MATROSKA_CODEC_ID_SUBTITLE_UTF8      "S_TEXT/UTF8"
386 #define GST_MATROSKA_CODEC_ID_SUBTITLE_SSA       "S_TEXT/SSA"
387 #define GST_MATROSKA_CODEC_ID_SUBTITLE_ASS       "S_TEXT/ASS" 
388 #define GST_MATROSKA_CODEC_ID_SUBTITLE_USF       "S_TEXT/USF"
389 #define GST_MATROSKA_CODEC_ID_SUBTITLE_VOBSUB    "S_VOBSUB"
390 #define GST_MATROSKA_CODEC_ID_SUBTITLE_HDMVPGS   "S_HDMV/PGS"
391 #define GST_MATROSKA_CODEC_ID_SUBTITLE_BMP       "S_IMAGE/BMP"
392 #define GST_MATROSKA_CODEC_ID_SUBTITLE_KATE      "S_KATE"
393
394 /*
395  * Matroska tags. Strings.
396  */
397
398 #define GST_MATROSKA_TAG_ID_TITLE    "TITLE"
399 #define GST_MATROSKA_TAG_ID_AUTHOR   "AUTHOR"
400 #define GST_MATROSKA_TAG_ID_ARTIST   "ARTIST"
401 #define GST_MATROSKA_TAG_ID_ALBUM    "ALBUM"
402 #define GST_MATROSKA_TAG_ID_COMMENTS "COMMENTS"
403 #define GST_MATROSKA_TAG_ID_BITSPS   "BITSPS"
404 #define GST_MATROSKA_TAG_ID_BPS      "BPS"
405 #define GST_MATROSKA_TAG_ID_ENCODER  "ENCODER"
406 #define GST_MATROSKA_TAG_ID_DATE     "DATE"
407 #define GST_MATROSKA_TAG_ID_ISRC     "ISRC"
408 #define GST_MATROSKA_TAG_ID_COPYRIGHT "COPYRIGHT"
409 #define GST_MATROSKA_TAG_ID_BPM       "BPM"
410 #define GST_MATROSKA_TAG_ID_TERMS_OF_USE "TERMS_OF_USE"
411 #define GST_MATROSKA_TAG_ID_DATE      "DATE"
412 #define GST_MATROSKA_TAG_ID_COMPOSER  "COMPOSER"
413 #define GST_MATROSKA_TAG_ID_LEAD_PERFORMER  "LEAD_PERFOMER"
414 #define GST_MATROSKA_TAG_ID_GENRE     "GENRE"
415
416 /*
417  * TODO: add this tag & mappings
418  * "REPLAYGAIN_GAIN" -> GST_TAG_*_GAIN   see http://replaygain.hydrogenaudio.org/rg_data_format.html
419  * "REPLAYGAIN_PEAK" -> GST_TAG_*_PEAK   see http://replaygain.hydrogenaudio.org/peak_data_format.html
420  * both are depending on the target (track, album?)
421  *
422  * "TOTAL_PARTS" -> GST_TAG_TRACK_COUNT    depending on target
423  * "PART_NUMBER" -> GST_TAG_TRACK_NUMBER   depending on target
424  *
425  * "SORT_WITH" -> nested in other elements, GST_TAG_TITLE_SORTNAME, etc
426  *
427  * TODO: maybe add custom gstreamer tags for other standard matroska tags,
428  * see http://matroska.org/technical/specs/tagging/index.html
429  *
430  * TODO: handle tag targets and nesting correctly
431  */
432
433 /*
434  * Enumerations for various types (mapping from binary
435  * value to what it actually means).
436  */
437
438 typedef enum {
439   GST_MATROSKA_TRACK_TYPE_VIDEO    = 0x1,
440   GST_MATROSKA_TRACK_TYPE_AUDIO    = 0x2,
441   GST_MATROSKA_TRACK_TYPE_COMPLEX  = 0x3,
442   GST_MATROSKA_TRACK_TYPE_LOGO     = 0x10,
443   GST_MATROSKA_TRACK_TYPE_SUBTITLE = 0x11,
444   GST_MATROSKA_TRACK_TYPE_BUTTONS  = 0x12,
445   GST_MATROSKA_TRACK_TYPE_CONTROL  = 0x20,
446 } GstMatroskaTrackType;
447
448 typedef enum {
449   GST_MATROSKA_ASPECT_RATIO_MODE_FREE  = 0x0,
450   GST_MATROSKA_ASPECT_RATIO_MODE_KEEP  = 0x1,
451   GST_MATROSKA_ASPECT_RATIO_MODE_FIXED = 0x2,
452 } GstMatroskaAspectRatioMode;
453
454 /*
455  * These aren't in any way "matroska-form" things,
456  * it's just something I use in the muxer/demuxer.
457  */
458
459 typedef enum {
460   GST_MATROSKA_TRACK_ENABLED = (1<<0),
461   GST_MATROSKA_TRACK_DEFAULT = (1<<1),
462   GST_MATROSKA_TRACK_LACING  = (1<<2),
463   GST_MATROSKA_TRACK_FORCED  = (1<<3),
464   GST_MATROSKA_TRACK_SHIFT   = (1<<16)
465 } GstMatroskaTrackFlags;
466
467 typedef enum {
468   GST_MATROSKA_VIDEOTRACK_INTERLACED = (GST_MATROSKA_TRACK_SHIFT<<0)
469 } GstMatroskaVideoTrackFlags;
470
471
472 typedef struct _GstMatroskaTrackContext GstMatroskaTrackContext;
473
474 /* TODO: check if all fields are used */
475 struct _GstMatroskaTrackContext {
476   GstPad       *pad;
477   GstCaps      *caps;
478   guint         index;
479   GstFlowReturn last_flow;
480   /* reverse playback */
481   GstClockTime  from_time;
482   gint64                   from_offset;
483   gint64                   to_offset;
484
485   GArray       *index_table;
486
487   gint          index_writer_id;
488
489   /* some often-used info */
490   gchar        *codec_id, *codec_name, *name, *language;
491   guint8       *codec_priv;
492   guint         codec_priv_size;
493   guint8       *codec_state;
494   guint         codec_state_size;
495   GstMatroskaTrackType type;
496   guint         uid, num;
497   GstMatroskaTrackFlags flags;
498   guint64       default_duration;
499   guint64       pos;
500   gdouble       timecodescale;
501
502   gboolean      set_discont; /* TRUE = set DISCONT flag on next buffer */
503
504   /* Special flag for Vorbis and Theora, for which we need to send
505    * codec_priv first before sending any data, and just testing
506    * for time == 0 is not enough to detect that. Used by demuxer */
507   gboolean      send_xiph_headers;
508
509   /* Special flag for Flac, for which we need to reconstruct the header
510    * buffer from the codec_priv data before sending any data, and just
511    * testing for time == 0 is not enough to detect that. Used by demuxer */
512   gboolean      send_flac_headers;
513
514   /* Special flag for Speex, for which we need to reconstruct the header
515    * buffer from the codec_priv data before sending any data, and just
516    * testing for time == 0 is not enough to detect that. Used by demuxer */
517   gboolean      send_speex_headers;
518
519   /* Special flag for VobSub, for which we have to send colour table info
520    * (if available) first before sending any data, and just testing
521    * for time == 0 is not enough to detect that. Used by demuxer */
522   gboolean      send_dvd_event;
523
524   /* Special counter for muxer to skip the first N vorbis/theora headers -
525    * they are put into codec private data, not muxed into the stream */
526   guint         xiph_headers_to_skip;
527
528   /* Used for postprocessing a frame before it is pushed from the demuxer */
529   GstFlowReturn (*postprocess_frame) (GstElement *element,
530                                       GstMatroskaTrackContext *context,
531                                       GstBuffer **buffer);
532
533   /* Tags to send after newsegment event */
534   GstTagList   *pending_tags;
535
536   /* A GArray of GstMatroskaTrackEncoding structures which contain the
537    * encoding (compression/encryption) settings for this track, if any */
538   GArray       *encodings;
539
540   /* Whether the stream is EOS */
541   gboolean      eos;
542 #ifdef MKV_DEMUX_MODIFICATION
543   GstClockTime last_ts;
544   GQueue* queue;
545
546   gboolean found_next_kframe;
547   gint32 num_frames_bw_keyframes;
548   guint64 avg_duration_bw_keyframes;
549   guint32 frames_to_show_bw_keyframes;
550   GstClockTime prev_kframe_timestamp;
551   GstClockTime next_kframe_timestamp;
552 #endif
553
554   /* any alignment we need our output buffers to have */
555   gint          alignment;
556 };
557
558 typedef struct _GstMatroskaTrackVideoContext {
559   GstMatroskaTrackContext parent;
560
561   guint         pixel_width, pixel_height;
562   guint         display_width, display_height;
563   gdouble       default_fps;
564   GstMatroskaAspectRatioMode asr_mode;
565   guint32       fourcc;
566
567   /* QoS */
568   GstClockTime  earliest_time;
569
570   GstBuffer     *dirac_unit;
571 } GstMatroskaTrackVideoContext;
572
573 typedef struct _GstMatroskaTrackAudioContext {
574   GstMatroskaTrackContext parent;
575
576   guint         samplerate, channels, bitdepth;
577
578   guint32       wvpk_block_index;
579 } GstMatroskaTrackAudioContext;
580
581 typedef struct _GstMatroskaTrackSubtitleContext {
582   GstMatroskaTrackContext parent;
583
584   gboolean    check_utf8;     /* buffers should be valid UTF-8 */
585   gboolean    check_markup;   /* check if buffers contain markup
586                                * or plaintext and escape characters */
587   gboolean    invalid_utf8;   /* work around broken files      */
588   gboolean    seen_markup_tag;  /* markup found in text */
589 } GstMatroskaTrackSubtitleContext;
590
591 typedef struct _GstMatroskaIndex {
592   guint64        pos;      /* of the corresponding *cluster*! */
593   guint16        track;    /* reference to 'num' */
594   GstClockTime   time;     /* in nanoseconds */
595   guint32        block;    /* number of the block in the cluster */
596 } GstMatroskaIndex;
597
598 typedef struct _Wavpack4Header {
599   guchar  ck_id [4];     /* "wvpk"                                         */
600   guint32 ck_size;       /* size of entire frame (minus 8, of course)      */
601   guint16 version;       /* 0x403 for now                                  */
602   guint8  track_no;      /* track number (0 if not used, like now)         */
603   guint8  index_no;      /* remember these? (0 if not used, like now)      */
604   guint32 total_samples; /* for entire file (-1 if unknown)                */
605   guint32 block_index;   /* index of first sample in block (to file begin) */
606   guint32 block_samples; /* # samples in this block                        */
607   guint32 flags;         /* various flags for id and decoding              */
608   guint32 crc;           /* crc for actual decoded data                    */
609 } Wavpack4Header;
610
611 typedef enum {
612   GST_MATROSKA_TRACK_ENCODING_SCOPE_FRAME = (1<<0),
613   GST_MATROSKA_TRACK_ENCODING_SCOPE_CODEC_DATA = (1<<1),
614   GST_MATROSKA_TRACK_ENCODING_SCOPE_NEXT_CONTENT_ENCODING = (1<<2)
615 } GstMatroskaTrackEncodingScope;
616
617 typedef enum {
618   GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_ZLIB = 0,
619   GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_BZLIB = 1,
620   GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_LZO1X = 2,
621   GST_MATROSKA_TRACK_COMPRESSION_ALGORITHM_HEADERSTRIP = 3
622 } GstMatroskaTrackCompressionAlgorithm;
623
624 typedef struct _GstMatroskaTrackEncoding {
625   guint   order;
626   guint   scope     : 3;
627   guint   type      : 1;
628   guint   comp_algo : 2;
629   guint8 *comp_settings;
630   guint   comp_settings_length;
631 } GstMatroskaTrackEncoding;
632
633 gboolean gst_matroska_track_init_video_context    (GstMatroskaTrackContext ** p_context);
634 gboolean gst_matroska_track_init_audio_context    (GstMatroskaTrackContext ** p_context);
635 gboolean gst_matroska_track_init_subtitle_context (GstMatroskaTrackContext ** p_context);
636
637 void gst_matroska_register_tags (void);
638
639 #endif /* __GST_MATROSKA_IDS_H__ */