subdesc
authorjhurst <jhurst@cinecert.com>
Sat, 20 Oct 2007 23:25:54 +0000 (23:25 +0000)
committerjhurst <>
Sat, 20 Oct 2007 23:25:54 +0000 (23:25 +0000)
src/AS_DCP_JP2K.cpp
src/AS_DCP_TimedText.cpp
src/AS_DCP_internal.h
src/MDD.cpp
src/MDD.h
src/Metadata.cpp
src/Metadata.h
src/asdcp-test.cpp
src/h__Writer.cpp

index b3c4663efab7737929e40a986895e3fdbf0c6c63..0271d23ac17f16dd4060cf12e70ffc7b789a85d1 100755 (executable)
@@ -40,12 +40,6 @@ static std::string JP2K_PACKAGE_LABEL = "File Package: SMPTE 429-4 frame wrappin
 static std::string JP2K_S_PACKAGE_LABEL = "File Package: SMPTE 429-10 frame wrapping of stereoscopic JPEG 2000 codestreams";
 static std::string PICT_DEF_LABEL = "Picture Track";
 
-
-//22
-
-// 7f18 7f00 7f00 7ebc 76ea 76ea 76bc 6f4c 6f4c 6f64 5803 5803 5845 5fd2 5fd2 5f61
-
-
 int s_exp_lookup[16] = { 0, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024,2048, 4096, 8192, 16384, 32768 };
 
 //
@@ -503,7 +497,7 @@ public:
 
   ~lh__Writer(){}
 
-  Result_t OpenWrite(const char*, ui32_t HeaderSize);
+  Result_t OpenWrite(const char*, EssenceType_t type, ui32_t HeaderSize);
   Result_t SetSourceStream(const PictureDescriptor&, const std::string& label,
                           ASDCP::Rational LocalEditRate = ASDCP::Rational(0,0));
   Result_t WriteFrame(const JP2K::FrameBuffer&, bool add_index, AESEncContext*, HMACContext*);
@@ -578,7 +572,7 @@ lh__Writer::JP2K_PDesc_to_MD(JP2K::PictureDescriptor& PDesc)
 // Open the file for writing. The file must not exist. Returns error if
 // the operation cannot be completed.
 ASDCP::Result_t
-lh__Writer::OpenWrite(const char* filename, ui32_t HeaderSize)
+lh__Writer::OpenWrite(const char* filename, EssenceType_t type, ui32_t HeaderSize)
 {
   if ( ! m_State.Test_BEGIN() )
     return RESULT_STATE;
@@ -594,11 +588,19 @@ lh__Writer::OpenWrite(const char* filename, ui32_t HeaderSize)
 
       m_EssenceDescriptor = tmp_rgba;
       m_EssenceSubDescriptor = new JPEG2000PictureSubDescriptor;
-      m_EssenceSubDescriptorList.push_back((FileDescriptor*)m_EssenceSubDescriptor);
+      m_EssenceSubDescriptorList.push_back((InterchangeObject*)m_EssenceSubDescriptor);
 
       GenRandomValue(m_EssenceSubDescriptor->InstanceUID);
       m_EssenceDescriptor->SubDescriptors.push_back(m_EssenceSubDescriptor->InstanceUID);
 
+      if ( type == ASDCP::ESS_JPEG_2000_S )
+       {
+         InterchangeObject* StereoSubDesc = new StereoscopicPictureSubDescriptor;
+         m_EssenceSubDescriptorList.push_back(StereoSubDesc);
+         GenRandomValue(StereoSubDesc->InstanceUID);
+         m_EssenceDescriptor->SubDescriptors.push_back(StereoSubDesc->InstanceUID);
+       }
+
       result = m_State.Goto_INIT();
     }
 
