Bump ffmpeg to 5.1.2 "Riemann"
[dcpomatic.git] / src / lib / ffmpeg_file_encoder.cc
index 9189c3e8347d8403d077a27448d0178c4543a7be..1294b9b3cbd1200c66ee6bc97b18b2f936edcdd7 100644 (file)
@@ -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) {
@@ -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);
 
@@ -228,7 +227,14 @@ FFmpegFileEncoder::FFmpegFileEncoder (
        _pixel_format = pixel_format (format);
 
        switch (format) {
-       case ExportFormat::PRORES:
+       case ExportFormat::PRORES_4444:
+               _sample_format = AV_SAMPLE_FMT_S16;
+               _video_codec_name = "prores_ks";
+               _audio_codec_name = "pcm_s16le";
+               av_dict_set(&_video_options, "profile", "4", 0);
+               av_dict_set(&_video_options, "threads", "auto", 0);
+               break;
+       case ExportFormat::PRORES_HQ:
                _sample_format = AV_SAMPLE_FMT_S16;
                _video_codec_name = "prores_ks";
                _audio_codec_name = "pcm_s16le";
@@ -241,12 +247,6 @@ FFmpegFileEncoder::FFmpegFileEncoder (
                _audio_codec_name = "aac";
                av_dict_set_int (&_video_options, "crf", x264_crf, 0);
                break;
-       case ExportFormat::H264_PCM:
-               _sample_format = AV_SAMPLE_FMT_S32;
-               _video_codec_name = "libx264";
-               _audio_codec_name = "pcm_s24le";
-               av_dict_set_int (&_video_options, "crf", x264_crf, 0);
-               break;
        default:
                DCPOMATIC_ASSERT (false);
        }
@@ -279,6 +279,7 @@ FFmpegFileEncoder::~FFmpegFileEncoder ()
 {
        _audio_streams.clear ();
        avcodec_close (_video_codec_context);
+       avio_close (_format_context->pb);
        avformat_free_context (_format_context);
 }
 
@@ -287,10 +288,11 @@ AVPixelFormat
 FFmpegFileEncoder::pixel_format (ExportFormat format)
 {
        switch (format) {
-       case ExportFormat::PRORES:
+       case ExportFormat::PRORES_4444:
+               return AV_PIX_FMT_YUV444P10;
+       case ExportFormat::PRORES_HQ:
                return AV_PIX_FMT_YUV422P10;
        case ExportFormat::H264_AAC:
-       case ExportFormat::H264_PCM:
                return AV_PIX_FMT_YUV420P;
        default:
                DCPOMATIC_ASSERT (false);