+ if ((dm->got_frame[INPUT_MAIN] == 0) && !(dm->eof & (1 << INPUT_MAIN)) &&
+ (ret = ff_inlink_consume_frame(ctx->inputs[INPUT_MAIN], &frame)) > 0) {
+ ret = filter_frame(ctx->inputs[INPUT_MAIN], frame);
+ if (ret < 0)
+ return ret;
+ }
+ if (ret < 0)
+ return ret;
+ if (dm->ppsrc &&
+ (dm->got_frame[INPUT_CLEANSRC] == 0) && !(dm->eof & (1 << INPUT_CLEANSRC)) &&
+ (ret = ff_inlink_consume_frame(ctx->inputs[INPUT_CLEANSRC], &frame)) > 0) {
+ ret = filter_frame(ctx->inputs[INPUT_CLEANSRC], frame);
+ if (ret < 0)
+ return ret;
+ }
+ if (ret < 0) {
+ return ret;
+ } else if (dm->eof == ((1 << INPUT_MAIN) | (dm->ppsrc << INPUT_CLEANSRC))) {
+ ff_outlink_set_status(ctx->outputs[0], AVERROR_EOF, dm->last_pts);
+ return 0;
+ } else if (!(dm->eof & (1 << INPUT_MAIN)) && ff_inlink_acknowledge_status(ctx->inputs[INPUT_MAIN], &status, &pts)) {
+ if (status == AVERROR_EOF) { // flushing
+ dm->eof |= 1 << INPUT_MAIN;
+ if (dm->ppsrc)
+ filter_frame(ctx->inputs[INPUT_CLEANSRC], NULL);
+ filter_frame(ctx->inputs[INPUT_MAIN], NULL);
+ ff_outlink_set_status(ctx->outputs[0], AVERROR_EOF, dm->last_pts);
+ return 0;
+ }
+ } else if (dm->ppsrc && !(dm->eof & (1 << INPUT_CLEANSRC)) && ff_inlink_acknowledge_status(ctx->inputs[INPUT_CLEANSRC], &status, &pts)) {
+ if (status == AVERROR_EOF) { // flushing
+ dm->eof |= 1 << INPUT_CLEANSRC;
+ filter_frame(ctx->inputs[INPUT_MAIN], NULL);
+ filter_frame(ctx->inputs[INPUT_CLEANSRC], NULL);
+ ff_outlink_set_status(ctx->outputs[0], AVERROR_EOF, dm->last_pts);
+ return 0;
+ }