Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add some helper functions which will be put into use by following patches. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
- Loading branch information
Showing
3 changed files
with
93 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 */ |