All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gerd Hoffmann <kraxel@redhat.com>
To: qemu-devel@nongnu.org
Cc: Gerd Hoffmann <kraxel@redhat.com>
Subject: [Qemu-devel] [PATCH 04/14] pixman: helper functions
Date: Wed, 17 Oct 2012 15:29:04 +0200	[thread overview]
Message-ID: <1350480554-23281-5-git-send-email-kraxel@redhat.com> (raw)
In-Reply-To: <1350480554-23281-1-git-send-email-kraxel@redhat.com>

Add some helper functions which will be put
into use by following patches.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
---
 Makefile.objs |    1 +
 qemu-pixman.c |   60 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 qemu-pixman.h |   32 ++++++++++++++++++++++++++++++
 3 files changed, 93 insertions(+), 0 deletions(-)
 create mode 100644 qemu-pixman.c
 create mode 100644 qemu-pixman.h

diff --git a/Makefile.objs b/Makefile.objs
index 74b3542..73dd3bc 100644
--- a/Makefile.objs
+++ b/Makefile.objs
@@ -64,6 +64,7 @@ common-obj-y = $(block-obj-y) blockdev.o block/
 common-obj-y += net.o net/
 common-obj-y += qom/
 common-obj-y += readline.o console.o cursor.o
+common-obj-y += qemu-pixman.o
 common-obj-y += $(oslib-obj-y)
 common-obj-$(CONFIG_WIN32) += os-win32.o
 common-obj-$(CONFIG_POSIX) += os-posix.o
diff --git a/qemu-pixman.c b/qemu-pixman.c
new file mode 100644
index 0000000..7547ed7
--- /dev/null
+++ b/qemu-pixman.c
@@ -0,0 +1,60 @@
+#include "qemu-pixman.h"
+
+int qemu_pixman_get_type(int rshift, int gshift, int bshift)
+{
+    int type = PIXMAN_TYPE_OTHER;
+
+    if (rshift > gshift && gshift > bshift) {
+        if (bshift == 0) {
+            type = PIXMAN_TYPE_ARGB;
+        } else {
+#if PIXMAN_VERSION >= PIXMAN_VERSION_ENCODE(0, 21, 8)
+            type = PIXMAN_TYPE_RGBA;
+#endif
+        }
+    } else if (rshift < gshift && gshift < bshift) {
+        if (rshift == 0) {
+            type = PIXMAN_TYPE_ABGR;
+        } else {
+            type = PIXMAN_TYPE_BGRA;
+        }
+    }
+    return type;
+}
+
+pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf)
+{
+    pixman_format_code_t format;
+    int type;
+
+    type = qemu_pixman_get_type(pf->rshift, pf->gshift, pf->bshift);
+    format = PIXMAN_FORMAT(pf->bits_per_pixel, type,
+                           pf->abits, pf->rbits, pf->gbits, pf->bbits);
+    if (!pixman_format_supported_source(format)) {
+        return 0;
+    }
+    return format;
+}
+
+pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
+                                           int width)
+{
+    pixman_image_t *image = pixman_image_create_bits(format, width, 1, NULL, 0);
+    assert(image != NULL);
+    return image;
+}
+
+void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb,
+                              int width, int y)
+{
+    pixman_image_composite(PIXMAN_OP_SRC, fb, NULL, linebuf,
+                           0, y, 0, 0, 0, 0, width, 1);
+}
+
+void qemu_pixman_image_unref(pixman_image_t *image)
+{
+    if (image == NULL) {
+        return;
+    }
+    pixman_image_unref(image);
+}
diff --git a/qemu-pixman.h b/qemu-pixman.h
new file mode 100644
index 0000000..7652c41
--- /dev/null
+++ b/qemu-pixman.h
@@ -0,0 +1,32 @@
+#ifndef QEMU_PIXMAN_H
+#define QEMU_PIXMAN_H
+
+#include <pixman.h>
+
+#include "console.h"
+
+/*
+ * pixman image formats are defined to be native endian,
+ * that means host byte order on qemu.  So we go define
+ * fixed formats here for cases where it is needed, like
+ * feeding libjpeg / libpng and writing screenshots.
+ */
+
+#ifdef HOST_WORDS_BIGENDIAN
+# define PIXMAN_BE_r8g8b8     PIXMAN_r8g8b8
+#else
+# define PIXMAN_BE_r8g8b8     PIXMAN_b8g8r8
+#endif
+
+/* -------------------------------------------------------------------- */
+
+int qemu_pixman_get_type(int rshift, int gshift, int bshift);
+pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf);
+
+pixman_image_t *qemu_pixman_linebuf_create(pixman_format_code_t format,
+                                           int width);
+void qemu_pixman_linebuf_fill(pixman_image_t *linebuf, pixman_image_t *fb,
+                              int width, int y);
+void qemu_pixman_image_unref(pixman_image_t *image);
+
+#endif /* QEMU_PIXMAN_H */
-- 
1.7.1

  parent reply	other threads:[~2012-10-17 13:29 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-10-17 13:29 [Qemu-devel] [PATCH 00/14] pixman patch series Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 01/14] console: remove DisplayAllocator Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 02/14] pixman: add submodule Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 03/14] pixman: windup in configure & makefiles Gerd Hoffmann
2012-10-17 14:26   ` Paolo Bonzini
2012-11-22 12:34   ` Stefano Stabellini
2012-11-22 12:59     ` Gerd Hoffmann
2012-10-17 13:29 ` Gerd Hoffmann [this message]
2012-10-17 13:29 ` [Qemu-devel] [PATCH 05/14] pixman: add pixman image to DisplaySurface Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 06/14] console: make qemu_alloc_display static Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 07/14] console: don't set PixelFormat alpha fields for 32bpp Gerd Hoffmann
2012-10-19 17:02   ` Stefano Stabellini
2012-10-22  5:26     ` Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 08/14] qxl: stop direct access to DisplaySurface fields Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 09/14] vga: " Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 10/14] pixman: switch screendump function Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 11/14] pixman/vnc: use pixman images in vnc Gerd Hoffmann
2012-10-19 18:04   ` Stefano Stabellini
2012-10-22  5:40     ` Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 12/14] pixman/vnc: remove rgb_prepare_row* functions Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 13/14] pixman/vnc: remove dead code Gerd Hoffmann
2012-10-17 13:29 ` [Qemu-devel] [PATCH 14/14] pixman: drop obsolete fields from DisplaySurface Gerd Hoffmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1350480554-23281-5-git-send-email-kraxel@redhat.com \
    --to=kraxel@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.