@@ -705,7 +707,7 @@ ASDCP::JP2K::MXFWriter::OpenWrite(const char* filename, const WriterInfo& Info,
 {
   m_Writer = new h__Writer;
   
-  Result_t result = m_Writer->OpenWrite(filename, HeaderSize);
+  Result_t result = m_Writer->OpenWrite(filename, ASDCP::ESS_JPEG_2000, HeaderSize);
 
   if ( ASDCP_SUCCESS(result) )
     {
@@ -807,7 +809,7 @@ ASDCP::JP2K::MXFSWriter::OpenWrite(const char* filename, const WriterInfo& Info,
       return RESULT_FORMAT;
     }
 
-  Result_t result = m_Writer->OpenWrite(filename, HeaderSize);
+  Result_t result = m_Writer->OpenWrite(filename, ASDCP::ESS_JPEG_2000_S, HeaderSize);
 
   if ( ASDCP_SUCCESS(result) )
     {
index ff68e62b8742f37e483a198fb364f2db5b131e19..bab3a6a1e616e338700fdad95ef282497f7d0d5e 100644 (file)
@@ -126,7 +126,7 @@ ASDCP::TimedText::MXFReader::h__Reader::MD_to_TimedText_TDesc(TimedText::TimedTe
 
   TDesc.EditRate = TDescObj->SampleRate;
   TDesc.ContainerDuration = TDescObj->ContainerDuration;
-  memcpy(TDesc.AssetID, TDescObj->AssetID.Value(), UUIDlen);
+  memcpy(TDesc.AssetID, TDescObj->ResourceID.Value(), UUIDlen);
   TDesc.NamespaceName = TDescObj->RootNamespaceName;
   TDesc.EncodingName = TDescObj->UTFEncoding;
 
@@ -426,7 +426,7 @@ ASDCP::TimedText::MXFWriter::h__Writer::TimedText_TDesc_to_MD(TimedText::TimedTe
 
   TDescObj->SampleRate = TDesc.EditRate;
   TDescObj->ContainerDuration = TDesc.ContainerDuration;
-  TDescObj->AssetID.Set(TDesc.AssetID);
+  TDescObj->ResourceID.Set(TDesc.AssetID);
   TDescObj->RootNamespaceName = TDesc.NamespaceName;
   TDescObj->UTFEncoding = TDesc.EncodingName;
 
index 86ccc20cf4af1dcb6c81a6d0e86cf27e0f3fc952..7f1ef25a3c5b0fa16ea9dba7196e2a3e35b64859 100755 (executable)
@@ -177,7 +177,7 @@ namespace ASDCP
       SourcePackage*     m_FilePackage;
 
       FileDescriptor*    m_EssenceDescriptor;
-      std::list<FileDescriptor*> m_EssenceSubDescriptorList;
+      std::list<InterchangeObject*> m_EssenceSubDescriptorList;
 
       ui32_t             m_FramesWritten;
       ui64_t             m_StreamOffset;
index 2c8353b47a1b3c73e9f538ce1b169757ddc2164f..c7ddd7cbe4dbfc2924ed0b58e304d8cfe97931c1 100644 (file)
@@ -809,7 +809,7 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
       {0}, false, "DCTimedTextDescriptor" },
   { { 0x06, 0x0e, 0x2b, 0x34, 0x00, 0x01, 0x01, 0x01, // 258
       0x0d, 0x01, 0x03, 0x01, 0xfa, 0xce, 0x00, 0x03 },
-      {0}, false, "DCTimedTextDescriptor_AssetID" },
+      {0}, false, "DCTimedTextDescriptor_ResourceID" },
   { { 0x06, 0x0e, 0x2b, 0x34, 0x00, 0x01, 0x01, 0x01, // 259
       0x0d, 0x01, 0x03, 0x01, 0xfa, 0xce, 0x00, 0x04 },
       {0}, false, "DCTimedTextDescriptor_UTFEncoding" },
@@ -840,9 +840,9 @@ static const ASDCP::MDDEntry s_MDD_Table[] = {
   { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 268
       0x01, 0x07, 0x01, 0x05, 0x00, 0x00, 0x00, 0x00 },
     {0x61, 0x02}, false, "DMSegment_TrackIDList" },
-  { { 0x06, 0x0e, 0x2b, 0x34, 0x01, 0x01, 0x01, 0x02, // 269
-      0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00 },
-    {0x61, 0x02}, false, "StereoscopicPictureSubDescriptor" },
+  { { 0x06, 0x0e, 0x2b, 0x34, 0x00, 0x01, 0x01, 0x01, // 269
+      0x0d, 0x01, 0x03, 0x01, 0xfa, 0xce, 0x00, 0xf6 },
+    {0}, false, "StereoscopicPictureSubDescriptor" },
   { {0}, {0}, false, 0 }
 };
 
index ba415bcf3213dee7d4d0290cd8a15ec61ed74b2f..4218f9d24e652193afe46efff0fd6a9d32c78fe5 100755 (executable)
--- a/src/MDD.h
+++ b/src/MDD.h
@@ -293,13 +293,13 @@ namespace ASDCP {
        MDD_DCTimedTextWrapping, // 255
        MDD_DCTimedTextEssence, // 256
        MDD_DCTimedTextDescriptor, // 257
-       MDD_DCTimedTextDescriptor_AssetID, // 258
+       MDD_DCTimedTextDescriptor_ResourceID, // 258
        MDD_DCTimedTextDescriptor_UTFEncoding, // 259
        MDD_DCTimedTextDescriptor_RootNamespaceName, // 260
        MDD_DCTimedTextResourceDescriptor, // 261
        MDD_DCTimedTextResourceDescriptor_ResourceID, // 262
        MDD_DCTimedTextResourceDescriptor_ResourceMIMEType, // 263
-       MDD_DCTimedTextResourceDescriptor_ResourceSID, //264
+       MDD_DCTimedTextResourceDescriptor_ResourceSID, // 264
        MDD_GenericStreamPartition, // 265
        MDD_DMSegment_DataDefinition, // 266
        MDD_DMSegment_Duration, // 267
index 7e6a5e1f48f37b484366577fa9ca841ba341d330..c9eb689d4e291a76574bb495a5a7ba9fd1c2ee9d 100755 (executable)
@@ -67,6 +67,8 @@ static InterchangeObject* CryptographicContext_Factory() { return new Cryptograp
 static InterchangeObject* GenericDataEssenceDescriptor_Factory() { return new GenericDataEssenceDescriptor; }
 static InterchangeObject* DCTimedTextDescriptor_Factory() { return new DCTimedTextDescriptor; }
 static InterchangeObject* DCTimedTextResourceDescriptor_Factory() { return new DCTimedTextResourceDescriptor; }
+static InterchangeObject* StereoscopicPictureSubDescriptor_Factory() { return new StereoscopicPictureSubDescriptor; }
+
 
 void
 ASDCP::MXF::Metadata_InitTypes()
@@ -98,6 +100,7 @@ ASDCP::MXF::Metadata_InitTypes()
   SetObjectFactory(Dict::ul(MDD_GenericDataEssenceDescriptor), GenericDataEssenceDescriptor_Factory);
   SetObjectFactory(Dict::ul(MDD_DCTimedTextDescriptor), DCTimedTextDescriptor_Factory);
   SetObjectFactory(Dict::ul(MDD_DCTimedTextResourceDescriptor), DCTimedTextResourceDescriptor_Factory);
+  SetObjectFactory(Dict::ul(MDD_StereoscopicPictureSubDescriptor), StereoscopicPictureSubDescriptor_Factory);
 }
 
 //------------------------------------------------------------------------------------------
@@ -1577,7 +1580,7 @@ ASDCP::Result_t
 DCTimedTextDescriptor::InitFromTLVSet(TLVReader& TLVSet)
 {
   Result_t result = GenericDataEssenceDescriptor::InitFromTLVSet(TLVSet);
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DCTimedTextDescriptor, AssetID));
+  if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DCTimedTextDescriptor, ResourceID));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DCTimedTextDescriptor, UTFEncoding));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.ReadObject(OBJ_READ_ARGS(DCTimedTextDescriptor, RootNamespaceName));
   return result;
