+static int activate(AVFilterContext *ctx)
+{
+ int i, status;
+ int ret, nb_samples;
+ int64_t pts;
+
+ FF_FILTER_FORWARD_STATUS_BACK_ALL(ctx->outputs[0], ctx);
+
+ nb_samples = ff_inlink_queued_samples(ctx->inputs[0]);
+ for (i = 1; i < ctx->nb_inputs && nb_samples > 0; i++) {
+ nb_samples = FFMIN(ff_inlink_queued_samples(ctx->inputs[i]), nb_samples);
+ }
+
+ if (nb_samples) {
+ ret = try_push_frame(ctx, nb_samples);
+ if (ret < 0)
+ return ret;
+ }
+
+ for (i = 0; i < ctx->nb_inputs; i++) {
+ if (ff_inlink_queued_samples(ctx->inputs[i]))
+ continue;
+
+ if (ff_inlink_acknowledge_status(ctx->inputs[i], &status, &pts)) {
+ ff_outlink_set_status(ctx->outputs[0], status, pts);
+ return 0;
+ } else if (ff_outlink_frame_wanted(ctx->outputs[0])) {
+ ff_inlink_request_frame(ctx->inputs[i]);
+ return 0;
+ }
+ }
+
+ return 0;
+}
+