From df7697962ef1049077643636918fba3cd3457e71 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 15 Aug 2023 15:46:41 +0200 Subject: [PATCH 1/1] Cope with unexpected channel counts in data coming from audio decoders. --- src/lib/audio_decoder.cc | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/lib/audio_decoder.cc b/src/lib/audio_decoder.cc index ad3374762..61ff5d265 100644 --- a/src/lib/audio_decoder.cc +++ b/src/lib/audio_decoder.cc @@ -120,11 +120,23 @@ AudioDecoder::emit(shared_ptr film, AudioStreamPtr stream, shared_pt } if (resampler && !flushing) { - auto ro = resampler->run (data); - if (ro->frames() == 0) { + /* It can be the the data here has a different number of channels than the stream + * it comes from (e.g. the files decoded by FFmpegDecoder sometimes have a random + * frame, often at the end, with more channels). Insert silence or discard channels + * here. + */ + if (resampler->channels() != data->channels()) { + LOG_WARNING("Received audio data with an unexpected channel count of %1 instead of %2", data->channels(), resampler->channels()); + auto data_copy = data->clone(); + data_copy->set_channels(resampler->channels()); + data = resampler->run(data_copy); + } else { + data = resampler->run(data); + } + + if (data->frames() == 0) { return; } - data = ro; } Data(stream, ContentAudio (data, _positions[stream])); -- 2.30.2