X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=src%2Flib%2Fffmpeg_encoder.cc;h=6c006167028bb63fdf999c71bb48b24fdbf4c37a;hb=ee0f2219f3799881bc9f5060edd2ceeecff4217d;hp=8bb9b5e45b7556fab9fdd5fc67cf7db85d51c5a2;hpb=597dda0151eaa8a0a7635be7a757a5f65405c40b;p=dcpomatic.git diff --git a/src/lib/ffmpeg_encoder.cc b/src/lib/ffmpeg_encoder.cc index 8bb9b5e45..6c0061670 100644 --- a/src/lib/ffmpeg_encoder.cc +++ b/src/lib/ffmpeg_encoder.cc @@ -41,7 +41,10 @@ using std::map; using boost::shared_ptr; using boost::bind; using boost::weak_ptr; +using boost::optional; +using namespace dcpomatic; +/** @param key Key to use to encrypt MP4 outputs */ FFmpegEncoder::FFmpegEncoder ( shared_ptr film, weak_ptr job, @@ -50,6 +53,10 @@ FFmpegEncoder::FFmpegEncoder ( bool mixdown_to_stereo, bool split_reels, int x264_crf +#ifdef DCPOMATIC_VARIANT_SWAROOP + , optional key + , optional id +#endif ) : Encoder (film, job) , _history (1000) @@ -73,12 +80,15 @@ FFmpegEncoder::FFmpegEncoder ( _film->video_frame_rate(), _film->audio_frame_rate(), mixdown_to_stereo ? 2 : film->audio_channels(), - _film->log(), format, x264_crf, _film->three_d(), filename, extension +#ifdef DCPOMATIC_VARIANT_SWAROOP + , key + , id +#endif ) ); } @@ -108,7 +118,7 @@ FFmpegEncoder::FFmpegEncoder ( } } - _butler.reset (new Butler (_player, film->log(), map, _output_audio_channels, bind(&PlayerVideo::force, _1, FFmpegFileEncoder::pixel_format(format)), true, false)); + _butler.reset (new Butler(_player, map, _output_audio_channels, bind(&PlayerVideo::force, _1, FFmpegFileEncoder::pixel_format(format)), true, false)); } void @@ -120,6 +130,8 @@ FFmpegEncoder::go () job->sub (_("Encoding")); } + Waker waker; + list reel_periods = _film->reels (); list::const_iterator reel = reel_periods.begin (); list::iterator encoder = _file_encoders.begin (); @@ -140,7 +152,7 @@ FFmpegEncoder::go () } for (int j = 0; j < gets_per_frame; ++j) { - pair, DCPTime> v = _butler->get_video (); + pair, DCPTime> v = _butler->get_video (true, 0); encoder->get(v.first->eyes())->video(v.first, v.second); } @@ -156,6 +168,8 @@ FFmpegEncoder::go () job->set_progress (float(i.get()) / _film->length().get()); } + waker.nudge (); + _butler->get_audio (interleaved, audio_frames); /* XXX: inefficient; butler interleaves and we deinterleave again */ float* p = interleaved; @@ -173,7 +187,7 @@ FFmpegEncoder::go () } } -float +optional FFmpegEncoder::current_rate () const { return _history.rate (); @@ -191,26 +205,41 @@ FFmpegEncoder::FileEncoderSet::FileEncoderSet ( int video_frame_rate, int audio_frame_rate, int channels, - shared_ptr log, ExportFormat format, int x264_crf, bool three_d, boost::filesystem::path output, string extension +#ifdef DCPOMATIC_VARIANT_SWAROOP + , optional key + , optional id +#endif ) { if (three_d) { /// TRANSLATORS: L here is an abbreviation for "left", to indicate the left-eye part of a 3D export _encoders[EYES_LEFT] = shared_ptr( - new FFmpegFileEncoder(video_frame_size, video_frame_rate, audio_frame_rate, channels, log, format, x264_crf, String::compose("%1_%2%3", output.string(), _("L"), extension)) + new FFmpegFileEncoder(video_frame_size, video_frame_rate, audio_frame_rate, channels, format, x264_crf, String::compose("%1_%2%3", output.string(), _("L"), extension) +#ifdef DCPOMATIC_VARIANT_SWAROOP + , key, id +#endif + ) ); - /// TRANSLATORS: R here is an abbreviation for "left", to indicate the left-eye part of a 3D export + /// TRANSLATORS: R here is an abbreviation for "right", to indicate the right-eye part of a 3D export _encoders[EYES_RIGHT] = shared_ptr( - new FFmpegFileEncoder(video_frame_size, video_frame_rate, audio_frame_rate, channels, log, format, x264_crf, String::compose("%1_%2%3", output.string(), _("R"), extension)) + new FFmpegFileEncoder(video_frame_size, video_frame_rate, audio_frame_rate, channels, format, x264_crf, String::compose("%1_%2%3", output.string(), _("R"), extension) +#ifdef DCPOMATIC_VARIANT_SWAROOP + , key, id +#endif + ) ); } else { _encoders[EYES_BOTH] = shared_ptr( - new FFmpegFileEncoder(video_frame_size, video_frame_rate, audio_frame_rate, channels, log, format, x264_crf, String::compose("%1%2", output.string(), extension)) + new FFmpegFileEncoder(video_frame_size, video_frame_rate, audio_frame_rate, channels, format, x264_crf, String::compose("%1%2", output.string(), extension) +#ifdef DCPOMATIC_VARIANT_SWAROOP + , key, id +#endif + ) ); } }