From e67ce8ae4b9121bbcef2c1dcb61bdb5b9330ad78 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 27 Sep 2023 00:16:38 +0200 Subject: Fix errors with WAVs containing markers (#2617). I'm not 100% sure about this but they seem to end up giving audio packets with no channels and no frames. Here we handle such packets better. --- src/lib/audio_buffers.cc | 2 +- src/lib/audio_buffers.h | 2 +- src/lib/ffmpeg_decoder.cc | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src/lib') diff --git a/src/lib/audio_buffers.cc b/src/lib/audio_buffers.cc index 4f01146f9..0e31793ea 100644 --- a/src/lib/audio_buffers.cc +++ b/src/lib/audio_buffers.cc @@ -81,7 +81,7 @@ void AudioBuffers::allocate (int channels, int frames) { DCPOMATIC_ASSERT (frames >= 0); - DCPOMATIC_ASSERT (channels > 0); + DCPOMATIC_ASSERT(frames == 0 || channels > 0); ScopeGuard sg = [this]() { update_data_pointers(); }; diff --git a/src/lib/audio_buffers.h b/src/lib/audio_buffers.h index 645348aa0..b43179663 100644 --- a/src/lib/audio_buffers.h +++ b/src/lib/audio_buffers.h @@ -60,7 +60,7 @@ public: } int frames () const { - return _data[0].size(); + return _data.empty() ? 0 : _data[0].size(); } void set_frames (int f); diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index efe151530..c3d32bc75 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -266,6 +266,10 @@ deinterleave_audio(AVFrame* frame) auto audio = make_shared(channels, frames); auto data = audio->data(); + if (frames == 0) { + return audio; + } + switch (format) { case AV_SAMPLE_FMT_U8: { -- cgit v1.2.3