mirror of https://git.ffmpeg.org/ffmpeg.git
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>
This commit is contained in:
parent
29fbce8f81
commit
836c8750b3
|
@ -1022,17 +1022,19 @@ static int showspectrumpic_request_frame(AVFilterLink *outlink)
|
||||||
AVFilterContext *ctx = outlink->src;
|
AVFilterContext *ctx = outlink->src;
|
||||||
ShowSpectrumContext *s = ctx->priv;
|
ShowSpectrumContext *s = ctx->priv;
|
||||||
AVFilterLink *inlink = ctx->inputs[0];
|
AVFilterLink *inlink = ctx->inputs[0];
|
||||||
int ret;
|
int ret, samples;
|
||||||
|
|
||||||
ret = ff_request_frame(inlink);
|
ret = ff_request_frame(inlink);
|
||||||
if (ret == AVERROR_EOF && s->outpicref) {
|
samples = av_audio_fifo_size(s->fifo);
|
||||||
int samples = av_audio_fifo_size(s->fifo);
|
if (ret == AVERROR_EOF && s->outpicref && samples > 0) {
|
||||||
int consumed = 0;
|
int consumed = 0;
|
||||||
int y, x = 0, sz = s->orientation == VERTICAL ? s->w : s->h;
|
int y, x = 0, sz = s->orientation == VERTICAL ? s->w : s->h;
|
||||||
int ch, spf, spb;
|
int ch, spf, spb;
|
||||||
AVFrame *fin;
|
AVFrame *fin;
|
||||||
|
|
||||||
spf = s->win_size * (samples / ((s->win_size * sz) * ceil(samples / (float)(s->win_size * sz))));
|
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;
|
spb = (samples / (spf * sz)) * spf;
|
||||||
|
|
||||||
fin = ff_get_audio_buffer(inlink, s->win_size);
|
fin = ff_get_audio_buffer(inlink, s->win_size);
|
||||||
|
|
Loading…
Reference in New Issue