From 2afd66eb55996500499eb3bcc39c66ff042679c8 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Fri, 29 Jul 2016 15:58:59 +0100 Subject: [PATCH] [pixbuf] Enable PNG format by default Enable IMAGE_PNG (but not IMAGE_PNM) by default, and drag in the relevant objects only when image_pixbuf() is present in the binary. Signed-off-by: Michael Brown --- src/config/config.c | 6 ------ src/config/config_pixbuf.c | 39 ++++++++++++++++++++++++++++++++++++++ src/config/general.h | 2 +- src/core/image.c | 24 ----------------------- src/core/pixbuf.c | 32 +++++++++++++++++++++++++++++++ src/include/ipxe/errfile.h | 1 + 6 files changed, 73 insertions(+), 31 deletions(-) create mode 100644 src/config/config_pixbuf.c diff --git a/src/config/config.c b/src/config/config.c index e24cfe0d..c6683261 100644 --- a/src/config/config.c +++ b/src/config/config.c @@ -182,12 +182,6 @@ REQUIRE_OBJECT ( efi_image ); #ifdef IMAGE_SDI REQUIRE_OBJECT ( sdi ); #endif -#ifdef IMAGE_PNM -REQUIRE_OBJECT ( pnm ); -#endif -#ifdef IMAGE_PNG -REQUIRE_OBJECT ( png ); -#endif /* * Drag in all requested commands diff --git a/src/config/config_pixbuf.c b/src/config/config_pixbuf.c new file mode 100644 index 00000000..f8ff59da --- /dev/null +++ b/src/config/config_pixbuf.c @@ -0,0 +1,39 @@ +/* + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA + * 02110-1301, USA. + * + * You can also choose to distribute this program under the terms of + * the Unmodified Binary Distribution Licence (as given in the file + * COPYING.UBDL), provided that you have satisfied its requirements. + */ + +FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); + +#include + +/** @file + * + * Pixel buffer file format configuration + * + */ + +PROVIDE_REQUIRING_SYMBOL(); + +#ifdef IMAGE_PNM +REQUIRE_OBJECT ( pnm ); +#endif +#ifdef IMAGE_PNG +REQUIRE_OBJECT ( png ); +#endif diff --git a/src/config/general.h b/src/config/general.h index 38d629cc..4b990489 100644 --- a/src/config/general.h +++ b/src/config/general.h @@ -111,7 +111,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); //#define IMAGE_EFI /* EFI image support */ //#define IMAGE_SDI /* SDI image support */ //#define IMAGE_PNM /* PNM image support */ -//#define IMAGE_PNG /* PNG image support */ +#define IMAGE_PNG /* PNG image support */ #define IMAGE_DER /* DER image support */ #define IMAGE_PEM /* PEM image support */ diff --git a/src/core/image.c b/src/core/image.c index a185b82f..078ce1bb 100644 --- a/src/core/image.c +++ b/src/core/image.c @@ -481,27 +481,3 @@ 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 ( ! ( image->type && 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; -} diff --git a/src/core/pixbuf.c b/src/core/pixbuf.c index c12bd3c0..4742d285 100644 --- a/src/core/pixbuf.c +++ b/src/core/pixbuf.c @@ -30,7 +30,9 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); */ #include +#include #include +#include #include /** @@ -82,3 +84,33 @@ struct pixel_buffer * alloc_pixbuf ( unsigned int width, unsigned int height ) { err_alloc_pixbuf: return NULL; } + +/** + * 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 ( ! ( image->type && 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; +} + +/* Drag in objects via image_pixbuf() */ +REQUIRING_SYMBOL ( image_pixbuf ); + +/* Drag in pixel buffer image formats */ +REQUIRE_OBJECT ( config_pixbuf ); diff --git a/src/include/ipxe/errfile.h b/src/include/ipxe/errfile.h index f28e5894..9ec22fb0 100644 --- a/src/include/ipxe/errfile.h +++ b/src/include/ipxe/errfile.h @@ -70,6 +70,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL ); #define ERRFILE_ansicoldef ( ERRFILE_CORE | 0x001e0000 ) #define ERRFILE_fault ( ERRFILE_CORE | 0x001f0000 ) #define ERRFILE_blocktrans ( ERRFILE_CORE | 0x00200000 ) +#define ERRFILE_pixbuf ( ERRFILE_CORE | 0x00210000 ) #define ERRFILE_eisa ( ERRFILE_DRIVER | 0x00000000 ) #define ERRFILE_isa ( ERRFILE_DRIVER | 0x00010000 )