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
42 class RGBLayout : public IArchive
49 RGBLayout() { memset(PictureElement, 0, sizeof(PictureElement)); }
52 Result_t ReadFrom(ASDCP::MemIOReader& Reader) { return RESULT_OK; }
53 Result_t WriteTo(ASDCP::MemIOWriter& Writer) { return RESULT_OK; }
56 class Raw : public IArchive
58 ASDCP_NO_COPY_CONSTRUCT(Raw);
66 Result_t ReadFrom(ASDCP::MemIOReader& Reader) { return RESULT_OK; }
67 Result_t WriteTo(ASDCP::MemIOWriter& Writer) { return RESULT_OK; }
73 class Identification : public InterchangeObject
75 ASDCP_NO_COPY_CONSTRUCT(Identification);
78 UUID ThisGenerationUID;
79 UTF16String CompanyName;
80 UTF16String ProductName;
81 ui16_t ProductVersion;
82 UTF16String VersionString;
84 Timestamp ModificationDate;
85 ui16_t ToolkitVersion;
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);
97 class ContentStorage : public InterchangeObject
99 ASDCP_NO_COPY_CONSTRUCT(ContentStorage);
102 Batch<UUID> Packages;
103 Batch<UUID> EssenceContainerData;
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);
114 class GenericPackage : public InterchangeObject
116 ASDCP_NO_COPY_CONSTRUCT(GenericPackage);
121 Timestamp PackageCreationDate;
122 Timestamp PackageModifiedDate;
126 virtual ~GenericPackage() {}
127 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
131 class MaterialPackage : public GenericPackage
133 ASDCP_NO_COPY_CONSTRUCT(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);
146 class SourcePackage : public GenericPackage
148 ASDCP_NO_COPY_CONSTRUCT(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);
161 class GenericTrack : public InterchangeObject
163 ASDCP_NO_COPY_CONSTRUCT(GenericTrack);
168 UTF16String TrackName;
171 GenericTrack() : TrackID(0), TrackNumber(0) {}
172 virtual ~GenericTrack() {}
173 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
177 class Track : public GenericTrack
179 ASDCP_NO_COPY_CONSTRUCT(Track);
185 Track() : Origin(0) {}
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);
194 class StructuralComponent : public InterchangeObject
196 ASDCP_NO_COPY_CONSTRUCT(StructuralComponent);
202 StructuralComponent() : Duration(0) {}
203 virtual ~StructuralComponent() {}
204 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
208 class Sequence : public StructuralComponent
210 ASDCP_NO_COPY_CONSTRUCT(Sequence);
213 Batch<UID> StructuralComponents;
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);
224 class SourceClip : public StructuralComponent
226 ASDCP_NO_COPY_CONSTRUCT(SourceClip);
229 ui64_t StartPosition;
230 UMID SourcePackageID;
231 ui32_t SourceTrackID;
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);
242 class TimecodeComponent : public StructuralComponent
244 ASDCP_NO_COPY_CONSTRUCT(TimecodeComponent);
247 ui16_t RoundedTimecodeBase;
248 ui64_t StartTimecode;
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);
260 class GenericDescriptor : public InterchangeObject
262 ASDCP_NO_COPY_CONSTRUCT(GenericDescriptor);
265 Batch<UUID> Locators;
266 Batch<UUID> SubDescriptors;
268 GenericDescriptor() {}
269 virtual ~GenericDescriptor() {}
270 virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
274 class FileDescriptor : public GenericDescriptor
276 ASDCP_NO_COPY_CONSTRUCT(FileDescriptor);
279 ui32_t LinkedTrackID;
281 ui64_t ContainerDuration;
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);
294 class GenericSoundEssenceDescriptor : public FileDescriptor
296 ASDCP_NO_COPY_CONSTRUCT(GenericSoundEssenceDescriptor);
299 Rational AudioSamplingRate;
302 ui8_t ElectroSpatialFormulation;
304 ui32_t QuantizationBits;
306 UL SoundEssenceCompression;
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);
317 class WaveAudioDescriptor : public GenericSoundEssenceDescriptor
319 ASDCP_NO_COPY_CONSTRUCT(WaveAudioDescriptor);
323 ui8_t SequenceOffset;
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);
335 class GenericPictureEssenceDescriptor : public FileDescriptor
337 ASDCP_NO_COPY_CONSTRUCT(GenericPictureEssenceDescriptor);
344 ui32_t DisplayHeight;
345 Rational AspectRatio;
347 UL PictureEssenceCoding;
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);
358 class RGBAEssenceDescriptor : public GenericPictureEssenceDescriptor
360 ASDCP_NO_COPY_CONSTRUCT(RGBAEssenceDescriptor);
363 ui32_t ComponentMaxRef;
364 ui32_t ComponentMinRef;
365 RGBLayout PixelLayout;
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);
376 class JPEG2000PictureSubDescriptor : public InterchangeObject
378 ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
391 Raw PictureComponentSizing;
392 Raw CodingStyleDefault;
393 Raw QuantizationDefault;
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);
404 class CDCIEssenceDescriptor : public GenericPictureEssenceDescriptor
406 ASDCP_NO_COPY_CONSTRUCT(CDCIEssenceDescriptor);
409 ui32_t ComponentDepth;
410 ui32_t HorizontalSubsampling;
411 ui32_t VerticalSubsampling;
413 ui8_t ReversedByteOrder;
414 ui32_t BlackRefLevel;
415 ui32_t WhiteReflevel;
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);
427 class MPEG2VideoDescriptor : public CDCIEssenceDescriptor
429 ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
432 ui8_t CodedContentType;
435 ui8_t ProfileAndLevel;
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);
446 class CryptographicFramework : public InterchangeObject
448 ASDCP_NO_COPY_CONSTRUCT(CryptographicFramework);
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);
462 class CryptographicContext : public InterchangeObject
464 ASDCP_NO_COPY_CONSTRUCT(CryptographicContext);
468 UL SourceEssenceContainer;
471 UUID CryptographicKeyID;
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);
485 #endif // _METADATA_H_