Added support for DisplayType, IntrinsicPictureResolution, ZPositionInUse properties
authorjhurst <jhurst@cinecert.com>
Mon, 10 Feb 2020 17:19:05 +0000 (09:19 -0800)
committerjhurst <jhurst@cinecert.com>
Mon, 10 Feb 2020 17:19:05 +0000 (09:19 -0800)
src/MDD.cpp
src/MDD.h
src/MXFTypes.cpp
src/MXFTypes.h
src/Metadata.cpp
src/Metadata.h

index 06d0fde760eea6a748bd18b8f78b81caa4868232..6db1becb69b66d4b3f617b55f1141828e987a614 100644 (file)
@@ -1627,9 +1627,18 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
    { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0D,
        0x04, 0x01, 0x02, 0x02, 0x03, 0x01, 0x08, 0x01 },
      {0}, false, "HTJ2KPictureCodingSchemeGeneric" }, // 524
-   { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 525
+   { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d,
        0x0d, 0x0f, 0x03, 0x02, 0x01, 0x01, 0x00, 0x00 },
-     {0}, false, "AudioChannelSLVS" },
+     {0}, false, "AudioChannelSLVS" }, // 525
+   { { 0x06, 0x0e, 0x2b, 0x34, 01, 0x01, 0x01, 0x0e,
+       0x06, 0x01, 0x01, 0x02, 04, 0x00, 0x00, 0x00 },
+     {0}, false, "TimedTextDescriptor_DisplayType" }, // 526
+   { { 0x06, 0x0e, 0x2b, 0x34, 01, 0x01, 0x01, 0x0e,
+       0x06, 0x01, 0x01, 0x02, 05, 0x00, 0x00, 0x00 },
+     {0}, false, "TimedTextDescriptor_IntrinsicPictureResolution" }, // 527
+   { { 0x06, 0x0e, 0x2b, 0x34, 01, 0x01, 0x01, 0x0e,
+       06, 0x01, 0x01, 0x02, 06, 0x00, 0x00, 0x00 },
+     {0}, false, "TimedTextDescriptor_ZPositionInUse" }, // 528
    { {0}, {0}, false, 0 },
 
 };
index d704217945aa433abc9e998a495a39f1bd0c3024..4e3dcafd350e43e6f6219cdc69b710f5f5f60a99 100755 (executable)
--- a/src/MDD.h
+++ b/src/MDD.h
@@ -561,6 +561,9 @@ namespace ASDCP {
        MDD_HTJ2KPictureCodingScheme, // 523
        MDD_HTJ2KPictureCodingSchemeGeneric, // 524
        MDD_AudioChannelSLVS, // 525
+       MDD_TimedTextDescriptor_DisplayType, // 526
+       MDD_TimedTextDescriptor_IntrinsicPictureResolution, // 527
+       MDD_TimedTextDescriptor_ZPositionInUse, // 528
        MDD_Max
     }; // enum MDD_t
 
index ec3ac2ff22bf7a1dcde05b562332676da0d3a5b3..72338bbfda5f3290f8de2b9990345e4c52e92ba9 100755 (executable)
@@ -777,7 +777,7 @@ ASDCP::MXF::Raw::EncodeString(char* str_buf, ui32_t buf_len) const
 
 //
 bool
-ASDCP::MXF::J2KExtendedCapabilities::Archive(Kumu::MemIOWriter* Writer) const {
+ASDCP::MXF::J2KExtendedCapabilitiesType::Archive(Kumu::MemIOWriter* Writer) const {
   if ( ! Writer->WriteUi32BE(Pcap) )
     {
       return false;
@@ -793,7 +793,7 @@ ASDCP::MXF::J2KExtendedCapabilities::Archive(Kumu::MemIOWriter* Writer) const {
 
 //
 bool
-ASDCP::MXF::J2KExtendedCapabilities::Unarchive(Kumu::MemIOReader* Reader) {
+ASDCP::MXF::J2KExtendedCapabilitiesType::Unarchive(Kumu::MemIOReader* Reader) {
   if ( ! Reader->ReadUi32BE(&Pcap) )
     {
       return false;
@@ -809,7 +809,7 @@ ASDCP::MXF::J2KExtendedCapabilities::Unarchive(Kumu::MemIOReader* Reader) {
 
 //
 const char*
-ASDCP::MXF::J2KExtendedCapabilities::EncodeString(char* str_buf, ui32_t buf_len) const
+ASDCP::MXF::J2KExtendedCapabilitiesType::EncodeString(char* str_buf, ui32_t buf_len) const
 {
   const int str_len = ( sizeof(ui16_t) + 1 ) * JP2K::MaxCapabilities;
 
index eb8b3dfe0b52e83144f77570c421afcfbae7a18e..baf27c4ea147692618a030f7332e001e92f22263 100755 (executable)
@@ -690,7 +690,7 @@ namespace ASDCP
        };
 
       //
-      class J2KExtendedCapabilities : public Kumu::IArchive
+      class J2KExtendedCapabilitiesType : public Kumu::IArchive
         {
         public:
          ui32_t Pcap;
index 9b7f95e285116c589ae529e2971a8b102b642fc3..adaac114e8637a655c17e29fb2de548ef280c829 100755 (executable)
@@ -3101,6 +3101,18 @@ TimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet)
     result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList));
     RFC5646LanguageTagList.set_has_value( result == RESULT_OK );
   }
+  if ( ASDCP_SUCCESS(result) ) {
+    result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, DisplayType));
+    DisplayType.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) {
+    result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(TimedTextDescriptor, IntrinsicPictureResolution));
+    IntrinsicPictureResolution.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) { 
+    result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(TimedTextDescriptor, ZPositionInUse));
+    ZPositionInUse.set_has_value( result == RESULT_OK );
+  }
   return result;
 }
 
