2 Copyright (c) 2005-2009, John Hurst
5 Redistribution and use in source and binary forms, with or without
6 modification, are permitted provided that the following conditions
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.
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.
29 \brief MXF metadata objects
41 void Metadata_InitTypes();
46 class Identification : public InterchangeObject
48 ASDCP_NO_COPY_CONSTRUCT(Identification);
51 UUID ThisGenerationUID;
52 UTF16String CompanyName;
53 UTF16String ProductName;
54 VersionType ProductVersion;
55 UTF16String VersionString;
57 Timestamp ModificationDate;
58 VersionType ToolkitVersion;
62 virtual ~Identification() {}
63 virtual const char* HasName() { return "Identification"; }
64 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
65 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
66 virtual void Dump(FILE* = 0);
67 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
68 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
72 class ContentStorage : public InterchangeObject
74 ASDCP_NO_COPY_CONSTRUCT(ContentStorage);
78 Batch<UUID> EssenceContainerData;
81 virtual ~ContentStorage() {}
82 virtual const char* HasName() { return "ContentStorage"; }
83 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
84 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
85 virtual void Dump(FILE* = 0);
86 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
87 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
91 class EssenceContainerData : public InterchangeObject
93 ASDCP_NO_COPY_CONSTRUCT(EssenceContainerData);
96 UMID LinkedPackageUID;
100 EssenceContainerData() : IndexSID(0), BodySID(0) {}
101 virtual ~EssenceContainerData() {}
102 virtual const char* HasName() { return "EssenceContainerData"; }
103 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
104 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
105 virtual void Dump(FILE* = 0);
106 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
107 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
111 class GenericPackage : public InterchangeObject
113 ASDCP_NO_COPY_CONSTRUCT(GenericPackage);
118 Timestamp PackageCreationDate;
119 Timestamp PackageModifiedDate;
123 virtual ~GenericPackage() {}
124 virtual const char* HasName() { return "GenericPackage"; }
125 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
126 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
127 virtual void Dump(FILE* = 0);
131 class MaterialPackage : public GenericPackage
133 ASDCP_NO_COPY_CONSTRUCT(MaterialPackage);
138 virtual ~MaterialPackage() {}
139 virtual const char* HasName() { return "MaterialPackage"; }
140 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
141 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
142 virtual void Dump(FILE* = 0);
143 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
144 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
148 class SourcePackage : public GenericPackage
150 ASDCP_NO_COPY_CONSTRUCT(SourcePackage);
156 virtual ~SourcePackage() {}
157 virtual const char* HasName() { return "SourcePackage"; }
158 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
159 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
160 virtual void Dump(FILE* = 0);
161 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
162 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
166 class GenericTrack : public InterchangeObject
168 ASDCP_NO_COPY_CONSTRUCT(GenericTrack);
173 UTF16String TrackName;
176 GenericTrack() : TrackID(0), TrackNumber(0) {}
177 virtual ~GenericTrack() {}
178 virtual const char* HasName() { return "GenericTrack"; }
179 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
180 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
181 virtual void Dump(FILE* = 0);
185 class StaticTrack : public GenericTrack
187 ASDCP_NO_COPY_CONSTRUCT(StaticTrack);
192 virtual ~StaticTrack() {}
193 virtual const char* HasName() { return "StaticTrack"; }
194 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
195 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
196 virtual void Dump(FILE* = 0);
197 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
198 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
202 class Track : public GenericTrack
204 ASDCP_NO_COPY_CONSTRUCT(Track);
210 Track() : Origin(0) {}
212 virtual const char* HasName() { return "Track"; }
213 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
214 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
215 virtual void Dump(FILE* = 0);
216 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
217 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
221 class StructuralComponent : public InterchangeObject
223 ASDCP_NO_COPY_CONSTRUCT(StructuralComponent);
229 StructuralComponent() : Duration(0) {}
230 virtual ~StructuralComponent() {}
231 virtual const char* HasName() { return "StructuralComponent"; }
232 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
233 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
234 virtual void Dump(FILE* = 0);
238 class Sequence : public StructuralComponent
240 ASDCP_NO_COPY_CONSTRUCT(Sequence);
243 Batch<UUID> StructuralComponents;
246 virtual ~Sequence() {}
247 virtual const char* HasName() { return "Sequence"; }
248 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
249 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
250 virtual void Dump(FILE* = 0);
251 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
252 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
256 class SourceClip : public StructuralComponent
258 ASDCP_NO_COPY_CONSTRUCT(SourceClip);
261 ui64_t StartPosition;
262 UMID SourcePackageID;
263 ui32_t SourceTrackID;
265 SourceClip() : StartPosition(0), SourceTrackID(0) {}
266 virtual ~SourceClip() {}
267 virtual const char* HasName() { return "SourceClip"; }
268 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
269 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
270 virtual void Dump(FILE* = 0);
271 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
272 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
276 class TimecodeComponent : public StructuralComponent
278 ASDCP_NO_COPY_CONSTRUCT(TimecodeComponent);
281 ui16_t RoundedTimecodeBase;
282 ui64_t StartTimecode;
285 TimecodeComponent() : RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0) {}
286 virtual ~TimecodeComponent() {}
287 virtual const char* HasName() { return "TimecodeComponent"; }
288 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
289 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
290 virtual void Dump(FILE* = 0);
291 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
292 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
296 class GenericDescriptor : public InterchangeObject
298 ASDCP_NO_COPY_CONSTRUCT(GenericDescriptor);
301 Batch<UUID> Locators;
302 Batch<UUID> SubDescriptors;
304 GenericDescriptor() {}
305 virtual ~GenericDescriptor() {}
306 virtual const char* HasName() { return "GenericDescriptor"; }
307 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
308 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
309 virtual void Dump(FILE* = 0);
313 class FileDescriptor : public GenericDescriptor
315 ASDCP_NO_COPY_CONSTRUCT(FileDescriptor);
318 ui32_t LinkedTrackID;
320 ui64_t ContainerDuration;
324 FileDescriptor() : LinkedTrackID(0), ContainerDuration(0) {}
325 virtual ~FileDescriptor() {}
326 virtual const char* HasName() { return "FileDescriptor"; }
327 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
328 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
329 virtual void Dump(FILE* = 0);
330 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
331 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
335 class GenericSoundEssenceDescriptor : public FileDescriptor
337 ASDCP_NO_COPY_CONSTRUCT(GenericSoundEssenceDescriptor);
340 Rational AudioSamplingRate;
344 ui32_t QuantizationBits;
347 GenericSoundEssenceDescriptor() : Locked(0), AudioRefLevel(0), ChannelCount(0), QuantizationBits(0), DialNorm(0) {}
348 virtual ~GenericSoundEssenceDescriptor() {}
349 virtual const char* HasName() { return "GenericSoundEssenceDescriptor"; }
350 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
351 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
352 virtual void Dump(FILE* = 0);
353 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
354 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
358 class WaveAudioDescriptor : public GenericSoundEssenceDescriptor
360 ASDCP_NO_COPY_CONSTRUCT(WaveAudioDescriptor);
364 ui8_t SequenceOffset;
366 UL ChannelAssignment;
368 WaveAudioDescriptor() : BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
369 virtual ~WaveAudioDescriptor() {}
370 virtual const char* HasName() { return "WaveAudioDescriptor"; }
371 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
372 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
373 virtual void Dump(FILE* = 0);
374 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
375 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
379 class GenericPictureEssenceDescriptor : public FileDescriptor
381 ASDCP_NO_COPY_CONSTRUCT(GenericPictureEssenceDescriptor);
387 Rational AspectRatio;
388 UL PictureEssenceCoding;
390 GenericPictureEssenceDescriptor() : FrameLayout(0), StoredWidth(0), StoredHeight(0) {}
391 virtual ~GenericPictureEssenceDescriptor() {}
392 virtual const char* HasName() { return "GenericPictureEssenceDescriptor"; }
393 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
394 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
395 virtual void Dump(FILE* = 0);
396 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
397 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
401 class RGBAEssenceDescriptor : public GenericPictureEssenceDescriptor
403 ASDCP_NO_COPY_CONSTRUCT(RGBAEssenceDescriptor);
406 ui32_t ComponentMaxRef;
407 ui32_t ComponentMinRef;
409 RGBAEssenceDescriptor() : ComponentMaxRef(0), ComponentMinRef(0) {}
410 virtual ~RGBAEssenceDescriptor() {}
411 virtual const char* HasName() { return "RGBAEssenceDescriptor"; }
412 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
413 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
414 virtual void Dump(FILE* = 0);
415 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
416 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
420 class JPEG2000PictureSubDescriptor : public InterchangeObject
422 ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
435 Raw PictureComponentSizing;
436 Raw CodingStyleDefault;
437 Raw QuantizationDefault;
439 JPEG2000PictureSubDescriptor() : Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
440 virtual ~JPEG2000PictureSubDescriptor() {}
441 virtual const char* HasName() { return "JPEG2000PictureSubDescriptor"; }
442 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
443 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
444 virtual void Dump(FILE* = 0);
445 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
446 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
450 class CDCIEssenceDescriptor : public GenericPictureEssenceDescriptor
452 ASDCP_NO_COPY_CONSTRUCT(CDCIEssenceDescriptor);
455 ui32_t ComponentDepth;
456 ui32_t HorizontalSubsampling;
457 ui32_t VerticalSubsampling;
460 CDCIEssenceDescriptor() : ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0) {}
461 virtual ~CDCIEssenceDescriptor() {}
462 virtual const char* HasName() { return "CDCIEssenceDescriptor"; }
463 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
464 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
465 virtual void Dump(FILE* = 0);
466 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
467 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
471 class MPEG2VideoDescriptor : public CDCIEssenceDescriptor
473 ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
476 ui8_t CodedContentType;
479 ui8_t ProfileAndLevel;
481 MPEG2VideoDescriptor() : CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
482 virtual ~MPEG2VideoDescriptor() {}
483 virtual const char* HasName() { return "MPEG2VideoDescriptor"; }
484 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
485 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
486 virtual void Dump(FILE* = 0);
487 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
488 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
492 class DMSegment : public InterchangeObject
494 ASDCP_NO_COPY_CONSTRUCT(DMSegment);
498 ui64_t EventStartPosition;
500 UTF16String EventComment;
503 DMSegment() : EventStartPosition(0), Duration(0) {}
504 virtual ~DMSegment() {}
505 virtual const char* HasName() { return "DMSegment"; }
506 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
507 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
508 virtual void Dump(FILE* = 0);
509 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
510 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
514 class CryptographicFramework : public InterchangeObject
516 ASDCP_NO_COPY_CONSTRUCT(CryptographicFramework);
521 CryptographicFramework() {}
522 virtual ~CryptographicFramework() {}
523 virtual const char* HasName() { return "CryptographicFramework"; }
524 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
525 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
526 virtual void Dump(FILE* = 0);
527 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
528 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
532 class CryptographicContext : public InterchangeObject
534 ASDCP_NO_COPY_CONSTRUCT(CryptographicContext);
538 UL SourceEssenceContainer;
541 UUID CryptographicKeyID;
543 CryptographicContext() {}
544 virtual ~CryptographicContext() {}
545 virtual const char* HasName() { return "CryptographicContext"; }
546 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
547 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
548 virtual void Dump(FILE* = 0);
549 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
550 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
554 class GenericDataEssenceDescriptor : public FileDescriptor
556 ASDCP_NO_COPY_CONSTRUCT(GenericDataEssenceDescriptor);
559 UL DataEssenceCoding;
561 GenericDataEssenceDescriptor() {}
562 virtual ~GenericDataEssenceDescriptor() {}
563 virtual const char* HasName() { return "GenericDataEssenceDescriptor"; }
564 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
565 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
566 virtual void Dump(FILE* = 0);
567 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
568 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
572 class TimedTextDescriptor : public GenericDataEssenceDescriptor
574 ASDCP_NO_COPY_CONSTRUCT(TimedTextDescriptor);
578 UTF16String UCSEncoding;
579 UTF16String NamespaceURI;
581 TimedTextDescriptor() {}
582 virtual ~TimedTextDescriptor() {}
583 virtual const char* HasName() { return "TimedTextDescriptor"; }
584 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
585 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
586 virtual void Dump(FILE* = 0);
587 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
588 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
592 class TimedTextResourceSubDescriptor : public InterchangeObject
594 ASDCP_NO_COPY_CONSTRUCT(TimedTextResourceSubDescriptor);
597 UUID AncillaryResourceID;
598 UTF16String MIMEMediaType;
599 ui32_t EssenceStreamID;
601 TimedTextResourceSubDescriptor() : EssenceStreamID(0) {}
602 virtual ~TimedTextResourceSubDescriptor() {}
603 virtual const char* HasName() { return "TimedTextResourceSubDescriptor"; }
604 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
605 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
606 virtual void Dump(FILE* = 0);
607 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
608 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
612 class StereoscopicPictureSubDescriptor : public InterchangeObject
614 ASDCP_NO_COPY_CONSTRUCT(StereoscopicPictureSubDescriptor);
618 StereoscopicPictureSubDescriptor() {}
619 virtual ~StereoscopicPictureSubDescriptor() {}
620 virtual const char* HasName() { return "StereoscopicPictureSubDescriptor"; }
621 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
622 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
623 virtual void Dump(FILE* = 0);
624 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
625 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
632 #endif // _Metadata_H_