[Intel-gfx] [PATCH i-g-t 2/2] lib: load images from the data directory in igt_paint_image

Thomas Wood thomas.wood at intel.com
Mon Apr 13 09:48:36 PDT 2015


Update igt_paint_image so that it can read images from the package data
directory.

Signed-off-by: Thomas Wood <thomas.wood at intel.com>
---
 lib/Android.mk      |  2 +-
 lib/Makefile.am     |  3 ++-
 lib/igt_fb.c        | 23 +++++++++++++++++------
 tests/testdisplay.c | 35 ++---------------------------------
 4 files changed, 22 insertions(+), 41 deletions(-)

diff --git a/lib/Android.mk b/lib/Android.mk
index 2251c15..1a7cf33 100644
--- a/lib/Android.mk
+++ b/lib/Android.mk
@@ -35,7 +35,7 @@ LOCAL_SHARED_LIBRARIES := libpciaccess  \
 ifeq ("${ANDROID_HAS_CAIRO}", "1")
     skip_lib_list :=
     LOCAL_C_INCLUDES += $(ANDROID_BUILD_TOP)/external/cairo-1.12.16/src
-    LOCAL_CFLAGS += -DANDROID_HAS_CAIRO=1 -DIGT_DATADIR=\".\"
+    LOCAL_CFLAGS += -DANDROID_HAS_CAIRO=1 -DIGT_DATADIR=\".\" -DIGT_SRCDIR=\".\"
 else
 skip_lib_list := \
     igt_kms.c \
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 870b1a1..c74e211 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -10,7 +10,8 @@ noinst_HEADERS = check-ndebug.h
 
 AM_CPPFLAGS = -I$(top_srcdir)
 AM_CFLAGS = $(DRM_CFLAGS) $(CWARNFLAGS) $(LIBUNWIND_CFLAGS) $(DEBUG_CFLAGS) \
-	    -DIGT_DATADIR=\""$(abs_top_srcdir)/tests"\" \
+	    -DIGT_SRCDIR=\""$(abs_top_srcdir)/tests"\" \
+	    -DIGT_DATADIR=\""$(pkgdatadir)"\" \
 	    -DIGT_LOG_DOMAIN=\""$(subst _,-,$*)"\" \
 	    -pthread
 
diff --git a/lib/igt_fb.c b/lib/igt_fb.c
index ce5a102..6dc22bb 100644
--- a/lib/igt_fb.c
+++ b/lib/igt_fb.c
@@ -338,6 +338,15 @@ void igt_paint_test_pattern(cairo_t *cr, int width, int height)
 	igt_assert(!cairo_status(cr));
 }
 
+static cairo_status_t
+stdio_read_func(void *closure, unsigned char* data, unsigned int size)
+{
+	if (fread(data, 1, size, (FILE*)closure) != size)
+		return CAIRO_STATUS_READ_ERROR;
+
+	return CAIRO_STATUS_SUCCESS;
+}
+
 /**
  * igt_paint_image:
  * @cr: cairo drawing context
@@ -347,9 +356,8 @@ void igt_paint_test_pattern(cairo_t *cr, int width, int height)
  * @dst_width: width of the destination rectangle
  * @dst_height: height of the destination rectangle
  *
- * This function can be used to draw a scaled version of the supplied png image.
- * This is currently only used by the CR-code based testing in the "testdisplay"
- * testcase.
+ * This function can be used to draw a scaled version of the supplied png image,
+ * which is loaded from the package data directory.
  */
 void igt_paint_image(cairo_t *cr, const char *filename,
 		     int dst_x, int dst_y, int dst_width, int dst_height)
@@ -357,8 +365,11 @@ 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(filename);
+	image = cairo_image_surface_create_from_png_stream(&stdio_read_func, f);
 	igt_assert(cairo_surface_status(image) == CAIRO_STATUS_SUCCESS);
 
 	img_width = cairo_image_surface_get_width(image);
@@ -605,10 +616,10 @@ unsigned int igt_create_stereo_fb(int drm_fd, drmModeModeInfo *mode,
 			      tiling, &fb);
 	cr = igt_get_cairo_ctx(drm_fd, &fb);
 
-	igt_paint_image(cr, IGT_DATADIR"/1080p-left.png",
+	igt_paint_image(cr, "1080p-left.png",
 			layout.left.x, layout.left.y,
 			layout.left.width, layout.left.height);
-	igt_paint_image(cr, IGT_DATADIR"/1080p-right.png",
+	igt_paint_image(cr, "1080p-right.png",
 			layout.right.x, layout.right.y,
 			layout.right.width, layout.right.height);
 
diff --git a/tests/testdisplay.c b/tests/testdisplay.c
index 58f56a3..9068a95 100644
--- a/tests/testdisplay.c
+++ b/tests/testdisplay.c
@@ -239,21 +239,9 @@ paint_color_key(struct igt_fb *fb_info)
 	munmap(fb_ptr, fb_info->size);
 }
 
-static cairo_status_t
-stdio_read_func(void* closure, unsigned char* data, unsigned int size)
-{
-	if (fread (data, 1, size, (FILE*)closure) != size)
-		return CAIRO_STATUS_READ_ERROR;
-	return CAIRO_STATUS_SUCCESS;
-}
-
 static void paint_image(cairo_t *cr, const char *file)
 {
-	int img_x, img_y, img_w, img_h, img_w_o, img_h_o;
-	double img_w_scale, img_h_scale;
-
-	cairo_surface_t *image;
-	FILE* fp;
+	int img_x, img_y, img_w, img_h;
 
 	img_y = height * (0.10 );
 	img_h = height * 0.08 * 4;
@@ -261,26 +249,7 @@ static void paint_image(cairo_t *cr, const char *file)
 
 	img_x = (width / 2) - (img_w / 2);
 
-	fp = igt_fopen_data(file);
-	if (!fp)
-                return;
-	image = cairo_image_surface_create_from_png_stream(&stdio_read_func,
-							   (void*)fp);
-
-	img_w_o = cairo_image_surface_get_width(image);
-	img_h_o = cairo_image_surface_get_height(image);
-
-	cairo_translate(cr, img_x, img_y);
-
-	img_w_scale = (double)img_w / (double)img_w_o;
-	img_h_scale = (double)img_h / (double)img_h_o;
-	cairo_scale(cr, img_w_scale, img_h_scale);
-
-	cairo_set_source_surface(cr, image, 0, 0);
-	cairo_scale(cr, 1, 1);
-
-	cairo_paint(cr);
-	cairo_surface_destroy(image);
+	igt_paint_image(cr, file, img_x, img_y, img_h, img_w);
 }
 
 static void paint_output_info(struct connector *c, struct igt_fb *fb)
-- 
2.1.0



More information about the Intel-gfx mailing list