Bump ffmpeg to 5.1.2 "Riemann"
authorCarl Hetherington <cth@carlh.net>
Fri, 30 Sep 2022 20:46:33 +0000 (22:46 +0200)
committerCarl Hetherington <cth@carlh.net>
Mon, 3 Oct 2022 15:53:00 +0000 (17:53 +0200)
cscript
src/lib/audio_filter_graph.cc
src/lib/audio_filter_graph.h
src/lib/ffmpeg_decoder.cc
src/lib/ffmpeg_examiner.cc
src/lib/ffmpeg_file_encoder.cc
wscript

diff --git a/cscript b/cscript
index 591ffd54d764809068cb4f6fd99b519be19befa6..73c6b41ef8eae165388969704ae8a09fe3af755e 100644 (file)
--- a/cscript
+++ b/cscript
@@ -441,7 +441,7 @@ def dependencies(target, options):
         ffmpeg_options = {}
 
     if target.platform != 'linux' or target.distro != 'arch':
-        deps = [('ffmpeg-cdist', '4721b55de017702b0d1c8ce1163331378905c637', ffmpeg_options)]
+        deps = [('ffmpeg', 'b5190a92da64ee196a8afa3ededbfc94d0000c68', ffmpeg_options)]
     else:
         # Use distro-provided FFmpeg on Arch
         deps = []
@@ -457,7 +457,7 @@ def dependencies(target, options):
     deps.append(('openssl', '7f29dd5'))
     if can_build_disk(target):
         deps.append(('lwext4', 'ee865fa65f05e348cd4e0bce0552a2725ad5663a'))
-    deps.append(('ffcmp', 'da96af56f3ddf074f2044a0cd6e50c95184fd169'))
+    deps.append(('ffcmp', 'ea340a286078e025dcf9a0c75c6313d318dbf32b'))
 
     return deps
 
index d9e4e244fd23aa4527d25f1840a21ec37a7b3512..e69defa809614be4558051042a9957a2f6d9892f 100644 (file)
@@ -46,11 +46,7 @@ AudioFilterGraph::AudioFilterGraph (int sample_rate, int channels)
        /* FFmpeg doesn't know any channel layouts for any counts between 8 and 16,
           so we need to tell it we're using 16 channels if we are using more than 8.
        */
-       if (_channels > 8) {
-               _channel_layout = av_get_default_channel_layout (16);
-       } else {
-               _channel_layout = av_get_default_channel_layout (_channels);
-       }
+       av_channel_layout_default(&_channel_layout, _channels > 8 ? 16 : _channels);
 
        _in_frame = av_frame_alloc ();
 }
