2 Copyright (c) 2005-2007, 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;
367 WaveAudioDescriptor() : BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
368 virtual ~WaveAudioDescriptor() {}
369 virtual const char* HasName() { return "WaveAudioDescriptor"; }
370 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
371 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
372 virtual void Dump(FILE* = 0);
373 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
374 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
378 class GenericPictureEssenceDescriptor : public FileDescriptor
380 ASDCP_NO_COPY_CONSTRUCT(GenericPictureEssenceDescriptor);
386 Rational AspectRatio;
387 UL PictureEssenceCoding;
389 GenericPictureEssenceDescriptor() : FrameLayout(0), StoredWidth(0), StoredHeight(0) {}
390 virtual ~GenericPictureEssenceDescriptor() {}
391 virtual const char* HasName() { return "GenericPictureEssenceDescriptor"; }
392 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
393 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
394 virtual void Dump(FILE* = 0);
395 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
396 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
400 class RGBAEssenceDescriptor : public GenericPictureEssenceDescriptor
402 ASDCP_NO_COPY_CONSTRUCT(RGBAEssenceDescriptor);
405 ui32_t ComponentMaxRef;
406 ui32_t ComponentMinRef;
408 RGBAEssenceDescriptor() : ComponentMaxRef(0), ComponentMinRef(0) {}
409 virtual ~RGBAEssenceDescriptor() {}
410 virtual const char* HasName() { return "RGBAEssenceDescriptor"; }
411 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
412 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
413 virtual void Dump(FILE* = 0);
414 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
415 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
419 class JPEG2000PictureSubDescriptor : public InterchangeObject
421 ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
434 Raw PictureComponentSizing;
435 Raw CodingStyleDefault;
436 Raw QuantizationDefault;
438 JPEG2000PictureSubDescriptor() : Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
439 virtual ~JPEG2000PictureSubDescriptor() {}
440 virtual const char* HasName() { return "JPEG2000PictureSubDescriptor"; }
441 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
442 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
443 virtual void Dump(FILE* = 0);
444 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
445 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
449 class CDCIEssenceDescriptor : public GenericPictureEssenceDescriptor
451 ASDCP_NO_COPY_CONSTRUCT(CDCIEssenceDescriptor);
454 ui32_t ComponentDepth;
455 ui32_t HorizontalSubsampling;
456 ui32_t VerticalSubsampling;
459 CDCIEssenceDescriptor() : ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0) {}
460 virtual ~CDCIEssenceDescriptor() {}
461 virtual const char* HasName() { return "CDCIEssenceDescriptor"; }
462 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
463 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
464 virtual void Dump(FILE* = 0);
465 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
466 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
470 class MPEG2VideoDescriptor : public CDCIEssenceDescriptor
472 ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
475 ui8_t CodedContentType;
478 ui8_t ProfileAndLevel;
480 MPEG2VideoDescriptor() : CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
481 virtual ~MPEG2VideoDescriptor() {}
482 virtual const char* HasName() { return "MPEG2VideoDescriptor"; }
483 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
484 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
485 virtual void Dump(FILE* = 0);
486 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
487 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
491 class DMSegment : public InterchangeObject
493 ASDCP_NO_COPY_CONSTRUCT(DMSegment);
497 ui64_t EventStartPosition;
499 UTF16String EventComment;
502 DMSegment() : EventStartPosition(0), Duration(0) {}
503 virtual ~DMSegment() {}
504 virtual const char* HasName() { return "DMSegment"; }
505 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
506 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
507 virtual void Dump(FILE* = 0);
508 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
509 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
513 class CryptographicFramework : public InterchangeObject
515 ASDCP_NO_COPY_CONSTRUCT(CryptographicFramework);
520 CryptographicFramework() {}
521 virtual ~CryptographicFramework() {}
522 virtual const char* HasName() { return "CryptographicFramework"; }
523 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
524 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
525 virtual void Dump(FILE* = 0);
526 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
527 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
531 class CryptographicContext : public InterchangeObject
533 ASDCP_NO_COPY_CONSTRUCT(CryptographicContext);
537 UL SourceEssenceContainer;
540 UUID CryptographicKeyID;
542 CryptographicContext() {}
543 virtual ~CryptographicContext() {}
544 virtual const char* HasName() { return "CryptographicContext"; }
545 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
546 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
547 virtual void Dump(FILE* = 0);
548 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
549 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
553 class GenericDataEssenceDescriptor : public FileDescriptor
555 ASDCP_NO_COPY_CONSTRUCT(GenericDataEssenceDescriptor);
558 UL DataEssenceCoding;
560 GenericDataEssenceDescriptor() {}
561 virtual ~GenericDataEssenceDescriptor() {}
562 virtual const char* HasName() { return "GenericDataEssenceDescriptor"; }
563 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
564 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
565 virtual void Dump(FILE* = 0);
566 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
567 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
571 class TimedTextDescriptor : public GenericDataEssenceDescriptor
573 ASDCP_NO_COPY_CONSTRUCT(TimedTextDescriptor);
577 UTF16String UCSEncoding;
578 UTF16String NamespaceURI;
580 TimedTextDescriptor() {}
581 virtual ~TimedTextDescriptor() {}
582 virtual const char* HasName() { return "TimedTextDescriptor"; }
583 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
584 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
585 virtual void Dump(FILE* = 0);
586 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
587 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
591 class TimedTextResourceSubDescriptor : public InterchangeObject
593 ASDCP_NO_COPY_CONSTRUCT(TimedTextResourceSubDescriptor);
596 UUID AncillaryResourceID;
597 UTF16String MIMEMediaType;
598 ui32_t EssenceStreamID;
600 TimedTextResourceSubDescriptor() : EssenceStreamID(0) {}
601 virtual ~TimedTextResourceSubDescriptor() {}
602 virtual const char* HasName() { return "TimedTextResourceSubDescriptor"; }
603 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
604 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
605 virtual void Dump(FILE* = 0);
606 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
607 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
611 class StereoscopicPictureSubDescriptor : public InterchangeObject
613 ASDCP_NO_COPY_CONSTRUCT(StereoscopicPictureSubDescriptor);
617 StereoscopicPictureSubDescriptor() {}
618 virtual ~StereoscopicPictureSubDescriptor() {}
619 virtual const char* HasName() { return "StereoscopicPictureSubDescriptor"; }
620 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
621 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
622 virtual void Dump(FILE* = 0);
623 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
624 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
631 #endif // _Metadata_H_