X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Famrwbdec.c;h=555c4bc45dde8a0dd53f6fb80b29523b5a84417d;hb=6a2defd7d8edc79115a2231de80d357e02e4a3ca;hp=5943bfc84e39fbe575aa6b691ba03b5b73610b06;hpb=559c2e96e371f30eedccf370d4606fc86706ab75;p=ffmpeg diff --git a/libavcodec/amrwbdec.c b/libavcodec/amrwbdec.c index 5943bfc84e3..555c4bc45dd 100644 --- a/libavcodec/amrwbdec.c +++ b/libavcodec/amrwbdec.c @@ -1121,7 +1121,12 @@ static int amrwb_decode_frame(AVCodecContext *avctx, void *data, header_size = decode_mime_header(ctx, buf); expected_fr_size = ((cf_sizes_wb[ctx->fr_cur_mode] + 7) >> 3) + 1; - if (ctx->fr_cur_mode == NO_DATA) { + if (!ctx->fr_quality) + av_log(avctx, AV_LOG_ERROR, "Encountered a bad or corrupted frame\n"); + + if (ctx->fr_cur_mode == NO_DATA || !ctx->fr_quality) { + /* The specification suggests a "random signal" and + "a muting technique" to "gradually decrease the output level". */ av_samples_set_silence(&frame->data[0], 0, frame->nb_samples, 1, AV_SAMPLE_FMT_FLT); *got_frame_ptr = 1; return expected_fr_size; @@ -1139,9 +1144,6 @@ static int amrwb_decode_frame(AVCodecContext *avctx, void *data, return AVERROR_INVALIDDATA; } - if (!ctx->fr_quality || ctx->fr_cur_mode > MODE_SID) - av_log(avctx, AV_LOG_ERROR, "Encountered a bad or corrupted frame\n"); - if (ctx->fr_cur_mode == MODE_SID) { /* Comfort noise frame */ avpriv_request_sample(avctx, "SID mode"); return AVERROR_PATCHWELCOME;