2 Copyright (c) 2005-2006, 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
44 class Identification : public InterchangeObject
46 ASDCP_NO_COPY_CONSTRUCT(Identification);
49 UUID ThisGenerationUID;
50 UTF16String CompanyName;
51 UTF16String ProductName;
52 VersionType ProductVersion;
53 UTF16String VersionString;
55 Timestamp ModificationDate;
56 VersionType ToolkitVersion;
60 virtual ~Identification() {}
61 virtual const char* HasName() { return "Identification"; }
62 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
63 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
64 virtual void Dump(FILE* = 0);
65 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
66 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
70 class ContentStorage : public InterchangeObject
72 ASDCP_NO_COPY_CONSTRUCT(ContentStorage);
76 Batch<UUID> EssenceContainerData;
79 virtual ~ContentStorage() {}
80 virtual const char* HasName() { return "ContentStorage"; }
81 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
82 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
83 virtual void Dump(FILE* = 0);
84 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
85 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
89 class EssenceContainerData : public InterchangeObject
91 ASDCP_NO_COPY_CONSTRUCT(EssenceContainerData);
94 UMID LinkedPackageUID;
98 EssenceContainerData() : IndexSID(0), BodySID(0) {}
99 virtual ~EssenceContainerData() {}
100 virtual const char* HasName() { return "EssenceContainerData"; }
101 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
102 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
103 virtual void Dump(FILE* = 0);
104 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
105 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
109 class GenericPackage : public InterchangeObject
111 ASDCP_NO_COPY_CONSTRUCT(GenericPackage);
116 Timestamp PackageCreationDate;
117 Timestamp PackageModifiedDate;
121 virtual ~GenericPackage() {}
122 virtual const char* HasName() { return "GenericPackage"; }
123 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
124 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
125 virtual void Dump(FILE* = 0);
129 class MaterialPackage : public GenericPackage
131 ASDCP_NO_COPY_CONSTRUCT(MaterialPackage);
136 virtual ~MaterialPackage() {}
137 virtual const char* HasName() { return "MaterialPackage"; }
138 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
139 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
140 virtual void Dump(FILE* = 0);
141 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
142 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
146 class SourcePackage : public GenericPackage
148 ASDCP_NO_COPY_CONSTRUCT(SourcePackage);
154 virtual ~SourcePackage() {}
155 virtual const char* HasName() { return "SourcePackage"; }
156 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
157 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
158 virtual void Dump(FILE* = 0);
159 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
160 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
164 class GenericTrack : public InterchangeObject
166 ASDCP_NO_COPY_CONSTRUCT(GenericTrack);
171 UTF16String TrackName;
174 GenericTrack() : TrackID(0), TrackNumber(0) {}
175 virtual ~GenericTrack() {}
176 virtual const char* HasName() { return "GenericTrack"; }
177 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
178 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
179 virtual void Dump(FILE* = 0);
183 class StaticTrack : public GenericTrack
185 ASDCP_NO_COPY_CONSTRUCT(StaticTrack);
190 virtual ~StaticTrack() {}
191 virtual const char* HasName() { return "StaticTrack"; }
192 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
193 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
194 virtual void Dump(FILE* = 0);
195 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
196 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
200 class Track : public GenericTrack
202 ASDCP_NO_COPY_CONSTRUCT(Track);
208 Track() : Origin(0) {}
210 virtual const char* HasName() { return "Track"; }
211 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
212 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
213 virtual void Dump(FILE* = 0);
214 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
215 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
219 class StructuralComponent : public InterchangeObject
221 ASDCP_NO_COPY_CONSTRUCT(StructuralComponent);
227 StructuralComponent() : Duration(0) {}
228 virtual ~StructuralComponent() {}
229 virtual const char* HasName() { return "StructuralComponent"; }
230 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
231 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
232 virtual void Dump(FILE* = 0);
236 class Sequence : public StructuralComponent
238 ASDCP_NO_COPY_CONSTRUCT(Sequence);
241 Batch<UUID> StructuralComponents;
244 virtual ~Sequence() {}
245 virtual const char* HasName() { return "Sequence"; }
246 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
247 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
248 virtual void Dump(FILE* = 0);
249 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
250 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
254 class SourceClip : public StructuralComponent
256 ASDCP_NO_COPY_CONSTRUCT(SourceClip);
259 ui64_t StartPosition;
260 UMID SourcePackageID;
261 ui32_t SourceTrackID;
263 SourceClip() : StartPosition(0), SourceTrackID(0) {}
264 virtual ~SourceClip() {}
265 virtual const char* HasName() { return "SourceClip"; }
266 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
267 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
268 virtual void Dump(FILE* = 0);
269 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
270 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
274 class TimecodeComponent : public StructuralComponent
276 ASDCP_NO_COPY_CONSTRUCT(TimecodeComponent);
279 ui16_t RoundedTimecodeBase;
280 ui64_t StartTimecode;
283 TimecodeComponent() : RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0) {}
284 virtual ~TimecodeComponent() {}
285 virtual const char* HasName() { return "TimecodeComponent"; }
286 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
287 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
288 virtual void Dump(FILE* = 0);
289 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
290 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
294 class GenericDescriptor : public InterchangeObject
296 ASDCP_NO_COPY_CONSTRUCT(GenericDescriptor);
299 Batch<UUID> Locators;
300 Batch<UUID> SubDescriptors;
302 GenericDescriptor() {}
303 virtual ~GenericDescriptor() {}
304 virtual const char* HasName() { return "GenericDescriptor"; }
305 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
306 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
307 virtual void Dump(FILE* = 0);
311 class FileDescriptor : public GenericDescriptor
313 ASDCP_NO_COPY_CONSTRUCT(FileDescriptor);
316 ui32_t LinkedTrackID;
318 ui64_t ContainerDuration;
322 FileDescriptor() : LinkedTrackID(0), ContainerDuration(0) {}
323 virtual ~FileDescriptor() {}
324 virtual const char* HasName() { return "FileDescriptor"; }
325 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
326 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
327 virtual void Dump(FILE* = 0);
328 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
329 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
333 class GenericSoundEssenceDescriptor : public FileDescriptor
335 ASDCP_NO_COPY_CONSTRUCT(GenericSoundEssenceDescriptor);
338 Rational AudioSamplingRate;
342 ui32_t QuantizationBits;
345 GenericSoundEssenceDescriptor() : Locked(0), AudioRefLevel(0), ChannelCount(0), QuantizationBits(0), DialNorm(0) {}
346 virtual ~GenericSoundEssenceDescriptor() {}
347 virtual const char* HasName() { return "GenericSoundEssenceDescriptor"; }
348 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
349 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
350 virtual void Dump(FILE* = 0);
351 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
352 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
356 class WaveAudioDescriptor : public GenericSoundEssenceDescriptor
358 ASDCP_NO_COPY_CONSTRUCT(WaveAudioDescriptor);
362 ui8_t SequenceOffset;
365 WaveAudioDescriptor() : BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
366 virtual ~WaveAudioDescriptor() {}
367 virtual const char* HasName() { return "WaveAudioDescriptor"; }
368 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
369 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
370 virtual void Dump(FILE* = 0);
371 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
372 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
376 class GenericPictureEssenceDescriptor : public FileDescriptor
378 ASDCP_NO_COPY_CONSTRUCT(GenericPictureEssenceDescriptor);
384 Rational AspectRatio;
386 GenericPictureEssenceDescriptor() : FrameLayout(0), StoredWidth(0), StoredHeight(0) {}
387 virtual ~GenericPictureEssenceDescriptor() {}
388 virtual const char* HasName() { return "GenericPictureEssenceDescriptor"; }
389 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
390 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
391 virtual void Dump(FILE* = 0);
392 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
393 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
397 class RGBAEssenceDescriptor : public GenericPictureEssenceDescriptor
399 ASDCP_NO_COPY_CONSTRUCT(RGBAEssenceDescriptor);
402 ui32_t ComponentMaxRef;
403 ui32_t ComponentMinRef;
405 RGBAEssenceDescriptor() : ComponentMaxRef(0), ComponentMinRef(0) {}
406 virtual ~RGBAEssenceDescriptor() {}
407 virtual const char* HasName() { return "RGBAEssenceDescriptor"; }
408 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
409 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
410 virtual void Dump(FILE* = 0);
411 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
412 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
416 class JPEG2000PictureSubDescriptor : public InterchangeObject
418 ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
431 Raw PictureComponentSizing;
432 Raw CodingStyleDefault;
433 Raw QuantizationDefault;
435 JPEG2000PictureSubDescriptor() : Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
436 virtual ~JPEG2000PictureSubDescriptor() {}
437 virtual const char* HasName() { return "JPEG2000PictureSubDescriptor"; }
438 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
439 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
440 virtual void Dump(FILE* = 0);
441 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
442 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
446 class CDCIEssenceDescriptor : public GenericPictureEssenceDescriptor
448 ASDCP_NO_COPY_CONSTRUCT(CDCIEssenceDescriptor);
451 ui32_t ComponentDepth;
452 ui32_t HorizontalSubsampling;
453 ui32_t VerticalSubsampling;
456 CDCIEssenceDescriptor() : ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0) {}
457 virtual ~CDCIEssenceDescriptor() {}
458 virtual const char* HasName() { return "CDCIEssenceDescriptor"; }
459 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
460 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
461 virtual void Dump(FILE* = 0);
462 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
463 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
467 class MPEG2VideoDescriptor : public CDCIEssenceDescriptor
469 ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
472 ui8_t CodedContentType;
475 ui8_t ProfileAndLevel;
477 MPEG2VideoDescriptor() : CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
478 virtual ~MPEG2VideoDescriptor() {}
479 virtual const char* HasName() { return "MPEG2VideoDescriptor"; }
480 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
481 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
482 virtual void Dump(FILE* = 0);
483 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
484 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
488 class DMSegment : public InterchangeObject
490 ASDCP_NO_COPY_CONSTRUCT(DMSegment);
493 ui64_t EventStartPosition;
494 UTF16String EventComment;
497 DMSegment() : EventStartPosition(0) {}
498 virtual ~DMSegment() {}
499 virtual const char* HasName() { return "DMSegment"; }
500 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
501 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
502 virtual void Dump(FILE* = 0);
503 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
504 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
508 class CryptographicFramework : public InterchangeObject
510 ASDCP_NO_COPY_CONSTRUCT(CryptographicFramework);
515 CryptographicFramework() {}
516 virtual ~CryptographicFramework() {}
517 virtual const char* HasName() { return "CryptographicFramework"; }
518 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
519 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
520 virtual void Dump(FILE* = 0);
521 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
522 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
526 class CryptographicContext : public InterchangeObject
528 ASDCP_NO_COPY_CONSTRUCT(CryptographicContext);
532 UL SourceEssenceContainer;
535 UUID CryptographicKeyID;
537 CryptographicContext() {}
538 virtual ~CryptographicContext() {}
539 virtual const char* HasName() { return "CryptographicContext"; }
540 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
541 virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
542 virtual void Dump(FILE* = 0);
543 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
544 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
551 #endif // _METADATA_H_