@@ -3114,6 +3126,9 @@ TimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, UCSEncoding));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(TimedTextDescriptor, NamespaceURI));
   if ( ASDCP_SUCCESS(result)  && ! RFC5646LanguageTagList.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, RFC5646LanguageTagList));
+  if ( ASDCP_SUCCESS(result)  && ! DisplayType.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, DisplayType));
+  if ( ASDCP_SUCCESS(result)  && ! IntrinsicPictureResolution.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, IntrinsicPictureResolution));
+  if ( ASDCP_SUCCESS(result)  && ! ZPositionInUse.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(TimedTextDescriptor, ZPositionInUse));
   return result;
 }
 
@@ -3126,6 +3141,9 @@ TimedTextDescriptor::Copy(const TimedTextDescriptor& rhs)
   UCSEncoding = rhs.UCSEncoding;
   NamespaceURI = rhs.NamespaceURI;
   RFC5646LanguageTagList = rhs.RFC5646LanguageTagList;
+  DisplayType = rhs.DisplayType;
+  IntrinsicPictureResolution = rhs.IntrinsicPictureResolution;
+  ZPositionInUse = rhs.ZPositionInUse;
 }
 
 //
@@ -3145,6 +3163,15 @@ TimedTextDescriptor::Dump(FILE* stream)
   if ( ! RFC5646LanguageTagList.empty() ) {
     fprintf(stream, "  %22s = %s\n",  "RFC5646LanguageTagList", RFC5646LanguageTagList.get().EncodeString(identbuf, IdentBufferLen));
   }
+  if ( ! DisplayType.empty() ) {
+    fprintf(stream, "  %22s = %s\n",  "DisplayType", DisplayType.get().EncodeString(identbuf, IdentBufferLen));
+  }
+  if ( ! IntrinsicPictureResolution.empty() ) {
+    fprintf(stream, "  %22s = %s\n",  "IntrinsicPictureResolution", IntrinsicPictureResolution.get().EncodeString(identbuf, IdentBufferLen));
+  }
+  if ( ! ZPositionInUse.empty() ) {
+    fprintf(stream, "  %22s = %d\n",  "ZPositionInUse", ZPositionInUse.get());
+  }
 }
 
 //
index 03b3169ca7ecd56413667678b399bcd1dee78475..c624784084885e14b026f1a0c06b4b8b8875650c 100755 (executable)
@@ -571,7 +571,7 @@ namespace ASDCP
           optional_property<Raw > CodingStyleDefault;
           optional_property<Raw > QuantizationDefault;
           optional_property<RGBALayout > J2CLayout;
-          optional_property<J2KExtendedCapabilities > J2KExtendedCapabilities;
+          optional_property<J2KExtendedCapabilitiesType > J2KExtendedCapabilities;
           optional_property<Array<Kumu::ArchivableUi16> > J2KProfile;
           optional_property<Array<Kumu::ArchivableUi16> > J2KCorrespondingProfile;
 
@@ -810,6 +810,9 @@ namespace ASDCP
           UTF16String UCSEncoding;
           UTF16String NamespaceURI;
           optional_property<UTF16String > RFC5646LanguageTagList;
+          optional_property<UTF16String > DisplayType;
+          optional_property<UTF16String > IntrinsicPictureResolution;
+          optional_property<ui8_t > ZPositionInUse;
 
       TimedTextDescriptor(const Dictionary*& d);
       TimedTextDescriptor(const TimedTextDescriptor& rhs);
@@ -872,7 +875,7 @@ namespace ASDCP
       virtual Result_t WriteToBuffer(ASDCP::FrameBuffer&);
        };
 
-      // A ContainerConstraintsSubDescriptor is required to be present in the top level File Descriptor for the Constrained Generic Container per ST 379-2
+      //
       class ContainerConstraintsSubDescriptor : public InterchangeObject
        {
          ContainerConstraintsSubDescriptor();