Use film-name-derived names for MXFs in DCPs.
authorCarl Hetherington <cth@carlh.net>
Sat, 13 Apr 2013 20:24:18 +0000 (21:24 +0100)
committerCarl Hetherington <cth@carlh.net>
Sat, 13 Apr 2013 20:24:18 +0000 (21:24 +0100)
src/lib/film.cc
src/lib/film.h
src/lib/writer.cc
test/test.cc

index bd11c1eb577376b8fbf50c04c7ce47d448919da9..077c9e17fe8c95710db7793590ced60aeb1fcc71 100644 (file)
@@ -232,18 +232,46 @@ Film::info_dir () const
 }
 
 string
-Film::video_mxf_dir () const
+Film::internal_video_mxf_dir () const
 {
        boost::filesystem::path p;
        return dir ("video");
 }
 
 string
-Film::video_mxf_filename () const
+Film::internal_video_mxf_filename () const
 {
        return video_state_identifier() + ".mxf";
 }
 
+string
+Film::dcp_video_mxf_filename () const
+{
+       return filename_safe_name() + "_video.mxf";
+}
+
+string
+Film::dcp_audio_mxf_filename () const
+{
+       return filename_safe_name() + "_audio.mxf";
+}
+
+string
+Film::filename_safe_name () const
+{
+       string const n = name ();
+       string o;
+       for (size_t i = 0; i < n.length(); ++i) {
+               if (isalnum (n[i])) {
+                       o += n[i];
+               } else {
+                       o += "_";
+               }
+       }
+
+       return o;
+}
+
 string
 Film::audio_analysis_path () const
 {
index adc4b0eec65137c22a2c2b6318dd65b6bdb8b090..a5a8ac5fad295c37c4a12d7e946c1012c2beff87 100644 (file)
@@ -64,10 +64,13 @@ public:
        std::string info_dir () const;
        std::string j2c_path (int f, bool t) const;
        std::string info_path (int f) const;
-       std::string video_mxf_dir () const;
-       std::string video_mxf_filename () const;
+       std::string internal_video_mxf_dir () const;
+       std::string internal_video_mxf_filename () const;
        std::string audio_analysis_path () const;
 
+       std::string dcp_video_mxf_filename () const;
+       std::string dcp_audio_mxf_filename () const;
+
        void examine_content ();
        void analyse_audio ();
        void send_dcp_to_tms ();
@@ -387,6 +390,7 @@ private:
        void examine_content_finished ();
        void analyse_audio_finished ();
        std::string video_state_identifier () const;
+       std::string filename_safe_name () const;
 
        /** Complete path to directory containing the film metadata;
         *  must not be relative.
index 2d7ee9ba317f32d1246142064b09890bb25cadb5..c6ce4711d6890fd2e2b92d8585d003ab23da5cdb 100644 (file)
@@ -65,8 +65,8 @@ Writer::Writer (shared_ptr<Film> f)
        
        _picture_asset.reset (
                new libdcp::MonoPictureAsset (
-                       _film->video_mxf_dir (),
-                       _film->video_mxf_filename (),
+                       _film->internal_video_mxf_dir (),
+                       _film->internal_video_mxf_filename (),
                        _film->dcp_frame_rate (),
                        _film->format()->dcp_size ()
                        )
@@ -80,7 +80,7 @@ Writer::Writer (shared_ptr<Film> f)
                _sound_asset.reset (
                        new libdcp::SoundAsset (
                                _film->dir (_film->dcp_name()),
-                               N_("audio.mxf"),
+                               _film->dcp_audio_mxf_filename (),
                                _film->dcp_frame_rate (),
                                m.dcp_channels (),
                                dcp_audio_sample_rate (_film->audio_stream()->sample_rate())
@@ -267,12 +267,12 @@ Writer::finish ()
        /* Hard-link the video MXF into the DCP */
 
        boost::filesystem::path from;
-       from /= _film->video_mxf_dir();
-       from /= _film->video_mxf_filename();
+       from /= _film->internal_video_mxf_dir();
+       from /= _film->internal_video_mxf_filename();
        
        boost::filesystem::path to;
        to /= _film->dir (_film->dcp_name());
-       to /= N_("video.mxf");
+       to /= _film->dcp_video_mxf_filename ();
 
        boost::system::error_code ec;
        boost::filesystem::create_hard_link (from, to, ec);
@@ -285,7 +285,7 @@ Writer::finish ()
        /* And update the asset */
 
        _picture_asset->set_directory (_film->dir (_film->dcp_name ()));
-       _picture_asset->set_file_name (N_("video.mxf"));
+       _picture_asset->set_file_name (_film->dcp_video_mxf_filename ());
 
        if (_sound_asset) {
                _sound_asset->set_entry_point (_film->trim_start ());
@@ -339,8 +339,8 @@ Writer::check_existing_picture_mxf ()
 {
        /* Try to open the existing MXF */
        boost::filesystem::path p;
-       p /= _film->video_mxf_dir ();
-       p /= _film->video_mxf_filename ();
+       p /= _film->internal_video_mxf_dir ();
+       p /= _film->internal_video_mxf_filename ();
        FILE* mxf = fopen (p.string().c_str(), N_("rb"));
        if (!mxf) {
                return;
index d1bb400f98f2d557946b0032656264046c632972..6fad0986b4c8728c0d2f7fcdbf6e3a9de7ecbc75 100644 (file)
@@ -504,7 +504,7 @@ BOOST_AUTO_TEST_CASE (have_dcp_test)
        BOOST_CHECK (f.have_dcp());
 
        p /= f.dcp_name();
-       p /= "video.mxf";
+       p /= f.dcp_video_mxf_filename();
        boost::filesystem::remove (p);
        BOOST_CHECK (!f.have_dcp ());
 }