finished optional properties
authorjhurst <jhurst@cinecert.com>
Tue, 2 Jul 2013 15:35:41 +0000 (15:35 +0000)
committerjhurst <>
Tue, 2 Jul 2013 15:35:41 +0000 (15:35 +0000)
src/AS_DCP_JP2K.cpp
src/MDD.cpp
src/MXF.h
src/Metadata.cpp
src/Metadata.h
src/asdcp-info.cpp
src/asdcp-test.cpp

index b8400e1c0c3edb3b47962fbce1c547ba62b006d8..cf30869c3cb94e2345e29fa0b54c8247ddb8d0d6 100755 (executable)
@@ -260,20 +260,20 @@ ASDCP::JP2K_PDesc_to_MD(const JP2K::PictureDescriptor& PDesc,
   memcpy(tmp_buffer + 8, &PDesc.ImageComponents, sizeof(ASDCP::JP2K::ImageComponent_t) * MaxComponents);
 
   const ui32_t pcomp_size = (sizeof(int) * 2) + (sizeof(ASDCP::JP2K::ImageComponent_t) * MaxComponents);
-  memcpy(EssenceSubDescriptor->PictureComponentSizing.Data(), tmp_buffer, pcomp_size);
-  EssenceSubDescriptor->PictureComponentSizing.Length(pcomp_size);
+  memcpy(EssenceSubDescriptor->PictureComponentSizing.get().Data(), tmp_buffer, pcomp_size);
+  EssenceSubDescriptor->PictureComponentSizing.get().Length(pcomp_size);
 
   ui32_t precinct_set_size = 0, i;
   for ( i = 0; PDesc.CodingStyleDefault.SPcod.PrecinctSize[i] != 0 && i < MaxPrecincts; i++ )
     precinct_set_size++;
 
   ui32_t csd_size = sizeof(CodingStyleDefault_t) - MaxPrecincts + precinct_set_size;
-  memcpy(EssenceSubDescriptor->CodingStyleDefault.Data(), &PDesc.CodingStyleDefault, csd_size);
-  EssenceSubDescriptor->CodingStyleDefault.Length(csd_size);
+  memcpy(EssenceSubDescriptor->CodingStyleDefault.get().Data(), &PDesc.CodingStyleDefault, csd_size);
+  EssenceSubDescriptor->CodingStyleDefault.get().Length(csd_size);
 
   ui32_t qdflt_size = PDesc.QuantizationDefault.SPqcdLength + 1;
-  memcpy(EssenceSubDescriptor->QuantizationDefault.Data(), &PDesc.QuantizationDefault, qdflt_size);
-  EssenceSubDescriptor->QuantizationDefault.Length(qdflt_size);
+  memcpy(EssenceSubDescriptor->QuantizationDefault.get().Data(), &PDesc.QuantizationDefault, qdflt_size);
+  EssenceSubDescriptor->QuantizationDefault.get().Length(qdflt_size);
 
   return RESULT_OK;
 }
@@ -290,8 +290,8 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::RGBAEssenceDescriptor&  EssenceDescrip
 
   PDesc.EditRate           = EditRate;
   PDesc.SampleRate         = SampleRate;
-  assert(EssenceDescriptor.ContainerDuration.cget() <= 0xFFFFFFFFL);
-  PDesc.ContainerDuration  = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.cget());
+  assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL);
+  PDesc.ContainerDuration  = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.const_get());
   PDesc.StoredWidth        = EssenceDescriptor.StoredWidth;
   PDesc.StoredHeight       = EssenceDescriptor.StoredHeight;
   PDesc.AspectRatio        = EssenceDescriptor.AspectRatio;
@@ -308,11 +308,11 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::RGBAEssenceDescriptor&  EssenceDescrip
   PDesc.Csize   = EssenceSubDescriptor.Csize;
 
   // PictureComponentSizing
