diff options
Diffstat (limited to 'src/lib/ffmpeg_file_encoder.cc')
| -rw-r--r-- | src/lib/ffmpeg_file_encoder.cc | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/lib/ffmpeg_file_encoder.cc b/src/lib/ffmpeg_file_encoder.cc index 6d1ad68f7..147e83a65 100644 --- a/src/lib/ffmpeg_file_encoder.cc +++ b/src/lib/ffmpeg_file_encoder.cc @@ -21,7 +21,7 @@ #include "compose.hpp" #include "cross.h" -#include "ffmpeg_encoder.h" +#include "ffmpeg_file_encoder.h" #include "ffmpeg_wrapper.h" #include "film.h" #include "image.h" @@ -73,8 +73,7 @@ public: _codec_context->bit_rate = channels * 128 * 1024; _codec_context->sample_fmt = sample_format; _codec_context->sample_rate = frame_rate; - _codec_context->channel_layout = av_get_default_channel_layout (channels); - _codec_context->channels = channels; + av_channel_layout_default(&_codec_context->ch_layout, channels); int r = avcodec_open2 (_codec_context, _codec, 0); if (r < 0) { @@ -96,7 +95,7 @@ public: ~ExportAudioStream () { - avcodec_close (_codec_context); + avcodec_free_context(&_codec_context); } ExportAudioStream (ExportAudioStream const&) = delete; @@ -143,7 +142,7 @@ public: frame->nb_samples = size; frame->format = _codec_context->sample_fmt; - frame->channels = channels; + frame->ch_layout.nb_channels = channels; int r = avcodec_fill_audio_frame (frame, channels, _codec_context->sample_fmt, (const uint8_t *) samples, buffer_size, 0); DCPOMATIC_ASSERT (r >= 0); @@ -242,6 +241,13 @@ FFmpegFileEncoder::FFmpegFileEncoder ( av_dict_set (&_video_options, "profile", "3", 0); av_dict_set (&_video_options, "threads", "auto", 0); break; + case ExportFormat::PRORES_LT: + _sample_format = AV_SAMPLE_FMT_S32; + _video_codec_name = "prores_ks"; + _audio_codec_name = "pcm_s24le"; + av_dict_set(&_video_options, "profile", "1", 0); + av_dict_set(&_video_options, "threads", "auto", 0); + break; case ExportFormat::H264_AAC: _sample_format = AV_SAMPLE_FMT_FLTP; _video_codec_name = "libx264"; @@ -279,7 +285,7 @@ FFmpegFileEncoder::FFmpegFileEncoder ( FFmpegFileEncoder::~FFmpegFileEncoder () { _audio_streams.clear (); - avcodec_close (_video_codec_context); + avcodec_free_context(&_video_codec_context); avio_close (_format_context->pb); _format_context->pb = nullptr; avformat_free_context (_format_context); @@ -293,6 +299,7 @@ FFmpegFileEncoder::pixel_format (ExportFormat format) case ExportFormat::PRORES_4444: return AV_PIX_FMT_YUV444P10; case ExportFormat::PRORES_HQ: + case ExportFormat::PRORES_LT: return AV_PIX_FMT_YUV422P10; case ExportFormat::H264_AAC: return AV_PIX_FMT_YUV420P; |
