diff options
| author | Michael Brown | 2013-11-26 17:28:36 +0100 |
|---|---|---|
| committer | Michael Brown | 2013-11-27 12:27:50 +0100 |
| commit | 95851d13057440ddab531e6155fef2e7f3c35b74 (patch) | |
| tree | b0c7a067dea665955b4e564066e9c46378a59fe8 /src/include | |
| parent | [console] Pass escape sequence context to ANSI escape sequence handlers (diff) | |
| download | ipxe-95851d13057440ddab531e6155fef2e7f3c35b74.tar.gz ipxe-95851d13057440ddab531e6155fef2e7f3c35b74.tar.xz ipxe-95851d13057440ddab531e6155fef2e7f3c35b74.zip | |
[pixbuf] Add generic concept of a pixel buffer
Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include')
| -rw-r--r-- | src/include/ipxe/pixbuf.h | 55 |
1 files changed, 55 insertions, 0 deletions
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 <stddef.h> +#include <ipxe/refcnt.h> +#include <ipxe/uaccess.h> + +/** 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 */ |