-  ui32_t tmp_size = EssenceSubDescriptor.PictureComponentSizing.Length();
+  ui32_t tmp_size = EssenceSubDescriptor.PictureComponentSizing.const_get().Length();
 
   if ( tmp_size == 17 ) // ( 2 * sizeof(ui32_t) ) + 3 components * 3 byte each
     {
-      memcpy(&PDesc.ImageComponents, EssenceSubDescriptor.PictureComponentSizing.RoData() + 8, tmp_size - 8);
+      memcpy(&PDesc.ImageComponents, EssenceSubDescriptor.PictureComponentSizing.const_get().RoData() + 8, tmp_size - 8);
     }
   else
     {
@@ -322,16 +322,16 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::RGBAEssenceDescriptor&  EssenceDescrip
   // CodingStyleDefault
   memset(&PDesc.CodingStyleDefault, 0, sizeof(CodingStyleDefault_t));
   memcpy(&PDesc.CodingStyleDefault,
-        EssenceSubDescriptor.CodingStyleDefault.RoData(),
-        EssenceSubDescriptor.CodingStyleDefault.Length());
+        EssenceSubDescriptor.CodingStyleDefault.const_get().RoData(),
+        EssenceSubDescriptor.CodingStyleDefault.const_get().Length());
 
   // QuantizationDefault
   memset(&PDesc.QuantizationDefault, 0, sizeof(QuantizationDefault_t));
   memcpy(&PDesc.QuantizationDefault,
-        EssenceSubDescriptor.QuantizationDefault.RoData(),
-        EssenceSubDescriptor.QuantizationDefault.Length());
+        EssenceSubDescriptor.QuantizationDefault.const_get().RoData(),
+        EssenceSubDescriptor.QuantizationDefault.const_get().Length());
   
-  PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.Length() - 1;
+  PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.const_get().Length() - 1;
   return RESULT_OK;
 }
 
@@ -391,20 +391,20 @@ ASDCP::JP2K_PDesc_to_MD(const JP2K::PictureDescriptor& PDesc,
   memcpy(tmp_buffer + 8, &PDesc.ImageComponents, sizeof(ASDCP::JP2K::ImageComponent_t) * MaxComponents);
 
   const ui32_t pcomp_size = (sizeof(int) * 2) + (sizeof(ASDCP::JP2K::ImageComponent_t) * MaxComponents);
-  memcpy(EssenceSubDescriptor->PictureComponentSizing.Data(), tmp_buffer, pcomp_size);
-  EssenceSubDescriptor->PictureComponentSizing.Length(pcomp_size);
+  memcpy(EssenceSubDescriptor->PictureComponentSizing.get().Data(), tmp_buffer, pcomp_size);
+  EssenceSubDescriptor->PictureComponentSizing.get().Length(pcomp_size);
 
   ui32_t precinct_set_size = 0, i;
   for ( i = 0; PDesc.CodingStyleDefault.SPcod.PrecinctSize[i] != 0 && i < MaxPrecincts; i++ )
     precinct_set_size++;
 
   ui32_t csd_size = sizeof(CodingStyleDefault_t) - MaxPrecincts + precinct_set_size;
-  memcpy(EssenceSubDescriptor->CodingStyleDefault.Data(), &PDesc.CodingStyleDefault, csd_size);
-  EssenceSubDescriptor->CodingStyleDefault.Length(csd_size);
+  memcpy(EssenceSubDescriptor->CodingStyleDefault.get().Data(), &PDesc.CodingStyleDefault, csd_size);
+  EssenceSubDescriptor->CodingStyleDefault.get().Length(csd_size);
 
   ui32_t qdflt_size = PDesc.QuantizationDefault.SPqcdLength + 1;
-  memcpy(EssenceSubDescriptor->QuantizationDefault.Data(), &PDesc.QuantizationDefault, qdflt_size);
-  EssenceSubDescriptor->QuantizationDefault.Length(qdflt_size);
+  memcpy(EssenceSubDescriptor->QuantizationDefault.get().Data(), &PDesc.QuantizationDefault, qdflt_size);
+  EssenceSubDescriptor->QuantizationDefault.get().Length(qdflt_size);
 
   return RESULT_OK;
 }
