- if (ret == AVERROR_EOF && av_audio_fifo_size(s->fifo) > 0) {
- if (!s->samples_left)
- s->samples_left = av_audio_fifo_size(s->fifo) - s->overlap_skip;
+ ret = ff_inlink_consume_samples(inlink, s->window_size, s->window_size, &in);
+ if (ret < 0)
+ return ret;
+ if (ret > 0) {
+ double *e = (double *)s->enabled->extended_data[0];
+
+ if (s->pts == AV_NOPTS_VALUE)
+ s->pts = in->pts;
+
+ ret = av_audio_fifo_write(s->fifo, (void **)in->extended_data,
+ in->nb_samples);
+ for (int i = 0; i < in->nb_samples; i++)
+ e[i] = !ctx->is_disabled;
+
+ av_audio_fifo_write(s->efifo, (void**)s->enabled->extended_data, in->nb_samples);
+ av_frame_free(&in);
+ if (ret < 0)
+ return ret;
+ }
+
+ if (av_audio_fifo_size(s->fifo) >= s->window_size ||
+ s->samples_left > 0)
+ return filter_frame(inlink);