+static int activate(AVFilterContext *ctx)
+{
+ ConcatContext *cat = ctx->priv;
+ AVFrame *frame;
+ unsigned i, j;
+ int ret, status;
+ int64_t pts;
+
+ /* Forward status back */
+ for (i = 0; i < ctx->nb_outputs; i++) {
+ status = ff_outlink_get_status(ctx->outputs[i]);
+ if (!status)
+ continue;
+ for (j = i; j < ctx->nb_inputs; j += ctx->nb_outputs) {
+ if (!cat->in[j].eof) {
+ cat->in[j].eof = 1;
+ ff_inlink_set_status(ctx->inputs[j], status);
+ return 0;
+ }
+ }
+
+ }
+
+ /* Forward available frames */
+ if (cat->cur_idx < ctx->nb_inputs) {
+ for (i = 0; i < ctx->nb_outputs; i++) {
+ ret = ff_inlink_consume_frame(ctx->inputs[cat->cur_idx + i], &frame);
+ if (ret < 0)
+ return ret;
+ if (ret) {
+ ff_filter_set_ready(ctx, 10);
+ return push_frame(ctx, cat->cur_idx + i, frame);
+ }
+ }
+ }
+
+ /* Forward status change */
+ if (cat->cur_idx < ctx->nb_inputs) {
+ for (i = 0; i < ctx->nb_outputs; i++) {
+ ret = ff_inlink_acknowledge_status(ctx->inputs[cat->cur_idx + i], &status, &pts);
+ /* TODO use pts */
+ if (ret > 0) {
+ close_input(ctx, cat->cur_idx + i);
+ if (cat->cur_idx + ctx->nb_outputs >= ctx->nb_inputs) {
+ ff_outlink_set_status(ctx->outputs[i], status, pts);
+ }
+ if (!cat->nb_in_active) {
+ ret = flush_segment(ctx);
+ if (ret < 0)
+ return ret;
+ }
+ ff_filter_set_ready(ctx, 10);
+ return 0;
+ }
+ }
+ }
+
+ ret = FFERROR_NOT_READY;
+ for (i = 0; i < ctx->nb_outputs; i++) {
+ if (ff_outlink_frame_wanted(ctx->outputs[i])) {
+ if (cat->in[cat->cur_idx + i].eof) {
+ for (j = 0; j < ctx->nb_outputs; j++)
+ if (!cat->in[cat->cur_idx + j].eof)
+ ff_inlink_request_frame(ctx->inputs[cat->cur_idx + j]);
+ return 0;
+ } else {
+ ff_inlink_request_frame(ctx->inputs[cat->cur_idx + i]);
+ ret = 0;
+ }
+ }
+ }
+
+ return ret;
+}
+
+static int process_command(AVFilterContext *ctx, const char *cmd, const char *args,
+ char *res, int res_len, int flags)
+{
+ int ret = AVERROR(ENOSYS);
+
+ if (!strcmp(cmd, "next")) {
+ av_log(ctx, AV_LOG_VERBOSE, "Command received: next\n");
+ return flush_segment(ctx);
+ }
+
+ return ret;
+}
+