@@ -421,8 +421,8 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::CDCIEssenceDescriptor&  EssenceDescrip
 
   PDesc.EditRate           = EditRate;
   PDesc.SampleRate         = SampleRate;
-  assert(EssenceDescriptor.ContainerDuration.cget() <= 0xFFFFFFFFL);
-  PDesc.ContainerDuration  = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.cget());
+  assert(EssenceDescriptor.ContainerDuration.const_get() <= 0xFFFFFFFFL);
+  PDesc.ContainerDuration  = static_cast<ui32_t>(EssenceDescriptor.ContainerDuration.const_get());
   PDesc.StoredWidth        = EssenceDescriptor.StoredWidth;
   PDesc.StoredHeight       = EssenceDescriptor.StoredHeight;
   PDesc.AspectRatio        = EssenceDescriptor.AspectRatio;
@@ -439,11 +439,11 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::CDCIEssenceDescriptor&  EssenceDescrip
   PDesc.Csize   = EssenceSubDescriptor.Csize;
 
   // PictureComponentSizing
-  ui32_t tmp_size = EssenceSubDescriptor.PictureComponentSizing.Length();
+  ui32_t tmp_size = EssenceSubDescriptor.PictureComponentSizing.const_get().Length();
 
   if ( tmp_size == 17 ) // ( 2 * sizeof(ui32_t) ) + 3 components * 3 byte each
     {
-      memcpy(&PDesc.ImageComponents, EssenceSubDescriptor.PictureComponentSizing.RoData() + 8, tmp_size - 8);
+      memcpy(&PDesc.ImageComponents, EssenceSubDescriptor.PictureComponentSizing.const_get().RoData() + 8, tmp_size - 8);
     }
   else
     {
@@ -453,16 +453,16 @@ ASDCP::MD_to_JP2K_PDesc(const ASDCP::MXF::CDCIEssenceDescriptor&  EssenceDescrip
   // CodingStyleDefault
   memset(&PDesc.CodingStyleDefault, 0, sizeof(CodingStyleDefault_t));
   memcpy(&PDesc.CodingStyleDefault,
-        EssenceSubDescriptor.CodingStyleDefault.RoData(),
-        EssenceSubDescriptor.CodingStyleDefault.Length());
+        EssenceSubDescriptor.CodingStyleDefault.const_get().RoData(),
+        EssenceSubDescriptor.CodingStyleDefault.const_get().Length());
 
   // QuantizationDefault
   memset(&PDesc.QuantizationDefault, 0, sizeof(QuantizationDefault_t));
   memcpy(&PDesc.QuantizationDefault,
-        EssenceSubDescriptor.QuantizationDefault.RoData(),
-        EssenceSubDescriptor.QuantizationDefault.Length());
+        EssenceSubDescriptor.QuantizationDefault.const_get().RoData(),
+        EssenceSubDescriptor.QuantizationDefault.const_get().Length());
   
-  PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.Length() - 1;
+  PDesc.QuantizationDefault.SPqcdLength = EssenceSubDescriptor.QuantizationDefault.const_get().Length() - 1;
   return RESULT_OK;
 }
 
index 069d07e9f444d186cc04a7157d88bde7953df549..81dc51aba64f72c9c78e8e92b48e970a1b985950 100644 (file)
@@ -1085,8 +1085,6 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
   { { 0x06, 0x0e, 0x2b, 0x34, 0x04, 0x01, 0x01, 0x0d, // 349
       0x03, 0x02, 0x03, 0x20, 0x03, 0x00, 0x00, 0x00 },
       {0}, false, "IMFAudioGroup_Dcm" },
-
-
   { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x0c, // 350
       0x06, 0x01, 0x01, 0x04, 0x02, 0x0f, 0x00, 0x00 },
       {0}, false, "MaterialPackage_PackageMarker" },
