summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--common/canvas_utils.c33
-rw-r--r--common/canvas_utils.h6
2 files changed, 38 insertions, 1 deletions
diff --git a/common/canvas_utils.c b/common/canvas_utils.c
index 6ffd8565..1e97e872 100644
--- a/common/canvas_utils.c
+++ b/common/canvas_utils.c
@@ -82,6 +82,29 @@ pixman_image_add_data(pixman_image_t *image)
return data;
}
+void
+spice_pixman_image_set_format(pixman_image_t *image,
+ pixman_format_code_t format)
+{
+ PixmanData *data;
+
+ data = pixman_image_add_data(image);
+ data->format = format;
+}
+
+pixman_format_code_t
+spice_pixman_image_get_format(pixman_image_t *image)
+{
+ PixmanData *data;
+
+ data = (PixmanData *)pixman_image_get_destroy_data(image);
+ if (data != NULL &&
+ data->format != 0)
+ return data->format;
+
+ CANVAS_ERROR("Unknown pixman image type");
+}
+
static inline pixman_image_t *__surface_create_stride(pixman_format_code_t format, int width, int height,
int stride)
{
@@ -106,6 +129,7 @@ static inline pixman_image_t *__surface_create_stride(pixman_format_code_t forma
pixman_data = pixman_image_add_data(surface);
pixman_data->data = data;
+ pixman_data->format = format;
return surface;
}
@@ -190,6 +214,7 @@ pixman_image_t * surface_create(pixman_format_code_t format, int width, int heig
CANVAS_ERROR("create surface failed, out of memory");
}
pixman_data = pixman_image_add_data(surface);
+ pixman_data->format = format;
pixman_data->bitmap = bitmap;
pixman_data->mutex = mutex;
gdi_handlers++;
@@ -197,7 +222,13 @@ pixman_image_t * surface_create(pixman_format_code_t format, int width, int heig
} else {
#endif
if (top_down) {
- return pixman_image_create_bits(format, width, height, NULL, 0);
+ pixman_image_t *surface;
+ PixmanData *data;
+
+ surface = pixman_image_create_bits(format, width, height, NULL, 0);
+ data = pixman_image_add_data(surface);
+ data->format = format;
+ return surface;
} else {
// NOTE: we assume here that the lz decoders always decode to RGB32.
int stride = 0;
diff --git a/common/canvas_utils.h b/common/canvas_utils.h
index 1c78ffac..b81a6f91 100644
--- a/common/canvas_utils.h
+++ b/common/canvas_utils.h
@@ -30,8 +30,14 @@ typedef struct PixmanData {
HANDLE mutex;
#endif
uint8_t *data;
+ pixman_format_code_t format;
} PixmanData;
+void spice_pixman_image_set_format(pixman_image_t *image,
+ pixman_format_code_t format);
+pixman_format_code_t spice_pixman_image_get_format(pixman_image_t *image);
+
+
#ifdef WIN32
pixman_image_t *surface_create(HDC dc, pixman_format_code_t format,
int width, int height, int top_down);