Fix fake-writing of 3D.
authorCarl Hetherington <cth@carlh.net>
Thu, 23 Jan 2014 00:16:28 +0000 (00:16 +0000)
committerCarl Hetherington <cth@carlh.net>
Thu, 23 Jan 2014 00:16:28 +0000 (00:16 +0000)
asdcplib/src/AS_DCP.h
asdcplib/src/AS_DCP_JP2K.cpp
src/stereo_picture_asset_writer.cc

index 3edd1f7430b9181aea48c361198840e9e28f5c18..eb2ce6e60b55ce73b9e2bef224a42cd7ffa02335 100755 (executable)
@@ -1289,7 +1289,7 @@ namespace ASDCP {
          Result_t WriteFrame(const FrameBuffer&, StereoscopicPhase_t phase,
                              AESEncContext* = 0, HMACContext* = 0, std::string* hash = 0);
 
-         Result_t FakeWriteFrame(int size);
+          Result_t FakeWriteFrame(int size, StereoscopicPhase_t phase);
              
          // Closes the MXF file, writing the index and revised header.  Returns
          // RESULT_SPHASE if WriteFrame was called an odd number of times.
index 903b2e85697740be07460ddcf8d83008a4c6c1b4..05166d68c23a0a5d14bb36075d80c1f6d74dbd33 100755 (executable)
@@ -1197,6 +1197,23 @@ public:
     return lh__Writer::WriteFrame(FrameBuf, false, Ctx, HMAC, hash);
   }
 
+  Result_t FakeWriteFrame(int size, StereoscopicPhase_t phase)
+  {
+    if (m_NextPhase != phase)
+      {
+        return RESULT_SPHASE;
+      }
+
+    if (phase == SP_LEFT)
+      {
+        m_NextPhase = SP_RIGHT;
+       return lh__Writer::FakeWriteFrame(size, true);
+      }
+
+    m_NextPhase = SP_LEFT;
+    return lh__Writer::FakeWriteFrame(size, false);
+  }
+
   //
   Result_t Finalize()
   {
@@ -1338,12 +1355,12 @@ ASDCP::JP2K::MXFSWriter::WriteFrame(const FrameBuffer& FrameBuf, StereoscopicPha
 }
 
 ASDCP::Result_t
-ASDCP::JP2K::MXFSWriter::FakeWriteFrame(int size)
+ASDCP::JP2K::MXFSWriter::FakeWriteFrame(int size, StereoscopicPhase_t phase)
 {
   if ( m_Writer.empty() )
     return RESULT_INIT;
 
-  return m_Writer->FakeWriteFrame(size, true);
+  return m_Writer->FakeWriteFrame(size, phase);
 }
 
 // Closes the MXF file, writing the index and other closing information.
index 81ce7fc04303d97806cf5200e3e31d1e3a7b0728..b4b0ad524e607a6650440e324bde20c3484bd908 100644 (file)
@@ -94,7 +94,7 @@ StereoPictureAssetWriter::fake_write (int size)
        assert (_started);
        assert (!_finalized);
 
-       Kumu::Result_t r = _state->mxf_writer.FakeWriteFrame (size);
+       Kumu::Result_t r = _state->mxf_writer.FakeWriteFrame (size, _next_eye == EYE_LEFT ? ASDCP::JP2K::SP_LEFT : ASDCP::JP2K::SP_RIGHT);
        if (ASDCP_FAILURE (r)) {
                boost::throw_exception (MXFFileError ("error in writing video MXF", _asset->path().string(), r));
        }