]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/amrwbdec.c
avdevice/decklink_dec: fix build with older SDK
[ffmpeg] / libavcodec / amrwbdec.c
index b488a5d3c7e22293ee2cfe20cf15dc00e90039a2..555c4bc45dde8a0dd53f6fb80b29523b5a84417d 100644 (file)
@@ -1121,9 +1121,13 @@ 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) {
-        for (i = 0; i < frame->nb_samples; i++)
-            buf_out[i] = 0.f;
+    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;
     }
@@ -1140,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;