-static int process_frame(FFFrameSync *fs)
-{
- AVFilterContext *ctx = fs->parent;
- MaskedClampContext *s = fs->opaque;
- AVFilterLink *outlink = ctx->outputs[0];
- AVFrame *out, *base, *dark, *bright;
- int ret;
-
- if ((ret = ff_framesync_get_frame(&s->fs, 0, &base, 0)) < 0 ||
- (ret = ff_framesync_get_frame(&s->fs, 1, &dark, 0)) < 0 ||
- (ret = ff_framesync_get_frame(&s->fs, 2, &bright, 0)) < 0)
- return ret;
-
- if (ctx->is_disabled) {
- out = av_frame_clone(base);
- if (!out)
- return AVERROR(ENOMEM);
- } else {
- ThreadData td;
-
- out = ff_get_video_buffer(outlink, outlink->w, outlink->h);
- if (!out)
- return AVERROR(ENOMEM);
- av_frame_copy_props(out, base);
-
- td.b = base;
- td.o = dark;
- td.m = bright;
- td.d = out;
-
- ctx->internal->execute(ctx, s->maskedclamp, &td, NULL, FFMIN(s->height[0],
- ff_filter_get_nb_threads(ctx)));
- }
- out->pts = av_rescale_q(s->fs.pts, s->fs.time_base, outlink->time_base);
-
- return ff_filter_frame(outlink, out);
-}
-
-static int maskedclamp8(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)