ISDCF name fixes with > 6 channels and HI/VI (#1633).
[dcpomatic.git] / src / lib / ffmpeg_encoder.cc
index 8bb9b5e45b7556fab9fdd5fc67cf7db85d51c5a2..49908587bca88cdd17c257d967423409a972229d 100644 (file)
@@ -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<const Film> film,
        weak_ptr<Job> job,
@@ -50,6 +53,10 @@ FFmpegEncoder::FFmpegEncoder (
        bool mixdown_to_stereo,
        bool split_reels,
        int x264_crf
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       , optional<dcp::Key> key
+       , optional<string> 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
@@ -140,7 +150,7 @@ FFmpegEncoder::go ()
                }
 
                for (int j = 0; j < gets_per_frame; ++j) {
-                       pair<shared_ptr<PlayerVideo>, DCPTime> v = _butler->get_video ();
+                       pair<shared_ptr<PlayerVideo>, DCPTime> v = _butler->get_video (true, 0);
                        encoder->get(v.first->eyes())->video(v.first, v.second);
                }
 
@@ -173,7 +183,7 @@ FFmpegEncoder::go ()
        }
 }
 
-float
+optional<float>
 FFmpegEncoder::current_rate () const
 {
        return _history.rate ();
@@ -191,26 +201,41 @@ FFmpegEncoder::FileEncoderSet::FileEncoderSet (
        int video_frame_rate,
        int audio_frame_rate,
        int channels,
-       shared_ptr<Log> log,
        ExportFormat format,
        int x264_crf,
        bool three_d,
        boost::filesystem::path output,
        string extension
+#ifdef DCPOMATIC_VARIANT_SWAROOP
+       , optional<dcp::Key> key
+       , optional<string> 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<FFmpegFileEncoder>(
-                       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<FFmpegFileEncoder>(
-                       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<FFmpegFileEncoder>(
-                       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
+                               )
                        );
        }
 }