@@ -1588,7 +1591,7 @@ ASDCP::Result_t
 DCTimedTextDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
 {
   Result_t result = GenericDataEssenceDescriptor::WriteToTLVSet(TLVSet);
-  if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DCTimedTextDescriptor, AssetID));
+  if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DCTimedTextDescriptor, ResourceID));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DCTimedTextDescriptor, UTFEncoding));
   if ( ASDCP_SUCCESS(result) ) result = TLVSet.WriteObject(OBJ_WRITE_ARGS(DCTimedTextDescriptor, RootNamespaceName));
   return result;
@@ -1605,7 +1608,7 @@ DCTimedTextDescriptor::Dump(FILE* stream)
     stream = stderr;
 
   GenericDataEssenceDescriptor::Dump(stream);
-  fprintf(stream, "  %22s = %s\n",  "AssetID", AssetID.EncodeString(identbuf, IdentBufferLen));
+  fprintf(stream, "  %22s = %s\n",  "ResourceID", ResourceID.EncodeString(identbuf, IdentBufferLen));
   fprintf(stream, "  %22s = %s\n",  "UTFEncoding", UTFEncoding.EncodeString(identbuf, IdentBufferLen));
   fprintf(stream, "  %22s = %s\n",  "RootNamespaceName", RootNamespaceName.EncodeString(identbuf, IdentBufferLen));
 }
