Close assets on destruction even if finalize() is not called.
[libdcp.git] / src / stereo_picture_asset_writer.cc
index e02e83605de241592d7cabee94cdaadfb87588ec..f4ec7df0c2e383eb9654abee6da44f6a1da91f76 100644 (file)
@@ -68,6 +68,17 @@ StereoPictureAssetWriter::StereoPictureAssetWriter (PictureAsset* mxf, boost::fi
 }
 
 
+StereoPictureAssetWriter::~StereoPictureAssetWriter()
+{
+       try {
+               /* Last-resort finalization to close the file, at least */
+               if (_started) {
+                       _state->mxf_writer.Finalize();
+               }
+       } catch (...) {}
+}
+
+
 void
 StereoPictureAssetWriter::start (uint8_t const * data, int size)
 {
@@ -140,6 +151,7 @@ StereoPictureAssetWriter::finalize ()
                if (ASDCP_FAILURE(r)) {
                        boost::throw_exception (MXFFileError("error in finalizing video MXF", _file.string(), r));
                }
+               _started = false;
        }
 
        _picture_asset->_intrinsic_duration = _frames_written;