summaryrefslogtreecommitdiff
path: root/libavfilter/vf_ssim.c
diff options
context:
space:
mode:
authorRonald S. Bultje <rsbultje@gmail.com>2015-07-11 19:56:00 -0400
committerMichael Niedermayer <michael@niedermayer.cc>2015-07-13 02:39:51 +0200
commit03931ecf71710452fc9e89d4f18354f0b5e05395 (patch)
tree4bc89735cffdaf63f9e848f01c77a0c024578c61 /libavfilter/vf_ssim.c
parenta1f48480497bb462c5d1d589ae393335f50b06e0 (diff)
vf_ssim: remove another obscure double loop.
Reviewed-by: Paul B Mahol <onemda@gmail.com> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavfilter/vf_ssim.c')
-rw-r--r--libavfilter/vf_ssim.c18
1 files changed, 8 insertions, 10 deletions
diff --git a/libavfilter/vf_ssim.c b/libavfilter/vf_ssim.c
index b1c3368bcd..f7a259e2d1 100644
--- a/libavfilter/vf_ssim.c
+++ b/libavfilter/vf_ssim.c
@@ -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);