+typedef struct ThreadData {
+ AVFrame *in, *out;
+ int direct;
+} ThreadData;
+
+static int do_denoise(AVFilterContext *ctx, void *data, int job_nr, int n_jobs)
+{
+ HQDN3DContext *s = ctx->priv;
+ const ThreadData *td = data;
+ AVFrame *out = td->out;
+ AVFrame *in = td->in;
+ int direct = td->direct;
+
+ denoise(s, in->data[job_nr], out->data[job_nr],
+ s->line[job_nr], &s->frame_prev[job_nr],
+ AV_CEIL_RSHIFT(in->width, (!!job_nr * s->hsub)),
+ AV_CEIL_RSHIFT(in->height, (!!job_nr * s->vsub)),
+ in->linesize[job_nr], out->linesize[job_nr],
+ s->coefs[job_nr ? CHROMA_SPATIAL : LUMA_SPATIAL],
+ s->coefs[job_nr ? CHROMA_TMP : LUMA_TMP]);
+
+ return 0;
+}
+