Browse Source

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>
tags/n3.3
Paul B Mahol 8 years ago
parent
commit
836c8750b3
1 changed files with 5 additions and 3 deletions
  1. +5
    -3
      libavfilter/avf_showspectrum.c

+ 5
- 3
libavfilter/avf_showspectrum.c View File

@@ -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) {
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 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…
Cancel
Save