avfilter/af_rubberband: flush only if there is something available

Signed-off-by: Paul B Mahol <onemda@gmail.com>
pull/118/merge
Paul B Mahol 10 years ago
parent 3178931a14
commit 6ce02126ce
  1. 4
      libavfilter/af_rubberband.c

@ -175,6 +175,7 @@ static int request_frame(AVFilterLink *outlink)
ret = ff_request_frame(ctx->inputs[0]);
if (ret == AVERROR_EOF && !s->flushed) {
if (rubberband_available(s->rbs) > 0) {
AVFrame *out = ff_get_audio_buffer(inlink, 1);
int nb_samples;
@ -183,7 +184,6 @@ static int request_frame(AVFilterLink *outlink)
rubberband_process(s->rbs, (const float *const *)out->data, 1, 1);
av_frame_free(&out);
s->flushed = 1;
nb_samples = rubberband_available(s->rbs);
if (nb_samples > 0) {
@ -198,6 +198,8 @@ static int request_frame(AVFilterLink *outlink)
ret = ff_filter_frame(outlink, out);
s->nb_samples_out += nb_samples;
}
}
s->flushed = 1;
av_log(ctx, AV_LOG_DEBUG, "nb_samples_in %"PRId64" nb_samples_out %"PRId64"\n",
s->nb_samples_in, s->nb_samples_out);
}

Loading…
Cancel
Save