From: Carl Hetherington Date: Fri, 30 Sep 2022 20:46:33 +0000 (+0200) Subject: Bump ffmpeg to 5.1.2 "Riemann" X-Git-Tag: v2.17.0~6 X-Git-Url: https://main.carlh.net/gitweb/?p=dcpomatic.git;a=commitdiff_plain;h=f8717d02c5d8e9a38db180900022ab6c7bf9b936 Bump ffmpeg to 5.1.2 "Riemann" --- diff --git a/cscript b/cscript index 591ffd54d..73c6b41ef 100644 --- 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 diff --git a/src/lib/audio_filter_graph.cc b/src/lib/audio_filter_graph.cc index d9e4e244f..e69defa80 100644 --- a/src/lib/audio_filter_graph.cc +++ b/src/lib/audio_filter_graph.cc @@ -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 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 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); diff --git a/src/lib/audio_filter_graph.h b/src/lib/audio_filter_graph.h index e749d0ec9..e0546df1e 100644 --- a/src/lib/audio_filter_graph.h +++ b/src/lib/audio_filter_graph.h @@ -42,6 +42,6 @@ protected: private: int _sample_rate; int _channels; - int64_t _channel_layout; + AVChannelLayout _channel_layout; AVFrame* _in_frame; }; diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index a5b36d04f..d4a5d6c19 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -227,7 +227,7 @@ deinterleave_audio(shared_ptr 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(channels, frames); diff --git a/src/lib/ffmpeg_examiner.cc b/src/lib/ffmpeg_examiner.cc index fdcacb465..73b9ab3a0 100644 --- a/src/lib/ffmpeg_examiner.cc +++ b/src/lib/ffmpeg_examiner.cc @@ -73,14 +73,6 @@ FFmpegExaminer::FFmpegExaminer (shared_ptr c, shared_ptrcodec : 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 c, shared_ptrid, 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 ) ); diff --git a/src/lib/ffmpeg_file_encoder.cc b/src/lib/ffmpeg_file_encoder.cc index 0d5167c49..1294b9b3c 100644 --- a/src/lib/ffmpeg_file_encoder.cc +++ b/src/lib/ffmpeg_file_encoder.cc @@ -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 d66aba335..5e53b2c0e 100644 --- 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)