[FFmpeg-cvslog] lavc/amrwbdec: Do not ignore NO_DATA frames.
Carl Eugen Hoyos
git at videolan.org
Sun Apr 5 02:56:38 EEST 2020
ffmpeg | branch: master | Carl Eugen Hoyos <ceffmpeg at gmail.com> | Tue Jan 29 22:46:37 2019 +0100| [bef3c14dd1a9a38d996497da7ea416aa372283bf] | committer: Carl Eugen Hoyos
lavc/amrwbdec: Do not ignore NO_DATA frames.
Fixes the actual output duration of the sample in ticket #7113.
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bef3c14dd1a9a38d996497da7ea416aa372283bf
---
libavcodec/amrwbdata.h | 2 +-
libavcodec/amrwbdec.c | 9 ++++++++-
2 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/libavcodec/amrwbdata.h b/libavcodec/amrwbdata.h
index 8a8cbfdddf..95c0aaa37b 100644
--- a/libavcodec/amrwbdata.h
+++ b/libavcodec/amrwbdata.h
@@ -1884,7 +1884,7 @@ static const float lpf_7_coef[31] = { // low pass, 7kHz cutoff
/** Core frame sizes in each mode */
static const uint16_t cf_sizes_wb[] = {
132, 177, 253, 285, 317, 365, 397, 461, 477,
- 40 /// SID/comfort noise frame
+ 40, 0, 0, 0, 0, 0, 0
};
#endif /* AVCODEC_AMRWBDATA_H */
diff --git a/libavcodec/amrwbdec.c b/libavcodec/amrwbdec.c
index 47fe7eb55e..b488a5d3c7 100644
--- a/libavcodec/amrwbdec.c
+++ b/libavcodec/amrwbdec.c
@@ -1119,12 +1119,19 @@ static int amrwb_decode_frame(AVCodecContext *avctx, void *data,
buf_out = (float *)frame->data[0];
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;
+ *got_frame_ptr = 1;
+ return expected_fr_size;
+ }
if (ctx->fr_cur_mode > MODE_SID) {
av_log(avctx, AV_LOG_ERROR,
"Invalid mode %d\n", ctx->fr_cur_mode);
return AVERROR_INVALIDDATA;
}
- expected_fr_size = ((cf_sizes_wb[ctx->fr_cur_mode] + 7) >> 3) + 1;
if (buf_size < expected_fr_size) {
av_log(avctx, AV_LOG_ERROR,
More information about the ffmpeg-cvslog
mailing list