From 95851d13057440ddab531e6155fef2e7f3c35b74 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 26 Nov 2013 16:28:36 +0000 Subject: [pixbuf] Add generic concept of a pixel buffer Signed-off-by: Michael Brown --- src/include/ipxe/pixbuf.h | 55 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/include/ipxe/pixbuf.h (limited to 'src/include') diff --git a/src/include/ipxe/pixbuf.h b/src/include/ipxe/pixbuf.h new file mode 100644 index 000000000..106b666e6 --- /dev/null +++ b/src/include/ipxe/pixbuf.h @@ -0,0 +1,55 @@ +#ifndef _IPXE_PIXBUF_H +#define _IPXE_PIXBUF_H + +/** @file + * + * Pixel buffer + * + */ + +FILE_LICENCE ( GPL2_OR_LATER ); + +#include +#include +#include + +/** A pixel buffer */ +struct pixel_buffer { + /** Reference count */ + struct refcnt refcnt; + /** Width */ + unsigned int width; + /** Height */ + unsigned int height; + /** 32-bit (8:8:8:8) xRGB pixel data, in host-endian order */ + userptr_t data; + /** Total length */ + size_t len; +}; + +/** + * Get reference to pixel buffer + * + * @v pixbuf Pixel buffer + * @ret pixbuf Pixel buffer + */ +static inline __attribute__ (( always_inline )) struct pixel_buffer * +pixbuf_get ( struct pixel_buffer *pixbuf ) { + ref_get ( &pixbuf->refcnt ); + return pixbuf; +} + +/** + * Drop reference to pixel buffer + * + * @v pixbuf Pixel buffer + */ +static inline __attribute__ (( always_inline )) void +pixbuf_put ( struct pixel_buffer *pixbuf ) { + ref_put ( &pixbuf->refcnt ); +} + +extern struct pixel_buffer * alloc_pixbuf ( unsigned int width, + unsigned int height ); + +#endif /* _IPXE_PIXBUF_H */ -- cgit v1.2.3-55-g7522