[FFmpeg-cvslog] avfilter/vf_colortemperature: use macro for identical code

Paul B Mahol git at videolan.org
Sun Jan 31 21:56:29 EET 2021


ffmpeg | branch: master | Paul B Mahol <onemda at gmail.com> | Sun Jan 31 20:24:04 2021 +0100| [aa8cf8fdee415106e55e19a81599a4d8e6c51a1f] | committer: Paul B Mahol

avfilter/vf_colortemperature: use macro for identical code

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=aa8cf8fdee415106e55e19a81599a4d8e6c51a1f
---

 libavfilter/vf_colortemperature.c | 61 +++++++++++++++------------------------
 1 file changed, 23 insertions(+), 38 deletions(-)

diff --git a/libavfilter/vf_colortemperature.c b/libavfilter/vf_colortemperature.c
index 0466573e96..f2026c6fca 100644
--- a/libavfilter/vf_colortemperature.c
+++ b/libavfilter/vf_colortemperature.c
@@ -73,6 +73,27 @@ static float lerpf(float v0, float v1, float f)
     return v0 + (v1 - v0) * f;
 }
 
+#define PROCESS()                                                   \
+    nr = r * color[0];                                              \
+    ng = g * color[1];                                              \
+    nb = b * color[2];                                              \
+                                                                    \
+    nr = lerpf(r, nr, mix);                                         \
+    ng = lerpf(g, ng, mix);                                         \
+    nb = lerpf(b, nb, mix);                                         \
+                                                                    \
+    l0 = (FFMAX3(r, g, b) + FFMIN3(r, g, b)) + FLT_EPSILON;         \
+    l1 = (FFMAX3(nr, ng, nb) + FFMIN3(nr, ng, nb)) + FLT_EPSILON;   \
+    l = l0 / l1;                                                    \
+                                                                    \
+    r = nr * l;                                                     \
+    g = ng * l;                                                     \
+    b = nb * l;                                                     \
+                                                                    \
+    nr = lerpf(nr, r, preserve);                                    \
+    ng = lerpf(ng, g, preserve);                                    \
+    nb = lerpf(nb, b, preserve);
+
 static int temperature_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb_jobs)
 {
     ColorTemperatureContext *s = ctx->priv;
@@ -99,25 +120,7 @@ static int temperature_slice8(AVFilterContext *ctx, void *arg, int jobnr, int nb
             float nr, ng, nb;
             float l0, l1, l;
 
-            nr = r * color[0];
-            ng = g * color[1];
-            nb = b * color[2];
-
-            nr = lerpf(r, nr, mix);
-            ng = lerpf(g, ng, mix);
-            nb = lerpf(b, nb, mix);
-
-            l0 = (FFMAX3(r, g, b) + FFMIN3(r, g, b)) + FLT_EPSILON;
-            l1 = (FFMAX3(nr, ng, nb) + FFMIN3(nr, ng, nb)) + FLT_EPSILON;
-            l = l0 / l1;
-
-            r = nr * l;
-            g = ng * l;
-            b = nb * l;
-
-            nr = lerpf(nr, r, preserve);
-            ng = lerpf(ng, g, preserve);
-            nb = lerpf(nb, b, preserve);
+            PROCESS()
 
             gptr[x] = av_clip_uint8(ng);
             bptr[x] = av_clip_uint8(nb);
@@ -159,25 +162,7 @@ static int temperature_slice16(AVFilterContext *ctx, void *arg, int jobnr, int n
             float nr, ng, nb;
             float l0, l1, l;
 
-            nr = r * color[0];
-            ng = g * color[1];
-            nb = b * color[2];
-
-            nr = lerpf(r, nr, mix);
-            ng = lerpf(g, ng, mix);
-            nb = lerpf(b, nb, mix);
-
-            l0 = (FFMAX3(r, g, b) + FFMIN3(r, g, b)) + FLT_EPSILON;
-            l1 = (FFMAX3(nr, ng, nb) + FFMIN3(nr, ng, nb)) + FLT_EPSILON;
-            l = l0 / l1;
-
-            r = nr * l;
-            g = ng * l;
-            b = nb * l;
-
-            nr = lerpf(nr, r, preserve);
-            ng = lerpf(ng, g, preserve);
-            nb = lerpf(nb, b, preserve);
+            PROCESS()
 
             gptr[x] = av_clip_uintp2_c(ng, depth);
             bptr[x] = av_clip_uintp2_c(nb, depth);



More information about the ffmpeg-cvslog mailing list