- out = ff_get_audio_buffer(outlink, nb_samples);
- if (!out) {
- ret = AVERROR(ENOMEM);
- goto fail;
- }
- av_audio_fifo_read(s->fifo[0], (void **)out->extended_data, nb_samples);
- out->pts = s->pts;
- s->pts += av_rescale_q(nb_samples,
- (AVRational){ 1, outlink->sample_rate }, outlink->time_base);
- ret = ff_filter_frame(outlink, out);
- }
- } else if (av_audio_fifo_size(s->fifo[1]) < s->nb_samples) {
- if (!s->overlap && av_audio_fifo_size(s->fifo[0]) > 0) {
- nb_samples = av_audio_fifo_size(s->fifo[0]);
-
- cf[0] = ff_get_audio_buffer(outlink, nb_samples);
- out = ff_get_audio_buffer(outlink, nb_samples);
- if (!out || !cf[0]) {
- ret = AVERROR(ENOMEM);
- goto fail;
+ ret = ff_inlink_consume_samples(ctx->inputs[0], nb_samples, nb_samples, &in);
+ if (ret < 0) {
+ return ret;