[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL v2 1/8] console: add qemu_pixelformat_from_pixman
From: |
Gerd Hoffmann |
Subject: |
[Qemu-devel] [PULL v2 1/8] console: add qemu_pixelformat_from_pixman |
Date: |
Wed, 10 Sep 2014 12:56:36 +0200 |
Function to convert pixman format codes to qemu PixelFormat.
[ Benjamin Herrenschmidt: fix BGRA+RGBA shifts ]
Signed-off-by: Gerd Hoffmann <address@hidden>
---
include/ui/qemu-pixman.h | 1 +
ui/qemu-pixman.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+)
diff --git a/include/ui/qemu-pixman.h b/include/ui/qemu-pixman.h
index ba970f8..090a3e2 100644
--- a/include/ui/qemu-pixman.h
+++ b/include/ui/qemu-pixman.h
@@ -33,6 +33,7 @@
/* -------------------------------------------------------------------- */
+PixelFormat qemu_pixelformat_from_pixman(pixman_format_code_t format);
int qemu_pixman_get_type(int rshift, int gshift, int bshift);
pixman_format_code_t qemu_pixman_get_format(PixelFormat *pf);
diff --git a/ui/qemu-pixman.c b/ui/qemu-pixman.c
index 254bd8c..bdc1439 100644
--- a/ui/qemu-pixman.c
+++ b/ui/qemu-pixman.c
@@ -6,6 +6,62 @@
#include "qemu-common.h"
#include "ui/console.h"
+PixelFormat qemu_pixelformat_from_pixman(pixman_format_code_t format)
+{
+ PixelFormat pf;
+ uint8_t bpp;
+
+ bpp = pf.bits_per_pixel = PIXMAN_FORMAT_BPP(format);
+ pf.bytes_per_pixel = PIXMAN_FORMAT_BPP(format) / 8;
+ pf.depth = PIXMAN_FORMAT_DEPTH(format);
+
+ pf.abits = PIXMAN_FORMAT_A(format);
+ pf.rbits = PIXMAN_FORMAT_R(format);
+ pf.gbits = PIXMAN_FORMAT_G(format);
+ pf.bbits = PIXMAN_FORMAT_B(format);
+
+ switch (PIXMAN_FORMAT_TYPE(format)) {
+ case PIXMAN_TYPE_ARGB:
+ pf.ashift = pf.bbits + pf.gbits + pf.rbits;
+ pf.rshift = pf.bbits + pf.gbits;
+ pf.gshift = pf.bbits;
+ pf.bshift = 0;
+ break;
+ case PIXMAN_TYPE_ABGR:
+ pf.ashift = pf.rbits + pf.gbits + pf.bbits;
+ pf.bshift = pf.rbits + pf.gbits;
+ pf.gshift = pf.rbits;
+ pf.rshift = 0;
+ break;
+ case PIXMAN_TYPE_BGRA:
+ pf.bshift = bpp - pf.bbits;
+ pf.gshift = bpp - (pf.bbits + pf.gbits);
+ pf.rshift = bpp - (pf.bbits + pf.gbits + pf.rbits);
+ pf.ashift = 0;
+ break;
+ case PIXMAN_TYPE_RGBA:
+ pf.rshift = bpp - pf.rbits;
+ pf.gshift = bpp - (pf.rbits + pf.gbits);
+ pf.bshift = bpp - (pf.rbits + pf.gbits + pf.bbits);
+ pf.ashift = 0;
+ break;
+ default:
+ g_assert_not_reached();
+ break;
+ }
+
+ pf.amax = (1 << pf.abits) - 1;
+ pf.rmax = (1 << pf.rbits) - 1;
+ pf.gmax = (1 << pf.gbits) - 1;
+ pf.bmax = (1 << pf.bbits) - 1;
+ pf.amask = pf.amax << pf.ashift;
+ pf.rmask = pf.rmax << pf.rshift;
+ pf.gmask = pf.gmax << pf.gshift;
+ pf.bmask = pf.bmax << pf.bshift;
+
+ return pf;
+}
+
int qemu_pixman_get_type(int rshift, int gshift, int bshift)
{
int type = PIXMAN_TYPE_OTHER;
--
1.8.3.1
- [Qemu-devel] [PULL v2 0/8] console: pixman conversion continued, Gerd Hoffmann, 2014/09/10
- [Qemu-devel] [PULL v2 1/8] console: add qemu_pixelformat_from_pixman,
Gerd Hoffmann <=
- [Qemu-devel] [PULL v2 2/8] console: add qemu_default_pixman_format, Gerd Hoffmann, 2014/09/10
- [Qemu-devel] [PULL v2 3/8] console: reimplement qemu_default_pixelformat, Gerd Hoffmann, 2014/09/10
- [Qemu-devel] [PULL v2 8/8] console: Remove unused QEMU_BIG_ENDIAN_FLAG, Gerd Hoffmann, 2014/09/10
- [Qemu-devel] [PULL v2 5/8] console: add qemu_create_displaysurface_guestmem, Gerd Hoffmann, 2014/09/10
- [Qemu-devel] [PULL v2 6/8] console: add dpy_gfx_update_dirty, Gerd Hoffmann, 2014/09/10
- [Qemu-devel] [PULL v2 7/8] console: add qemu_pixman_linebuf_copy, Gerd Hoffmann, 2014/09/10
- [Qemu-devel] [PULL v2 4/8] console: stop using PixelFormat, Gerd Hoffmann, 2014/09/10
- Re: [Qemu-devel] [PULL v2 0/8] console: pixman conversion continued, Peter Maydell, 2014/09/11