lavfi: add error handling to filter_samples().

This commit is contained in:
Anton Khirnov
2012-07-02 20:13:40 +02:00
parent 8d18bc550e
commit cd99146253
15 changed files with 136 additions and 69 deletions

View File

@@ -157,21 +157,21 @@ static int request_frame(AVFilterLink *outlink)
}
buf->pts = s->next_pts;
ff_filter_samples(outlink, buf);
return 0;
return ff_filter_samples(outlink, buf);
}
return ret;
}
static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
static int filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
{
AVFilterContext *ctx = inlink->dst;
ResampleContext *s = ctx->priv;
AVFilterLink *outlink = ctx->outputs[0];
int ret;
if (s->avr) {
AVFilterBufferRef *buf_out;
int delay, nb_samples, ret;
int delay, nb_samples;
/* maximum possible samples lavr can output */
delay = avresample_get_delay(s->avr);
@@ -180,10 +180,19 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
AV_ROUND_UP);
buf_out = ff_get_audio_buffer(outlink, AV_PERM_WRITE, nb_samples);
if (!buf_out) {
ret = AVERROR(ENOMEM);
goto fail;
}
ret = avresample_convert(s->avr, (void**)buf_out->extended_data,
buf_out->linesize[0], nb_samples,
(void**)buf->extended_data, buf->linesize[0],
buf->audio->nb_samples);
if (ret < 0) {
avfilter_unref_buffer(buf_out);
goto fail;
}
av_assert0(!avresample_available(s->avr));
@@ -209,14 +218,18 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *buf)
s->next_pts = buf_out->pts + buf_out->audio->nb_samples;
ff_filter_samples(outlink, buf_out);
ret = ff_filter_samples(outlink, buf_out);
s->got_output = 1;
}
fail:
avfilter_unref_buffer(buf);
} else {
ff_filter_samples(outlink, buf);
ret = ff_filter_samples(outlink, buf);
s->got_output = 1;
}
return ret;
}
AVFilter avfilter_af_resample = {