[cairo] [PATCH 1/3 v2] test: Add test for image downscaling

Bryce W. Harrington b.harrington at samsung.com
Tue Sep 10 09:59:39 PDT 2013


On Tue, Sep 10, 2013 at 10:47:21AM +0200, Uli Schlachter wrote:
> On 10.09.2013 00:59, Bryce W. Harrington wrote:
> > This adds pixman-downscale.c, which tests correctness of PNG images
> > scaled down using pixman routines.
> > 
> > Signed-off-by: Bryce Harrington <b.harrington at samsung.com>
> > ---
> 
> This does not build:
> 
>   CC       cairo_test_suite-pixman-downscale.o
> pixman-downscale.c: In function ‘draw’:
> pixman-downscale.c:47:15: error: ‘WIDTH’ undeclared (first use in this function)
> pixman-downscale.c:47:15: note: each undeclared identifier is reported only once
> for each function it appears in
> pixman-downscale.c:48:15: error: ‘HEIGHT’ undeclared (first use in this function)

The fix for this is in the second patch.  I can move it to the first one
to clean this up.
 
> >  test/Makefile.sources                   |    1 +
> >  test/pixman-downscale.c                 |   68 +++++++++++++++++++++++++++++++
> >  test/quad-color.png                     |  Bin 0 -> 301 bytes
> >  test/reference/pixman-downscale.ref.png |  Bin 0 -> 191 bytes
> >  4 files changed, 69 insertions(+)
> >  create mode 100644 test/pixman-downscale.c
> >  create mode 100644 test/quad-color.png
> >  create mode 100644 test/reference/pixman-downscale.ref.png
> > 
> > diff --git a/test/Makefile.sources b/test/Makefile.sources
> > index 509c11c..9fbfb96 100644
> > --- a/test/Makefile.sources
> > +++ b/test/Makefile.sources
> > @@ -248,6 +248,7 @@ test_sources = \
> >  	pattern-get-type.c				\
> >  	pattern-getters.c				\
> >  	pdf-isolated-group.c				\
> > +	pixman-downscale.c				\
> >  	pixman-rotate.c					\
> >  	png.c						\
> >  	push-group.c					\
> > diff --git a/test/pixman-downscale.c b/test/pixman-downscale.c
> > new file mode 100644
> > index 0000000..0562015
> > --- /dev/null
> > +++ b/test/pixman-downscale.c
> > @@ -0,0 +1,68 @@
> > +/*
> > + * Copyright © 2013 Samsung Electronics
> > + *
> > + * Permission is hereby granted, free of charge, to any person
> > + * obtaining a copy of this software and associated documentation
> > + * files (the "Software"), to deal in the Software without
> > + * restriction, including without limitation the rights to use, copy,
> > + * modify, merge, publish, distribute, sublicense, and/or sell copies
> > + * of the Software, and to permit persons to whom the Software is
> > + * furnished to do so, subject to the following conditions:
> > + *
> > + * The above copyright notice and this permission notice shall be
> > + * included in all copies or substantial portions of the Software.
> > + *
> > + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> > + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> > + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
> > + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
> > + * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
> > + * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
> > + * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
> > + * SOFTWARE.
> > + *
> > + * Author: Bryce Harrington <b.harrington at samsung.com>
> > + */
> > +
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include <math.h>
> > +
> > +#include <cairo.h>
> > +
> > +#include "cairo-test.h"
> > +
> > +static const char *png_filename = "quad-color.png";
> 
> Shouldn't make much of a difference, but can you make this const char[] instead?
> (I only noticed this because you did the same in one of your other test suite
> patches.)

Sure

> > +
> > +/* Draw an image scaled down, with antialiasing disabled */
> > +static cairo_test_status_t
> > +draw (cairo_t *cr, int width, int height)
> > +{
> > +    const cairo_test_context_t *ctx = cairo_test_get_context (cr);
> > +    cairo_surface_t *image;
> > +    double x_scale, y_scale, scale;
> > +
> > +    cairo_set_source_rgb (cr, 1, 1, 1);
> > +    image = cairo_test_create_surface_from_png (ctx, png_filename);
> > +    x_scale = WIDTH * 1.0 / cairo_image_surface_get_width (image);
> > +    y_scale = HEIGHT * 1.0 / cairo_image_surface_get_height (image);
> > +    scale = fmin(x_scale, y_scale);
> > +
> > +    cairo_save (cr);
> > +    cairo_set_antialias (cr, CAIRO_ANTIALIAS_NONE);
> > +    cairo_pattern_set_filter (cairo_get_source (cr), CAIRO_FILTER_NEAREST);
> > +    cairo_scale (cr, scale, scale);
> > +    cairo_set_source_surface (cr, image, 0, 0);
> > +    cairo_paint (cr);
> > +    cairo_restore (cr);
> > +    cairo_surface_destroy (image);
> > +
> > +    return CAIRO_TEST_SUCCESS;
> > +}
> > +
> > +CAIRO_TEST (pixman_downscale,
> > +	    "Exposes errors when downscaling",
> > +	    "image, transform, raster", /* keywords */
> > +	    NULL, /* requirements */
> > +	    96, 96,
> > +	    NULL, draw)
> > diff --git a/test/quad-color.png b/test/quad-color.png
> > new file mode 100644
> > index 0000000000000000000000000000000000000000..0d68a82cc27532aa78fc12af7646f6821a730a2b
> > GIT binary patch
> > literal 301
> > zcmeAS at N?(olHy`uVBq!ia0vp^2_VeD1SE5RJ;(=AY)RhkE)4%caKYZ?lYt_SJY5_^
> > zD(1Ysy^*iUK*S+1>rej2(}h=B at 0d(;Js;WVUVNE%S1wQ;!=K59zYi43gs*v=>!Y8U
> > z_vgvq?cQM at omse;SR0!h92Y1A>{u^la;*65g4(k)k}t|wYjB7lNebZM8vKpTne!)c
> > zbN%i~M<*ZqX0g}kFdxELd^!~Z1T at ab2krlH<ByqM{lP1D%YXuKdqK|r at Q}6kF=t0)
> > R<@7`l*VEO{Wt~$(698O(XEy)<
> > 
> > literal 0
> > HcmV?d00001
> > 
> > diff --git a/test/reference/pixman-downscale.ref.png b/test/reference/pixman-downscale.ref.png
> > new file mode 100644
> > index 0000000000000000000000000000000000000000..df0f9c0d84f3f48d00fdb0f3f08ae587754a269d
> > GIT binary patch
> > literal 191
> > zcmeAS at N?(olHy`uVBq!ia0vp^5+KaM1SIoCSFHz9jKx9jP7LeL$-D$|I14-?iy0WW
> > zg+Z8+Vb&awa`qBWUsv|K>|BC!7IA*pm4QNmo-U3d7N_3^pXOpv;3&RWA0EGNU1}T4
> > zrIUAMg4_8gwy>{ZJlV~aSJYV)vi6&EaICP+3<LMb7lqjZ5!yx;9>LS69R3%PQJ;M;
> > gq~!8p8PysezC2Ei17|)i02<EV>FVdQ&MBb at 0ICT&&j0`b
> > 
> > literal 0
> > HcmV?d00001
> 
> Also, I don't know why, but the mail body is base64 encoded and contains dos
> line endings which "git am" does not like. This made it a little harder to apply
> the patch.

Probably because of the included binary image I guess?  Let me know if
there's some special incantation to give git format-patch / send-patch
to handle these better.  Otherwise, I'm also keeping the patches up to
date on my fdo branch.

Bryce


More information about the cairo mailing list