@@ -1683,6 +1686,53 @@ DCTimedTextResourceDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
   return InterchangeObject::WriteToBuffer(Buffer);
 }
 
+//------------------------------------------------------------------------------------------
+// StereoscopicPictureSubDescriptor
+
+//
+ASDCP::Result_t
+StereoscopicPictureSubDescriptor::InitFromTLVSet(TLVReader& TLVSet)
+{
+  Result_t result = InterchangeObject::InitFromTLVSet(TLVSet);
+  return result;
+}
+
+//
+ASDCP::Result_t
+StereoscopicPictureSubDescriptor::WriteToTLVSet(TLVWriter& TLVSet)
+{
+  Result_t result = InterchangeObject::WriteToTLVSet(TLVSet);
+  return result;
+}
+
+//
+void
+StereoscopicPictureSubDescriptor::Dump(FILE* stream)
+{
+  char identbuf[IdentBufferLen];
+  *identbuf = 0;
+
+  if ( stream == 0 )
+    stream = stderr;
+
+  InterchangeObject::Dump(stream);
+}
+
+//
+ASDCP::Result_t
+StereoscopicPictureSubDescriptor::InitFromBuffer(const byte_t* p, ui32_t l)
+{
+  m_Typeinfo = &Dict::Type(MDD_StereoscopicPictureSubDescriptor);
+  return InterchangeObject::InitFromBuffer(p, l);
+}
+
+//
+ASDCP::Result_t
+StereoscopicPictureSubDescriptor::WriteToBuffer(ASDCP::FrameBuffer& Buffer)
+{
+  m_Typeinfo = &Dict::Type(MDD_StereoscopicPictureSubDescriptor);
+  return InterchangeObject::WriteToBuffer(Buffer);
+}
 
 //
 // end Metadata.cpp
index 035dfd3ef793d7420f4a26c24523698cf7c1ff23..bcd3b6f78eddfda6280db03959aadd0e6c8570b7 100755 (executable)
@@ -572,7 +572,7 @@ namespace ASDCP
          ASDCP_NO_COPY_CONSTRUCT(DCTimedTextDescriptor);
 
        public:
-         UUID AssetID;
+          UUID ResourceID;
           UTF16String UTFEncoding;
           UTF16String RootNamespaceName;
 
@@ -605,6 +605,24 @@ namespace ASDCP
          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&);
+       };
+
     } // namespace MXF
 } // namespace ASDCP
 
