From 0b520c4aaca4acb9cdf6334858b462d1a657209d Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 9 Feb 2016 00:15:31 +0000 Subject: Fix crash when a frame being deinterleaved has fewer audio channels than its stream; I'm not sure why this happens but the file that triggered this commit was stereo AC3 and the crash happened when (embedded) subtitles were enabled and the file seek was seeked randomly. There were frame-sync errors from FFmpeg around the crash. --- src/lib/ffmpeg_decoder.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/lib/ffmpeg_decoder.cc') diff --git a/src/lib/ffmpeg_decoder.cc b/src/lib/ffmpeg_decoder.cc index c25efa463..c1448ad90 100644 --- a/src/lib/ffmpeg_decoder.cc +++ b/src/lib/ffmpeg_decoder.cc @@ -225,9 +225,13 @@ FFmpegDecoder::deinterleave_audio (shared_ptr stream, uint8_t case AV_SAMPLE_FMT_FLTP: { float** p = reinterpret_cast (data); - for (int i = 0; i < stream->channels(); ++i) { + /* Sometimes there aren't as many channels in the _frame as in the stream */ + for (int i = 0; i < _frame->channels; ++i) { memcpy (audio->data(i), p[i], frames * sizeof(float)); } + for (int i = _frame->channels; i < stream->channels(); ++i) { + audio->make_silent (i); + } } break; -- cgit v1.2.3