lavfi: add error handling to filter_samples().
This commit is contained in:
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user