Fix bad frees if exceptions are thrown by constructors.
[libdcp.git] / src / picture_asset.cc
index c3a674306352c02268dd9161e91685a48b055088..5903b394304b0baf4fdd70ca2c6473f5b651cc1b 100644 (file)
@@ -54,8 +54,8 @@ using boost::dynamic_pointer_cast;
 using boost::lexical_cast;
 using namespace libdcp;
 
-PictureAsset::PictureAsset (string directory, string mxf_name, boost::signals2::signal<void (float)>* progress, int fps, int intrinsic_duration, bool encrypted, Size size)
-       : MXFAsset (directory, mxf_name, progress, fps, intrinsic_duration, encrypted)
+PictureAsset::PictureAsset (string directory, string mxf_name, boost::signals2::signal<void (float)>* progress, int fps, int intrinsic_duration, Size size)
+       : MXFAsset (directory, mxf_name, progress, fps, intrinsic_duration)
        , _size (size)
 {
 
@@ -82,7 +82,19 @@ MonoPictureAsset::edit_rate_factor () const
 string
 StereoPictureAsset::cpl_node_name () const
 {
-       return "MainStereoscopicPicture";
+       return "msp-cpl:MainStereoscopicPicture";
+}
+
+pair<string, string>
+StereoPictureAsset::cpl_node_attribute (bool interop) const
+{
+       if (interop) {
+               return make_pair ("xmlns:msp-cpl", "http://www.digicine.com/schemas/437-Y/2007/Main-Stereo-Picture-CPL");
+       } else {
+               return make_pair ("xmlns:msp-cpl", "http://www.smpte-ra.org/schemas/429-10/2008/Main-Stereo-Picture-CPL");
+       }
+
+       return make_pair ("", "");
 }
 
 int
@@ -92,9 +104,9 @@ StereoPictureAsset::edit_rate_factor () const
 }
 
 void
-PictureAsset::write_to_cpl (xmlpp::Node* node) const
+PictureAsset::write_to_cpl (xmlpp::Element* node, bool interop) const
 {
-       MXFAsset::write_to_cpl (node);
+       MXFAsset::write_to_cpl (node, interop);
        
        xmlpp::Node::NodeList c = node->get_children ();
        xmlpp::Node::NodeList::iterator i = c.begin();
@@ -105,7 +117,11 @@ PictureAsset::write_to_cpl (xmlpp::Node* node) const
        assert (i != c.end ());
 
        (*i)->add_child ("FrameRate")->add_child_text (lexical_cast<string> (_edit_rate * edit_rate_factor ()) + " 1");
-       (*i)->add_child ("ScreenAspectRatio")->add_child_text (lexical_cast<string> (_size.width) + " " + lexical_cast<string> (_size.height));
+       if (interop) {
+               (*i)->add_child ("ScreenAspectRatio")->add_child_text (lexical_cast<string> (float (_size.width) / _size.height));
+       } else {
+               (*i)->add_child ("ScreenAspectRatio")->add_child_text (lexical_cast<string> (_size.width) + " " + lexical_cast<string> (_size.height));
+       }
 }
 
 bool
@@ -179,12 +195,11 @@ MonoPictureAsset::MonoPictureAsset (
        boost::signals2::signal<void (float)>* progress,
        int fps,
        int intrinsic_duration,
-       bool encrypted,
        Size size,
        bool interop,
        MXFMetadata const & metadata
        )
-       : PictureAsset (directory, mxf_name, progress, fps, intrinsic_duration, encrypted, size)
+       : PictureAsset (directory, mxf_name, progress, fps, intrinsic_duration, size)
 {
        construct (get_path, interop, metadata);
 }
@@ -196,18 +211,17 @@ MonoPictureAsset::MonoPictureAsset (
        boost::signals2::signal<void (float)>* progress,
        int fps,
        int intrinsic_duration,
-       bool encrypted,
        Size size,
        bool interop,
        MXFMetadata const & metadata
        )
-       : PictureAsset (directory, mxf_name, progress, fps, intrinsic_duration, encrypted, size)
+       : PictureAsset (directory, mxf_name, progress, fps, intrinsic_duration, size)
 {
        construct (boost::bind (&MonoPictureAsset::path_from_list, this, _1, files), interop, metadata);
 }
 
 MonoPictureAsset::MonoPictureAsset (string directory, string mxf_name, int fps, Size size)
-       : PictureAsset (directory, mxf_name, 0, fps, 0, false, size)
+       : PictureAsset (directory, mxf_name, 0, fps, 0, size)
 {
 
 }
@@ -421,7 +435,7 @@ PictureAsset::frame_buffer_equals (
 
 
 StereoPictureAsset::StereoPictureAsset (string directory, string mxf_name, int fps, int intrinsic_duration)
-       : PictureAsset (directory, mxf_name, 0, fps, intrinsic_duration, false, Size (0, 0))
+       : PictureAsset (directory, mxf_name, 0, fps, intrinsic_duration, Size (0, 0))
 {
        ASDCP::JP2K::MXFSReader reader;
        if (ASDCP_FAILURE (reader.OpenRead (path().string().c_str()))) {
@@ -457,7 +471,7 @@ PictureAsset::key_type () const
 }
 
 StereoPictureAsset::StereoPictureAsset (string directory, string mxf_name, int fps, Size size)
-       : PictureAsset (directory, mxf_name, 0, fps, 0, false, size)
+       : PictureAsset (directory, mxf_name, 0, fps, 0, size)
 {
 
 }