Fix fake-writing of 3D.
[libdcp.git] / asdcplib / src / JP2K_Codestream_Parser.cpp
index 02d05671ed7459188a0bf16868be379c29274150..5ab7a3221a80f1ec6c82db1bf77622d32285dd48 100755 (executable)
@@ -91,6 +91,26 @@ public:
 
     return result;
   }
+
+  Result_t OpenReadFrame(const unsigned char * data, unsigned int size, FrameBuffer& FB)
+  {
+    if ( FB.Capacity() < size )
+      {
+        DefaultLogSink().Error("FrameBuf.Capacity: %u frame length: %u\n", FB.Capacity(), (ui32_t) size);
+        return RESULT_SMALLBUF;
+      }
+
+    memcpy (FB.Data(), data, size);
+    FB.Size(size);
+
+    byte_t start_of_data = 0; // out param
+    const Result_t result = ParseMetadataIntoDesc(FB, m_PDesc, &start_of_data);
+
+    if ( ASDCP_SUCCESS(result) )
+      FB.PlaintextOffset(start_of_data);
+
+    return result;
+  }    
 };
 
 ASDCP::Result_t
@@ -179,6 +199,26 @@ ASDCP::JP2K::ParseMetadataIntoDesc(const FrameBuffer& FB, PictureDescriptor& PDe
          memcpy(&PDesc.QuantizationDefault, NextMarker.m_Data, NextMarker.m_DataSize);
          PDesc.QuantizationDefault.SPqcdLength = NextMarker.m_DataSize - 1;
          break;
+
+       case MRK_NIL:
+       case MRK_SOC:
+       case MRK_SOT:
+       case MRK_EOC:
+       case MRK_COC:
+       case MRK_RGN:
+       case MRK_QCC:
+       case MRK_POC:
+       case MRK_TLM:
+       case MRK_PLM:
+       case MRK_PLT:
+       case MRK_PPM:
+       case MRK_PPT:
+       case MRK_SOP:
+       case MRK_EPH:
+       case MRK_CRG:
+       case MRK_COM:
+         /* Keep gcc quiet */
+         break;
        }
     }
 
@@ -204,6 +244,15 @@ ASDCP::JP2K::CodestreamParser::OpenReadFrame(const char* filename, FrameBuffer&
   return m_Parser->OpenReadFrame(filename, FB);
 }
 
+// Opens the stream for reading, parses enough data to provide a complete
+// set of stream metadata for the MXFWriter below.
+ASDCP::Result_t
+ASDCP::JP2K::CodestreamParser::OpenReadFrame(const unsigned char* data, unsigned int size, FrameBuffer& FB) const
+{
+  const_cast<ASDCP::JP2K::CodestreamParser*>(this)->m_Parser = new h__CodestreamParser;
+  return m_Parser->OpenReadFrame(data, size, FB);
+}
+
 //
 ASDCP::Result_t
 ASDCP::JP2K::CodestreamParser::FillPictureDescriptor(PictureDescriptor& PDesc) const