code-generated metadata!
[asdcplib.git] / src / Metadata.h
index deb1abd7804be042a35dbe3874d9a58a52fbc349..a9d05abcaecbcaf9d8dd36676e240e2dacc8597e 100755 (executable)
@@ -38,240 +38,297 @@ 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; }
+        };
+
+      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; }
+       };
+
+      //
+
       //
       class Identification : public InterchangeObject
        {
          ASDCP_NO_COPY_CONSTRUCT(Identification);
 
        public:
-         UUID         ThisGenerationUID;
-         UTF16String  CompanyName;
-         UTF16String  ProductName;
-         ui16_t       ProductVersion;
-         UTF16String  VersionString;
-         UUID         ProductUID;
-         Timestamp    ModificationDate;
-         ui16_t       ToolkitVersion;
-         UTF16String  Platform;
-
-         Identification() {}
+          UUID ThisGenerationUID;
+          UTF16String CompanyName;
+          UTF16String ProductName;
+          ui16_t ProductVersion;
+          UTF16String VersionString;
+          UUID ProductUID;
+          Timestamp ModificationDate;
+          ui16_t ToolkitVersion;
+          UTF16String Platform;
+
+         Identification() : ProductVersion(0), ToolkitVersion(0) {}
          virtual ~Identification() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
        };
 
-
       //
       class ContentStorage : public InterchangeObject
        {
          ASDCP_NO_COPY_CONSTRUCT(ContentStorage);
 
        public:
-         UUID        GenerationUID;
-         Batch<UUID> Packages;
-         Batch<UUID> EssenceContainerData;
+          Batch<UUID> Packages;
+          Batch<UUID> EssenceContainerData;
 
          ContentStorage() {}
          virtual ~ContentStorage() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
        };
 
-      // 
+      //
       class GenericPackage : public InterchangeObject
        {
          ASDCP_NO_COPY_CONSTRUCT(GenericPackage);
 
        public:
-         UMID          PackageUID;
-         UUID          GenerationUID;
-          UTF16String   Name;
-          Timestamp     PackageCreationDate;
-          Timestamp     PackageModifiedDate;
-          Batch<UID>    Tracks;
-
-          GenericPackage() {}
-         virtual ~GenericPackage() {}
-         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l) = 0;
-         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
-         virtual void     Dump(FILE* = 0) = 0;
-        };
+          UMID PackageUID;
+          UTF16String Name;
+          Timestamp PackageCreationDate;
+          Timestamp PackageModifiedDate;
+          Batch<UID> Tracks;
 
+         GenericPackage() {}
+         virtual ~GenericPackage() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+       };
 
-      // 
+      //
       class MaterialPackage : public GenericPackage
        {
          ASDCP_NO_COPY_CONSTRUCT(MaterialPackage);
 
        public:
-          MaterialPackage() {}
+
+         MaterialPackage() {}
          virtual ~MaterialPackage() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
-        };
-
+       };
 
-      // 
+      //
       class SourcePackage : public GenericPackage
        {
          ASDCP_NO_COPY_CONSTRUCT(SourcePackage);
 
        public:
-          SourcePackage() {}
+
+         SourcePackage() {}
          virtual ~SourcePackage() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
-        };
+       };
+
+      //
+      class GenericTrack : public InterchangeObject
+       {
+         ASDCP_NO_COPY_CONSTRUCT(GenericTrack);
+
+       public:
+          ui32_t TrackID;
+          ui32_t TrackNumber;
+          UTF16String TrackName;
+          UUID Sequence;
+
+         GenericTrack() : TrackID(0), TrackNumber(0) {}
+         virtual ~GenericTrack() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+       };
 
       //
-      class Track : public InterchangeObject
+      class Track : public GenericTrack
        {
          ASDCP_NO_COPY_CONSTRUCT(Track);
 
        public:
-         UUID        GenerationUID;
-         ui32_t      TrackID;
-         ui32_t      TrackNumber;
-         UTF16String TrackName;
-         UUID        Sequence;
-         Rational    EditRate;
-         ui64_t      Origin;
-
-         Track() {}
+          Rational EditRate;
+          ui64_t Origin;
+
+         Track() : Origin(0) {}
          virtual ~Track() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
        };
 
