static int try_push_frames(AVFilterContext *ctx) { SpectrumSynthContext *s = ctx->priv; int ret, x; if (!(s->magnitude && s->phase)) return 0; switch (s->sliding) { case REPLACE: ret = try_push_frame(ctx, s->xpos); s->xpos++; if (s->xpos >= s->xend) s->xpos = 0; break; case SCROLL: s->xpos = s->xend - 1; ret = try_push_frame(ctx, s->xpos); break; case RSCROLL: s->xpos = 0; ret = try_push_frame(ctx, s->xpos); break; case FULLFRAME: for (x = 0; x < s->xend; x++) { ret = try_push_frame(ctx, x); if (ret < 0) break; } break; default: av_assert0(0); } av_frame_free(&s->magnitude); av_frame_free(&s->phase); return ret; }
static int filter_frame_right(AVFilterLink *inlink, AVFrame *frame) { FramepackContext *s = inlink->dst->priv; s->input_views[RIGHT] = frame; return try_push_frame(inlink->dst); }