code-generated metadata!
[asdcplib.git] / src / Metadata.h
1 /*
2 Copyright (c) 2005-2006, John Hurst
3 All rights reserved.
4
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
7 are met:
8 1. Redistributions of source code must retain the above copyright
9    notice, this list of conditions and the following disclaimer.
10 2. Redistributions in binary form must reproduce the above copyright
11    notice, this list of conditions and the following disclaimer in the
12    documentation and/or other materials provided with the distribution.
13 3. The name of the author may not be used to endorse or promote products
14    derived from this software without specific prior written permission.
15
16 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27 /*! \file    Metadata.h
28     \version $Id$
29     \brief   MXF metadata objects
30 */
31
32 #ifndef _METADATA_H_
33 #define _METADATA_H_
34
35 #include "MXF.h"
36
37 namespace ASDCP
38 {
39   namespace MXF
40     {
41       // Types
42       class RGBLayout : public IArchive
43         {
44         public:
45           struct element {
46             ui8_t Code;
47             ui8_t Depth;
48           } PictureElement[8];
49           RGBLayout() { memset(PictureElement, 0, sizeof(PictureElement)); }
50
51          //
52          Result_t ReadFrom(ASDCP::MemIOReader& Reader) { return RESULT_OK; }
53          Result_t WriteTo(ASDCP::MemIOWriter& Writer) { return RESULT_OK; }
54         };
55
56       class Raw : public IArchive
57         {
58           ASDCP_NO_COPY_CONSTRUCT(Raw);
59
60         public:
61           byte_t* data;
62           Raw() {}
63           ~Raw() {}
64
65          //
66          Result_t ReadFrom(ASDCP::MemIOReader& Reader) { return RESULT_OK; }
67          Result_t WriteTo(ASDCP::MemIOWriter& Writer) { return RESULT_OK; }
68         };
69
70       //
71
72       //
73       class Identification : public InterchangeObject
74         {
75           ASDCP_NO_COPY_CONSTRUCT(Identification);
76
77         public:
78           UUID ThisGenerationUID;
79           UTF16String CompanyName;
80           UTF16String ProductName;
81           ui16_t ProductVersion;
82           UTF16String VersionString;
83           UUID ProductUID;
84           Timestamp ModificationDate;
85           ui16_t ToolkitVersion;
86           UTF16String Platform;
87
88           Identification() : ProductVersion(0), ToolkitVersion(0) {}
89           virtual ~Identification() {}
90           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
91           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
92           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
93           virtual void     Dump(FILE* = 0);
94         };
95
96       //
97       class ContentStorage : public InterchangeObject
98         {
99           ASDCP_NO_COPY_CONSTRUCT(ContentStorage);
100
101         public:
102           Batch<UUID> Packages;
103           Batch<UUID> EssenceContainerData;
104
105           ContentStorage() {}
106           virtual ~ContentStorage() {}
107           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
108           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
109           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
110           virtual void     Dump(FILE* = 0);
111         };
112
113       //
114       class GenericPackage : public InterchangeObject
115         {
116           ASDCP_NO_COPY_CONSTRUCT(GenericPackage);
117
118         public:
119           UMID PackageUID;
120           UTF16String Name;
121           Timestamp PackageCreationDate;
122           Timestamp PackageModifiedDate;
123           Batch<UID> Tracks;
124
125           GenericPackage() {}
126           virtual ~GenericPackage() {}
127           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
128         };
129
130       //
131       class MaterialPackage : public GenericPackage
132         {
133           ASDCP_NO_COPY_CONSTRUCT(MaterialPackage);
134
135         public:
136
137           MaterialPackage() {}
138           virtual ~MaterialPackage() {}
139           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
140           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
141           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
142           virtual void     Dump(FILE* = 0);
143         };
144
145       //
146       class SourcePackage : public GenericPackage
147         {
148           ASDCP_NO_COPY_CONSTRUCT(SourcePackage);
149
150         public:
151
152           SourcePackage() {}
153           virtual ~SourcePackage() {}
154           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
155           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
156           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
157           virtual void     Dump(FILE* = 0);
158         };
159
160       //
161       class GenericTrack : public InterchangeObject
162         {
163           ASDCP_NO_COPY_CONSTRUCT(GenericTrack);
164
165         public:
166           ui32_t TrackID;
167           ui32_t TrackNumber;
168           UTF16String TrackName;
169           UUID Sequence;
170
171           GenericTrack() : TrackID(0), TrackNumber(0) {}
172           virtual ~GenericTrack() {}
173           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
174         };
175
176       //
177       class Track : public GenericTrack
178         {
179           ASDCP_NO_COPY_CONSTRUCT(Track);
180
181         public:
182           Rational EditRate;
183           ui64_t Origin;
184
185           Track() : Origin(0) {}
186           virtual ~Track() {}
187           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
188           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
189           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
190           virtual void     Dump(FILE* = 0);
191         };
192
193       //
194       class StructuralComponent : public InterchangeObject
195         {
196           ASDCP_NO_COPY_CONSTRUCT(StructuralComponent);
197
198         public:
199           UL DataDefinition;
200           ui64_t Duration;
201
202           StructuralComponent() : Duration(0) {}
203           virtual ~StructuralComponent() {}
204           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
205         };
206
207       //
208       class Sequence : public StructuralComponent
209         {
210           ASDCP_NO_COPY_CONSTRUCT(Sequence);
211
212         public:
213           Batch<UID> StructuralComponents;
214
215           Sequence() {}
216           virtual ~Sequence() {}
217           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
218           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
219           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
220           virtual void     Dump(FILE* = 0);
221         };
222
223       //
224       class SourceClip : public StructuralComponent
225         {
226           ASDCP_NO_COPY_CONSTRUCT(SourceClip);
227
228         public:
229           ui64_t StartPosition;
230           UMID SourcePackageID;
231           ui32_t SourceTrackID;
232
233           SourceClip() : StartPosition(0), SourceTrackID(0) {}
234           virtual ~SourceClip() {}
235           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
236           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
237           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
238           virtual void     Dump(FILE* = 0);
239         };
240
241       //
242       class TimecodeComponent : public StructuralComponent
243         {
244           ASDCP_NO_COPY_CONSTRUCT(TimecodeComponent);
245
246         public:
247           ui16_t RoundedTimecodeBase;
248           ui64_t StartTimecode;
249           ui8_t DropFrame;
250
251           TimecodeComponent() : RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0) {}
252           virtual ~TimecodeComponent() {}
253           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
254           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
255           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
256           virtual void     Dump(FILE* = 0);
257         };
258
259       //
260       class GenericDescriptor : public InterchangeObject
261         {
262           ASDCP_NO_COPY_CONSTRUCT(GenericDescriptor);
263
264         public:
265           Batch<UUID> Locators;
266           Batch<UUID> SubDescriptors;
267
268           GenericDescriptor() {}
269           virtual ~GenericDescriptor() {}
270           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
271         };
272
273       //
274       class FileDescriptor : public GenericDescriptor
275         {
276           ASDCP_NO_COPY_CONSTRUCT(FileDescriptor);
277
278         public:
279           ui32_t LinkedTrackID;
280           Rational SampleRate;
281           ui64_t ContainerDuration;
282           UL EssenceContainer;
283           UL Codec;
284
285           FileDescriptor() : LinkedTrackID(0), ContainerDuration(0) {}
286           virtual ~FileDescriptor() {}
287           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
288           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
289           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
290           virtual void     Dump(FILE* = 0);
291         };
292
293       //
294       class GenericSoundEssenceDescriptor : public FileDescriptor
295         {
296           ASDCP_NO_COPY_CONSTRUCT(GenericSoundEssenceDescriptor);
297
298         public:
299           Rational AudioSamplingRate;
300           ui8_t Locked;
301           ui8_t AudioRefLevel;
302           ui8_t ElectroSpatialFormulation;
303           ui32_t ChannelCount;
304           ui32_t QuantizationBits;
305           ui8_t DialNorm;
306           UL SoundEssenceCompression;
307
308           GenericSoundEssenceDescriptor() : Locked(0), AudioRefLevel(0), ElectroSpatialFormulation(0), ChannelCount(0), QuantizationBits(0), DialNorm(0) {}
309           virtual ~GenericSoundEssenceDescriptor() {}
310           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
311           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
312           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
313           virtual void     Dump(FILE* = 0);
314         };
315
316       //
317       class WaveAudioDescriptor : public GenericSoundEssenceDescriptor
318         {
319           ASDCP_NO_COPY_CONSTRUCT(WaveAudioDescriptor);
320
321         public:
322           ui16_t BlockAlign;
323           ui8_t SequenceOffset;
324           ui32_t AvgBps;
325
326           WaveAudioDescriptor() : BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
327           virtual ~WaveAudioDescriptor() {}
328           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
329           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
330           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
331           virtual void     Dump(FILE* = 0);
332         };
333
334       //
335       class GenericPictureEssenceDescriptor : public FileDescriptor
336         {
337           ASDCP_NO_COPY_CONSTRUCT(GenericPictureEssenceDescriptor);
338
339         public:
340           ui8_t FrameLayout;
341           ui32_t StoredWidth;
342           ui32_t StoredHeight;
343           ui32_t DisplayWidth;
344           ui32_t DisplayHeight;
345           Rational AspectRatio;
346           UL Gamma;
347           UL PictureEssenceCoding;
348
349           GenericPictureEssenceDescriptor() : FrameLayout(0), StoredWidth(0), StoredHeight(0), DisplayWidth(0), DisplayHeight(0) {}
350           virtual ~GenericPictureEssenceDescriptor() {}
351           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
352           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
353           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
354           virtual void     Dump(FILE* = 0);
355         };
356
357       //
358       class RGBAEssenceDescriptor : public GenericPictureEssenceDescriptor
359         {
360           ASDCP_NO_COPY_CONSTRUCT(RGBAEssenceDescriptor);
361
362         public:
363           ui32_t ComponentMaxRef;
364           ui32_t ComponentMinRef;
365           RGBLayout PixelLayout;
366
367           RGBAEssenceDescriptor() : ComponentMaxRef(0), ComponentMinRef(0) {}
368           virtual ~RGBAEssenceDescriptor() {}
369           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
370           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
371           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
372           virtual void     Dump(FILE* = 0);
373         };
374
375       //
376       class JPEG2000PictureSubDescriptor : public InterchangeObject
377         {
378           ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
379
380         public:
381           ui16_t Rsize;
382           ui32_t Xsize;
383           ui32_t Ysize;
384           ui32_t XOsize;
385           ui32_t YOsize;
386           ui32_t XTsize;
387           ui32_t YTsize;
388           ui32_t XTOsize;
389           ui32_t YTOsize;
390           ui16_t Csize;
391           Raw PictureComponentSizing;
392           Raw CodingStyleDefault;
393           Raw QuantizationDefault;
394
395           JPEG2000PictureSubDescriptor() : Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
396           virtual ~JPEG2000PictureSubDescriptor() {}
397           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
398           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
399           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
400           virtual void     Dump(FILE* = 0);
401         };
402
403       //
404       class CDCIEssenceDescriptor : public GenericPictureEssenceDescriptor
405         {
406           ASDCP_NO_COPY_CONSTRUCT(CDCIEssenceDescriptor);
407
408         public:
409           ui32_t ComponentDepth;
410           ui32_t HorizontalSubsampling;
411           ui32_t VerticalSubsampling;
412           ui8_t ColorSiting;
413           ui8_t ReversedByteOrder;
414           ui32_t BlackRefLevel;
415           ui32_t WhiteReflevel;
416           ui32_t ColorRange;
417
418           CDCIEssenceDescriptor() : ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0), ReversedByteOrder(0), BlackRefLevel(0), WhiteReflevel(0), ColorRange(0) {}
419           virtual ~CDCIEssenceDescriptor() {}
420           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
421           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
422           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
423           virtual void     Dump(FILE* = 0);
424         };
425
426       //
427       class MPEG2VideoDescriptor : public CDCIEssenceDescriptor
428         {
429           ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
430
431         public:
432           ui8_t CodedContentType;
433           ui8_t LowDelay;
434           ui32_t BitRate;
435           ui8_t ProfileAndLevel;
436
437           MPEG2VideoDescriptor() : CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
438           virtual ~MPEG2VideoDescriptor() {}
439           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
440           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
441           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
442           virtual void     Dump(FILE* = 0);
443         };
444
445       //
446       class CryptographicFramework : public InterchangeObject
447         {
448           ASDCP_NO_COPY_CONSTRUCT(CryptographicFramework);
449
450         public:
451           UUID ContextSR;
452
453           CryptographicFramework() {}
454           virtual ~CryptographicFramework() {}
455           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
456           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
457           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
458           virtual void     Dump(FILE* = 0);
459         };
460
461       //
462       class CryptographicContext : public InterchangeObject
463         {
464           ASDCP_NO_COPY_CONSTRUCT(CryptographicContext);
465
466         public:
467           UUID ContextID;
468           UL SourceEssenceContainer;
469           UL CipherAlgorithm;
470           UL MICAlgorithm;
471           UUID CryptographicKeyID;
472
473           CryptographicContext() {}
474           virtual ~CryptographicContext() {}
475           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
476           virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
477           virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
478           virtual void     Dump(FILE* = 0);
479         };
480
481     } // namespace MXF
482 } // namespace ASDCP
483
484
485 #endif // _METADATA_H_
486
487 //
488 // end Metadata.h
489 //