@@ -1096,9 +1094,6 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
   { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 352
       0x04, 0x01, 0x02, 0x01, 0x01, 0x06, 0x01, 0x00 },
       {0}, false, "GenericPictureEssenceDescriptor_ColorPrimaries" },
-
-
-
   { {0}, {0}, false, 0 }
 };
 
index dc06c7fceef1ad6e08734f601c6bb0475a846f82..4af89932d7c680439692e16ab85f56bf8325a035 100755 (executable)
--- a/src/MXF.h
+++ b/src/MXF.h
@@ -237,7 +237,7 @@ namespace ASDCP
          void reset(const PropertyType& rhs) { this->m_has_value = false; }
          bool empty() const { return ! m_has_value; }
          PropertyType& get() { return m_property; }
-         const PropertyType& cget() const { return m_property; }
+         const PropertyType& const_get() const { return m_property; }
        };
 
       // base class of all metadata objects
index 04d839294b175beffee3b702d90c2a14708860c8..733ed34eae2f7af7d513557cd551a08f3f8dcd60 100755 (executable)
@@ -1973,9 +1973,18 @@ JPEG2000PictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi16(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, Csize));
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, PictureComponentSizing));
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, CodingStyleDefault));
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(JPEG2000PictureSubDescriptor, QuantizationDefault));
+  if ( ASDCP_SUCCESS(result) ) {
+    result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing));
+    PictureComponentSizing.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) {
+    result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault));
+    CodingStyleDefault.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) {
+    result = TLVSet.ReadObject(OBJ_READ_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault));
+    QuantizationDefault.set_has_value( result == RESULT_OK );
+  }
   return result;
 }
 
@@ -1995,9 +2004,9 @@ JPEG2000PictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, XTOsize));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, YTOsize));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi16(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, Csize));
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, PictureComponentSizing));
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, CodingStyleDefault));
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(JPEG2000PictureSubDescriptor, QuantizationDefault));
+  if ( ASDCP_SUCCESS(result)  && ! PictureComponentSizing.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, PictureComponentSizing));
+  if ( ASDCP_SUCCESS(result)  && ! CodingStyleDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, CodingStyleDefault));
+  if ( ASDCP_SUCCESS(result)  && ! QuantizationDefault.empty() ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS_OPT(JPEG2000PictureSubDescriptor, QuantizationDefault));
   return result;
 }
 
@@ -2042,9 +2051,15 @@ JPEG2000PictureSubDescriptor::Dump(FILE* stream)
   fprintf(stream, "  %22s = %d\n",  "XTOsize", XTOsize);
   fprintf(stream, "  %22s = %d\n",  "YTOsize", YTOsize);
   fprintf(stream, "  %22s = %d\n",  "Csize", Csize);
-  fprintf(stream, "  %22s = %s\n",  "PictureComponentSizing", PictureComponentSizing.EncodeString(identbuf, IdentBufferLen));
-  fprintf(stream, "  %22s = %s\n",  "CodingStyleDefault", CodingStyleDefault.EncodeString(identbuf, IdentBufferLen));
-  fprintf(stream, "  %22s = %s\n",  "QuantizationDefault", QuantizationDefault.EncodeString(identbuf, IdentBufferLen));
+  if ( ! PictureComponentSizing.empty() ) {
+    fprintf(stream, "  %22s = %s\n",  "PictureComponentSizing", PictureComponentSizing.get().EncodeString(identbuf, IdentBufferLen));
+  }
+  if ( ! CodingStyleDefault.empty() ) {
+    fprintf(stream, "  %22s = %s\n",  "CodingStyleDefault", CodingStyleDefault.get().EncodeString(identbuf, IdentBufferLen));
+  }
+  if ( ! QuantizationDefault.empty() ) {
+    fprintf(stream, "  %22s = %s\n",  "QuantizationDefault", QuantizationDefault.get().EncodeString(identbuf, IdentBufferLen));
+  }
 }
 
 //