-      // 
-      class Sequence : public InterchangeObject
+      //
+      class StructuralComponent : public InterchangeObject
+       {
+         ASDCP_NO_COPY_CONSTRUCT(StructuralComponent);
+
+       public:
+          UL DataDefinition;
+          ui64_t Duration;
+
+         StructuralComponent() : Duration(0) {}
+         virtual ~StructuralComponent() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+       };
+
+      //
+      class Sequence : public StructuralComponent
        {
          ASDCP_NO_COPY_CONSTRUCT(Sequence);
 
        public:
-         UUID          GenerationUID;
-          UL            DataDefinition;
-          ui64_t        Duration;
-          Batch<UID>    StructuralComponents;
+          Batch<UID> StructuralComponents;
 
-          Sequence() {}
+         Sequence() {}
          virtual ~Sequence() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
-        };
+       };
 
-      // 
-      class SourceClip : public InterchangeObject
+      //
+      class SourceClip : public StructuralComponent
        {
          ASDCP_NO_COPY_CONSTRUCT(SourceClip);
 
        public:
-         UUID          GenerationUID;
-          UL            DataDefinition;
-          ui64_t        StartPosition;
-          ui64_t        Duration;
-          UMID          SourcePackageID;
-          ui32_t        SourceTrackID;
-
-          SourceClip() {}
+          ui64_t StartPosition;
+          UMID SourcePackageID;
+          ui32_t SourceTrackID;
+
+         SourceClip() : StartPosition(0), SourceTrackID(0) {}
          virtual ~SourceClip() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
-        };
+       };
 
-       //
-       class TimecodeComponent : public InterchangeObject
+      //
+      class TimecodeComponent : public StructuralComponent
        {
          ASDCP_NO_COPY_CONSTRUCT(TimecodeComponent);
 
        public:
-         UUID          GenerationUID;
-          UL            DataDefinition;
-          ui64_t        Duration;
-          ui16_t        RoundedTimecodeBase;
-          ui64_t        StartTimecode;
-          ui8_t         DropFrame;
-
-          TimecodeComponent() {}
+          ui16_t RoundedTimecodeBase;
+          ui64_t StartTimecode;
+          ui8_t DropFrame;
+
+         TimecodeComponent() : RoundedTimecodeBase(0), StartTimecode(0), DropFrame(0) {}
          virtual ~TimecodeComponent() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
-        };
-    
+       };
+
       //
-      class MPEG2VideoDescriptor : public ASDCP::MPEG2::VideoDescriptor, public InterchangeObject
+      class GenericDescriptor : public InterchangeObject
        {
-         ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
+         ASDCP_NO_COPY_CONSTRUCT(GenericDescriptor);
 
-        public:
-         ui32_t LinkedTrackID;
-         UL     EssenceContainer;
+       public:
+          Batch<UUID> Locators;
+          Batch<UUID> SubDescriptors;
 
-         MPEG2VideoDescriptor() : LinkedTrackID(0) {}
-         ~MPEG2VideoDescriptor() {}
-          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
-         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
-          virtual void     Dump(FILE* = 0);
+         GenericDescriptor() {}
+         virtual ~GenericDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
        };
 
       //
-      class FileDescriptor : public InterchangeObject
+      class FileDescriptor : public GenericDescriptor
        {
          ASDCP_NO_COPY_CONSTRUCT(FileDescriptor);
 
-        public:
-         UUID      GenerationUID;
-         Batch<UUID> Locators;
-         Batch<UUID> SubDescriptors;
-         ui32_t    LinkedTrackID;
-         Rational  SampleRate;
-         ui64_t    ContainerDuration;
-         UL        EssenceContainer;
-         UL        Codec;
+       public:
+          ui32_t LinkedTrackID;
+          Rational SampleRate;
+          ui64_t ContainerDuration;
+          UL EssenceContainer;
+          UL Codec;
 
          FileDescriptor() : LinkedTrackID(0), ContainerDuration(0) {}
-         ~FileDescriptor() {}
+         virtual ~FileDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
        };
 
       //
