using std::runtime_error;
using std::cout;
using std::pair;
-using boost::shared_ptr;
+using std::shared_ptr;
using boost::bind;
-using boost::weak_ptr;
+using std::weak_ptr;
using boost::optional;
using namespace dcpomatic;
+#if BOOST_VERSION >= 106100
+using namespace boost::placeholders;
+#endif
int FFmpegFileEncoder::_video_stream_index = 0;
int FFmpegFileEncoder::_audio_stream_index_base = 1;
}
_stream->id = stream_index;
+ _stream->disposition |= AV_DISPOSITION_DEFAULT;
DCPOMATIC_DISABLE_WARNINGS
_stream->codec = _codec_context;
DCPOMATIC_ENABLE_WARNINGS
bool audio_stream_per_channel,
int x264_crf,
boost::filesystem::path output
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- , optional<dcp::Key> key
- , optional<string> id
-#endif
)
: _audio_stream_per_channel (audio_stream_per_channel)
, _video_options (0)
_pixel_format = pixel_format (format);
switch (format) {
- case EXPORT_FORMAT_PRORES:
+ case ExportFormat::PRORES:
_sample_format = AV_SAMPLE_FMT_S16;
_video_codec_name = "prores_ks";
_audio_codec_name = "pcm_s16le";
av_dict_set (&_video_options, "profile", "3", 0);
av_dict_set (&_video_options, "threads", "auto", 0);
break;
- case EXPORT_FORMAT_H264_AAC:
+ case ExportFormat::H264_AAC:
_sample_format = AV_SAMPLE_FMT_FLTP;
_video_codec_name = "libx264";
_audio_codec_name = "aac";
av_dict_set_int (&_video_options, "crf", x264_crf, 0);
break;
- case EXPORT_FORMAT_H264_PCM:
+ case ExportFormat::H264_PCM:
_sample_format = AV_SAMPLE_FMT_S32;
_video_codec_name = "libx264";
_audio_codec_name = "pcm_s24le";
DCPOMATIC_ASSERT (false);
}
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- int r = avformat_alloc_output_context2 (&_format_context, av_guess_format("mov", 0, 0), 0, 0);
-#else
int r = avformat_alloc_output_context2 (&_format_context, 0, 0, _output.string().c_str());
-#endif
if (!_format_context) {
throw runtime_error (String::compose("could not allocate FFmpeg format context (%1)", r));
}
AVDictionary* options = 0;
-#ifdef DCPOMATIC_VARIANT_SWAROOP
- if (key) {
- av_dict_set (&options, "encryption_key", key->hex().c_str(), 0);
- /* XXX: is this OK? */
- av_dict_set (&options, "encryption_kid", "00000000000000000000000000000000", 0);
- av_dict_set (&options, "encryption_scheme", "cenc-aes-ctr", 0);
- }
-
- if (id) {
- if (av_dict_set(&_format_context->metadata, SWAROOP_ID_TAG, id->c_str(), 0) < 0) {
- throw runtime_error ("Could not write ID to output");
- }
- }
-#endif
-
if (avformat_write_header (_format_context, &options) < 0) {
throw runtime_error ("could not write header to FFmpeg output file");
}
FFmpegFileEncoder::pixel_format (ExportFormat format)
{
switch (format) {
- case EXPORT_FORMAT_PRORES:
+ case ExportFormat::PRORES:
return AV_PIX_FMT_YUV422P10;
- case EXPORT_FORMAT_H264_AAC:
- case EXPORT_FORMAT_H264_PCM:
+ case ExportFormat::H264_AAC:
+ case ExportFormat::H264_PCM:
return AV_PIX_FMT_YUV420P;
default:
DCPOMATIC_ASSERT (false);
av_packet_unref (&packet);
flushed_audio = true;
- BOOST_FOREACH (shared_ptr<ExportAudioStream> i, _audio_streams) {
+ for (auto i: _audio_streams) {
if (!i->flush()) {
flushed_audio = false;
}
void
FFmpegFileEncoder::video (shared_ptr<PlayerVideo> video, DCPTime time)
{
- shared_ptr<Image> image = video->image (
+ /* All our output formats are video range at the moment */
+ auto image = video->image (
bind (&PlayerVideo::force, _1, _pixel_format),
+ VideoRange::VIDEO,
true,
false
);
- AVFrame* frame = av_frame_alloc ();
+ auto frame = av_frame_alloc ();
DCPOMATIC_ASSERT (frame);
{
{
if (_audio_stream_per_channel) {
int offset = 0;
- BOOST_FOREACH (shared_ptr<ExportAudioStream> i, _audio_streams) {
+ for (auto i: _audio_streams) {
i->write (size, offset, 1, _pending_audio->data(), _audio_frames);
++offset;
}