Use MXFAsset::_interop to decide on whether to write asset XML as Interop or SMPTE.
authorCarl Hetherington <cth@carlh.net>
Wed, 15 Jan 2014 09:43:41 +0000 (09:43 +0000)
committerCarl Hetherington <cth@carlh.net>
Wed, 15 Jan 2014 09:43:41 +0000 (09:43 +0000)
16 files changed:
src/asset.h
src/cpl.cc
src/mono_picture_asset.cc
src/mxf_asset.cc
src/mxf_asset.h
src/picture_asset.cc
src/picture_asset.h
src/picture_asset_writer_common.cc
src/reel.cc
src/reel.h
src/sound_asset.cc
src/stereo_picture_asset.cc
src/stereo_picture_asset.h
src/subtitle_asset.cc
src/subtitle_asset.h
test/cpl_sar.cc

index dbe3deba6d34f13c9f8586fee77953e6b142d970..269d5c4b1e6ddf0486cfafc32ebd60d2427eb73e 100644 (file)
@@ -59,9 +59,8 @@ public:
 
        /** Write details of the asset to a CPL AssetList node.
         *  @param p Parent element.
-        *  @param i true to use the Interop standard, false for SMPTE.
         */
-       virtual void write_to_cpl (xmlpp::Element* p, bool i) const = 0;
+       virtual void write_to_cpl (xmlpp::Element* p) const = 0;
 
        /** Write details of the asset to a PKL AssetList node.
         *  @param p Parent node.
index 12fdf1020526702b134ff8bc2990c0a1d7e2e0bc..dcb730ff91cc2287a09378c5b9b6bfdb2e8d59ff 100644 (file)
@@ -228,7 +228,7 @@ CPL::write_xml (bool interop, XMLMetadata const & metadata, shared_ptr<const Sig
        xmlpp::Element* reel_list = root->add_child ("ReelList");
        
        for (list<shared_ptr<Reel> >::const_iterator i = _reels.begin(); i != _reels.end(); ++i) {
-               (*i)->write_to_cpl (reel_list, interop);
+               (*i)->write_to_cpl (reel_list);
        }
 
        if (signer) {
index 8986e1ffa0ebb75f1a3d06118a10f9bcb9fca489..c446408d2a502c4fe61ad2e826cd3dabf07523c0 100644 (file)
@@ -58,7 +58,7 @@ MonoPictureAsset::create (boost::function<boost::filesystem::path (int)> get_pat
        picture_desc.EditRate = ASDCP::Rational (_edit_rate, 1);
        
        ASDCP::WriterInfo writer_info;
-       fill_writer_info (&writer_info, _uuid, _interop, _metadata);
+       fill_writer_info (&writer_info, _uuid, _metadata);
        
        ASDCP::JP2K::MXFWriter mxf_writer;
        r = mxf_writer.OpenWrite (path().string().c_str(), writer_info, picture_desc, 16384, false);
index eef8ff63fc843f609ff7d876794b0a52f28f1df1..a2ee9f25c75e28e937bf233a4c34a4c8ec6a5020 100644 (file)
@@ -59,13 +59,13 @@ MXFAsset::~MXFAsset ()
 }
 
 void
-MXFAsset::fill_writer_info (ASDCP::WriterInfo* writer_info, string uuid, bool interop, MXFMetadata const & metadata)
+MXFAsset::fill_writer_info (ASDCP::WriterInfo* writer_info, string uuid, MXFMetadata const & metadata)
 {
        writer_info->ProductVersion = metadata.product_version;
        writer_info->CompanyName = metadata.company_name;
        writer_info->ProductName = metadata.product_name.c_str();
 
-       if (interop) {
+       if (_interop) {
                writer_info->LabelSetType = ASDCP::LS_MXF_INTEROP;
        } else {
                writer_info->LabelSetType = ASDCP::LS_MXF_SMPTE;
@@ -108,9 +108,9 @@ MXFAsset::equals (shared_ptr<const Asset> other, EqualityOptions opt, boost::fun
 }
 
 void
-MXFAsset::write_to_cpl (xmlpp::Element* node, bool interop) const
+MXFAsset::write_to_cpl (xmlpp::Element* node) const
 {
-       pair<string, string> const attr = cpl_node_attribute (interop);
+       pair<string, string> const attr = cpl_node_attribute ();
        xmlpp::Element* a = node->add_child (cpl_node_name ());
        if (!attr.first.empty ()) {
                a->set_attribute (attr.first, attr.second);
index 684454259e73aeef174f6937367c574fd7ce71b3..e406f400a1df6d9cf32ace2084307617a01ac9cf 100644 (file)
@@ -50,15 +50,14 @@ public:
        ~MXFAsset ();
 
        virtual bool equals (boost::shared_ptr<const Asset> other, EqualityOptions opt, boost::function<void (NoteType, std::string)> note) const;
-       virtual void write_to_cpl (xmlpp::Element *, bool interop) const;
+       virtual void write_to_cpl (xmlpp::Element *) const;
        virtual std::string key_type () const = 0;
        
        /** Fill in a ADSCP::WriteInfo struct.
         *  @param w struct to fill in.
         *  @param uuid uuid to use.
-        *  @param true to label as interop, false for SMPTE.
         */
