[Intel-gfx] [PATCH i-g-t 3/6] lib/igt_fb: Add igt_cairo_image_surface_create_from_png()
Petri Latvala
petri.latvala at intel.com
Fri Sep 22 09:52:59 UTC 2017
On Thu, Sep 21, 2017 at 05:39:30PM +0300, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> Raw usage of cairo_image_surface_create_from_png() doesn't work
> since it doesn't know about IGT_DATADIR and IGT_SRCDIR. Let's extract
> the helper from igt_paint_image() that uses igt_fopen_data() +
> cairo_image_surface_create_from_png_stream() and call it
> igt_cairo_image_surface_create_from_png_file().
s/from_png_file/from_png/
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
Thanks for fixing this.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92248
(Not sure if this patch fixes it yet or if CI switch to make install -deployment is also needed)
kms_plane_fitting doesn't seem to have a separate bug report.
Reviewed-by: Petri Latvala <petri.latvala at intel.com>
> ---
> lib/igt_fb.c | 21 ++++++++++++++-------
> lib/igt_fb.h | 1 +
> 2 files changed, 15 insertions(+), 7 deletions(-)
>
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index 95434a699dcf..d4eaed71acef 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -583,6 +583,18 @@ stdio_read_func(void *closure, unsigned char* data, unsigned int size)
> return CAIRO_STATUS_SUCCESS;
> }
>
> +cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename)
> +{
> + cairo_surface_t *image;
> + FILE *f;
> +
> + f = igt_fopen_data(filename);
> + image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
> + fclose(f);
> +
> + return image;
> +}
> +
> /**
> * igt_paint_image:
> * @cr: cairo drawing context
> @@ -601,11 +613,8 @@ void igt_paint_image(cairo_t *cr, const char *filename,
> cairo_surface_t *image;
> int img_width, img_height;
> double scale_x, scale_y;
> - FILE* f;
> -
> - f = igt_fopen_data(filename);
>
> - image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
> + image = igt_cairo_image_surface_create_from_png(filename);
> igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
>
> img_width = cairo_image_surface_get_width(image);
> @@ -624,8 +633,6 @@ void igt_paint_image(cairo_t *cr, const char *filename,
> cairo_surface_destroy(image);
>
> cairo_restore(cr);
> -
> - fclose(f);
> }
>
> /**
> @@ -877,7 +884,7 @@ unsigned int igt_create_image_fb(int fd, int width, int height,
> uint32_t fb_id;
> cairo_t *cr;
>
> - image = cairo_image_surface_create_from_png(filename);
> + image = igt_cairo_image_surface_create_from_png(filename);
> igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
> if (width == 0)
> width = cairo_image_surface_get_width(image);
> diff --git a/lib/igt_fb.h b/lib/igt_fb.h
> index a193a1e7572d..3f549036abc5 100644
> --- a/lib/igt_fb.h
> +++ b/lib/igt_fb.h
> @@ -136,6 +136,7 @@ uint64_t igt_fb_tiling_to_mod(uint64_t tiling);
>
> /* cairo-based painting */
> cairo_surface_t *igt_get_cairo_surface(int fd, struct igt_fb *fb);
> +cairo_surface_t *igt_cairo_image_surface_create_from_png(const char *filename);
> cairo_t *igt_get_cairo_ctx(int fd, struct igt_fb *fb);
> void igt_paint_color(cairo_t *cr, int x, int y, int w, int h,
> double r, double g, double b);
> --
> 2.13.5
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
More information about the Intel-gfx
mailing list