2 Copyright (c) 2005-2012, 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(const Dictionary*& Dict);
46 class Identification : public InterchangeObject
51 const Dictionary*& m_Dict;
52 UUID ThisGenerationUID;
53 UTF16String CompanyName;
54 UTF16String ProductName;
55 VersionType ProductVersion;
56 UTF16String VersionString;
58 Timestamp ModificationDate;
59 VersionType ToolkitVersion;
62 Identification(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
63 Identification(const Identification& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
64 virtual ~Identification() {}
65 const Identification& operator=(const Identification& rhs) { Copy(rhs); return *this; }
66 virtual void Copy(const Identification& rhs);
67 virtual const char* HasName() { return "Identification"; }
68 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
69 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
70 virtual void Dump(FILE* = 0);
71 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
72 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
76 class ContentStorage : public InterchangeObject
81 const Dictionary*& m_Dict;
83 Batch<UUID> EssenceContainerData;
85 ContentStorage(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
86 ContentStorage(const ContentStorage& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
87 virtual ~ContentStorage() {}
88 const ContentStorage& operator=(const ContentStorage& rhs) { Copy(rhs); return *this; }
89 virtual void Copy(const ContentStorage& rhs);
90 virtual const char* HasName() { return "ContentStorage"; }
91 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
92 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
93 virtual void Dump(FILE* = 0);
94 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
95 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
99 class EssenceContainerData : public InterchangeObject
101 EssenceContainerData();
104 const Dictionary*& m_Dict;
105 UMID LinkedPackageUID;
109 EssenceContainerData(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), IndexSID(0), BodySID(0) {}
110 EssenceContainerData(const EssenceContainerData& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
111 virtual ~EssenceContainerData() {}
112 const EssenceContainerData& operator=(const EssenceContainerData& rhs) { Copy(rhs); return *this; }
113 virtual void Copy(const EssenceContainerData& rhs);
114 virtual const char* HasName() { return "EssenceContainerData"; }
115 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
116 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
117 virtual void Dump(FILE* = 0);
118 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
119 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
123 class GenericPackage : public InterchangeObject
128 const Dictionary*& m_Dict;
131 Timestamp PackageCreationDate;
132 Timestamp PackageModifiedDate;
135 GenericPackage(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
136 GenericPackage(const GenericPackage& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
137 virtual ~GenericPackage() {}
138 const GenericPackage& operator=(const GenericPackage& rhs) { Copy(rhs); return *this; }
139 virtual void Copy(const GenericPackage& rhs);
140 virtual const char* HasName() { return "GenericPackage"; }
141 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
142 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
143 virtual void Dump(FILE* = 0);
147 class MaterialPackage : public GenericPackage
152 const Dictionary*& m_Dict;
154 MaterialPackage(const Dictionary*& d) : GenericPackage(d), m_Dict(d) {}
155 MaterialPackage(const MaterialPackage& rhs) : GenericPackage(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
156 virtual ~MaterialPackage() {}
157 const MaterialPackage& operator=(const MaterialPackage& rhs) { Copy(rhs); return *this; }
158 virtual void Copy(const MaterialPackage& rhs);
159 virtual const char* HasName() { return "MaterialPackage"; }
160 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
161 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
162 virtual void Dump(FILE* = 0);
163 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
164 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
168 class SourcePackage : public GenericPackage
173 const Dictionary*& m_Dict;
176 SourcePackage(const Dictionary*& d) : GenericPackage(d), m_Dict(d) {}
177 SourcePackage(const SourcePackage& rhs) : GenericPackage(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
178 virtual ~SourcePackage() {}
179 const SourcePackage& operator=(const SourcePackage& rhs) { Copy(rhs); return *this; }
180 virtual void Copy(const SourcePackage& rhs);
181 virtual const char* HasName() { return "SourcePackage"; }
182 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
183 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
184 virtual void Dump(FILE* = 0);
185 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
186 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
190 class GenericTrack : public InterchangeObject
195 const Dictionary*& m_Dict;
198 UTF16String TrackName;
201 GenericTrack(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), TrackID(0), TrackNumber(0) {}
202 GenericTrack(const GenericTrack& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
203 virtual ~GenericTrack() {}
204 const GenericTrack& operator=(const GenericTrack& rhs) { Copy(rhs); return *this; }
205 virtual void Copy(const GenericTrack& rhs);
206 virtual const char* HasName() { return "GenericTrack"; }
207 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
208 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
209 virtual void Dump(FILE* = 0);
213 class StaticTrack : public GenericTrack
218 const Dictionary*& m_Dict;
220 StaticTrack(const Dictionary*& d) : GenericTrack(d), m_Dict(d) {}
221 StaticTrack(const StaticTrack& rhs) : GenericTrack(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
222 virtual ~StaticTrack() {}
223 const StaticTrack& operator=(const StaticTrack& rhs) { Copy(rhs); return *this; }
224 virtual void Copy(const StaticTrack& rhs);
225 virtual const char* HasName() { return "StaticTrack"; }
226 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
227 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
228 virtual void Dump(FILE* = 0);
229 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
230 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
234 class Track : public GenericTrack
239 const Dictionary*& m_Dict;
243 Track(const Dictionary*& d) : GenericTrack(d), m_Dict(d), Origin(0) {}
244 Track(const Track& rhs) : GenericTrack(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
246 const Track& operator=(const Track& rhs) { Copy(rhs); return *this; }
247 virtual void Copy(const Track& rhs);
248 virtual const char* HasName() { return "Track"; }
249 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
250 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
251 virtual void Dump(FILE* = 0);
252 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
253 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
257 class StructuralComponent : public InterchangeObject
259 StructuralComponent();
262 const Dictionary*& m_Dict;
266 StructuralComponent(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), Duration(0) {}
267 StructuralComponent(const StructuralComponent& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
268 virtual ~StructuralComponent() {}
269 const StructuralComponent& operator=(const StructuralComponent& rhs) { Copy(rhs); return *this; }
270 virtual void Copy(const StructuralComponent& rhs);
271 virtual const char* HasName() { return "StructuralComponent"; }
272 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
273 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
274 virtual void Dump(FILE* = 0);
278 class Sequence : public StructuralComponent
283 const Dictionary*& m_Dict;
284 Batch<UUID> StructuralComponents;
286 Sequence(const Dictionary*& d) : StructuralComponent(d), m_Dict(d) {}
287 Sequence(const Sequence& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
288 virtual ~Sequence() {}
289 const Sequence& operator=(const Sequence& rhs) { Copy(rhs); return *this; }
290 virtual void Copy(const Sequence& rhs);
291 virtual const char* HasName() { return "Sequence"; }
292 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
293 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
294 virtual void Dump(FILE* = 0);
295 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
296 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
300 class SourceClip : public StructuralComponent
305 const Dictionary*& m_Dict;
306 ui64_t StartPosition;
307 UMID SourcePackageID;
308 ui32_t SourceTrackID;
310 SourceClip(const Dictionary*& d) : StructuralComponent(d), m_Dict(d), StartPosition(0), SourceTrackID(0) {}
311 SourceClip(const SourceClip& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
312 virtual ~SourceClip() {}
313 const SourceClip& operator=(const SourceClip& rhs) { Copy(rhs); return *this; }
314 virtual void Copy(const SourceClip& rhs);
315 virtual const char* HasName() { return "SourceClip"; }
316 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
317 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
318 virtual void Dump(FILE* = 0);
319 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
320 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
324 class TimecodeComponent : public StructuralComponent
329 const Dictionary*& m_Dict;
330 ui16_t RoundedTimecodeBase;
331 ui64_t StartTimecode;
334 TimecodeComponent(const Dictionary*& d) : StructuralComponent(d), m_Dict(d), RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0) {}
335 TimecodeComponent(const TimecodeComponent& rhs) : StructuralComponent(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
336 virtual ~TimecodeComponent() {}
337 const TimecodeComponent& operator=(const TimecodeComponent& rhs) { Copy(rhs); return *this; }
338 virtual void Copy(const TimecodeComponent& rhs);
339 virtual const char* HasName() { return "TimecodeComponent"; }
340 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
341 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
342 virtual void Dump(FILE* = 0);
343 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
344 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
348 class GenericDescriptor : public InterchangeObject
353 const Dictionary*& m_Dict;
354 Batch<UUID> Locators;
355 Batch<UUID> SubDescriptors;
357 GenericDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
358 GenericDescriptor(const GenericDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
359 virtual ~GenericDescriptor() {}
360 const GenericDescriptor& operator=(const GenericDescriptor& rhs) { Copy(rhs); return *this; }
361 virtual void Copy(const GenericDescriptor& rhs);
362 virtual const char* HasName() { return "GenericDescriptor"; }
363 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
364 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
365 virtual void Dump(FILE* = 0);
369 class FileDescriptor : public GenericDescriptor
374 const Dictionary*& m_Dict;
375 ui32_t LinkedTrackID;
377 ui64_t ContainerDuration;
381 FileDescriptor(const Dictionary*& d) : GenericDescriptor(d), m_Dict(d), LinkedTrackID(0), ContainerDuration(0) {}
382 FileDescriptor(const FileDescriptor& rhs) : GenericDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
383 virtual ~FileDescriptor() {}
384 const FileDescriptor& operator=(const FileDescriptor& rhs) { Copy(rhs); return *this; }
385 virtual void Copy(const FileDescriptor& rhs);
386 virtual const char* HasName() { return "FileDescriptor"; }
387 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
388 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
389 virtual void Dump(FILE* = 0);
390 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
391 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
395 class GenericSoundEssenceDescriptor : public FileDescriptor
397 GenericSoundEssenceDescriptor();
400 const Dictionary*& m_Dict;
401 Rational AudioSamplingRate;
405 ui32_t QuantizationBits;
408 GenericSoundEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), Locked(0), AudioRefLevel(0), ChannelCount(0), QuantizationBits(0), DialNorm(0) {}
409 GenericSoundEssenceDescriptor(const GenericSoundEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
410 virtual ~GenericSoundEssenceDescriptor() {}
411 const GenericSoundEssenceDescriptor& operator=(const GenericSoundEssenceDescriptor& rhs) { Copy(rhs); return *this; }
412 virtual void Copy(const GenericSoundEssenceDescriptor& rhs);
413 virtual const char* HasName() { return "GenericSoundEssenceDescriptor"; }
414 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
415 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
416 virtual void Dump(FILE* = 0);
417 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
418 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
422 class WaveAudioDescriptor : public GenericSoundEssenceDescriptor
424 WaveAudioDescriptor();
427 const Dictionary*& m_Dict;
429 ui8_t SequenceOffset;
431 UL ChannelAssignment;
433 WaveAudioDescriptor(const Dictionary*& d) : GenericSoundEssenceDescriptor(d), m_Dict(d), BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
434 WaveAudioDescriptor(const WaveAudioDescriptor& rhs) : GenericSoundEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
435 virtual ~WaveAudioDescriptor() {}
436 const WaveAudioDescriptor& operator=(const WaveAudioDescriptor& rhs) { Copy(rhs); return *this; }
437 virtual void Copy(const WaveAudioDescriptor& rhs);
438 virtual const char* HasName() { return "WaveAudioDescriptor"; }
439 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
440 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
441 virtual void Dump(FILE* = 0);
442 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
443 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
447 class GenericPictureEssenceDescriptor : public FileDescriptor
449 GenericPictureEssenceDescriptor();
452 const Dictionary*& m_Dict;
456 Rational AspectRatio;
457 UL PictureEssenceCoding;
459 GenericPictureEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d), FrameLayout(0), StoredWidth(0), StoredHeight(0) {}
460 GenericPictureEssenceDescriptor(const GenericPictureEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
461 virtual ~GenericPictureEssenceDescriptor() {}
462 const GenericPictureEssenceDescriptor& operator=(const GenericPictureEssenceDescriptor& rhs) { Copy(rhs); return *this; }
463 virtual void Copy(const GenericPictureEssenceDescriptor& rhs);
464 virtual const char* HasName() { return "GenericPictureEssenceDescriptor"; }
465 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
466 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
467 virtual void Dump(FILE* = 0);
468 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
469 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
473 class RGBAEssenceDescriptor : public GenericPictureEssenceDescriptor
475 RGBAEssenceDescriptor();
478 const Dictionary*& m_Dict;
479 ui32_t ComponentMaxRef;
480 ui32_t ComponentMinRef;
482 RGBAEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentMaxRef(0), ComponentMinRef(0) {}
483 RGBAEssenceDescriptor(const RGBAEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
484 virtual ~RGBAEssenceDescriptor() {}
485 const RGBAEssenceDescriptor& operator=(const RGBAEssenceDescriptor& rhs) { Copy(rhs); return *this; }
486 virtual void Copy(const RGBAEssenceDescriptor& rhs);
487 virtual const char* HasName() { return "RGBAEssenceDescriptor"; }
488 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
489 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
490 virtual void Dump(FILE* = 0);
491 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
492 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
496 class JPEG2000PictureSubDescriptor : public InterchangeObject
498 JPEG2000PictureSubDescriptor();
501 const Dictionary*& m_Dict;
512 Raw PictureComponentSizing;
513 Raw CodingStyleDefault;
514 Raw QuantizationDefault;
516 JPEG2000PictureSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
517 JPEG2000PictureSubDescriptor(const JPEG2000PictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
518 virtual ~JPEG2000PictureSubDescriptor() {}
519 const JPEG2000PictureSubDescriptor& operator=(const JPEG2000PictureSubDescriptor& rhs) { Copy(rhs); return *this; }
520 virtual void Copy(const JPEG2000PictureSubDescriptor& rhs);
521 virtual const char* HasName() { return "JPEG2000PictureSubDescriptor"; }
522 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
523 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
524 virtual void Dump(FILE* = 0);
525 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
526 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
530 class CDCIEssenceDescriptor : public GenericPictureEssenceDescriptor
532 CDCIEssenceDescriptor();
535 const Dictionary*& m_Dict;
536 ui32_t ComponentDepth;
537 ui32_t HorizontalSubsampling;
538 ui32_t VerticalSubsampling;
541 CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0) {}
542 CDCIEssenceDescriptor(const CDCIEssenceDescriptor& rhs) : GenericPictureEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
543 virtual ~CDCIEssenceDescriptor() {}
544 const CDCIEssenceDescriptor& operator=(const CDCIEssenceDescriptor& rhs) { Copy(rhs); return *this; }
545 virtual void Copy(const CDCIEssenceDescriptor& rhs);
546 virtual const char* HasName() { return "CDCIEssenceDescriptor"; }
547 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
548 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
549 virtual void Dump(FILE* = 0);
550 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
551 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
555 class MPEG2VideoDescriptor : public CDCIEssenceDescriptor
557 MPEG2VideoDescriptor();
560 const Dictionary*& m_Dict;
561 ui8_t CodedContentType;
564 ui8_t ProfileAndLevel;
566 MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
567 MPEG2VideoDescriptor(const MPEG2VideoDescriptor& rhs) : CDCIEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
568 virtual ~MPEG2VideoDescriptor() {}
569 const MPEG2VideoDescriptor& operator=(const MPEG2VideoDescriptor& rhs) { Copy(rhs); return *this; }
570 virtual void Copy(const MPEG2VideoDescriptor& rhs);
571 virtual const char* HasName() { return "MPEG2VideoDescriptor"; }
572 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
573 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
574 virtual void Dump(FILE* = 0);
575 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
576 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
580 class DMSegment : public InterchangeObject
585 const Dictionary*& m_Dict;
587 ui64_t EventStartPosition;
589 UTF16String EventComment;
592 DMSegment(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EventStartPosition(0), Duration(0) {}
593 DMSegment(const DMSegment& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
594 virtual ~DMSegment() {}
595 const DMSegment& operator=(const DMSegment& rhs) { Copy(rhs); return *this; }
596 virtual void Copy(const DMSegment& rhs);
597 virtual const char* HasName() { return "DMSegment"; }
598 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
599 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
600 virtual void Dump(FILE* = 0);
601 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
602 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
606 class CryptographicFramework : public InterchangeObject
608 CryptographicFramework();
611 const Dictionary*& m_Dict;
614 CryptographicFramework(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
615 CryptographicFramework(const CryptographicFramework& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
616 virtual ~CryptographicFramework() {}
617 const CryptographicFramework& operator=(const CryptographicFramework& rhs) { Copy(rhs); return *this; }
618 virtual void Copy(const CryptographicFramework& rhs);
619 virtual const char* HasName() { return "CryptographicFramework"; }
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&);
628 class CryptographicContext : public InterchangeObject
630 CryptographicContext();
633 const Dictionary*& m_Dict;
635 UL SourceEssenceContainer;
638 UUID CryptographicKeyID;
640 CryptographicContext(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
641 CryptographicContext(const CryptographicContext& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
642 virtual ~CryptographicContext() {}
643 const CryptographicContext& operator=(const CryptographicContext& rhs) { Copy(rhs); return *this; }
644 virtual void Copy(const CryptographicContext& rhs);
645 virtual const char* HasName() { return "CryptographicContext"; }
646 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
647 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
648 virtual void Dump(FILE* = 0);
649 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
650 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
654 class GenericDataEssenceDescriptor : public FileDescriptor
656 GenericDataEssenceDescriptor();
659 const Dictionary*& m_Dict;
660 UL DataEssenceCoding;
662 GenericDataEssenceDescriptor(const Dictionary*& d) : FileDescriptor(d), m_Dict(d) {}
663 GenericDataEssenceDescriptor(const GenericDataEssenceDescriptor& rhs) : FileDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
664 virtual ~GenericDataEssenceDescriptor() {}
665 const GenericDataEssenceDescriptor& operator=(const GenericDataEssenceDescriptor& rhs) { Copy(rhs); return *this; }
666 virtual void Copy(const GenericDataEssenceDescriptor& rhs);
667 virtual const char* HasName() { return "GenericDataEssenceDescriptor"; }
668 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
669 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
670 virtual void Dump(FILE* = 0);
671 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
672 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
676 class TimedTextDescriptor : public GenericDataEssenceDescriptor
678 TimedTextDescriptor();
681 const Dictionary*& m_Dict;
683 UTF16String UCSEncoding;
684 UTF16String NamespaceURI;
686 TimedTextDescriptor(const Dictionary*& d) : GenericDataEssenceDescriptor(d), m_Dict(d) {}
687 TimedTextDescriptor(const TimedTextDescriptor& rhs) : GenericDataEssenceDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
688 virtual ~TimedTextDescriptor() {}
689 const TimedTextDescriptor& operator=(const TimedTextDescriptor& rhs) { Copy(rhs); return *this; }
690 virtual void Copy(const TimedTextDescriptor& rhs);
691 virtual const char* HasName() { return "TimedTextDescriptor"; }
692 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
693 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
694 virtual void Dump(FILE* = 0);
695 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
696 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
700 class TimedTextResourceSubDescriptor : public InterchangeObject
702 TimedTextResourceSubDescriptor();
705 const Dictionary*& m_Dict;
706 UUID AncillaryResourceID;
707 UTF16String MIMEMediaType;
708 ui32_t EssenceStreamID;
710 TimedTextResourceSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), EssenceStreamID(0) {}
711 TimedTextResourceSubDescriptor(const TimedTextResourceSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
712 virtual ~TimedTextResourceSubDescriptor() {}
713 const TimedTextResourceSubDescriptor& operator=(const TimedTextResourceSubDescriptor& rhs) { Copy(rhs); return *this; }
714 virtual void Copy(const TimedTextResourceSubDescriptor& rhs);
715 virtual const char* HasName() { return "TimedTextResourceSubDescriptor"; }
716 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
717 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
718 virtual void Dump(FILE* = 0);
719 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
720 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
724 class StereoscopicPictureSubDescriptor : public InterchangeObject
726 StereoscopicPictureSubDescriptor();
729 const Dictionary*& m_Dict;
731 StereoscopicPictureSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
732 StereoscopicPictureSubDescriptor(const StereoscopicPictureSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
733 virtual ~StereoscopicPictureSubDescriptor() {}
734 const StereoscopicPictureSubDescriptor& operator=(const StereoscopicPictureSubDescriptor& rhs) { Copy(rhs); return *this; }
735 virtual void Copy(const StereoscopicPictureSubDescriptor& rhs);
736 virtual const char* HasName() { return "StereoscopicPictureSubDescriptor"; }
737 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
738 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
739 virtual void Dump(FILE* = 0);
740 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
741 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
745 class NetworkLocator : public InterchangeObject
750 const Dictionary*& m_Dict;
751 UTF16String URLString;
753 NetworkLocator(const Dictionary*& d) : InterchangeObject(d), m_Dict(d) {}
754 NetworkLocator(const NetworkLocator& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
755 virtual ~NetworkLocator() {}
756 const NetworkLocator& operator=(const NetworkLocator& rhs) { Copy(rhs); return *this; }
757 virtual void Copy(const NetworkLocator& rhs);
758 virtual const char* HasName() { return "NetworkLocator"; }
759 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
760 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
761 virtual void Dump(FILE* = 0);
762 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
763 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
767 class MCALabelSubDescriptor : public InterchangeObject
769 MCALabelSubDescriptor();
772 const Dictionary*& m_Dict;
773 UL MCALabelDictionaryID;
775 UTF16String MCATagSymbol;
776 UTF16String MCATagName;
778 ISO8String RFC5646SpokenLanguage;
780 MCALabelSubDescriptor(const Dictionary*& d) : InterchangeObject(d), m_Dict(d), MCAChannelID(0) {}
781 MCALabelSubDescriptor(const MCALabelSubDescriptor& rhs) : InterchangeObject(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
782 virtual ~MCALabelSubDescriptor() {}
783 const MCALabelSubDescriptor& operator=(const MCALabelSubDescriptor& rhs) { Copy(rhs); return *this; }
784 virtual void Copy(const MCALabelSubDescriptor& rhs);
785 virtual const char* HasName() { return "MCALabelSubDescriptor"; }
786 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
787 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
788 virtual void Dump(FILE* = 0);
789 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
790 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
794 class AudioChannelLabelSubDescriptor : public MCALabelSubDescriptor
796 AudioChannelLabelSubDescriptor();
799 const Dictionary*& m_Dict;
800 UUID SoundfieldGroupLinkID;
802 AudioChannelLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d) {}
803 AudioChannelLabelSubDescriptor(const AudioChannelLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
804 virtual ~AudioChannelLabelSubDescriptor() {}
805 const AudioChannelLabelSubDescriptor& operator=(const AudioChannelLabelSubDescriptor& rhs) { Copy(rhs); return *this; }
806 virtual void Copy(const AudioChannelLabelSubDescriptor& rhs);
807 virtual const char* HasName() { return "AudioChannelLabelSubDescriptor"; }
808 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
809 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
810 virtual void Dump(FILE* = 0);
811 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
812 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
816 class SoundfieldGroupLabelSubDescriptor : public MCALabelSubDescriptor
818 SoundfieldGroupLabelSubDescriptor();
821 const Dictionary*& m_Dict;
822 Array<UUID> GroupOfSoundfieldGroupsLinkID;
824 SoundfieldGroupLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d) {}
825 SoundfieldGroupLabelSubDescriptor(const SoundfieldGroupLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
826 virtual ~SoundfieldGroupLabelSubDescriptor() {}
827 const SoundfieldGroupLabelSubDescriptor& operator=(const SoundfieldGroupLabelSubDescriptor& rhs) { Copy(rhs); return *this; }
828 virtual void Copy(const SoundfieldGroupLabelSubDescriptor& rhs);
829 virtual const char* HasName() { return "SoundfieldGroupLabelSubDescriptor"; }
830 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
831 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
832 virtual void Dump(FILE* = 0);
833 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
834 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
838 class GroupOfSoundfieldGroupsLabelSubDescriptor : public MCALabelSubDescriptor
840 GroupOfSoundfieldGroupsLabelSubDescriptor();
843 const Dictionary*& m_Dict;
845 GroupOfSoundfieldGroupsLabelSubDescriptor(const Dictionary*& d) : MCALabelSubDescriptor(d), m_Dict(d) {}
846 GroupOfSoundfieldGroupsLabelSubDescriptor(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs) : MCALabelSubDescriptor(rhs.m_Dict), m_Dict(rhs.m_Dict) { Copy(rhs); }
847 virtual ~GroupOfSoundfieldGroupsLabelSubDescriptor() {}
848 const GroupOfSoundfieldGroupsLabelSubDescriptor& operator=(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs) { Copy(rhs); return *this; }
849 virtual void Copy(const GroupOfSoundfieldGroupsLabelSubDescriptor& rhs);
850 virtual const char* HasName() { return "GroupOfSoundfieldGroupsLabelSubDescriptor"; }
851 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
852 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
853 virtual void Dump(FILE* = 0);
854 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
855 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
862 #endif // _Metadata_H_