@@ -64,7 +60,7 @@ string
 AudioFilterGraph::src_parameters () const
 {
        char layout[64];
-       av_get_channel_layout_string (layout, sizeof(layout), 0, _channel_layout);
+       av_channel_layout_describe(&_channel_layout, layout, sizeof(layout));
 
        char buffer[256];
        snprintf (
@@ -83,8 +79,9 @@ AudioFilterGraph::set_parameters (AVFilterContext* context) const
        int r = av_opt_set_int_list (context, "sample_fmts", sample_fmts, AV_SAMPLE_FMT_NONE, AV_OPT_SEARCH_CHILDREN);
        DCPOMATIC_ASSERT (r >= 0);
 
-       int64_t channel_layouts[] = { _channel_layout, -1 };
-       r = av_opt_set_int_list (context, "channel_layouts", channel_layouts, -1, AV_OPT_SEARCH_CHILDREN);
+       char ch_layout[64];
+       av_channel_layout_describe(&_channel_layout, ch_layout, sizeof(ch_layout));
+       r = av_opt_set(context, "ch_layouts", ch_layout, AV_OPT_SEARCH_CHILDREN);
        DCPOMATIC_ASSERT (r >= 0);
 
        int sample_rates[] = { _sample_rate, -1 };
@@ -109,7 +106,7 @@ void
 AudioFilterGraph::process (shared_ptr<AudioBuffers> buffers)
 {
        DCPOMATIC_ASSERT (buffers->frames() > 0);
-       int const process_channels = av_get_channel_layout_nb_channels (_channel_layout);
+       int const process_channels = _channel_layout.nb_channels;
        DCPOMATIC_ASSERT (process_channels >= buffers->channels());
 
        if (buffers->channels() < process_channels) {
@@ -139,8 +136,10 @@ AudioFilterGraph::process (shared_ptr<AudioBuffers> buffers)
        _in_frame->nb_samples = buffers->frames ();
        _in_frame->format = AV_SAMPLE_FMT_FLTP;
        _in_frame->sample_rate = _sample_rate;
-       _in_frame->channel_layout = _channel_layout;
+       _in_frame->ch_layout = _channel_layout;
+LIBDCP_DISABLE_WARNINGS
        _in_frame->channels = process_channels;
+LIBDCP_ENABLE_WARNINGS
 
        int r = av_buffersrc_write_frame (_buffer_src_context, _in_frame);
 
index e749d0ec98bf27a918ebc9cfb1b1540544563e59..e0546df1e18ceebda739975cf3fb3e7657bb6dda 100644 (file)
@@ -42,6 +42,6 @@ protected:
 private:
        int _sample_rate;
        int _channels;
-       int64_t _channel_layout;
+       AVChannelLayout _channel_layout;
        AVFrame* _in_frame;
 };
index a5b36d04f442ee71f8ca76adbc718f7c08f4ab3e..d4a5d6c192884872dd35ca260576be73e4690418 100644 (file)
@@ -227,7 +227,7 @@ deinterleave_audio(shared_ptr<FFmpegAudioStream> stream, AVFrame* frame)
 
        /* XXX: can't we use swr_convert() to do the format conversion? */
 
-       int const channels = frame->channels;
+       int const channels = frame->ch_layout.nb_channels;
        int const frames = frame->nb_samples;
        int const total_samples = frames * channels;
        auto audio = make_shared<AudioBuffers>(channels, frames);
index fdcacb465602693fba0bf668cc82d7bd9b82ddd6..73b9ab3a09ad081c8dcb88ba8dcbd05d1f9af4fb 100644 (file)
@@ -73,14 +73,6 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
                auto codec = _codec_context[i] ? _codec_context[i]->codec : nullptr;
                if (s->codecpar->codec_type == AVMEDIA_TYPE_AUDIO && codec) {
 
-                       /* This is a hack; sometimes it seems that _audio_codec_context->channel_layout isn't set up,
-                          so bodge it here.  No idea why we should have to do this.
-                       */
-
-                       if (s->codecpar->channel_layout == 0) {
-                               s->codecpar->channel_layout = av_get_default_channel_layout (s->codecpar->channels);
-                       }
-
                        DCPOMATIC_ASSERT (_format_context->duration != AV_NOPTS_VALUE);
                        DCPOMATIC_ASSERT (codec->name);
 
@@ -91,7 +83,7 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr<const FFmpegContent> c, shared_ptr<Jo
                                        s->id,
                                        s->codecpar->sample_rate,
                                        llrint ((double(_format_context->duration) / AV_TIME_BASE) * s->codecpar->sample_rate),
-                                       s->codecpar->channels
+                                       s->codecpar->ch_layout.nb_channels
                                        )
                                );
 
index 0d5167c496c109ae0b7f4db56d28ee350d4134e8..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);
 
diff --git a/wscript b/wscript
index d66aba33526fb72695dc97b831411cda9ee750a2..5e53b2c0e354fb0a5588504ceca9cc24d650a45e 100644 (file)
--- a/wscript
+++ b/wscript
@@ -422,7 +422,7 @@ def configure(conf):
                             int main () { av_ebur128_get_true_peaks (0); }\n
                             """,
                    msg='Checking for EBUR128-patched FFmpeg',
-                   uselib='AVCODEC AVFILTER',
+                   uselib='AVCODEC AVFILTER AVUTIL SWRESAMPLE',
                    define_name='DCPOMATIC_HAVE_EBUR128_PATCHED_FFMPEG',
                    mandatory=False)