@@ -2066,7 +2081,7 @@ JPEG2000PictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
 
 //
 
-CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), ColorSiting(0), PaddingBits(0), BlackRefLevel(0), ColorRange(0)
+CDCIEssenceDescriptor::CDCIEssenceDescriptor(const Dictionary*& d) : GenericPictureEssenceDescriptor(d), m_Dict(d), ComponentDepth(0), HorizontalSubsampling(0), VerticalSubsampling(0), ReversedByteOrder(0), AlphaSampleDepth(0), WhiteReflevel(0)
 {
   assert(m_Dict);
   m_UL = m_Dict->ul(MDD_CDCIEssenceDescriptor);
@@ -2086,10 +2101,7 @@ CDCIEssenceDescriptor::InitFromTLVSet(TLVReader& TLVSet)
 {
   assert(m_Dict);
   Result_t result = GenericPictureEssenceDescriptor::InitFromTLVSet(TLVSet);
-  if ( ASDCP_SUCCESS(result) ) { 
-    result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, ComponentDepth));
-    ComponentDepth.set_has_value( result == RESULT_OK );
-  }
+  if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, ComponentDepth));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi32(OBJ_READ_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
   if ( ASDCP_SUCCESS(result) ) { 
     result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
@@ -2132,7 +2144,7 @@ CDCIEssenceDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
 {
   assert(m_Dict);
   Result_t result = GenericPictureEssenceDescriptor::WriteToTLVSet(TLVSet);
-  if ( ASDCP_SUCCESS(result)  && ! ComponentDepth.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ComponentDepth));
+  if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, ComponentDepth));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS(CDCIEssenceDescriptor, HorizontalSubsampling));
   if ( ASDCP_SUCCESS(result)  && ! VerticalSubsampling.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, VerticalSubsampling));
   if ( ASDCP_SUCCESS(result)  && ! ColorSiting.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(CDCIEssenceDescriptor, ColorSiting));
@@ -2173,9 +2185,7 @@ CDCIEssenceDescriptor::Dump(FILE* stream)
     stream = stderr;
 
   GenericPictureEssenceDescriptor::Dump(stream);
-  if ( ! ComponentDepth.empty() ) {
-    fprintf(stream, "  %22s = %d\n",  "ComponentDepth", ComponentDepth.get());
-  }
+  fprintf(stream, "  %22s = %d\n",  "ComponentDepth", ComponentDepth);
   fprintf(stream, "  %22s = %d\n",  "HorizontalSubsampling", HorizontalSubsampling);
   if ( ! VerticalSubsampling.empty() ) {
     fprintf(stream, "  %22s = %d\n",  "VerticalSubsampling", VerticalSubsampling.get());
@@ -2222,7 +2232,7 @@ CDCIEssenceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
 
 //
 
-MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), CodedContentType(0), LowDelay(0), ProfileAndLevel(0)
+MPEG2VideoDescriptor::MPEG2VideoDescriptor(const Dictionary*& d) : CDCIEssenceDescriptor(d), m_Dict(d), SingleSequence(0), CodedContentType(0), ClosedGOP(0), MaxGOP(0), BitRate(0)
 {
   assert(m_Dict);
   m_UL = m_Dict->ul(MDD_MPEG2VideoDescriptor);
@@ -2242,11 +2252,38 @@ MPEG2VideoDescriptor::InitFromTLVSet(TLVReader& TLVSet)
 {
   assert(m_Dict);
   Result_t result = CDCIEssenceDescriptor::InitFromTLVSet(TLVSet);
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadUi8(OBJ_READ_ARGS(MPEG2VideoDescriptor, CodedContentType));
+  if ( ASDCP_SUCCESS(result) ) { 
+    result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence));
+    SingleSequence.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) { 
+    result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames));
+    ConstantBFrames.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) { 
+    result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType));
+    CodedContentType.set_has_value( result == RESULT_OK );
+  }
   if ( ASDCP_SUCCESS(result) ) { 
     result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
     LowDelay.set_has_value( result == RESULT_OK );
   }
