summaryrefslogtreecommitdiff
path: root/test/buffer-diff.h
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2006-08-31 04:01:10 -0700
committerCarl Worth <cworth@cworth.org>2006-08-31 04:01:10 -0700
commitd1834cca192fe6f8e429be0461fab6914e04024d (patch)
treebae8be8e3f1604d25682131660937c44a19a7e9b /test/buffer-diff.h
parentd52a1f762d33f3ada919b581e0d62f8ba1c2314c (diff)
downloadcairo-d1834cca192fe6f8e429be0461fab6914e04024d.tar.gz
test: Ignore single-bit errors for SVG backend.
The interface of the various buffer/image_diff functions is improved to provide the maximum pixel difference in addition to the number of pixels that differ. This value can then be used to compare against a per-backend tolerance. Currently I've set the SVG backend's tolerance to 1 to handle some issues we're currently seeing of single-bit differences on different systems, (but we're not exactly sure why yet). Also I improved the image_diff routines to properly report a status value on failure rather than the bogus value of -1 for pixels_changed.
Diffstat (limited to 'test/buffer-diff.h')
-rw-r--r--test/buffer-diff.h63
1 files changed, 47 insertions, 16 deletions
diff --git a/test/buffer-diff.h b/test/buffer-diff.h
index 2be2b3955..bef42cffe 100644
--- a/test/buffer-diff.h
+++ b/test/buffer-diff.h
@@ -1,36 +1,50 @@
/* imagediff - Compare two images
*
* Copyright © 2004 Richard D. Worth
+ * Copyright © 2006 Red Hat, Inc.
*
* Permission to use, copy, modify, distribute, and sell this software
* and its documentation for any purpose is hereby granted without
* fee, provided that the above copyright notice appear in all copies
* and that both that copyright notice and this permission notice
- * appear in supporting documentation, and that the name of Richard Worth
+ * appear in supporting documentation, and that the name of the authors
* not be used in advertising or publicity pertaining to distribution
* of the software without specific, written prior permission.
- * Richard Worth makes no representations about the suitability of this
+ * The authors make no representations about the suitability of this
* software for any purpose. It is provided "as is" without express
* or implied warranty.
*
- * RICHARD WORTH DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * THE AUTHORS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
- * NO EVENT SHALL RICHARD WORTH BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
* OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
* NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * Author: Richard D. Worth <richard@theworths.org> */
+ * Authors: Richard D. Worth <richard@theworths.org>
+ * Carl Worth <cworth@cworth.org>
+ */
#ifndef BUFFER_DIFF_H
#define BUFFER_DIFF_H
-/* Returns number of pixels changed.
+#include "cairo-test.h"
+
+typedef struct _buffer_diff_result {
+ unsigned int pixels_changed;
+ unsigned int max_diff;
+} buffer_diff_result_t;
+
+/* Compares two image buffers.
+ *
+ * Provides number of pixels changed and maximum single-channel
+ * difference in result.
+ *
* Also fills in a "diff" buffer intended to visually show where the
* images differ.
*/
-int
+void
buffer_diff (unsigned char *buf_a,
unsigned char *buf_b,
unsigned char *buf_diff,
@@ -38,13 +52,18 @@ buffer_diff (unsigned char *buf_a,
int height,
int stride_a,
int stride_b,
- int stride_diff);
+ int stride_diff,
+ buffer_diff_result_t *result);
-/* Returns number of pixels changed ignoring the alpha channel.
+/* Compares two image buffers ignoring the alpha channel.
+ *
+ * Provides number of pixels changed and maximum single-channel
+ * difference in result.
+ *
* Also fills in a "diff" buffer intended to visually show where the
* images differ.
*/
-int
+void
buffer_diff_noalpha (unsigned char *buf_a,
unsigned char *buf_b,
unsigned char *buf_diff,
@@ -52,29 +71,41 @@ buffer_diff_noalpha (unsigned char *buf_a,
int height,
int stride_a,
int stride_b,
- int stride_diff);
+ int stride_diff,
+ buffer_diff_result_t *result);
-/* Returns number of pixels changed, (or -1 on error).
+/* Compares two image buffers ignoring the alpha channel. A return
+ * value of CAIRO_STATUS_SUCCESS indicates that a comparison was made,
+ * (but the images may or may not differ). Failure modes include
+ * CAIRO_STATUS_FILE_NOT_FOUND, CAIRO_STATUS_READ_ERROR,
+ * CAIRO_STATUS_NO_MEMORY, and CAIRO_STATUS_SURFACE_TYPE_MISMATCH
+ * (which is used if the image sizes differ).
+ *
+ * Provides number of pixels changed and maximum single-channel
+ * difference in result.
+ *
* Also saves a "diff" image intended to visually show where the
* images differ.
*/
-int
+cairo_status_t
image_diff (const char *filename_a,
const char *filename_b,
const char *filename_diff,
int ax,
int ay,
int bx,
- int by);
+ int by,
+ buffer_diff_result_t *result);
/* Like image_diff, but blending the contents of b over white first. */
-int
+cairo_status_t
image_diff_flattened (const char *filename_a,
const char *filename_b,
const char *filename_diff,
int ax,
int ay,
int bx,
- int by);
+ int by,
+ buffer_diff_result_t *result);
#endif