2
0
mirror of https://github.com/xcat2/xNBA.git synced 2025-02-23 05:50:00 +00:00

[image] Add image_pixbuf() to create pixel buffer from image

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown 2013-11-27 01:13:18 +00:00
parent 2c161283d5
commit 09f31e9fc4
2 changed files with 40 additions and 3 deletions

View File

@ -456,3 +456,29 @@ int image_set_trust ( int require_trusted, int permanent ) {
return 0;
}
/**
* Create pixel buffer from image
*
* @v image Image
* @v pixbuf Pixel buffer to fill in
* @ret rc Return status code
*/
int image_pixbuf ( struct image *image, struct pixel_buffer **pixbuf ) {
int rc;
/* Check that this image can be used to create a pixel buffer */
if ( ( rc = image_probe ( image ) ) != 0 )
return rc;
if ( ! image->type->pixbuf )
return -ENOTSUP;
/* Try creating pixel buffer */
if ( ( rc = image->type->pixbuf ( image, pixbuf ) ) != 0 ) {
DBGC ( image, "IMAGE %s could not create pixel buffer: %s\n",
image->name, strerror ( rc ) );
return rc;
}
return 0;
}

View File

@ -16,6 +16,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
#include <ipxe/refcnt.h>
struct uri;
struct pixel_buffer;
struct image_type;
/** An executable image */
@ -74,9 +75,10 @@ struct image {
struct image_type {
/** Name of this image type */
char *name;
/** Probe image
/**
* Probe image
*
* @v image Executable image
* @v image Image
* @ret rc Return status code
*
* Return success if the image is of this image type.
@ -85,10 +87,18 @@ struct image_type {
/**
* Execute image
*
* @v image Executable image
* @v image Image
* @ret rc Return status code
*/
int ( * exec ) ( struct image *image );
/**
* Create pixel buffer from image
*
* @v image Image
* @v pixbuf Pixel buffer to fill in
* @ret rc Return status code
*/
int ( * pixbuf ) ( struct image *image, struct pixel_buffer **pixbuf );
};
/**
@ -159,6 +169,7 @@ extern int image_replace ( struct image *replacement );
extern int image_select ( struct image *image );
extern struct image * image_find_selected ( void );
extern int image_set_trust ( int require_trusted, int permanent );
extern int image_pixbuf ( struct image *image, struct pixel_buffer **pixbuf );
/**
* Increment reference count on an image