]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[image] Add image_pixbuf() to create pixel buffer from image
authorMichael Brown <mcb30@ipxe.org>
Wed, 27 Nov 2013 01:13:18 +0000 (01:13 +0000)
committerMichael Brown <mcb30@ipxe.org>
Wed, 27 Nov 2013 11:27:50 +0000 (11:27 +0000)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/core/image.c
src/include/ipxe/image.h

index d9d91013e24baae734e2abb59621321e50f15835..ec44802383527d1dc75d34bbd7d20743b3041b6c 100644 (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;
+}
index 6022dce66b22f15d900af23f69b4f507c4c35b86..5d7080a75fa28a2ca720aff1d1041ef69d233ebd 100644 (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