From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44547) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ysc5C-0002ds-Ei for qemu-devel@nongnu.org; Wed, 13 May 2015 15:12:43 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Ysc5B-0002cp-0w for qemu-devel@nongnu.org; Wed, 13 May 2015 15:12:42 -0400 Received: from greensocs.com ([193.104.36.180]:49237) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Ysc5A-0002cU-Mi for qemu-devel@nongnu.org; Wed, 13 May 2015 15:12:40 -0400 From: fred.konrad@greensocs.com Date: Wed, 13 May 2015 21:12:01 +0200 Message-Id: <1431544326-13372-4-git-send-email-fred.konrad@greensocs.com> In-Reply-To: <1431544326-13372-1-git-send-email-fred.konrad@greensocs.com> References: <1431544326-13372-1-git-send-email-fred.konrad@greensocs.com> Subject: [Qemu-devel] [PATCH 3/8] console: add qemu_alloc_display_format. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.crosthwaite@xilinx.com, mark.burton@greensocs.com, Gerd Hoffmann , hyunk@xilinx.com, fred.konrad@greensocs.com From: KONRAD Frederic This allows to create a surface with a different format than xrgb8888. Signed-off-by: KONRAD Frederic Cc: Gerd Hoffmann --- include/ui/console.h | 2 ++ ui/console.c | 25 ++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index e8b3a9e..e816182 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -206,6 +206,8 @@ DisplaySurface *qemu_create_displaysurface_guestmem(int width, int height, PixelFormat qemu_default_pixelformat(int bpp); DisplaySurface *qemu_create_displaysurface(int width, int height); +DisplaySurface *qemu_create_displaysurface_format(pixman_format_code_t format, + int width, int height); void qemu_free_displaysurface(DisplaySurface *surface); static inline int is_surface_bgr(DisplaySurface *surface) diff --git a/ui/console.c b/ui/console.c index 406c36b..5fc8473 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1226,20 +1226,29 @@ static QemuConsole *new_console(DisplayState *ds, console_type_t console_type, return s; } -static void qemu_alloc_display(DisplaySurface *surface, int width, int height) +static void qemu_alloc_display_format(DisplaySurface *surface, + pixman_format_code_t format, + int width, int height) { qemu_pixman_image_unref(surface->image); surface->image = NULL; - surface->format = PIXMAN_x8r8g8b8; + surface->format = format; surface->image = pixman_image_create_bits(surface->format, width, height, - NULL, width * 4); + NULL, + width * PIXMAN_FORMAT_BPP(format) + / 8); assert(surface->image != NULL); surface->flags = QEMU_ALLOCATED_FLAG; } +static void qemu_alloc_display(DisplaySurface *surface, int width, int height) +{ + qemu_alloc_display_format(surface, PIXMAN_x8r8g8b8, width, height); +} + DisplaySurface *qemu_create_displaysurface(int width, int height) { DisplaySurface *surface = g_new0(DisplaySurface, 1); @@ -1249,6 +1258,16 @@ DisplaySurface *qemu_create_displaysurface(int width, int height) return surface; } +DisplaySurface *qemu_create_displaysurface_format(pixman_format_code_t format, + int width, int height) +{ + DisplaySurface *surface = g_new0(DisplaySurface, 1); + + trace_displaysurface_create(surface, width, height); + qemu_alloc_display_format(surface, format, width, height); + return surface; +} + DisplaySurface *qemu_create_displaysurface_from(int width, int height, pixman_format_code_t format, int linesize, uint8_t *data) -- 1.9.0