-      class WaveAudioDescriptor : public FileDescriptor
+      class GenericSoundEssenceDescriptor : public FileDescriptor
+       {
+         ASDCP_NO_COPY_CONSTRUCT(GenericSoundEssenceDescriptor);
+
+       public:
+          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) {}
+         virtual ~GenericSoundEssenceDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+         virtual void     Dump(FILE* = 0);
+       };
+
+      //
+      class WaveAudioDescriptor : public GenericSoundEssenceDescriptor
        {
          ASDCP_NO_COPY_CONSTRUCT(WaveAudioDescriptor);
 
-        public:
-         Rational AudioSamplingRate;
-         ui8_t    Locked;
-         i8_t     AudioRefLevel;
-         ui8_t    ElectroSpatialFormulation;
-         ui32_t   ChannelCount;
-         ui32_t   QuantizationBits;
-         i8_t     DialNorm;
-         UL       SoundEssenceCompression;
-         ui16_t   BlockAlign;
-         ui8_t    SequenceOffset;
-         ui32_t   AvgBps;
-         //      Stream   PeakEnvelope;
-
-         WaveAudioDescriptor() :
-           Locked(false), AudioRefLevel(0), ElectroSpatialFormulation(0),
-           ChannelCount(0), QuantizationBits(0), DialNorm(0), BlockAlign(0), 
-           SequenceOffset(0), AvgBps(0) {}
-
-         ~WaveAudioDescriptor() {}
-          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+       public:
+          ui16_t BlockAlign;
+          ui8_t SequenceOffset;
+          ui32_t AvgBps;
+
+         WaveAudioDescriptor() : BlockAlign(0), SequenceOffset(0), AvgBps(0) {}
+         virtual ~WaveAudioDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
-          virtual void     Dump(FILE* = 0);
+         virtual void     Dump(FILE* = 0);
        };
 
       //
@@ -279,26 +336,22 @@ namespace ASDCP
        {
          ASDCP_NO_COPY_CONSTRUCT(GenericPictureEssenceDescriptor);
 
-        public:
-         ui8_t    FrameLayout;
-         ui32_t   StoredWidth;
-         ui32_t   StoredHeight;
-         ui32_t   DisplayWidth;
-         ui32_t   DisplayHeight;
-         Rational AspectRatio;
-         ui32_t   ComponentMaxRef;
-         ui32_t   ComponentMinRef;
-         UL       Gamma;
-         UL       PictureEssenceCoding;
-
-         GenericPictureEssenceDescriptor() :
-           FrameLayout(0), StoredWidth(0), StoredHeight(0), DisplayWidth(0), 
-           DisplayHeight(0), ComponentMaxRef(0), ComponentMinRef(0) {}
-
-         ~GenericPictureEssenceDescriptor() {}
-         //          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+       public:
+          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) {}
+         virtual ~GenericPictureEssenceDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
-         //          virtual void     Dump(FILE* = 0);
+         virtual void     Dump(FILE* = 0);
        };
 
       //
@@ -306,69 +359,88 @@ namespace ASDCP
        {
          ASDCP_NO_COPY_CONSTRUCT(RGBAEssenceDescriptor);
 
-        public:
-         class RGBLayout
-           {
-           public:
-             struct element {
-               ui8_t Code;
-               ui8_t Depth;
-             } PictureElement[8];
-             RGBLayout() { memset(PictureElement, 0, sizeof(PictureElement)); }
-           };
-
-         RGBLayout PixelLayout;
-
-         RGBAEssenceDescriptor() {}
-         ~RGBAEssenceDescriptor() {}
-         //          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+       public:
+          ui32_t ComponentMaxRef;
+          ui32_t ComponentMinRef;
+          RGBLayout PixelLayout;
+
+         RGBAEssenceDescriptor() : ComponentMaxRef(0), ComponentMinRef(0) {}
+         virtual ~RGBAEssenceDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
-         //          virtual void     Dump(FILE* = 0);
+         virtual void     Dump(FILE* = 0);
        };
 
