vf_ssim: remove another obscure double loop.
authorRonald S. Bultje <rsbultje@gmail.com>
Sat, 11 Jul 2015 23:56:00 +0000 (19:56 -0400)
committerMichael Niedermayer <michael@niedermayer.cc>
Mon, 13 Jul 2015 00:39:51 +0000 (02:39 +0200)
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavfilter/vf_ssim.c

index b1c3368..f7a259e 100644 (file)
@@ -85,13 +85,13 @@ static void set_meta(AVDictionary **metadata, const char *key, char comp, float
     }
 }
 
-static void ssim_4x4x2_core(const uint8_t *main, int main_stride,
-                            const uint8_t *ref, int ref_stride,
-                            int sums[2][4])
+static void ssim_4x4xn(const uint8_t *main, int main_stride,
+                       const uint8_t *ref, int ref_stride,
+                       int (*sums)[4], int width)
 {
     int x, y, z;
 
-    for (z = 0; z < 2; z++) {
+    for (z = 0; z < width; z++) {
         uint32_t s1 = 0, s2 = 0, ss = 0, s12 = 0;
 
         for (y = 0; y < 4; y++) {
@@ -149,8 +149,7 @@ static float ssim_plane(uint8_t *main, int main_stride,
                         uint8_t *ref, int ref_stride,
                         int width, int height, void *temp)
 {
-    int z = 0;
-    int x, y;
+    int z = 0, y;
     float ssim = 0.0;
     int (*sum0)[4] = temp;
     int (*sum1)[4] = sum0 + (width >> 2) + 3;
@@ -161,10 +160,9 @@ static float ssim_plane(uint8_t *main, int main_stride,
     for (y = 1; y < height; y++) {
         for (; z <= y; z++) {
             FFSWAP(void*, sum0, sum1);
-            for (x = 0; x < width; x+=2)
-                ssim_4x4x2_core(&main[4 * (x + z * main_stride)], main_stride,
-                                &ref[4 * (x + z * ref_stride)], ref_stride,
-                                &sum0[x]);
+            ssim_4x4xn(&main[4 * z * main_stride], main_stride,
+                       &ref[4 * z * ref_stride], ref_stride,
+                       sum0, width);
         }
 
         ssim += ssim_endn(sum0, sum1, width - 1);