summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Hetherington <cth@carlh.net>2013-04-13 21:24:18 +0100
committerCarl Hetherington <cth@carlh.net>2013-04-13 21:24:18 +0100
commit784c560e3437136d6006f8df2fb35f41585b6a8d (patch)
treef9f806bd0ff58d4a3a94c7cba18926f5688c0c56
parent01bb4ca21bea60137dce7201d9a37a0cf5691812 (diff)
Use film-name-derived names for MXFs in DCPs.
-rw-r--r--src/lib/film.cc32
-rw-r--r--src/lib/film.h8
-rw-r--r--src/lib/writer.cc18
-rw-r--r--test/test.cc2
4 files changed, 46 insertions, 14 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc
index bd11c1eb5..077c9e17f 100644
--- a/src/lib/film.cc
+++ b/src/lib/film.cc
@@ -232,19 +232,47 @@ 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
{
boost::filesystem::path p;
diff --git a/src/lib/film.h b/src/lib/film.h
index adc4b0eec..a5a8ac5fa 100644
--- a/src/lib/film.h
+++ b/src/lib/film.h
@@ -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.
diff --git a/src/lib/writer.cc b/src/lib/writer.cc
index 2d7ee9ba3..c6ce4711d 100644
--- a/src/lib/writer.cc
+++ b/src/lib/writer.cc
@@ -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;
diff --git a/test/test.cc b/test/test.cc
index d1bb400f9..6fad0986b 100644
--- a/test/test.cc
+++ b/test/test.cc
@@ -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 ());
}