1/****************************************************************************
2** libmatroska : parse Matroska files, see http://www.matroska.org/
3**
4** <file/class MATROSKA_DLL_API description>
5**
6** Copyright (C) 2002-2004 Steve Lhomme.  All rights reserved.
7**
8** This file is part of libmatroska.
9**
10** This library is free software; you can redistribute it and/or
11** modify it under the terms of the GNU Lesser General Public
12** License as published by the Free Software Foundation; either
13** version 2.1 of the License, or (at your option) any later version.
14**
15** This library is distributed in the hope that it will be useful,
16** but WITHOUT ANY WARRANTY; without even the implied warranty of
17** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18** Lesser General Public License for more details.
19**
20** You should have received a copy of the GNU Lesser General Public
21** License along with this library; if not, write to the Free Software
22** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23**
24** See http://www.matroska.org/license/lgpl/ for LGPL licensing information.
25**
26** Contact license@matroska.org if any conditions of this licensing are
27** not clear to you.
28**
29**********************************************************************/
30
31/*!
32	\file
33	\version \$Id: KaxTag.h,v 1.9 2004/04/14 23:26:17 robux4 Exp $
34	\author Jory Stone     <jcsston @ toughguy.net>
35	\author Steve Lhomme   <robux4 @ users.sf.net>
36*/
37#ifndef LIBMATROSKA_TAG_H
38#define LIBMATROSKA_TAG_H
39
40#include "matroska/KaxTypes.h"
41#include "ebml/EbmlMaster.h"
42#include "ebml/EbmlFloat.h"
43#include "ebml/EbmlSInteger.h"
44#include "ebml/EbmlUInteger.h"
45#include "ebml/EbmlString.h"
46#include "ebml/EbmlUnicodeString.h"
47#include "ebml/EbmlBinary.h"
48
49using namespace LIBEBML_NAMESPACE;
50
51START_LIBMATROSKA_NAMESPACE
52
53class MATROSKA_DLL_API KaxTag : public EbmlMaster {
54	public:
55		KaxTag();
56		KaxTag(const KaxTag & ElementToClone) :EbmlMaster(ElementToClone) {}
57		static EbmlElement & Create() {return *(new KaxTag);}
58		const EbmlCallbacks & Generic() const {return ClassInfos;}
59		static const EbmlCallbacks ClassInfos;
60		operator const EbmlId &() const {return ClassInfos.GlobalId;}
61		EbmlElement * Clone() const {return new KaxTag(*this);}
62};
63
64class MATROSKA_DLL_API KaxTagTargets : public EbmlMaster {
65	public:
66		KaxTagTargets();
67		KaxTagTargets(const KaxTagTargets & ElementToClone) :EbmlMaster(ElementToClone) {}
68		static EbmlElement & Create() {return *(new KaxTagTargets);}
69		const EbmlCallbacks & Generic() const {return ClassInfos;}
70		static const EbmlCallbacks ClassInfos;
71		operator const EbmlId &() const {return ClassInfos.GlobalId;}
72		EbmlElement * Clone() const {return new KaxTagTargets(*this);}
73};
74
75class MATROSKA_DLL_API KaxTagGeneral : public EbmlMaster {
76	public:
77		KaxTagGeneral();
78		KaxTagGeneral(const KaxTagGeneral & ElementToClone) :EbmlMaster(ElementToClone) {}
79		static EbmlElement & Create() {return *(new KaxTagGeneral);}
80		const EbmlCallbacks & Generic() const {return ClassInfos;}
81		static const EbmlCallbacks ClassInfos;
82		operator const EbmlId &() const {return ClassInfos.GlobalId;}
83		EbmlElement * Clone() const {return new KaxTagGeneral(*this);}
84};
85
86class MATROSKA_DLL_API KaxTagGenres : public EbmlMaster {
87	public:
88		KaxTagGenres();
89		KaxTagGenres(const KaxTagGenres & ElementToClone) :EbmlMaster(ElementToClone) {}
90		static EbmlElement & Create() {return *(new KaxTagGenres);}
91		const EbmlCallbacks & Generic() const {return ClassInfos;}
92		static const EbmlCallbacks ClassInfos;
93		operator const EbmlId &() const {return ClassInfos.GlobalId;}
94		EbmlElement * Clone() const {return new KaxTagGenres(*this);}
95};
96
97class MATROSKA_DLL_API KaxTagAudioSpecific : public EbmlMaster {
98	public:
99		KaxTagAudioSpecific();
100		KaxTagAudioSpecific(const KaxTagAudioSpecific & ElementToClone) :EbmlMaster(ElementToClone) {}
101		static EbmlElement & Create() {return *(new KaxTagAudioSpecific);}
102		const EbmlCallbacks & Generic() const {return ClassInfos;}
103		static const EbmlCallbacks ClassInfos;
104		operator const EbmlId &() const {return ClassInfos.GlobalId;}
105		EbmlElement * Clone() const {return new KaxTagAudioSpecific(*this);}
106};
107
108class MATROSKA_DLL_API KaxTagImageSpecific : public EbmlMaster {
109	public:
110		KaxTagImageSpecific();
111		KaxTagImageSpecific(const KaxTagImageSpecific & ElementToClone) :EbmlMaster(ElementToClone) {}
112		static EbmlElement & Create() {return *(new KaxTagImageSpecific);}
113		const EbmlCallbacks & Generic() const {return ClassInfos;}
114		static const EbmlCallbacks ClassInfos;
115		operator const EbmlId &() const {return ClassInfos.GlobalId;}
116		EbmlElement * Clone() const {return new KaxTagImageSpecific(*this);}
117};
118
119class MATROSKA_DLL_API KaxTagTargetTypeValue : public EbmlUInteger {
120	public:
121		KaxTagTargetTypeValue() :EbmlUInteger(50) {}
122		KaxTagTargetTypeValue(const KaxTagTargetTypeValue & ElementToClone) :EbmlUInteger(ElementToClone) {}
123
124		static EbmlElement & Create() {return *(new KaxTagTargetTypeValue);}
125		const EbmlCallbacks & Generic() const {return ClassInfos;}
126		static const EbmlCallbacks ClassInfos;
127		operator const EbmlId &() const {return ClassInfos.GlobalId;}
128		EbmlElement * Clone() const {return new KaxTagTargetTypeValue(*this);}
129};
130
131class MATROSKA_DLL_API KaxTagTargetType : public EbmlString {
132	public:
133		KaxTagTargetType() {}
134		KaxTagTargetType(const KaxTagTargetType & ElementToClone) :EbmlString(ElementToClone) {}
135		static EbmlElement & Create() {return *(new KaxTagTargetType);}
136		const EbmlCallbacks & Generic() const {return ClassInfos;}
137		static const EbmlCallbacks ClassInfos;
138		operator const EbmlId &() const {return ClassInfos.GlobalId;}
139		EbmlElement * Clone() const {return new KaxTagTargetType(*this);}
140};
141
142class MATROSKA_DLL_API KaxTagTrackUID : public EbmlUInteger {
143	public:
144		KaxTagTrackUID() :EbmlUInteger(0) {}
145		KaxTagTrackUID(const KaxTagTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
146
147		static EbmlElement & Create() {return *(new KaxTagTrackUID);}
148		const EbmlCallbacks & Generic() const {return ClassInfos;}
149		static const EbmlCallbacks ClassInfos;
150		operator const EbmlId &() const {return ClassInfos.GlobalId;}
151		EbmlElement * Clone() const {return new KaxTagTrackUID(*this);}
152};
153
154class MATROSKA_DLL_API KaxTagEditionUID : public EbmlUInteger {
155	public:
156		KaxTagEditionUID() :EbmlUInteger(0) {}
157		KaxTagEditionUID(const KaxTagEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
158		static EbmlElement & Create() {return *(new KaxTagEditionUID);}
159		const EbmlCallbacks & Generic() const {return ClassInfos;}
160		static const EbmlCallbacks ClassInfos;
161		operator const EbmlId &() const {return ClassInfos.GlobalId;}
162		EbmlElement * Clone() const {return new KaxTagEditionUID(*this);}
163};
164
165class MATROSKA_DLL_API KaxTagChapterUID : public EbmlUInteger {
166	public:
167		KaxTagChapterUID() :EbmlUInteger(0) {}
168		KaxTagChapterUID(const KaxTagChapterUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
169		static EbmlElement & Create() {return *(new KaxTagChapterUID);}
170		const EbmlCallbacks & Generic() const {return ClassInfos;}
171		static const EbmlCallbacks ClassInfos;
172		operator const EbmlId &() const {return ClassInfos.GlobalId;}
173		EbmlElement * Clone() const {return new KaxTagChapterUID(*this);}
174};
175
176class MATROSKA_DLL_API KaxTagAttachmentUID : public EbmlUInteger {
177	public:
178		KaxTagAttachmentUID() :EbmlUInteger(0) {}
179		KaxTagAttachmentUID(const KaxTagAttachmentUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
180		static EbmlElement & Create() {return *(new KaxTagAttachmentUID);}
181		const EbmlCallbacks & Generic() const {return ClassInfos;}
182		static const EbmlCallbacks ClassInfos;
183		operator const EbmlId &() const {return ClassInfos.GlobalId;}
184		EbmlElement * Clone() const {return new KaxTagAttachmentUID(*this);}
185};
186
187class MATROSKA_DLL_API KaxTagArchivalLocation : public EbmlUnicodeString {
188	public:
189		KaxTagArchivalLocation() {}
190		KaxTagArchivalLocation(const KaxTagArchivalLocation & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
191		static EbmlElement & Create() {return *(new KaxTagArchivalLocation);}
192		const EbmlCallbacks & Generic() const {return ClassInfos;}
193		static const EbmlCallbacks ClassInfos;
194		operator const EbmlId &() const {return ClassInfos.GlobalId;}
195		EbmlElement * Clone() const {return new KaxTagArchivalLocation(*this);}
196};
197
198class MATROSKA_DLL_API KaxTagAudioEncryption : public EbmlBinary {
199	public:
200		KaxTagAudioEncryption() {}
201		KaxTagAudioEncryption(const KaxTagAudioEncryption & ElementToClone) :EbmlBinary(ElementToClone){}
202		static EbmlElement & Create() {return *(new KaxTagAudioEncryption);}
203		bool ValidateSize() const {return true;} // we don't mind about what's inside
204		const EbmlCallbacks & Generic() const {return ClassInfos;}
205		static const EbmlCallbacks ClassInfos;
206		operator const EbmlId &() const {return ClassInfos.GlobalId;}
207		EbmlElement * Clone() const {return new KaxTagAudioEncryption(*this);}
208};
209
210class MATROSKA_DLL_API KaxTagAudioGain : public EbmlFloat {
211	public:
212		KaxTagAudioGain() {}
213		KaxTagAudioGain(const KaxTagAudioGain & ElementToClone) :EbmlFloat(ElementToClone) {}
214		static EbmlElement & Create() {return *(new KaxTagAudioGain);}
215		const EbmlCallbacks & Generic() const {return ClassInfos;}
216		static const EbmlCallbacks ClassInfos;
217		operator const EbmlId &() const {return ClassInfos.GlobalId;}
218		EbmlElement * Clone() const {return new KaxTagAudioGain(*this);}
219};
220
221class MATROSKA_DLL_API KaxTagAudioGenre : public EbmlString {
222	public:
223		KaxTagAudioGenre() {}
224		KaxTagAudioGenre(const KaxTagAudioGenre & ElementToClone) :EbmlString(ElementToClone) {}
225		static EbmlElement & Create() {return *(new KaxTagAudioGenre);}
226		const EbmlCallbacks & Generic() const {return ClassInfos;}
227		static const EbmlCallbacks ClassInfos;
228		operator const EbmlId &() const {return ClassInfos.GlobalId;}
229		EbmlElement * Clone() const {return new KaxTagAudioGenre(*this);}
230};
231
232class MATROSKA_DLL_API KaxTagAudioPeak : public EbmlFloat {
233	public:
234		KaxTagAudioPeak() {}
235		KaxTagAudioPeak(const KaxTagAudioPeak & ElementToClone) :EbmlFloat(ElementToClone) {}
236		static EbmlElement & Create() {return *(new KaxTagAudioPeak);}
237		const EbmlCallbacks & Generic() const {return ClassInfos;}
238		static const EbmlCallbacks ClassInfos;
239		operator const EbmlId &() const {return ClassInfos.GlobalId;}
240		EbmlElement * Clone() const {return new KaxTagAudioPeak(*this);}
241};
242
243class MATROSKA_DLL_API KaxTagBibliography : public EbmlUnicodeString {
244	public:
245		KaxTagBibliography() {}
246		KaxTagBibliography(const KaxTagBibliography & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
247		static EbmlElement & Create() {return *(new KaxTagBibliography);}
248		const EbmlCallbacks & Generic() const {return ClassInfos;}
249		static const EbmlCallbacks ClassInfos;
250		operator const EbmlId &() const {return ClassInfos.GlobalId;}
251		EbmlElement * Clone() const {return new KaxTagBibliography(*this);}
252};
253
254class MATROSKA_DLL_API KaxTagBPM : public EbmlFloat {
255	public:
256		KaxTagBPM() {}
257		KaxTagBPM(const KaxTagBPM & ElementToClone) :EbmlFloat(ElementToClone) {}
258		static EbmlElement & Create() {return *(new KaxTagBPM);}
259		const EbmlCallbacks & Generic() const {return ClassInfos;}
260		static const EbmlCallbacks ClassInfos;
261		operator const EbmlId &() const {return ClassInfos.GlobalId;}
262		EbmlElement * Clone() const {return new KaxTagBPM(*this);}
263};
264
265class MATROSKA_DLL_API KaxTagCaptureDPI : public EbmlUInteger {
266	public:
267		KaxTagCaptureDPI() {}
268		KaxTagCaptureDPI(const KaxTagCaptureDPI & ElementToClone) :EbmlUInteger(ElementToClone) {}
269		static EbmlElement & Create() {return *(new KaxTagCaptureDPI);}
270		const EbmlCallbacks & Generic() const {return ClassInfos;}
271		static const EbmlCallbacks ClassInfos;
272		operator const EbmlId &() const {return ClassInfos.GlobalId;}
273		EbmlElement * Clone() const {return new KaxTagCaptureDPI(*this);}
274};
275
276class MATROSKA_DLL_API KaxTagCaptureLightness : public EbmlBinary {
277	public:
278		KaxTagCaptureLightness() {}
279		KaxTagCaptureLightness(const KaxTagCaptureLightness & ElementToClone) :EbmlBinary(ElementToClone){}
280		static EbmlElement & Create() {return *(new KaxTagCaptureLightness);}
281		bool ValidateSize() const {return true;} // we don't mind about what's inside
282		const EbmlCallbacks & Generic() const {return ClassInfos;}
283		static const EbmlCallbacks ClassInfos;
284		operator const EbmlId &() const {return ClassInfos.GlobalId;}
285		EbmlElement * Clone() const {return new KaxTagCaptureLightness(*this);}
286};
287
288class MATROSKA_DLL_API KaxTagCapturePaletteSetting : public EbmlUInteger {
289	public:
290		KaxTagCapturePaletteSetting() {}
291		KaxTagCapturePaletteSetting(const KaxTagCapturePaletteSetting & ElementToClone) :EbmlUInteger(ElementToClone) {}
292		static EbmlElement & Create() {return *(new KaxTagCapturePaletteSetting);}
293		const EbmlCallbacks & Generic() const {return ClassInfos;}
294		static const EbmlCallbacks ClassInfos;
295		operator const EbmlId &() const {return ClassInfos.GlobalId;}
296		EbmlElement * Clone() const {return new KaxTagCapturePaletteSetting(*this);}
297};
298
299class MATROSKA_DLL_API KaxTagCaptureSharpness : public EbmlBinary {
300	public:
301		KaxTagCaptureSharpness() {}
302		KaxTagCaptureSharpness(const KaxTagCaptureSharpness & ElementToClone) :EbmlBinary(ElementToClone){}
303		static EbmlElement & Create() {return *(new KaxTagCaptureSharpness);}
304		bool ValidateSize() const {return true;} // we don't mind about what's inside
305		const EbmlCallbacks & Generic() const {return ClassInfos;}
306		static const EbmlCallbacks ClassInfos;
307		operator const EbmlId &() const {return ClassInfos.GlobalId;}
308		EbmlElement * Clone() const {return new KaxTagCaptureSharpness(*this);}
309};
310
311class MATROSKA_DLL_API KaxTagCropped : public EbmlUnicodeString {
312	public:
313		KaxTagCropped() {}
314		KaxTagCropped(const KaxTagCropped & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
315		static EbmlElement & Create() {return *(new KaxTagCropped);}
316		const EbmlCallbacks & Generic() const {return ClassInfos;}
317		static const EbmlCallbacks ClassInfos;
318		operator const EbmlId &() const {return ClassInfos.GlobalId;}
319		EbmlElement * Clone() const {return new KaxTagCropped(*this);}
320};
321
322class MATROSKA_DLL_API KaxTagDiscTrack : public EbmlUInteger {
323	public:
324		KaxTagDiscTrack() {}
325		KaxTagDiscTrack(const KaxTagDiscTrack & ElementToClone) :EbmlUInteger(ElementToClone) {}
326		static EbmlElement & Create() {return *(new KaxTagDiscTrack);}
327		const EbmlCallbacks & Generic() const {return ClassInfos;}
328		static const EbmlCallbacks ClassInfos;
329		operator const EbmlId &() const {return ClassInfos.GlobalId;}
330		EbmlElement * Clone() const {return new KaxTagDiscTrack(*this);}
331};
332
333class MATROSKA_DLL_API KaxTagEncoder : public EbmlUnicodeString {
334	public:
335		KaxTagEncoder() {}
336		KaxTagEncoder(const KaxTagEncoder & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
337		static EbmlElement & Create() {return *(new KaxTagEncoder);}
338		const EbmlCallbacks & Generic() const {return ClassInfos;}
339		static const EbmlCallbacks ClassInfos;
340		operator const EbmlId &() const {return ClassInfos.GlobalId;}
341		EbmlElement * Clone() const {return new KaxTagEncoder(*this);}
342};
343
344class MATROSKA_DLL_API KaxTagEncodeSettings : public EbmlUnicodeString {
345	public:
346		KaxTagEncodeSettings() {}
347		KaxTagEncodeSettings(const KaxTagEncodeSettings & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
348		static EbmlElement & Create() {return *(new KaxTagEncodeSettings);}
349		const EbmlCallbacks & Generic() const {return ClassInfos;}
350		static const EbmlCallbacks ClassInfos;
351		operator const EbmlId &() const {return ClassInfos.GlobalId;}
352		EbmlElement * Clone() const {return new KaxTagEncodeSettings(*this);}
353};
354
355class MATROSKA_DLL_API KaxTagEqualisation : public EbmlBinary {
356	public:
357		KaxTagEqualisation() {}
358		KaxTagEqualisation(const KaxTagEqualisation & ElementToClone) :EbmlBinary(ElementToClone){}
359		static EbmlElement & Create() {return *(new KaxTagEqualisation);}
360		bool ValidateSize() const {return true;} // we don't mind about what's inside
361		const EbmlCallbacks & Generic() const {return ClassInfos;}
362		static const EbmlCallbacks ClassInfos;
363		operator const EbmlId &() const {return ClassInfos.GlobalId;}
364		EbmlElement * Clone() const {return new KaxTagEqualisation(*this);}
365};
366
367class MATROSKA_DLL_API KaxTagFile : public EbmlUnicodeString {
368	public:
369		KaxTagFile() {}
370		KaxTagFile(const KaxTagFile & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
371		static EbmlElement & Create() {return *(new KaxTagFile);}
372		const EbmlCallbacks & Generic() const {return ClassInfos;}
373		static const EbmlCallbacks ClassInfos;
374		operator const EbmlId &() const {return ClassInfos.GlobalId;}
375		EbmlElement * Clone() const {return new KaxTagFile(*this);}
376};
377
378class MATROSKA_DLL_API KaxTagInitialKey : public EbmlString {
379	public:
380		KaxTagInitialKey() {}
381		KaxTagInitialKey(const KaxTagInitialKey & ElementToClone) :EbmlString(ElementToClone) {}
382		static EbmlElement & Create() {return *(new KaxTagInitialKey);}
383		const EbmlCallbacks & Generic() const {return ClassInfos;}
384		static const EbmlCallbacks ClassInfos;
385		operator const EbmlId &() const {return ClassInfos.GlobalId;}
386		EbmlElement * Clone() const {return new KaxTagInitialKey(*this);}
387};
388
389class MATROSKA_DLL_API KaxTagKeywords : public EbmlUnicodeString {
390	public:
391		KaxTagKeywords() {}
392		KaxTagKeywords(const KaxTagKeywords & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
393		static EbmlElement & Create() {return *(new KaxTagKeywords);}
394		const EbmlCallbacks & Generic() const {return ClassInfos;}
395		static const EbmlCallbacks ClassInfos;
396		operator const EbmlId &() const {return ClassInfos.GlobalId;}
397		EbmlElement * Clone() const {return new KaxTagKeywords(*this);}
398};
399
400class MATROSKA_DLL_API KaxTagLanguage : public EbmlString {
401	public:
402		KaxTagLanguage() {}
403		KaxTagLanguage(const KaxTagLanguage & ElementToClone) :EbmlString(ElementToClone) {}
404		static EbmlElement & Create() {return *(new KaxTagLanguage);}
405		const EbmlCallbacks & Generic() const {return ClassInfos;}
406		static const EbmlCallbacks ClassInfos;
407		operator const EbmlId &() const {return ClassInfos.GlobalId;}
408		EbmlElement * Clone() const {return new KaxTagLanguage(*this);}
409};
410
411class MATROSKA_DLL_API KaxTagLength : public EbmlUInteger {
412	public:
413		KaxTagLength() {}
414		KaxTagLength(const KaxTagLength & ElementToClone) :EbmlUInteger(ElementToClone) {}
415		static EbmlElement & Create() {return *(new KaxTagLength);}
416		const EbmlCallbacks & Generic() const {return ClassInfos;}
417		static const EbmlCallbacks ClassInfos;
418		operator const EbmlId &() const {return ClassInfos.GlobalId;}
419		EbmlElement * Clone() const {return new KaxTagLength(*this);}
420};
421
422class MATROSKA_DLL_API KaxTagMood : public EbmlUnicodeString {
423	public:
424		KaxTagMood() {}
425		KaxTagMood(const KaxTagMood & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
426		static EbmlElement & Create() {return *(new KaxTagMood);}
427		const EbmlCallbacks & Generic() const {return ClassInfos;}
428		static const EbmlCallbacks ClassInfos;
429		operator const EbmlId &() const {return ClassInfos.GlobalId;}
430		EbmlElement * Clone() const {return new KaxTagMood(*this);}
431};
432
433class MATROSKA_DLL_API KaxTagOfficialAudioFileURL : public EbmlString {
434	public:
435		KaxTagOfficialAudioFileURL() {}
436		KaxTagOfficialAudioFileURL(const KaxTagOfficialAudioFileURL & ElementToClone) :EbmlString(ElementToClone) {}
437		static EbmlElement & Create() {return *(new KaxTagOfficialAudioFileURL);}
438		const EbmlCallbacks & Generic() const {return ClassInfos;}
439		static const EbmlCallbacks ClassInfos;
440		operator const EbmlId &() const {return ClassInfos.GlobalId;}
441		EbmlElement * Clone() const {return new KaxTagOfficialAudioFileURL(*this);}
442};
443
444class MATROSKA_DLL_API KaxTagOfficialAudioSourceURL : public EbmlString {
445	public:
446		KaxTagOfficialAudioSourceURL() {}
447		KaxTagOfficialAudioSourceURL(const KaxTagOfficialAudioSourceURL & ElementToClone) :EbmlString(ElementToClone) {}
448		static EbmlElement & Create() {return *(new KaxTagOfficialAudioSourceURL);}
449		const EbmlCallbacks & Generic() const {return ClassInfos;}
450		static const EbmlCallbacks ClassInfos;
451		operator const EbmlId &() const {return ClassInfos.GlobalId;}
452		EbmlElement * Clone() const {return new KaxTagOfficialAudioSourceURL(*this);}
453};
454
455class MATROSKA_DLL_API KaxTagOriginalDimensions : public EbmlString {
456	public:
457		KaxTagOriginalDimensions() {}
458		KaxTagOriginalDimensions(const KaxTagOriginalDimensions & ElementToClone) :EbmlString(ElementToClone) {}
459		static EbmlElement & Create() {return *(new KaxTagOriginalDimensions);}
460		const EbmlCallbacks & Generic() const {return ClassInfos;}
461		static const EbmlCallbacks ClassInfos;
462		operator const EbmlId &() const {return ClassInfos.GlobalId;}
463		EbmlElement * Clone() const {return new KaxTagOriginalDimensions(*this);}
464};
465
466class MATROSKA_DLL_API KaxTagOriginalMediaType : public EbmlUnicodeString {
467	public:
468		KaxTagOriginalMediaType() {}
469		KaxTagOriginalMediaType(const KaxTagOriginalMediaType & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
470		static EbmlElement & Create() {return *(new KaxTagOriginalMediaType);}
471		const EbmlCallbacks & Generic() const {return ClassInfos;}
472		static const EbmlCallbacks ClassInfos;
473		operator const EbmlId &() const {return ClassInfos.GlobalId;}
474		EbmlElement * Clone() const {return new KaxTagOriginalMediaType(*this);}
475};
476
477class MATROSKA_DLL_API KaxTagPlayCounter : public EbmlUInteger {
478	public:
479		KaxTagPlayCounter() {}
480		KaxTagPlayCounter(const KaxTagPlayCounter & ElementToClone) :EbmlUInteger(ElementToClone) {}
481		static EbmlElement & Create() {return *(new KaxTagPlayCounter);}
482		const EbmlCallbacks & Generic() const {return ClassInfos;}
483		static const EbmlCallbacks ClassInfos;
484		operator const EbmlId &() const {return ClassInfos.GlobalId;}
485		EbmlElement * Clone() const {return new KaxTagPlayCounter(*this);}
486};
487
488class MATROSKA_DLL_API KaxTagPlaylistDelay : public EbmlUInteger {
489	public:
490		KaxTagPlaylistDelay() {}
491		KaxTagPlaylistDelay(const KaxTagPlaylistDelay & ElementToClone) :EbmlUInteger(ElementToClone) {}
492		static EbmlElement & Create() {return *(new KaxTagPlaylistDelay);}
493		const EbmlCallbacks & Generic() const {return ClassInfos;}
494		static const EbmlCallbacks ClassInfos;
495		operator const EbmlId &() const {return ClassInfos.GlobalId;}
496		EbmlElement * Clone() const {return new KaxTagPlaylistDelay(*this);}
497};
498
499class MATROSKA_DLL_API KaxTagPopularimeter : public EbmlSInteger {
500	public:
501		KaxTagPopularimeter() {}
502		KaxTagPopularimeter(const KaxTagPopularimeter & ElementToClone) :EbmlSInteger(ElementToClone) {}
503		static EbmlElement & Create() {return *(new KaxTagPopularimeter);}
504		const EbmlCallbacks & Generic() const {return ClassInfos;}
505		static const EbmlCallbacks ClassInfos;
506		operator const EbmlId &() const {return ClassInfos.GlobalId;}
507		EbmlElement * Clone() const {return new KaxTagPopularimeter(*this);}
508};
509
510class MATROSKA_DLL_API KaxTagProduct : public EbmlUnicodeString {
511	public:
512		KaxTagProduct() {}
513		KaxTagProduct(const KaxTagProduct & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
514		static EbmlElement & Create() {return *(new KaxTagProduct);}
515		const EbmlCallbacks & Generic() const {return ClassInfos;}
516		static const EbmlCallbacks ClassInfos;
517		operator const EbmlId &() const {return ClassInfos.GlobalId;}
518		EbmlElement * Clone() const {return new KaxTagProduct(*this);}
519};
520
521class MATROSKA_DLL_API KaxTagRating : public EbmlBinary {
522	public:
523		KaxTagRating() {}
524		KaxTagRating(const KaxTagRating & ElementToClone) :EbmlBinary(ElementToClone){}
525		static EbmlElement & Create() {return *(new KaxTagRating);}
526		bool ValidateSize() const {return true;} // we don't mind about what's inside
527		const EbmlCallbacks & Generic() const {return ClassInfos;}
528		static const EbmlCallbacks ClassInfos;
529		operator const EbmlId &() const {return ClassInfos.GlobalId;}
530		EbmlElement * Clone() const {return new KaxTagRating(*this);}
531};
532
533class MATROSKA_DLL_API KaxTagRecordLocation : public EbmlString {
534	public:
535		KaxTagRecordLocation() {}
536		KaxTagRecordLocation(const KaxTagRecordLocation & ElementToClone) :EbmlString(ElementToClone) {}
537		static EbmlElement & Create() {return *(new KaxTagRecordLocation);}
538		const EbmlCallbacks & Generic() const {return ClassInfos;}
539		static const EbmlCallbacks ClassInfos;
540		operator const EbmlId &() const {return ClassInfos.GlobalId;}
541		EbmlElement * Clone() const {return new KaxTagRecordLocation(*this);}
542};
543
544class MATROSKA_DLL_API KaxTagSetPart : public EbmlUInteger {
545	public:
546		KaxTagSetPart() {}
547		KaxTagSetPart(const KaxTagSetPart & ElementToClone) :EbmlUInteger(ElementToClone) {}
548		static EbmlElement & Create() {return *(new KaxTagSetPart);}
549		const EbmlCallbacks & Generic() const {return ClassInfos;}
550		static const EbmlCallbacks ClassInfos;
551		operator const EbmlId &() const {return ClassInfos.GlobalId;}
552		EbmlElement * Clone() const {return new KaxTagSetPart(*this);}
553};
554
555class MATROSKA_DLL_API KaxTagSource : public EbmlUnicodeString {
556	public:
557		KaxTagSource() {}
558		KaxTagSource(const KaxTagSource & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
559		static EbmlElement & Create() {return *(new KaxTagSource);}
560		const EbmlCallbacks & Generic() const {return ClassInfos;}
561		static const EbmlCallbacks ClassInfos;
562		operator const EbmlId &() const {return ClassInfos.GlobalId;}
563		EbmlElement * Clone() const {return new KaxTagSource(*this);}
564};
565
566class MATROSKA_DLL_API KaxTagSourceForm : public EbmlUnicodeString {
567	public:
568		KaxTagSourceForm() {}
569		KaxTagSourceForm(const KaxTagSourceForm & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
570		static EbmlElement & Create() {return *(new KaxTagSourceForm);}
571		const EbmlCallbacks & Generic() const {return ClassInfos;}
572		static const EbmlCallbacks ClassInfos;
573		operator const EbmlId &() const {return ClassInfos.GlobalId;}
574		EbmlElement * Clone() const {return new KaxTagSourceForm(*this);}
575};
576
577class MATROSKA_DLL_API KaxTagSubGenre : public EbmlString {
578	public:
579		KaxTagSubGenre() {}
580		KaxTagSubGenre(const KaxTagSubGenre & ElementToClone) :EbmlString(ElementToClone) {}
581		static EbmlElement & Create() {return *(new KaxTagSubGenre);}
582		const EbmlCallbacks & Generic() const {return ClassInfos;}
583		static const EbmlCallbacks ClassInfos;
584		operator const EbmlId &() const {return ClassInfos.GlobalId;}
585		EbmlElement * Clone() const {return new KaxTagSubGenre(*this);}
586};
587
588class MATROSKA_DLL_API KaxTagSubject : public EbmlUnicodeString {
589	public:
590		KaxTagSubject() {}
591		KaxTagSubject(const KaxTagSubject & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
592		static EbmlElement & Create() {return *(new KaxTagSubject);}
593		const EbmlCallbacks & Generic() const {return ClassInfos;}
594		static const EbmlCallbacks ClassInfos;
595		operator const EbmlId &() const {return ClassInfos.GlobalId;}
596		EbmlElement * Clone() const {return new KaxTagSubject(*this);}
597};
598
599class MATROSKA_DLL_API KaxTagUnsynchronisedText : public EbmlUnicodeString {
600	public:
601		KaxTagUnsynchronisedText() {}
602		KaxTagUnsynchronisedText(const KaxTagUnsynchronisedText & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
603		static EbmlElement & Create() {return *(new KaxTagUnsynchronisedText);}
604		const EbmlCallbacks & Generic() const {return ClassInfos;}
605		static const EbmlCallbacks ClassInfos;
606		operator const EbmlId &() const {return ClassInfos.GlobalId;}
607		EbmlElement * Clone() const {return new KaxTagUnsynchronisedText(*this);}
608};
609
610class MATROSKA_DLL_API KaxTagUserDefinedURL : public EbmlString {
611	public:
612		KaxTagUserDefinedURL() {}
613		KaxTagUserDefinedURL(const KaxTagUserDefinedURL & ElementToClone) :EbmlString(ElementToClone) {}
614		static EbmlElement & Create() {return *(new KaxTagUserDefinedURL);}
615		const EbmlCallbacks & Generic() const {return ClassInfos;}
616		static const EbmlCallbacks ClassInfos;
617		operator const EbmlId &() const {return ClassInfos.GlobalId;}
618		EbmlElement * Clone() const {return new KaxTagUserDefinedURL(*this);}
619};
620
621class MATROSKA_DLL_API KaxTagVideoGenre : public EbmlBinary {
622	public:
623		KaxTagVideoGenre() {}
624		KaxTagVideoGenre(const KaxTagVideoGenre & ElementToClone) :EbmlBinary(ElementToClone){}
625		static EbmlElement & Create() {return *(new KaxTagVideoGenre);}
626		bool ValidateSize() const {return (Size >= 2);}
627		const EbmlCallbacks & Generic() const {return ClassInfos;}
628		static const EbmlCallbacks ClassInfos;
629		operator const EbmlId &() const {return ClassInfos.GlobalId;}
630		EbmlElement * Clone() const {return new KaxTagVideoGenre(*this);}
631};
632
633class MATROSKA_DLL_API KaxTagSimple : public EbmlMaster {
634	public:
635		KaxTagSimple();
636		KaxTagSimple(const KaxTagSimple & ElementToClone) :EbmlMaster(ElementToClone) {}
637		static EbmlElement & Create() {return *(new KaxTagSimple);}
638		const EbmlCallbacks & Generic() const {return ClassInfos;}
639		static const EbmlCallbacks ClassInfos;
640		operator const EbmlId &() const {return ClassInfos.GlobalId;}
641		EbmlElement * Clone() const {return new KaxTagSimple(*this);}
642};
643
644class MATROSKA_DLL_API KaxTagName : public EbmlUnicodeString {
645	public:
646		KaxTagName() {}
647		KaxTagName(const KaxTagName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
648		static EbmlElement & Create() {return *(new KaxTagName);}
649		const EbmlCallbacks & Generic() const {return ClassInfos;}
650		static const EbmlCallbacks ClassInfos;
651		operator const EbmlId &() const {return ClassInfos.GlobalId;}
652		EbmlElement * Clone() const {return new KaxTagName(*this);}
653};
654
655class MATROSKA_DLL_API KaxTagLangue : public EbmlString {
656	public:
657		KaxTagLangue(): EbmlString("und") {}
658		KaxTagLangue(const KaxTagLangue & ElementToClone) :EbmlString(ElementToClone) {}
659		static EbmlElement & Create() {return *(new KaxTagLangue);}
660		const EbmlCallbacks & Generic() const {return ClassInfos;}
661		static const EbmlCallbacks ClassInfos;
662		operator const EbmlId &() const {return ClassInfos.GlobalId;}
663		EbmlElement * Clone() const {return new KaxTagLangue(*this);}
664};
665
666class MATROSKA_DLL_API KaxTagDefault : public EbmlUInteger {
667	public:
668		KaxTagDefault() :EbmlUInteger(1) {}
669		KaxTagDefault(const KaxTagTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
670
671		static EbmlElement & Create() {return *(new KaxTagDefault);}
672		const EbmlCallbacks & Generic() const {return ClassInfos;}
673		static const EbmlCallbacks ClassInfos;
674		operator const EbmlId &() const {return ClassInfos.GlobalId;}
675		EbmlElement * Clone() const {return new KaxTagDefault(*this);}
676};
677
678class MATROSKA_DLL_API KaxTagString : public EbmlUnicodeString {
679	public:
680		KaxTagString() {}
681		KaxTagString(const KaxTagString & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
682		static EbmlElement & Create() {return *(new KaxTagString);}
683		const EbmlCallbacks & Generic() const {return ClassInfos;}
684		static const EbmlCallbacks ClassInfos;
685		operator const EbmlId &() const {return ClassInfos.GlobalId;}
686		EbmlElement * Clone() const {return new KaxTagString(*this);}
687};
688
689class MATROSKA_DLL_API KaxTagBinary : public EbmlBinary {
690	public:
691		KaxTagBinary() {}
692		KaxTagBinary(const KaxTagBinary & ElementToClone) :EbmlBinary(ElementToClone){}
693		static EbmlElement & Create() {return *(new KaxTagBinary);}
694		bool ValidateSize() const {return (Size >= 0);}
695		const EbmlCallbacks & Generic() const {return ClassInfos;}
696		static const EbmlCallbacks ClassInfos;
697		operator const EbmlId &() const {return ClassInfos.GlobalId;}
698		EbmlElement * Clone() const {return new KaxTagBinary(*this);}
699};
700
701END_LIBMATROSKA_NAMESPACE
702
703#endif // LIBMATROSKA_TAG_H
704