diff options
Diffstat (limited to 'src/lib/film.cc')
| -rw-r--r-- | src/lib/film.cc | 111 |
1 files changed, 80 insertions, 31 deletions
diff --git a/src/lib/film.cc b/src/lib/film.cc index 83c60a5f5..4bf6606a9 100644 --- a/src/lib/film.cc +++ b/src/lib/film.cc @@ -290,33 +290,6 @@ Film::make_dcp (bool transcode) throw MissingSettingError ("name"); } - shared_ptr<EncodeOptions> oe (new EncodeOptions (j2k_dir(), ".j2c", dir ("wavs"))); - oe->out_size = format()->dcp_size (); - oe->padding = format()->dcp_padding (shared_from_this ()); - if (dcp_length ()) { - oe->video_range = make_pair (dcp_trim_start(), dcp_trim_start() + dcp_length().get()); - if (audio_stream()) { - DCPFrameRate dfr (frames_per_second ()); - oe->audio_range = make_pair ( - - video_frames_to_audio_frames ( - oe->video_range.get().first, - dcp_audio_sample_rate (audio_stream()->sample_rate()), - dfr.frames_per_second - ), - - video_frames_to_audio_frames ( - oe->video_range.get().second, - dcp_audio_sample_rate (audio_stream()->sample_rate()), - dfr.frames_per_second - ) - ); - } - - } - - oe->video_skip = DCPFrameRate (frames_per_second()).skip; - shared_ptr<DecodeOptions> od (new DecodeOptions); od->decode_subtitles = with_subtitles (); @@ -324,14 +297,14 @@ Film::make_dcp (bool transcode) if (transcode) { if (dcp_ab()) { - r = JobManager::instance()->add (shared_ptr<Job> (new ABTranscodeJob (shared_from_this(), od, oe, shared_ptr<Job> ()))); + r = JobManager::instance()->add (shared_ptr<Job> (new ABTranscodeJob (shared_from_this(), od, shared_ptr<Job> ()))); } else { - r = JobManager::instance()->add (shared_ptr<Job> (new TranscodeJob (shared_from_this(), od, oe, shared_ptr<Job> ()))); + r = JobManager::instance()->add (shared_ptr<Job> (new TranscodeJob (shared_from_this(), od, shared_ptr<Job> ()))); } } - r = JobManager::instance()->add (shared_ptr<Job> (new CheckHashesJob (shared_from_this(), od, oe, r))); - JobManager::instance()->add (shared_ptr<Job> (new MakeDCPJob (shared_from_this(), oe, r))); + r = JobManager::instance()->add (shared_ptr<Job> (new CheckHashesJob (shared_from_this(), od, r))); + JobManager::instance()->add (shared_ptr<Job> (new MakeDCPJob (shared_from_this(), r))); } /** Start a job to examine our content file */ @@ -1437,3 +1410,79 @@ Film::audio_stream () const return _external_audio_stream; } + +/** @param f Source frame index. + * @param t true to return a temporary file path, otherwise a permanent one. + * @return The path to write this video frame to. + */ +string +Film::frame_out_path (SourceFrame f, bool t) const +{ + stringstream s; + s << j2k_dir() << "/"; + s.width (8); + s << std::setfill('0') << f << ".j2c"; + + if (t) { + s << ".tmp"; + } + + return s.str (); +} + +string +Film::hash_out_path (SourceFrame f, bool t) const +{ + return frame_out_path (f, t) + ".md5"; +} + +/** @param c Audio channel index. + * @param t true to return a temporary file path, otherwise a permanent one. + * @return The path to write this audio file to. + */ +string +Film::multichannel_audio_out_path (int c, bool t) const +{ + stringstream s; + s << dir ("wavs") << "/" << (c + 1) << ".wav"; + if (t) { + s << ".tmp"; + } + + return s.str (); +} + +boost::optional<pair<SourceFrame, SourceFrame> > +Film::video_range () const +{ + if (!dcp_length()) { + return boost::optional<pair<SourceFrame, SourceFrame> > (); + } + + return make_pair (dcp_trim_start(), dcp_trim_start() + dcp_length().get()); +} + +boost::optional<pair<int64_t, int64_t> > +Film::audio_range () const +{ + boost::optional<pair<SourceFrame, SourceFrame> > vr = video_range (); + if (!vr || !audio_stream()) { + return boost::optional<pair<int64_t, int64_t> > (); + } + + DCPFrameRate dfr (frames_per_second ()); + return make_pair ( + + video_frames_to_audio_frames ( + vr.get().first, + dcp_audio_sample_rate (audio_stream()->sample_rate()), + dfr.frames_per_second + ), + + video_frames_to_audio_frames ( + vr.get().second, + dcp_audio_sample_rate (audio_stream()->sample_rate()), + dfr.frames_per_second + ) + ); +} |