-      class Raw
+      //
+      class JPEG2000PictureSubDescriptor : public InterchangeObject
        {
-         ASDCP_NO_COPY_CONSTRUCT(Raw);
+         ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
 
        public:
-         byte_t* data;
-         Raw() {}
-         ~Raw() {}
-
+          ui16_t Rsize;
+          ui32_t Xsize;
+          ui32_t Ysize;
+          ui32_t XOsize;
+          ui32_t YOsize;
+          ui32_t XTsize;
+          ui32_t YTsize;
+          ui32_t XTOsize;
+          ui32_t YTOsize;
+          ui16_t Csize;
+          Raw PictureComponentSizing;
+          Raw CodingStyleDefault;
+          Raw QuantizationDefault;
+
+         JPEG2000PictureSubDescriptor() : Rsize(0), Xsize(0), Ysize(0), XOsize(0), YOsize(0), XTsize(0), YTsize(0), XTOsize(0), YTOsize(0), Csize(0) {}
+         virtual ~JPEG2000PictureSubDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+         virtual void     Dump(FILE* = 0);
        };
 
       //
-      class JPEG2000PictureSubDescriptor : public InterchangeObject
+      class CDCIEssenceDescriptor : public GenericPictureEssenceDescriptor
        {
-         ASDCP_NO_COPY_CONSTRUCT(JPEG2000PictureSubDescriptor);
+         ASDCP_NO_COPY_CONSTRUCT(CDCIEssenceDescriptor);
 
        public:
-         ui16_t Rsize;
-         ui32_t Xsize;
-         ui32_t Ysize;
-         ui32_t XOsize;
-         ui32_t YOsize;
-         ui32_t XTsize;
-         ui32_t YTsize;
-         ui32_t XTOsize;
-         ui32_t YTOsize;
-         ui16_t Csize;
-         Raw PictureComponentSizing;
-         Raw CodingStyleDefault;
-         Raw QuantizationDefault;
-
-         JPEG2000PictureSubDescriptor() :
-           Rsize(0), Xsize(0), Ysize(0),
-           XOsize(0), YOsize(0), XTsize(0),
-           YTsize(0), XTOsize(0), YTOsize(0),
-           Csize(0) {}
-
-         ~JPEG2000PictureSubDescriptor() {}
-          //          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+          ui32_t ComponentDepth;
+          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) {}
+         virtual ~CDCIEssenceDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
          virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
-          //          virtual void     Dump(FILE* = 0);
-        };
+         virtual void     Dump(FILE* = 0);
+       };
 
+      //
+      class MPEG2VideoDescriptor : public CDCIEssenceDescriptor
+       {
+         ASDCP_NO_COPY_CONSTRUCT(MPEG2VideoDescriptor);
+
+       public:
+          ui8_t CodedContentType;
+          ui8_t LowDelay;
+          ui32_t BitRate;
+          ui8_t ProfileAndLevel;
+
+         MPEG2VideoDescriptor() : CodedContentType(0), LowDelay(0), BitRate(0), ProfileAndLevel(0) {}
+         virtual ~MPEG2VideoDescriptor() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
+         virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+         virtual void     Dump(FILE* = 0);
+       };
 
       //
       class CryptographicFramework : public InterchangeObject
@@ -376,14 +448,15 @@ namespace ASDCP
          ASDCP_NO_COPY_CONSTRUCT(CryptographicFramework);
 
        public:
-         UUID ContextSR;
+          UUID ContextSR;
 
          CryptographicFramework() {}
-         ~CryptographicFramework() {}
+         virtual ~CryptographicFramework() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
-         // virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
-        };
+       };
 
       //
       class CryptographicContext : public InterchangeObject
@@ -391,18 +464,19 @@ namespace ASDCP
          ASDCP_NO_COPY_CONSTRUCT(CryptographicContext);
 
        public:
-         UUID ContextID;
-         UL   SourceEssenceContainer;
-         UL   CipherAlgorithm;
-         UL   MICAlgorithm;
-         UUID CryptographicKeyID;
+          UUID ContextID;
+          UL SourceEssenceContainer;
+          UL CipherAlgorithm;
+          UL MICAlgorithm;
+          UUID CryptographicKeyID;
 
          CryptographicContext() {}
-         ~CryptographicContext() {}
+         virtual ~CryptographicContext() {}
+          virtual Result_t InitFromTLVSet(TLVReader& TLVSet);
          virtual Result_t InitFromBuffer(const byte_t* p, ui32_t l);
-         // virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
+         virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
          virtual void     Dump(FILE* = 0);
-        };
+       };
 
     } // namespace MXF
 } // namespace ASDCP