From f1248b7795857e14ee31a15ad79583bdda7c4a90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= Date: Sun, 6 May 2018 00:06:19 +0200 Subject: [PATCH] lavfi/nlmeans: random code shuffling to help compiler This makes nlmeans_slice() slightly faster at least on GCC 7.3. --- libavfilter/vf_nlmeans.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libavfilter/vf_nlmeans.c b/libavfilter/vf_nlmeans.c index e4952e187e..d222d3913e 100644 --- a/libavfilter/vf_nlmeans.c +++ b/libavfilter/vf_nlmeans.c @@ -368,7 +368,6 @@ static int nlmeans_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs int x, y; NLMeansContext *s = ctx->priv; const struct thread_data *td = arg; - const uint8_t *src = td->src; const int src_linesize = td->src_linesize; const int process_h = td->endy - td->starty; const int slice_start = (process_h * jobnr ) / nb_jobs; @@ -377,14 +376,15 @@ static int nlmeans_slice(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs const int endy = td->starty + slice_end; for (y = starty; y < endy; y++) { + const uint8_t *src = td->src + y*src_linesize; + struct weighted_avg *wa = s->wa + y*s->wa_linesize; for (x = td->startx; x < td->endx; x++) { const int patch_diff_sq = get_integral_patch_value(td->ii_start, s->ii_lz_32, x, y, td->p); if (patch_diff_sq < s->max_meaningful_diff) { - struct weighted_avg *wa = &s->wa[y*s->wa_linesize + x]; const int weight_lut_idx = patch_diff_sq * s->pdiff_lut_scale; const double weight = s->weight_lut[weight_lut_idx]; // exp(-patch_diff_sq * s->pdiff_scale) - wa->total_weight += weight; - wa->sum += weight * src[y*src_linesize + x]; + wa[x].total_weight += weight; + wa[x].sum += weight * src[x]; } } }