1/****************************************************************************
2** libmatroska : parse Matroska files, see http://www.matroska.org/
3**
4** <file/class description>
5**
6** Copyright (C) 2002-2005 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** Contact license@matroska.org if any conditions of this licensing are
26** not clear to you.
27**
28**********************************************************************/
29
30/*!
31	\file
32	\version \$Id: KaxTrackEntryData.h,v 1.9 2004/04/14 23:26:17 robux4 Exp $
33	\author Steve Lhomme     <robux4 @ users.sf.net>
34	\author John Cannon      <spyder2555 @ users.sf.net>
35*/
36#ifndef LIBMATROSKA_TRACK_ENTRY_DATA_H
37#define LIBMATROSKA_TRACK_ENTRY_DATA_H
38
39#include "matroska/KaxTypes.h"
40#include "ebml/EbmlUInteger.h"
41#include "ebml/EbmlFloat.h"
42#include "ebml/EbmlString.h"
43#include "ebml/EbmlUnicodeString.h"
44#include "ebml/EbmlBinary.h"
45#include "ebml/EbmlMaster.h"
46
47using namespace LIBEBML_NAMESPACE;
48
49START_LIBMATROSKA_NAMESPACE
50
51class MATROSKA_DLL_API KaxTrackNumber : public EbmlUInteger {
52	public:
53		KaxTrackNumber() {}
54		KaxTrackNumber(const KaxTrackNumber & ElementToClone) :EbmlUInteger(ElementToClone) {}
55		static EbmlElement & Create() {return *(new KaxTrackNumber);}
56		const EbmlCallbacks & Generic() const {return ClassInfos;}
57		static const EbmlCallbacks ClassInfos;
58		operator const EbmlId &() const {return ClassInfos.GlobalId;}
59		EbmlElement * Clone() const {return new KaxTrackNumber(*this);}
60};
61
62class MATROSKA_DLL_API KaxTrackUID : public EbmlUInteger {
63	public:
64		KaxTrackUID() {}
65		KaxTrackUID(const KaxTrackUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
66		static EbmlElement & Create() {return *(new KaxTrackUID);}
67		const EbmlCallbacks & Generic() const {return ClassInfos;}
68		static const EbmlCallbacks ClassInfos;
69		operator const EbmlId &() const {return ClassInfos.GlobalId;}
70		EbmlElement * Clone() const {return new KaxTrackUID(*this);}
71};
72
73class MATROSKA_DLL_API KaxTrackType : public EbmlUInteger {
74	public:
75		KaxTrackType() {}
76		KaxTrackType(const KaxTrackType & ElementToClone) :EbmlUInteger(ElementToClone) {}
77		static EbmlElement & Create() {return *(new KaxTrackType);}
78		const EbmlCallbacks & Generic() const {return ClassInfos;}
79		static const EbmlCallbacks ClassInfos;
80		operator const EbmlId &() const {return ClassInfos.GlobalId;}
81		EbmlElement * Clone() const {return new KaxTrackType(*this);}
82};
83
84#if MATROSKA_VERSION >= 2
85class MATROSKA_DLL_API KaxTrackFlagEnabled : public EbmlUInteger {
86	public:
87		KaxTrackFlagEnabled() :EbmlUInteger(1) {}
88		KaxTrackFlagEnabled(const KaxTrackFlagEnabled & ElementToClone) :EbmlUInteger(ElementToClone) {}
89		static EbmlElement & Create() {return *(new KaxTrackFlagEnabled);}
90		const EbmlCallbacks & Generic() const {return ClassInfos;}
91		static const EbmlCallbacks ClassInfos;
92		operator const EbmlId &() const {return ClassInfos.GlobalId;}
93		EbmlElement * Clone() const {return new KaxTrackFlagEnabled(*this);}
94};
95#endif // MATROSKA_VERSION
96
97class MATROSKA_DLL_API KaxTrackFlagDefault : public EbmlUInteger {
98	public:
99		KaxTrackFlagDefault() :EbmlUInteger(1) {}
100		KaxTrackFlagDefault(const KaxTrackFlagDefault & ElementToClone) :EbmlUInteger(ElementToClone) {}
101		static EbmlElement & Create() {return *(new KaxTrackFlagDefault);}
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 KaxTrackFlagDefault(*this);}
106};
107
108class MATROSKA_DLL_API KaxTrackFlagForced : public EbmlUInteger {
109	public:
110		KaxTrackFlagForced() :EbmlUInteger(0) {}
111		KaxTrackFlagForced(const KaxTrackFlagForced & ElementToClone) :EbmlUInteger(ElementToClone) {}
112		static EbmlElement & Create() {return *(new KaxTrackFlagForced);}
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 KaxTrackFlagForced(*this);}
117};
118
119class MATROSKA_DLL_API KaxTrackFlagLacing : public EbmlUInteger {
120	public:
121		KaxTrackFlagLacing() :EbmlUInteger(1) {}
122		KaxTrackFlagLacing(const KaxTrackFlagLacing & ElementToClone) :EbmlUInteger(ElementToClone) {}
123		static EbmlElement & Create() {return *(new KaxTrackFlagLacing);}
124		const EbmlCallbacks & Generic() const {return ClassInfos;}
125		static const EbmlCallbacks ClassInfos;
126		operator const EbmlId &() const {return ClassInfos.GlobalId;}
127		EbmlElement * Clone() const {return new KaxTrackFlagLacing(*this);}
128};
129
130class MATROSKA_DLL_API KaxTrackMinCache : public EbmlUInteger {
131	public:
132		KaxTrackMinCache() :EbmlUInteger(0) {}
133		KaxTrackMinCache(const KaxTrackMinCache & ElementToClone) :EbmlUInteger(ElementToClone) {}
134		static EbmlElement & Create() {return *(new KaxTrackMinCache);}
135		const EbmlCallbacks & Generic() const {return ClassInfos;}
136		static const EbmlCallbacks ClassInfos;
137		operator const EbmlId &() const {return ClassInfos.GlobalId;}
138		EbmlElement * Clone() const {return new KaxTrackMinCache(*this);}
139};
140
141class MATROSKA_DLL_API KaxTrackMaxCache : public EbmlUInteger {
142	public:
143		KaxTrackMaxCache() {}
144		KaxTrackMaxCache(const KaxTrackMaxCache & ElementToClone) :EbmlUInteger(ElementToClone) {}
145		static EbmlElement & Create() {return *(new KaxTrackMaxCache);}
146		const EbmlCallbacks & Generic() const {return ClassInfos;}
147		static const EbmlCallbacks ClassInfos;
148		operator const EbmlId &() const {return ClassInfos.GlobalId;}
149		EbmlElement * Clone() const {return new KaxTrackMaxCache(*this);}
150};
151
152class MATROSKA_DLL_API KaxTrackDefaultDuration : public EbmlUInteger {
153	public:
154		KaxTrackDefaultDuration() {}
155		KaxTrackDefaultDuration(const KaxTrackDefaultDuration & ElementToClone) :EbmlUInteger(ElementToClone) {}
156		static EbmlElement & Create() {return *(new KaxTrackDefaultDuration);}
157		const EbmlCallbacks & Generic() const {return ClassInfos;}
158		static const EbmlCallbacks ClassInfos;
159		operator const EbmlId &() const {return ClassInfos.GlobalId;}
160		EbmlElement * Clone() const {return new KaxTrackDefaultDuration(*this);}
161};
162
163class MATROSKA_DLL_API KaxTrackTimecodeScale : public EbmlFloat {
164	public:
165		KaxTrackTimecodeScale() :EbmlFloat(1.0) {}
166		KaxTrackTimecodeScale(const KaxTrackTimecodeScale & ElementToClone) :EbmlFloat(ElementToClone) {}
167		static EbmlElement & Create() {return *(new KaxTrackTimecodeScale);}
168		const EbmlCallbacks & Generic() const {return ClassInfos;}
169		static const EbmlCallbacks ClassInfos;
170		operator const EbmlId &() const {return ClassInfos.GlobalId;}
171		EbmlElement * Clone() const {return new KaxTrackTimecodeScale(*this);}
172};
173
174class MATROSKA_DLL_API KaxMaxBlockAdditionID : public EbmlUInteger {
175	public:
176		KaxMaxBlockAdditionID() :EbmlUInteger(0) {}
177		KaxMaxBlockAdditionID(const KaxMaxBlockAdditionID & ElementToClone) :EbmlUInteger(ElementToClone) {}
178		static EbmlElement & Create() {return *(new KaxMaxBlockAdditionID);}
179		const EbmlCallbacks & Generic() const {return ClassInfos;}
180		static const EbmlCallbacks ClassInfos;
181		operator const EbmlId &() const {return ClassInfos.GlobalId;}
182		EbmlElement * Clone() const {return new KaxMaxBlockAdditionID(*this);}
183};
184
185class MATROSKA_DLL_API KaxTrackName : public EbmlUnicodeString {
186	public:
187		KaxTrackName() {}
188		KaxTrackName(const KaxTrackName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
189		static EbmlElement & Create() {return *(new KaxTrackName);}
190		const EbmlCallbacks & Generic() const {return ClassInfos;}
191		static const EbmlCallbacks ClassInfos;
192		operator const EbmlId &() const {return ClassInfos.GlobalId;}
193		EbmlElement * Clone() const {return new KaxTrackName(*this);}
194};
195
196class MATROSKA_DLL_API KaxTrackLanguage : public EbmlString {
197	public:
198		KaxTrackLanguage() :EbmlString("eng") {}
199		KaxTrackLanguage(const KaxTrackLanguage & ElementToClone) :EbmlString(ElementToClone) {}
200		static EbmlElement & Create() {return *(new KaxTrackLanguage);}
201		const EbmlCallbacks & Generic() const {return ClassInfos;}
202		static const EbmlCallbacks ClassInfos;
203		operator const EbmlId &() const {return ClassInfos.GlobalId;}
204		EbmlElement * Clone() const {return new KaxTrackLanguage(*this);}
205};
206
207class MATROSKA_DLL_API KaxCodecID : public EbmlString {
208	public:
209		KaxCodecID() {}
210		KaxCodecID(const KaxCodecID & ElementToClone) :EbmlString(ElementToClone) {}
211		static EbmlElement & Create() {return *(new KaxCodecID);}
212		const EbmlCallbacks & Generic() const {return ClassInfos;}
213		static const EbmlCallbacks ClassInfos;
214		operator const EbmlId &() const {return ClassInfos.GlobalId;}
215		EbmlElement * Clone() const {return new KaxCodecID(*this);}
216};
217
218class MATROSKA_DLL_API KaxCodecPrivate : public EbmlBinary {
219	public:
220		KaxCodecPrivate() {}
221		KaxCodecPrivate(const KaxCodecPrivate & ElementToClone) :EbmlBinary(ElementToClone){}
222		static EbmlElement & Create() {return *(new KaxCodecPrivate);}
223		bool ValidateSize() const {return true;} // we don't mind about what's inside
224		const EbmlCallbacks & Generic() const {return ClassInfos;}
225		static const EbmlCallbacks ClassInfos;
226		operator const EbmlId &() const {return ClassInfos.GlobalId;}
227		EbmlElement * Clone() const {return new KaxCodecPrivate(*this);}
228};
229
230class MATROSKA_DLL_API KaxCodecName : public EbmlUnicodeString {
231	public:
232		KaxCodecName() {}
233		KaxCodecName(const KaxCodecName & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
234		static EbmlElement & Create() {return *(new KaxCodecName);}
235		const EbmlCallbacks & Generic() const {return ClassInfos;}
236		static const EbmlCallbacks ClassInfos;
237		operator const EbmlId &() const {return ClassInfos.GlobalId;}
238		EbmlElement * Clone() const {return new KaxCodecName(*this);}
239};
240
241class MATROSKA_DLL_API KaxTrackAttachmentLink : public EbmlBinary {
242	public:
243		KaxTrackAttachmentLink() {}
244		KaxTrackAttachmentLink(const KaxTrackAttachmentLink & ElementToClone) :EbmlBinary(ElementToClone){}
245		static EbmlElement & Create() {return *(new KaxTrackAttachmentLink);}
246		bool ValidateSize() const {return true;} // we don't mind about what's inside
247		const EbmlCallbacks & Generic() const {return ClassInfos;}
248		static const EbmlCallbacks ClassInfos;
249		operator const EbmlId &() const {return ClassInfos.GlobalId;}
250		EbmlElement * Clone() const {return new KaxTrackAttachmentLink(*this);}
251};
252
253class MATROSKA_DLL_API KaxTrackOverlay : public EbmlUInteger {
254	public:
255		KaxTrackOverlay() {}
256		KaxTrackOverlay(const KaxTrackOverlay & ElementToClone) :EbmlUInteger(ElementToClone) {}
257		static EbmlElement & Create() {return *(new KaxTrackOverlay);}
258		const EbmlCallbacks & Generic() const {return ClassInfos;}
259		static const EbmlCallbacks ClassInfos;
260		operator const EbmlId &() const {return ClassInfos.GlobalId;}
261		EbmlElement * Clone() const {return new KaxTrackOverlay(*this);}
262};
263
264class MATROSKA_DLL_API KaxTrackTranslate : public EbmlMaster {
265	public:
266		KaxTrackTranslate();
267		KaxTrackTranslate(const KaxTrackTranslate & ElementToClone) :EbmlMaster(ElementToClone) {}
268		static EbmlElement & Create() {return *(new KaxTrackTranslate);}
269		const EbmlCallbacks & Generic() const {return ClassInfos;}
270		static const EbmlCallbacks ClassInfos;
271		operator const EbmlId &() const {return ClassInfos.GlobalId;}
272		EbmlElement * Clone() const {return new KaxTrackTranslate(*this);}
273};
274
275class MATROSKA_DLL_API KaxTrackTranslateCodec : public EbmlUInteger {
276	public:
277		KaxTrackTranslateCodec() {}
278		KaxTrackTranslateCodec(const KaxTrackTranslateCodec & ElementToClone) :EbmlUInteger(ElementToClone) {}
279		static EbmlElement & Create() {return *(new KaxTrackTranslateCodec);}
280		const EbmlCallbacks & Generic() const {return ClassInfos;}
281		static const EbmlCallbacks ClassInfos;
282		operator const EbmlId &() const {return ClassInfos.GlobalId;}
283		EbmlElement * Clone() const {return new KaxTrackTranslateCodec(*this);}
284};
285
286class MATROSKA_DLL_API KaxTrackTranslateEditionUID : public EbmlUInteger {
287	public:
288		KaxTrackTranslateEditionUID() {}
289		KaxTrackTranslateEditionUID(const KaxTrackTranslateEditionUID & ElementToClone) :EbmlUInteger(ElementToClone) {}
290		static EbmlElement & Create() {return *(new KaxTrackTranslateEditionUID);}
291		const EbmlCallbacks & Generic() const {return ClassInfos;}
292		static const EbmlCallbacks ClassInfos;
293		operator const EbmlId &() const {return ClassInfos.GlobalId;}
294		EbmlElement * Clone() const {return new KaxTrackTranslateEditionUID(*this);}
295};
296
297class MATROSKA_DLL_API KaxTrackTranslateTrackID : public EbmlBinary {
298	public:
299		KaxTrackTranslateTrackID() {}
300		KaxTrackTranslateTrackID(const KaxTrackTranslateTrackID & ElementToClone) :EbmlBinary(ElementToClone){}
301		static EbmlElement & Create() {return *(new KaxTrackTranslateTrackID);}
302		bool ValidateSize() const { return true;}
303		const EbmlCallbacks & Generic() const {return ClassInfos;}
304		static const EbmlCallbacks ClassInfos;
305		operator const EbmlId &() const {return ClassInfos.GlobalId;}
306		EbmlElement * Clone() const {return new KaxTrackTranslateTrackID(*this);}
307};
308
309#if MATROSKA_VERSION >= 2
310class MATROSKA_DLL_API KaxCodecSettings : public EbmlUnicodeString {
311	public:
312		KaxCodecSettings() {}
313		KaxCodecSettings(const KaxCodecSettings & ElementToClone) :EbmlUnicodeString(ElementToClone) {}
314		static EbmlElement & Create() {return *(new KaxCodecSettings);}
315		const EbmlCallbacks & Generic() const {return ClassInfos;}
316		static const EbmlCallbacks ClassInfos;
317		operator const EbmlId &() const {return ClassInfos.GlobalId;}
318		EbmlElement * Clone() const {return new KaxCodecSettings(*this);}
319};
320
321class MATROSKA_DLL_API KaxCodecInfoURL : public EbmlString {
322	public:
323		KaxCodecInfoURL() {}
324		KaxCodecInfoURL(const KaxCodecInfoURL & ElementToClone) :EbmlString(ElementToClone) {}
325		static EbmlElement & Create() {return *(new KaxCodecInfoURL);}
326		const EbmlCallbacks & Generic() const {return ClassInfos;}
327		static const EbmlCallbacks ClassInfos;
328		operator const EbmlId &() const {return ClassInfos.GlobalId;}
329		EbmlElement * Clone() const {return new KaxCodecInfoURL(*this);}
330};
331
332class MATROSKA_DLL_API KaxCodecDownloadURL : public EbmlString {
333	public:
334		KaxCodecDownloadURL() {}
335		KaxCodecDownloadURL(const KaxCodecDownloadURL & ElementToClone) :EbmlString(ElementToClone) {}
336		static EbmlElement & Create() {return *(new KaxCodecDownloadURL);}
337		const EbmlCallbacks & Generic() const {return ClassInfos;}
338		static const EbmlCallbacks ClassInfos;
339		operator const EbmlId &() const {return ClassInfos.GlobalId;}
340		EbmlElement * Clone() const {return new KaxCodecDownloadURL(*this);}
341};
342
343class MATROSKA_DLL_API KaxCodecDecodeAll : public EbmlUInteger {
344	public:
345		KaxCodecDecodeAll() :EbmlUInteger(1) {}
346		KaxCodecDecodeAll(const KaxCodecDecodeAll & ElementToClone) :EbmlUInteger(ElementToClone) {}
347		static EbmlElement & Create() {return *(new KaxCodecDecodeAll);}
348		const EbmlCallbacks & Generic() const {return ClassInfos;}
349		static const EbmlCallbacks ClassInfos;
350		operator const EbmlId &() const {return ClassInfos.GlobalId;}
351		EbmlElement * Clone() const {return new KaxCodecDecodeAll(*this);}
352};
353#endif // MATROSKA_VERSION
354
355END_LIBMATROSKA_NAMESPACE
356
357#endif // LIBMATROSKA_TRACK_ENTRY_DATA_H
358