+  if ( ASDCP_SUCCESS(result) ) { 
+    result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP));
+    ClosedGOP.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) { 
+    result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP));
+    IdenticalGOP.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) { 
+    result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP));
+    MaxGOP.set_has_value( result == RESULT_OK );
+  }
+  if ( ASDCP_SUCCESS(result) ) { 
+    result = TLVSet.ReadUi8(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount));
+    BPictureCount.set_has_value( result == RESULT_OK );
+  }
   if ( ASDCP_SUCCESS(result) ) { 
     result = TLVSet.ReadUi32(OBJ_READ_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
     BitRate.set_has_value( result == RESULT_OK );
@@ -2264,8 +2301,14 @@ MPEG2VideoDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
 {
   assert(m_Dict);
   Result_t result = CDCIEssenceDescriptor::WriteToTLVSet(TLVSet);
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS(MPEG2VideoDescriptor, CodedContentType));
+  if ( ASDCP_SUCCESS(result)  && ! SingleSequence.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, SingleSequence));
+  if ( ASDCP_SUCCESS(result)  && ! ConstantBFrames.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ConstantBFrames));
+  if ( ASDCP_SUCCESS(result)  && ! CodedContentType.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, CodedContentType));
   if ( ASDCP_SUCCESS(result)  && ! LowDelay.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, LowDelay));
+  if ( ASDCP_SUCCESS(result)  && ! ClosedGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ClosedGOP));
+  if ( ASDCP_SUCCESS(result)  && ! IdenticalGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, IdenticalGOP));
+  if ( ASDCP_SUCCESS(result)  && ! MaxGOP.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, MaxGOP));
+  if ( ASDCP_SUCCESS(result)  && ! BPictureCount.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BPictureCount));
   if ( ASDCP_SUCCESS(result)  && ! BitRate.empty() ) result = TLVSet.WriteUi32(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, BitRate));
   if ( ASDCP_SUCCESS(result)  && ! ProfileAndLevel.empty() ) result = TLVSet.WriteUi8(OBJ_WRITE_ARGS_OPT(MPEG2VideoDescriptor, ProfileAndLevel));
   return result;
@@ -2276,8 +2319,14 @@ void
 MPEG2VideoDescriptor::Copy(const MPEG2VideoDescriptor& rhs)
 {
   CDCIEssenceDescriptor::Copy(rhs);
+  SingleSequence = rhs.SingleSequence;
+  ConstantBFrames = rhs.ConstantBFrames;
   CodedContentType = rhs.CodedContentType;
   LowDelay = rhs.LowDelay;
+  ClosedGOP = rhs.ClosedGOP;
+  IdenticalGOP = rhs.IdenticalGOP;
+  MaxGOP = rhs.MaxGOP;
+  BPictureCount = rhs.BPictureCount;
   BitRate = rhs.BitRate;
   ProfileAndLevel = rhs.ProfileAndLevel;
 }
@@ -2293,10 +2342,30 @@ MPEG2VideoDescriptor::Dump(FILE* stream)
     stream = stderr;
 
   CDCIEssenceDescriptor::Dump(stream);
-  fprintf(stream, "  %22s = %d\n",  "CodedContentType", CodedContentType);
+  if ( ! SingleSequence.empty() ) {
+    fprintf(stream, "  %22s = %d\n",  "SingleSequence", SingleSequence.get());
+  }
+  if ( ! ConstantBFrames.empty() ) {
+    fprintf(stream, "  %22s = %d\n",  "ConstantBFrames", ConstantBFrames.get());
+  }
+  if ( ! CodedContentType.empty() ) {
+    fprintf(stream, "  %22s = %d\n",  "CodedContentType", CodedContentType.get());
+  }
   if ( ! LowDelay.empty() ) {
     fprintf(stream, "  %22s = %d\n",  "LowDelay", LowDelay.get());
   }
