From afbe8c6a8441b38a1f3def0e8ae49b626a8c67d2 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Tue, 14 Jan 2014 21:00:58 +0100 Subject: [PATCH] avcodec/mpegaudiodec_template: decode_frame_mp3on4: conceal errors in decoding instead of discarding data Signed-off-by: Michael Niedermayer --- libavcodec/mpegaudiodec_template.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/libavcodec/mpegaudiodec_template.c b/libavcodec/mpegaudiodec_template.c index f5031925ed..1c1ab6e595 100644 --- a/libavcodec/mpegaudiodec_template.c +++ b/libavcodec/mpegaudiodec_template.c @@ -1953,8 +1953,13 @@ static int decode_frame_mp3on4(AVCodecContext *avctx, void *data, if (m->nb_channels > 1) outptr[1] = out_samples[s->coff[fr] + 1]; - if ((ret = mp_decode_frame(m, outptr, buf, fsize)) < 0) - return ret; + if ((ret = mp_decode_frame(m, outptr, buf, fsize)) < 0) { + av_log(avctx, AV_LOG_ERROR, "failed to decode channel %d\n", ch); + memset(outptr[0], 0, MPA_FRAME_SIZE*sizeof(OUT_INT)); + if (m->nb_channels > 1) + memset(outptr[1], 0, MPA_FRAME_SIZE*sizeof(OUT_INT)); + ret = m->nb_channels * MPA_FRAME_SIZE*sizeof(OUT_INT); + } out_size += ret; buf += fsize;