pixman: helper functions
Add some helper functions which will be put into use by following patches. Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
This commit is contained in:
		
							parent
							
								
									e2134eb922
								
							
						
					
					
						commit
						d2ec7e24a2
					
				| @ -65,6 +65,7 @@ common-obj-y = $(block-obj-y) blockdev.o blockdev-nbd.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 | ||||
|  | ||||
							
								
								
									
										60
									
								
								qemu-pixman.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										60
									
								
								qemu-pixman.c
									
									
									
									
									
										Normal file
									
								
							| @ -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); | ||||
| } | ||||
							
								
								
									
										32
									
								
								qemu-pixman.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								qemu-pixman.h
									
									
									
									
									
										Normal file
									
								
							| @ -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 */ | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Gerd Hoffmann
						Gerd Hoffmann