index b7dd35607b7783773ef739061ecad432ef6045b2..22743aaec9205a8f47469b70b26e312446e67e41 100755 (executable)
@@ -1592,17 +1592,19 @@ template<class ReaderT, class DescriptorT>
 class FileInfoWrapper
 {
 public:
-  static void
+  static Result_t
   file_info(CommandOptions& Options, const char* type_string, FILE* stream = 0)
   {
     assert(type_string);
     if ( stream == 0 )
       stream = stdout;
 
+    Result_t result = RESULT_OK;
+
     if ( Options.verbose_flag || Options.showheader_flag )
       {
        ReaderT     Reader;
-       Result_t result = Reader.OpenRead(Options.filenames[0]);
+       result = Reader.OpenRead(Options.filenames[0]);
 
        if ( ASDCP_SUCCESS(result) )
          {
@@ -1627,6 +1629,8 @@ public:
            Reader.DumpHeaderMetadata(stream);
          }
       }
+
+    return result;
   }
 };
 
@@ -1642,27 +1646,27 @@ show_file_info(CommandOptions& Options)
     return result;
 
   if ( EssenceType == ESS_MPEG2_VES )
-    FileInfoWrapper<ASDCP::MPEG2::MXFReader, MyVideoDescriptor>::file_info(Options, "MPEG2 video");
+    result = FileInfoWrapper<ASDCP::MPEG2::MXFReader, MyVideoDescriptor>::file_info(Options, "MPEG2 video");
 
   else if ( EssenceType == ESS_PCM_24b_48k )
-    FileInfoWrapper<ASDCP::PCM::MXFReader, MyAudioDescriptor>::file_info(Options, "PCM audio");
+    result = FileInfoWrapper<ASDCP::PCM::MXFReader, MyAudioDescriptor>::file_info(Options, "PCM audio");
 
   else if ( EssenceType == ESS_JPEG_2000 )
     {
       if ( Options.stereo_image_flag )
-       FileInfoWrapper<ASDCP::JP2K::MXFSReader,
+       result = FileInfoWrapper<ASDCP::JP2K::MXFSReader,
        MyStereoPictureDescriptor>::file_info(Options, "JPEG 2000 stereoscopic pictures");
 
       else
-       FileInfoWrapper<ASDCP::JP2K::MXFReader,
+       result = FileInfoWrapper<ASDCP::JP2K::MXFReader,
        MyPictureDescriptor>::file_info(Options, "JPEG 2000 pictures");
     }
   else if ( EssenceType == ESS_JPEG_2000_S )
-    FileInfoWrapper<ASDCP::JP2K::MXFSReader,
+    result = FileInfoWrapper<ASDCP::JP2K::MXFSReader,
     MyStereoPictureDescriptor>::file_info(Options, "JPEG 2000 stereoscopic pictures");
 
   else if ( EssenceType == ESS_TIMED_TEXT )
-    FileInfoWrapper<ASDCP::TimedText::MXFReader, MyTextDescriptor>::file_info(Options, "Timed Text");
+    result = FileInfoWrapper<ASDCP::TimedText::MXFReader, MyTextDescriptor>::file_info(Options, "Timed Text");
 
   else
     {
@@ -1878,7 +1882,11 @@ main(int argc, const char** argv)
     {
       fputs("Program stopped on error.\n", stderr);
 
-      if ( result != RESULT_FAIL )
+      if ( result == RESULT_SFORMAT )
+       {
+         fputs("Use option '-3' to force stereoscopic mode.\n", stderr);
+       }
+      else if ( result != RESULT_FAIL )
        {
          fputs(result, stderr);
          fputc('\n', stderr);
index 9f1d3fe24093eb9c2cc11ca3f10b085a09649ab2..06d81c0da6fa6b861fb78a5ae9f43769773d46be 100755 (executable)
@@ -376,7 +376,7 @@ ASDCP::h__Writer::AddEssenceDescriptor(const UL& WrappingUL)
   m_HeaderPart.m_Preface->EssenceContainers = m_HeaderPart.EssenceContainers;
   m_HeaderPart.AddChildObject(m_EssenceDescriptor);
 
-  std::list<FileDescriptor*>::iterator sdli = m_EssenceSubDescriptorList.begin();
+  std::list<InterchangeObject*>::iterator sdli = m_EssenceSubDescriptorList.begin();
   for ( ; sdli != m_EssenceSubDescriptorList.end(); sdli++ )
       m_HeaderPart.AddChildObject(*sdli);