-       void fill_writer_info (ASDCP::WriterInfo* w, std::string uuid, bool interop, MXFMetadata const & metadata);
+       void fill_writer_info (ASDCP::WriterInfo* w, std::string uuid, MXFMetadata const & metadata);
 
        void set_progress (boost::signals2::signal<void (float)>* progress) {
                _progress = progress;
@@ -107,7 +106,7 @@ public:
 
 protected:
        virtual std::string cpl_node_name () const = 0;
-       virtual std::pair<std::string, std::string> cpl_node_attribute (bool) const {
+       virtual std::pair<std::string, std::string> cpl_node_attribute () const {
                return std::make_pair ("", "");
        }
        
index 20ea2c9f4d32365cbe2c5fa73637b7e97ee64308..b2eecee565038732c097f0fd11de4d22392870d2 100644 (file)
@@ -59,9 +59,9 @@ PictureAsset::PictureAsset (boost::filesystem::path directory, boost::filesystem
 }
 
 void
-PictureAsset::write_to_cpl (xmlpp::Element* node, bool interop) const
+PictureAsset::write_to_cpl (xmlpp::Element* node) const
 {
-       MXFAsset::write_to_cpl (node, interop);
+       MXFAsset::write_to_cpl (node);
        
        xmlpp::Node::NodeList c = node->get_children ();
        xmlpp::Node::NodeList::iterator i = c.begin();
@@ -72,7 +72,7 @@ PictureAsset::write_to_cpl (xmlpp::Element* node, bool interop) const
        assert (i != c.end ());
 
        (*i)->add_child ("FrameRate")->add_child_text (lexical_cast<string> (_edit_rate * edit_rate_factor ()) + " 1");
-       if (interop) {
+       if (_interop) {
                stringstream s;
                s << std::fixed << std::setprecision (2) << (float (_size.width) / _size.height);
                (*i)->add_child ("ScreenAspectRatio")->add_child_text (s.str ());
index a11c286c04572e4cd0726d762a0b77305673af4a..b8dab05205e1f17542e934dbde8d25dfdebfbfc7 100644 (file)
@@ -76,7 +76,7 @@ public:
                _size = s;
        }
 
-       void write_to_cpl (xmlpp::Element *, bool) const;
+       void write_to_cpl (xmlpp::Element *) const;
 
 protected:     
 
index 99f55be06934f983cf5d778ac8be226317c4836d..bb418fe00891b591a14874b993fbe6430aff649e 100644 (file)
@@ -42,7 +42,7 @@ void libdcp::start (PictureAssetWriter* writer, shared_ptr<P> state, Q* asset, u
        state->j2k_parser.FillPictureDescriptor (state->picture_descriptor);
        state->picture_descriptor.EditRate = ASDCP::Rational (asset->edit_rate(), 1);
        
-       asset->fill_writer_info (&state->writer_info, asset->uuid(), writer->_asset->interop(), writer->_asset->metadata());
+       asset->fill_writer_info (&state->writer_info, asset->uuid(), writer->_asset->metadata());
        
        Kumu::Result_t r = state->mxf_writer.OpenWrite (
                asset->path().string().c_str(),
index b729695c33c58c54c048c78a14ca8632d581a090..ff51c025b78dd664ebd9a47e827e77b042bf42c0 100644 (file)
@@ -35,7 +35,7 @@ using boost::dynamic_pointer_cast;
 using namespace libdcp;
 
 void
-Reel::write_to_cpl (xmlpp::Element* node, bool interop) const
+Reel::write_to_cpl (xmlpp::Element* node) const
 {
        xmlpp::Element* reel = node->add_child ("Reel");
        reel->add_child("Id")->add_child_text ("urn:uuid:" + make_uuid());
@@ -43,20 +43,20 @@ Reel::write_to_cpl (xmlpp::Element* node, bool interop) const
        
        if (_main_picture && dynamic_pointer_cast<MonoPictureAsset> (_main_picture)) {
                /* Mono pictures come before other stuff... */
-               _main_picture->write_to_cpl (asset_list, interop);
+               _main_picture->write_to_cpl (asset_list);
        }
 
        if (_main_sound) {
-               _main_sound->write_to_cpl (asset_list, interop);
+               _main_sound->write_to_cpl (asset_list);
        }
 
        if (_main_subtitle) {
-               _main_subtitle->write_to_cpl (asset_list, interop);
+               _main_subtitle->write_to_cpl (asset_list);
        }
 
        if (_main_picture && dynamic_pointer_cast<StereoPictureAsset> (_main_picture)) {
                /* ... but stereo pictures must come after */
-               _main_picture->write_to_cpl (asset_list, interop);
+               _main_picture->write_to_cpl (asset_list);
        }
 }
        
index 54be9a5da80f47766b0d87c90ae8652dd16baa0e..35302f17d96cdd0baf52a69314953b1adce07a73 100644 (file)
@@ -64,7 +64,7 @@ public:
                return _main_subtitle;
        }
 
-       void write_to_cpl (xmlpp::Element *, bool) const;
+       void write_to_cpl (xmlpp::Element *) const;
 
        bool encrypted () const;
 
index 7033f6af96d536d7a0310457637e758a4117c136..0cc7cdbae4e9ecfda4b15ffb09ab02ffc139cd91 100644 (file)
@@ -150,7 +150,7 @@ SoundAsset::create (boost::function<boost::filesystem::path (Channel)> get_path)
        frame_buffer.Size (ASDCP::PCM::CalcFrameBufferSize (audio_desc));
 
        ASDCP::WriterInfo writer_info;
-       MXFAsset::fill_writer_info (&writer_info, _uuid, _interop, _metadata);
+       MXFAsset::fill_writer_info (&writer_info, _uuid, _metadata);
 
        ASDCP::PCM::MXFWriter mxf_writer;
        r = mxf_writer.OpenWrite (path().string().c_str(), writer_info, audio_desc);
@@ -332,7 +332,7 @@ SoundAssetWriter::SoundAssetWriter (SoundAsset* a)
        _state->frame_buffer.Size (ASDCP::PCM::CalcFrameBufferSize (_state->audio_desc));
        memset (_state->frame_buffer.Data(), 0, _state->frame_buffer.Capacity());
        
-       _asset->fill_writer_info (&_state->writer_info, _asset->uuid (), _asset->interop(), _asset->metadata());
+       _asset->fill_writer_info (&_state->writer_info, _asset->uuid (), _asset->metadata());
        
        Kumu::Result_t r = _state->mxf_writer.OpenWrite (_asset->path().string().c_str(), _state->writer_info, _state->audio_desc);
        if (ASDCP_FAILURE (r)) {
index 1f2230f754fea395d1cbc9e2fc20930a6c16fe61..47a41cc248da2e2673cd9b4ae27d114f6d3c9a9a 100644 (file)
@@ -132,9 +132,9 @@ StereoPictureAsset::cpl_node_name () const
 }
 
 pair<string, string>
-StereoPictureAsset::cpl_node_attribute (bool interop) const
+StereoPictureAsset::cpl_node_attribute () const
 {
-       if (interop) {
+       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");
index 6a96bf029b0cabf347ac1912266d52bf5d9a020b..64cdb6b331fd16e31d1bbda7b6d7f3cea7f1cc21 100644 (file)
@@ -40,7 +40,7 @@ public:
 
 private:
        std::string cpl_node_name () const;
-       std::pair<std::string, std::string> cpl_node_attribute (bool) const;
+       std::pair<std::string, std::string> cpl_node_attribute () const;
        int edit_rate_factor () const;
 };
 
index 97c489788f77a79c99fac3fa5ee731a3048ef268..a48a614d12dd529da3eb62fce7c572ab52bc5f10 100644 (file)
@@ -279,7 +279,7 @@ SubtitleAsset::add (shared_ptr<Subtitle> s)
 }
 
 void
-SubtitleAsset::write_to_cpl (xmlpp::Element* node, bool) const
+SubtitleAsset::write_to_cpl (xmlpp::Element* node) const
 {
        /* XXX: should EditRate, Duration and IntrinsicDuration be in here? */
 
index 7a00e0369eba87549de42fc4a75b3cebd2b5f939..74ab98733961e166b360b043f9f52ba35c05b31d 100644 (file)
@@ -139,7 +139,7 @@ public:
        SubtitleAsset (std::string directory, std::string xml_file);
        SubtitleAsset (std::string directory, std::string movie_title, std::string language);
 
-       void write_to_cpl (xmlpp::Element *, bool) const;
+       void write_to_cpl (xmlpp::Element *) const;
        virtual bool equals (boost::shared_ptr<const Asset>, EqualityOptions, boost::function<void (NoteType, std::string)> note) const {
                /* XXX */
                note (ERROR, "subtitle assets not compared yet");
index 2beb1b65e989c4c8087ced9d459d30e68d4a58fa..c91ce287d918f8e2a2a7051b1b80ba35ee4d67cb 100644 (file)
@@ -30,12 +30,13 @@ using boost::shared_ptr;
 BOOST_AUTO_TEST_CASE (cpl_sar)
 {
        shared_ptr<libdcp::MonoPictureAsset> mp (new libdcp::MonoPictureAsset ("build/test/foo", "video.mxf"));
+       mp->set_interop (true);
 
        {
                mp->set_size (libdcp::Size (1998, 1080));
                xmlpp::Document doc;
                xmlpp::Element* el = doc.create_root_node ("Test");
-               mp->write_to_cpl (el, true);
+               mp->write_to_cpl (el);
                
                cxml::Node node (el);
                BOOST_CHECK_EQUAL (node.node_child("MainPicture")->string_child ("ScreenAspectRatio"), "1.85");
@@ -45,7 +46,7 @@ BOOST_AUTO_TEST_CASE (cpl_sar)
                mp->set_size (libdcp::Size (2048, 858));
                xmlpp::Document doc;
                xmlpp::Element* el = doc.create_root_node ("Test");
-               mp->write_to_cpl (el, true);
+               mp->write_to_cpl (el);
                
                cxml::Node node (el);
                BOOST_CHECK_EQUAL (node.node_child("MainPicture")->string_child ("ScreenAspectRatio"), "2.39");