diff options
author | Paul B Mahol <onemda@gmail.com> | 2017-01-27 13:37:00 +0100 |
---|---|---|
committer | Paul B Mahol <onemda@gmail.com> | 2017-01-27 13:37:00 +0100 |
commit | 836c8750b31329e71e5ac2a194523172875b77eb (patch) | |
tree | 9861623b383661686a6298ff64dda98e32286a45 /libavfilter/avf_showspectrum.c | |
parent | 29fbce8f812507a75e44ce6c6c94694c4697fb24 (diff) | |
download | ffmpeg-836c8750b31329e71e5ac2a194523172875b77eb.tar.gz |
avfilter/avf_showspectrum: fix 2 possible crashes
Make sure no division by zero is done.
Make sure there are actually samples available.
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Diffstat (limited to 'libavfilter/avf_showspectrum.c')
-rw-r--r-- | libavfilter/avf_showspectrum.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libavfilter/avf_showspectrum.c b/libavfilter/avf_showspectrum.c index 87766688f8..09b5a2a51f 100644 --- a/libavfilter/avf_showspectrum.c +++ b/libavfilter/avf_showspectrum.c @@ -1022,17 +1022,19 @@ static int showspectrumpic_request_frame(AVFilterLink *outlink) AVFilterContext *ctx = outlink->src; ShowSpectrumContext *s = ctx->priv; AVFilterLink *inlink = ctx->inputs[0]; - int ret; + int ret, samples; ret = ff_request_frame(inlink); - if (ret == AVERROR_EOF && s->outpicref) { - int samples = av_audio_fifo_size(s->fifo); + samples = av_audio_fifo_size(s->fifo); + if (ret == AVERROR_EOF && s->outpicref && samples > 0) { int consumed = 0; int y, x = 0, sz = s->orientation == VERTICAL ? s->w : s->h; int ch, spf, spb; AVFrame *fin; spf = s->win_size * (samples / ((s->win_size * sz) * ceil(samples / (float)(s->win_size * sz)))); + spf = FFMAX(1, spf); + spb = (samples / (spf * sz)) * spf; fin = ff_get_audio_buffer(inlink, s->win_size); |