+  if ( ! ClosedGOP.empty() ) {
+    fprintf(stream, "  %22s = %d\n",  "ClosedGOP", ClosedGOP.get());
+  }
+  if ( ! IdenticalGOP.empty() ) {
+    fprintf(stream, "  %22s = %d\n",  "IdenticalGOP", IdenticalGOP.get());
+  }
+  if ( ! MaxGOP.empty() ) {
+    fprintf(stream, "  %22s = %d\n",  "MaxGOP", MaxGOP.get());
+  }
+  if ( ! BPictureCount.empty() ) {
+    fprintf(stream, "  %22s = %d\n",  "BPictureCount", BPictureCount.get());
+  }
   if ( ! BitRate.empty() ) {
     fprintf(stream, "  %22s = %d\n",  "BitRate", BitRate.get());
   }
index 007f22b21604ff58ad2715c663c730bb44f1e431..5121989ccdfb99e03a4173bf634699cad81a148e 100755 (executable)
@@ -554,9 +554,9 @@ namespace ASDCP
           ui32_t XTOsize;
           ui32_t YTOsize;
           ui16_t Csize;
-          Raw PictureComponentSizing;
-          Raw CodingStyleDefault;
-          Raw QuantizationDefault;
+          optional_property<Raw> PictureComponentSizing;
+          optional_property<Raw> CodingStyleDefault;
+          optional_property<Raw> QuantizationDefault;
 
       JPEG2000PictureSubDescriptor(const Dictionary*& d);
       JPEG2000PictureSubDescriptor(const JPEG2000PictureSubDescriptor& rhs);
@@ -579,7 +579,7 @@ namespace ASDCP
 
        public:
          const Dictionary*& m_Dict;
-          optional_property<ui32_t> ComponentDepth;
+          ui32_t ComponentDepth;
           ui32_t HorizontalSubsampling;
           optional_property<ui32_t> VerticalSubsampling;
           optional_property<ui8_t> ColorSiting;
@@ -611,8 +611,14 @@ namespace ASDCP
 
        public:
          const Dictionary*& m_Dict;
-          ui8_t CodedContentType;
+          optional_property<ui8_t> SingleSequence;
+          optional_property<ui8_t> ConstantBFrames;
+          optional_property<ui8_t> CodedContentType;
           optional_property<ui8_t> LowDelay;
+          optional_property<ui8_t> ClosedGOP;
+          optional_property<ui8_t> IdenticalGOP;
+          optional_property<ui8_t> MaxGOP;
+          optional_property<ui8_t> BPictureCount;
           optional_property<ui32_t> BitRate;
           optional_property<ui8_t> ProfileAndLevel;
 
index a8746bf177686a58c5d247b124641c1dcd24c2c3..4a03bde4b7edd898802fbd54a8fe6020499cc70f 100755 (executable)
@@ -517,7 +517,7 @@ public:
     if ( KM_SUCCESS(result) )
       {
        char buf[64];
-       fprintf(stream, "ChannelAssignment: %s\n", descriptor->ChannelAssignment.EncodeString(buf, 64));
+       fprintf(stream, "ChannelAssignment: %s\n", descriptor->ChannelAssignment.const_get().EncodeString(buf, 64));
       }
   }
 
index 13e30365211496dc4cdaad76214fddf9e98c02d1..24d6b1e4ed689d5cdc80da627bea81f756d38c7a 100755 (executable)
@@ -1813,7 +1813,7 @@ show_file_info(CommandOptions& Options)
          if ( ASDCP_SUCCESS(result) )
            {
              char buf[64];
-             fprintf(stdout, " ChannelAssignment: %s\n", descriptor->ChannelAssignment.EncodeString(buf, 64));
+             fprintf(stdout, " ChannelAssignment: %s\n", descriptor->ChannelAssignment.const_get().EncodeString(buf, 64));
            }
        }
     }