Permit 64-bit builds.
[asdcplib.git] / src / Metadata.h
index 8630d187b9871b8e1de13eb91fa391aec89f8021..207e031daf23130e83c05c32573b49a90a187c46 100755 (executable)
@@ -1,5 +1,5 @@
 /*
-Copyright (c) 2005-2006, John Hurst
+Copyright (c) 2005-2007, John Hurst
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
@@ -29,8 +29,8 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     \brief   MXF metadata objects
 */
 
-#ifndef _METADATA_H_
-#define _METADATA_H_
+#ifndef _Metadata_H_
+#define _Metadata_H_
 
 #include "MXF.h"
 
@@ -38,42 +38,7 @@ namespace ASDCP
 {
   namespace MXF
     {
-      // Types
-      class RGBLayout : public IArchive
-        {
-        public:
-          struct element {
-            ui8_t Code;
-            ui8_t Depth;
-          } PictureElement[8];
-          RGBLayout() { memset(PictureElement, 0, sizeof(PictureElement)); }
-
-         //
-          Result_t ReadFrom(ASDCP::MemIOReader& Reader) { return RESULT_OK; }
-         Result_t WriteTo(ASDCP::MemIOWriter& Writer) { return RESULT_OK; }
-          inline const char* ToString(char* str_buf) const {
-            snprintf(str_buf, IdentBufferLen, "RGBLayout: <PictureElement[8]>\n");
-            return str_buf;
-          }
-        };
-
-      class Raw : public IArchive
-       {
-         ASDCP_NO_COPY_CONSTRUCT(Raw);
-
-       public:
-         byte_t* data;
-         Raw() {}
-         ~Raw() {}
-
-         //
-          Result_t ReadFrom(ASDCP::MemIOReader& Reader) { return RESULT_OK; }
-         Result_t WriteTo(ASDCP::MemIOWriter& Writer) { return RESULT_OK; }
-          inline const char* ToString(char* str_buf) const {
-            snprintf(str_buf, IdentBufferLen, "RAW\n");
-            return str_buf;
-          }
-       };
+      void Metadata_InitTypes();
 
       //
 
@@ -86,16 +51,18 @@ namespace ASDCP
           UUID ThisGenerationUID;
           UTF16String CompanyName;
           UTF16String ProductName;
-          ui16_t ProductVersion;
+          VersionType ProductVersion;
           UTF16String VersionString;
           UUID ProductUID;
           Timestamp ModificationDate;
-          ui16_t ToolkitVersion;
+          VersionType ToolkitVersion;
           UTF16String Platform;
 
-         Identification() : ProductVersion(0), ToolkitVersion(0) {}
+         Identification() {}
          virtual ~Identification() {}
+          virtual const char* HasName() { return "Identification"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -112,7 +79,29 @@ namespace ASDCP
 
          ContentStorage() {}
          virtual ~ContentStorage() {}
+          virtual const char* HasName() { return "ContentStorage"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
+         virtual void     Dump(FILE* = 0);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+       };
+
+      //
+      class EssenceContainerData : public InterchangeObject
+       {
+         ASDCP_NO_COPY_CONSTRUCT(EssenceContainerData);
+
+       public:
+          UMID LinkedPackageUID;
+          ui32_t IndexSID;
+          ui32_t BodySID;
+
+         EssenceContainerData() : IndexSID(0), BodySID(0) {}
+         virtual ~EssenceContainerData() {}
+          virtual const char* HasName() { return "EssenceContainerData"; }
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -128,11 +117,13 @@ namespace ASDCP
           UTF16String Name;
           Timestamp PackageCreationDate;
           Timestamp PackageModifiedDate;
-          Batch<UID> Tracks;
+          Batch<UUID> Tracks;
 
          GenericPackage() {}
          virtual ~GenericPackage() {}
+          virtual const char* HasName() { return "GenericPackage"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
        };
 
@@ -145,7 +136,9 @@ namespace ASDCP
 
          MaterialPackage() {}
          virtual ~MaterialPackage() {}
+          virtual const char* HasName() { return "MaterialPackage"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -157,10 +150,13 @@ namespace ASDCP
          ASDCP_NO_COPY_CONSTRUCT(SourcePackage);
 
        public:
+          UUID Descriptor;
 
          SourcePackage() {}
          virtual ~SourcePackage() {}
+          virtual const char* HasName() { return "SourcePackage"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -179,8 +175,27 @@ namespace ASDCP
 
          GenericTrack() : TrackID(0), TrackNumber(0) {}
          virtual ~GenericTrack() {}
+          virtual const char* HasName() { return "GenericTrack"; }
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
+         virtual void     Dump(FILE* = 0);
+       };
+
+      //
+      class StaticTrack : public GenericTrack
+       {
+         ASDCP_NO_COPY_CONSTRUCT(StaticTrack);
+
+       public:
+
+         StaticTrack() {}
+         virtual ~StaticTrack() {}
+          virtual const char* HasName() { return "StaticTrack"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
        };
 
       //
@@ -194,7 +209,9 @@ namespace ASDCP
 
          Track() : Origin(0) {}
          virtual ~Track() {}
+          virtual const char* HasName() { return "Track"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -211,7 +228,9 @@ namespace ASDCP
 
          StructuralComponent() : Duration(0) {}
          virtual ~StructuralComponent() {}
+          virtual const char* HasName() { return "StructuralComponent"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
        };
 
@@ -221,11 +240,13 @@ namespace ASDCP
          ASDCP_NO_COPY_CONSTRUCT(Sequence);
 
        public:
-          Batch<UID> StructuralComponents;
+          Batch<UUID> StructuralComponents;
 
          Sequence() {}
          virtual ~Sequence() {}
+          virtual const char* HasName() { return "Sequence"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -243,7 +264,9 @@ namespace ASDCP
 
          SourceClip() : StartPosition(0), SourceTrackID(0) {}
          virtual ~SourceClip() {}
+          virtual const char* HasName() { return "SourceClip"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -261,7 +284,9 @@ namespace ASDCP
 
          TimecodeComponent() : RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0) {}
          virtual ~TimecodeComponent() {}
+          virtual const char* HasName() { return "TimecodeComponent"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -278,7 +303,9 @@ namespace ASDCP
 
          GenericDescriptor() {}
          virtual ~GenericDescriptor() {}
+          virtual const char* HasName() { return "GenericDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
        };
 
@@ -296,7 +323,9 @@ namespace ASDCP
 
          FileDescriptor() : LinkedTrackID(0), ContainerDuration(0) {}
          virtual ~FileDescriptor() {}
+          virtual const char* HasName() { return "FileDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -311,15 +340,15 @@ namespace ASDCP
           Rational AudioSamplingRate;
           ui8_t Locked;
           ui8_t AudioRefLevel;
-          ui8_t ElectroSpatialFormulation;
           ui32_t ChannelCount;
           ui32_t QuantizationBits;
           ui8_t DialNorm;
-          UL SoundEssenceCompression;
 
-         GenericSoundEssenceDescriptor() : Locked(0), AudioRefLevel(0), ElectroSpatialFormulation(0), ChannelCount(0), QuantizationBits(0), DialNorm(0) {}
+         GenericSoundEssenceDescriptor() : Locked(0), AudioRefLevel(0), ChannelCount(0), QuantizationBits(0), DialNorm(0) {}
          virtual ~GenericSoundEssenceDescriptor() {}
+          virtual const char* HasName() { return "GenericSoundEssenceDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -337,7 +366,9 @@ namespace ASDCP
 
          WaveAudioDescriptor() : BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
          virtual ~WaveAudioDescriptor() {}
+          virtual const char* HasName() { return "WaveAudioDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -352,15 +383,14 @@ namespace ASDCP
           ui8_t FrameLayout;
           ui32_t StoredWidth;
           ui32_t StoredHeight;
-          ui32_t DisplayWidth;
-          ui32_t DisplayHeight;
           Rational AspectRatio;
-          UL Gamma;
           UL PictureEssenceCoding;
 
-         GenericPictureEssenceDescriptor() : FrameLayout(0), StoredWidth(0), StoredHeight(0), DisplayWidth(0), DisplayHeight(0) {}
+         GenericPictureEssenceDescriptor() : FrameLayout(0), StoredWidth(0), StoredHeight(0) {}
          virtual ~GenericPictureEssenceDescriptor() {}
+          virtual const char* HasName() { return "GenericPictureEssenceDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -374,11 +404,12 @@ namespace ASDCP
        public:
           ui32_t ComponentMaxRef;
           ui32_t ComponentMinRef;
-          RGBLayout PixelLayout;
 
          RGBAEssenceDescriptor() : ComponentMaxRef(0), ComponentMinRef(0) {}
          virtual ~RGBAEssenceDescriptor() {}
+          virtual const char* HasName() { return "RGBAEssenceDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -406,7 +437,9 @@ namespace ASDCP
 
          JPEG2000PictureSubDescriptor() : Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
          virtual ~JPEG2000PictureSubDescriptor() {}
+          virtual const char* HasName() { return "JPEG2000PictureSubDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -422,14 +455,12 @@ namespace ASDCP
           ui32_t HorizontalSubsampling;
           ui32_t VerticalSubsampling;
           ui8_t ColorSiting;
-          ui8_t ReversedByteOrder;
-          ui32_t BlackRefLevel;
-          ui32_t WhiteReflevel;
-          ui32_t ColorRange;
 
-         CDCIEssenceDescriptor() : ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0), ReversedByteOrder(0), BlackRefLevel(0), WhiteReflevel(0), ColorRange(0) {}
+         CDCIEssenceDescriptor() : ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ColorSiting(0) {}
          virtual ~CDCIEssenceDescriptor() {}
+          virtual const char* HasName() { return "CDCIEssenceDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -448,7 +479,31 @@ namespace ASDCP
 
          MPEG2VideoDescriptor() : CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
          virtual ~MPEG2VideoDescriptor() {}
+          virtual const char* HasName() { return "MPEG2VideoDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
+         virtual void     Dump(FILE* = 0);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+       };
+
+      //
+      class DMSegment : public InterchangeObject
+       {
+         ASDCP_NO_COPY_CONSTRUCT(DMSegment);
+
+       public:
+          UL DataDefinition;
+          ui64_t EventStartPosition;
+          ui64_t Duration;
+          UTF16String EventComment;
+          UUID DMFramework;
+
+         DMSegment() : EventStartPosition(0), Duration(0) {}
+         virtual ~DMSegment() {}
+          virtual const char* HasName() { return "DMSegment"; }
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -464,7 +519,9 @@ namespace ASDCP
 
          CryptographicFramework() {}
          virtual ~CryptographicFramework() {}
+          virtual const char* HasName() { return "CryptographicFramework"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -484,7 +541,84 @@ namespace ASDCP
 
          CryptographicContext() {}
          virtual ~CryptographicContext() {}
+          virtual const char* HasName() { return "CryptographicContext"; }
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
+         virtual void     Dump(FILE* = 0);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+       };
+
+      //
+      class GenericDataEssenceDescriptor : public FileDescriptor
+       {
+         ASDCP_NO_COPY_CONSTRUCT(GenericDataEssenceDescriptor);
+
+       public:
+          UL DataEssenceCoding;
+
+         GenericDataEssenceDescriptor() {}
+         virtual ~GenericDataEssenceDescriptor() {}
+          virtual const char* HasName() { return "GenericDataEssenceDescriptor"; }
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
+         virtual void     Dump(FILE* = 0);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+       };
+
+      //
+      class TimedTextDescriptor : public GenericDataEssenceDescriptor
+       {
+         ASDCP_NO_COPY_CONSTRUCT(TimedTextDescriptor);
+
+       public:
+          UUID ResourceID;
+          UTF16String UCSEncoding;
+          UTF16String NamespaceURI;
+
+         TimedTextDescriptor() {}
+         virtual ~TimedTextDescriptor() {}
+          virtual const char* HasName() { return "TimedTextDescriptor"; }
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
+         virtual void     Dump(FILE* = 0);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+       };
+
+      //
+      class TimedTextResourceSubDescriptor : public InterchangeObject
+       {
+         ASDCP_NO_COPY_CONSTRUCT(TimedTextResourceSubDescriptor);
+
+       public:
+          UUID AncillaryResourceID;
+          UTF16String MIMEMediaType;
+          ui32_t EssenceStreamID;
+
+         TimedTextResourceSubDescriptor() : EssenceStreamID(0) {}
+         virtual ~TimedTextResourceSubDescriptor() {}
+          virtual const char* HasName() { return "TimedTextResourceSubDescriptor"; }
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
+         virtual void     Dump(FILE* = 0);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+       };
+
+      //
+      class StereoscopicPictureSubDescriptor : public InterchangeObject
+       {
+         ASDCP_NO_COPY_CONSTRUCT(StereoscopicPictureSubDescriptor);
+
+       public:
+
+         StereoscopicPictureSubDescriptor() {}
+         virtual ~StereoscopicPictureSubDescriptor() {}
+          virtual const char* HasName() { return "StereoscopicPictureSubDescriptor"; }
           virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+          virtual Result_t WriteToTLVSet(TLVWriter& TLVSet);
          virtual void     Dump(FILE* = 0);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
@@ -494,7 +628,7 @@ namespace ASDCP
 } // namespace ASDCP
 
 
-#endif // _METADATA_H_
+#endif // _Metadata_H_
 
 //
 // end Metadata.h