diff options
author | Carl Worth <cworth@cworth.org> | 2006-12-14 04:17:07 -0800 |
---|---|---|
committer | Carl Worth <cworth@cworth.org> | 2006-12-14 07:58:02 -0800 |
commit | c426e71141d75dbfd39730bf9c4847309fcd9d9e (patch) | |
tree | 7fa222aae5d819c4f1891497a7d58f63abc575b0 /test/buffer-diff.c | |
parent | 305cbd8e71a2d21a2c71ed2c382daa5bfcec3992 (diff) |
Hook up pdiff to the test suite now that its written in C
Diffstat (limited to 'test/buffer-diff.c')
-rw-r--r-- | test/buffer-diff.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/buffer-diff.c b/test/buffer-diff.c index 99501bce..e4324ff2 100644 --- a/test/buffer-diff.c +++ b/test/buffer-diff.c @@ -38,6 +38,7 @@ #include "cairo-test.h" +#include "pdiff.h" #include "buffer-diff.h" #include "xmalloc.h" @@ -122,6 +123,18 @@ compare_surfaces (cairo_surface_t *surface_a, cairo_surface_t *surface_diff, buffer_diff_result_t *result) { + /* These default values were taken straight from the + * perceptualdiff program. We'll probably want to tune these as + * necessary. */ + double gamma = 2.2; + double luminance = 100.0; + double field_of_view = 45.0; + int discernible_pixels_changed; + + /* First, we run cairo's old buffer_diff algorithm which looks for + * pixel-perfect images, (we do this first since the test suite + * runs about 3x slower if we run pdiff_compare first). + */ buffer_diff_core (cairo_image_surface_get_data (surface_a), cairo_image_surface_get_data (surface_b), cairo_image_surface_get_data (surface_diff), @@ -130,6 +143,23 @@ compare_surfaces (cairo_surface_t *surface_a, cairo_image_surface_get_stride (surface_a), 0xffffffff, result); + if (result->pixels_changed == 0) + return; + + cairo_test_log ("%d pixels differ (with maximum difference of %d) from reference image\n", + result->pixels_changed, result->max_diff); + + /* Then, if there are any different pixels, we give the pdiff code + * a crack at the images. If it decides that there are no visually + * discernible differences in any pixels, then we accept this + * result as good enough. */ + discernible_pixels_changed = pdiff_compare (surface_a, surface_b, + gamma, luminance, field_of_view); + if (discernible_pixels_changed == 0) { + result->pixels_changed = 0; + cairo_test_log ("But perceptual diff finds no visually discernible difference.\n" + "Accepting result.\n"); + } } void |