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 Identification : public InterchangeObject
44 ASDCP_NO_COPY_CONSTRUCT(Identification);
47 UUID ThisGenerationUID;
48 UTF16String CompanyName;
49 UTF16String ProductName;
50 ui16_t ProductVersion;
51 UTF16String VersionString;
53 Timestamp ModificationDate;
54 ui16_t ToolkitVersion;
58 virtual ~Identification() {}
59 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
60 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
61 virtual void Dump(FILE* = 0);
66 class ContentStorage : public InterchangeObject
68 ASDCP_NO_COPY_CONSTRUCT(ContentStorage);
73 Batch<UUID> EssenceContainerData;
76 virtual ~ContentStorage() {}
77 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
78 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
79 virtual void Dump(FILE* = 0);
83 class GenericPackage : public InterchangeObject
85 ASDCP_NO_COPY_CONSTRUCT(GenericPackage);
91 Timestamp PackageCreationDate;
92 Timestamp PackageModifiedDate;
96 virtual ~GenericPackage() {}
97 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l) = 0;
98 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
99 virtual void Dump(FILE* = 0) = 0;
104 class MaterialPackage : public GenericPackage
106 ASDCP_NO_COPY_CONSTRUCT(MaterialPackage);
110 virtual ~MaterialPackage() {}
111 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
112 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
113 virtual void Dump(FILE* = 0);
118 class SourcePackage : public GenericPackage
120 ASDCP_NO_COPY_CONSTRUCT(SourcePackage);
124 virtual ~SourcePackage() {}
125 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
126 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
127 virtual void Dump(FILE* = 0);
131 class Track : public InterchangeObject
133 ASDCP_NO_COPY_CONSTRUCT(Track);
139 UTF16String TrackName;
146 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
147 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
148 virtual void Dump(FILE* = 0);
152 class Sequence : public InterchangeObject
154 ASDCP_NO_COPY_CONSTRUCT(Sequence);
160 Batch<UID> StructuralComponents;
163 virtual ~Sequence() {}
164 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
165 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
166 virtual void Dump(FILE* = 0);
170 class SourceClip : public InterchangeObject
172 ASDCP_NO_COPY_CONSTRUCT(SourceClip);
177 ui64_t StartPosition;
179 UMID SourcePackageID;
180 ui32_t SourceTrackID;
183 virtual ~SourceClip() {}
184 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
185 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
186 virtual void Dump(FILE* = 0);
190 class TimecodeComponent : public InterchangeObject
192 ASDCP_NO_COPY_CONSTRUCT(TimecodeComponent);
198 ui16_t RoundedTimecodeBase;
199 ui64_t StartTimecode;
202 TimecodeComponent() {}
203 virtual ~TimecodeComponent() {}
204 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
205 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
206 virtual void Dump(FILE* = 0);
210 class MPEG2VideoDescriptor : public ASDCP::MPEG2::VideoDescriptor, public InterchangeObject
212 ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
215 ui32_t LinkedTrackID;
218 MPEG2VideoDescriptor() : LinkedTrackID(0) {}
219 ~MPEG2VideoDescriptor() {}
220 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
221 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
222 virtual void Dump(FILE* = 0);
226 class FileDescriptor : public InterchangeObject
228 ASDCP_NO_COPY_CONSTRUCT(FileDescriptor);
232 Batch<UUID> Locators;
233 Batch<UUID> SubDescriptors;
234 ui32_t LinkedTrackID;
236 ui64_t ContainerDuration;
240 FileDescriptor() : LinkedTrackID(0), ContainerDuration(0) {}
242 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
243 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
244 virtual void Dump(FILE* = 0);
248 class WaveAudioDescriptor : public FileDescriptor
250 ASDCP_NO_COPY_CONSTRUCT(WaveAudioDescriptor);
253 Rational AudioSamplingRate;
256 ui8_t ElectroSpatialFormulation;
258 ui32_t QuantizationBits;
260 UL SoundEssenceCompression;
262 ui8_t SequenceOffset;
264 // Stream PeakEnvelope;
266 WaveAudioDescriptor() :
267 Locked(false), AudioRefLevel(0), ElectroSpatialFormulation(0),
268 ChannelCount(0), QuantizationBits(0), DialNorm(0), BlockAlign(0),
269 SequenceOffset(0), AvgBps(0) {}
271 ~WaveAudioDescriptor() {}
272 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
273 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
274 virtual void Dump(FILE* = 0);
278 class GenericPictureEssenceDescriptor : public FileDescriptor
280 ASDCP_NO_COPY_CONSTRUCT(GenericPictureEssenceDescriptor);
287 ui32_t DisplayHeight;
288 Rational AspectRatio;
289 ui32_t ComponentMaxRef;
290 ui32_t ComponentMinRef;
292 UL PictureEssenceCoding;
294 GenericPictureEssenceDescriptor() :
295 FrameLayout(0), StoredWidth(0), StoredHeight(0), DisplayWidth(0),
296 DisplayHeight(0), ComponentMaxRef(0), ComponentMinRef(0) {}
298 ~GenericPictureEssenceDescriptor() {}
299 // virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
300 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
301 // virtual void Dump(FILE* = 0);
305 class RGBAEssenceDescriptor : public GenericPictureEssenceDescriptor
307 ASDCP_NO_COPY_CONSTRUCT(RGBAEssenceDescriptor);
317 RGBLayout() { memset(PictureElement, 0, sizeof(PictureElement)); }
320 RGBLayout PixelLayout;
322 RGBAEssenceDescriptor() {}
323 ~RGBAEssenceDescriptor() {}
324 // virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
325 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
326 // virtual void Dump(FILE* = 0);
331 ASDCP_NO_COPY_CONSTRUCT(Raw);
341 class JPEG2000PictureSubDescriptor : public InterchangeObject
343 ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
356 Raw PictureComponentSizing;
357 Raw CodingStyleDefault;
358 Raw QuantizationDefault;
360 JPEG2000PictureSubDescriptor() :
361 Rsize(0), Xsize(0), Ysize(0),
362 XOsize(0), YOsize(0), XTsize(0),
363 YTsize(0), XTOsize(0), YTOsize(0),
366 ~JPEG2000PictureSubDescriptor() {}
367 // virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
368 virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
369 // virtual void Dump(FILE* = 0);
374 class CryptographicFramework : public InterchangeObject
376 ASDCP_NO_COPY_CONSTRUCT(CryptographicFramework);
381 CryptographicFramework() {}
382 ~CryptographicFramework() {}
383 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
384 // virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
385 virtual void Dump(FILE* = 0);
389 class CryptographicContext : public InterchangeObject
391 ASDCP_NO_COPY_CONSTRUCT(CryptographicContext);
395 UL SourceEssenceContainer;
398 UUID CryptographicKeyID;
400 CryptographicContext() {}
401 ~CryptographicContext() {}
402 virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
403 // virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
404 virtual void Dump(FILE* = 0);
411 #endif // _METADATA_H_