mirror of https://github.com/ipxe/ipxe.git
[image] Add image_pixbuf() to create pixel buffer from image
Signed-off-by: Michael Brown <mcb30@ipxe.org>pull/17/head
parent
2c161283d5
commit
09f31e9fc4
|
@ -456,3 +456,29 @@ int image_set_trust ( int require_trusted, int permanent ) {
|
||||||
|
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
#include <ipxe/refcnt.h>
|
#include <ipxe/refcnt.h>
|
||||||
|
|
||||||
struct uri;
|
struct uri;
|
||||||
|
struct pixel_buffer;
|
||||||
struct image_type;
|
struct image_type;
|
||||||
|
|
||||||
/** An executable image */
|
/** An executable image */
|
||||||
|
@ -74,9 +75,10 @@ struct image {
|
||||||
struct image_type {
|
struct image_type {
|
||||||
/** Name of this image type */
|
/** Name of this image type */
|
||||||
char *name;
|
char *name;
|
||||||
/** Probe image
|
/**
|
||||||
|
* Probe image
|
||||||
*
|
*
|
||||||
* @v image Executable image
|
* @v image Image
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*
|
*
|
||||||
* Return success if the image is of this image type.
|
* Return success if the image is of this image type.
|
||||||
|
@ -85,10 +87,18 @@ struct image_type {
|
||||||
/**
|
/**
|
||||||
* Execute image
|
* Execute image
|
||||||
*
|
*
|
||||||
* @v image Executable image
|
* @v image Image
|
||||||
* @ret rc Return status code
|
* @ret rc Return status code
|
||||||
*/
|
*/
|
||||||
int ( * exec ) ( struct image *image );
|
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 int image_select ( struct image *image );
|
||||||
extern struct image * image_find_selected ( void );
|
extern struct image * image_find_selected ( void );
|
||||||
extern int image_set_trust ( int require_trusted, int permanent );
|
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
|
* Increment reference count on an image
|
||||||
|
|
Loading…
Reference in New Issue