Patches 2-5 Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com>
On 2015-11-08 21:23:41, Ruiyu Ni wrote: > The library itself doesn't provide any image decoding capabilities but > manages the different image decoders. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Ruiyu Ni <ruiyu...@intel.com> > Cc: Feng Tian <feng.t...@intel.com> > --- > MdeModulePkg/Include/Library/ImageDecoderLib.h | 76 +++++++++++++ > .../Library/ImageDecoderLib/ImageDecoderLib.c | 121 > +++++++++++++++++++++ > .../Library/ImageDecoderLib/ImageDecoderLib.inf | 42 +++++++ > MdeModulePkg/MdeModulePkg.dec | 4 + > MdeModulePkg/MdeModulePkg.dsc | 2 + > 5 files changed, 245 insertions(+) > create mode 100644 MdeModulePkg/Include/Library/ImageDecoderLib.h > create mode 100644 MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.c > create mode 100644 MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.inf > > diff --git a/MdeModulePkg/Include/Library/ImageDecoderLib.h > b/MdeModulePkg/Include/Library/ImageDecoderLib.h > new file mode 100644 > index 0000000..928a094 > --- /dev/null > +++ b/MdeModulePkg/Include/Library/ImageDecoderLib.h > @@ -0,0 +1,76 @@ > +/** @file > + This library provides image decoding service by managing the different > + image decoding libraries. > + > +Copyright (c) 2015, Intel Corporation. All rights reserved.<BR> > +This program and the accompanying materials are licensed and made available > under > +the terms and conditions of the BSD License that accompanies this > distribution. > +The full text of the license may be found at > +http://opensource.org/licenses/bsd-license.php. > + > +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > + > +**/ > +#ifndef __IMAGE_DECODER_LIB_H__ > +#define __IMAGE_DECODER_LIB_H__ > +#include <Protocol/PlatformLogo.h> > + > +typedef > +EFI_STATUS > +(EFIAPI *DECODE_IMAGE)( > + IN IMAGE_FORMAT ImageFormat, > + IN UINT8 *Image, > + IN UINTN ImageSize, > + OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL **GopBlt, > + OUT UINTN *GopBltSize, > + OUT UINTN *PixelWidth, > + OUT UINTN *PixelHeight > + ); > + > +/** > + Convert a graphics image to a callee allocated GOP blt buffer. > + > + @param ImageFormat Format of the image file. > + @param Image Pointer to image file. > + @param ImageSize Number of bytes in Image. > + @param GopBlt Buffer containing GOP version of Image. > + @param GopBltSize Size of GopBlt in bytes. > + @param PixelWidth Width of GopBlt/Image in pixels. > + @param PixelHeight Height of GopBlt/Image in pixels. > + > + @retval EFI_SUCCESS GopBlt and GopBltSize are returned. > + @retval EFI_INVALID_PARAMETER GopBlt or GopBltSize is NULL. > + @retval EFI_INVALID_PARAMETER Image is NULL or ImageSize is 0. > + @retval EFI_UNSUPPORTED Image is not supported. > + @retval EFI_OUT_OF_RESOURCES No enough buffer to allocate. > + > +**/ > +EFI_STATUS > +EFIAPI > +DecodeImage ( > + IN IMAGE_FORMAT ImageFormat, > + IN UINT8 *Image, > + IN UINTN ImageSize, > + OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL **GopBlt, > + OUT UINTN *GopBltSize, > + OUT UINTN *PixelWidth, > + OUT UINTN *PixelHeight > + ); > + > +/** > + Register an image decoder. > + > + @param Decoder An image decoder. > + > + @retval EFI_SUCCESS The decoder was successfully registered. > + @retval EFI_OUT_OF_RESOURCES No enough resource to register the decoder. > + > +**/ > +EFI_STATUS > +EFIAPI > +RegisterImageDecoder ( > + IN DECODE_IMAGE Decoder > + ); > + > +#endif > diff --git a/MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.c > b/MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.c > new file mode 100644 > index 0000000..4a6219b > --- /dev/null > +++ b/MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.c > @@ -0,0 +1,121 @@ > +/** @file > + This library provides image decoding service by managing the different > + image decoding libraries. > + > +Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR> > +This program and the accompanying materials are licensed and made available > under > +the terms and conditions of the BSD License that accompanies this > distribution. > +The full text of the license may be found at > +http://opensource.org/licenses/bsd-license.php. > + > +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > + > +**/ > + > +#include <Uefi.h> > +#include <Protocol/GraphicsOutput.h> > +#include <Library/ImageDecoderLib.h> > +#include <Library/BaseLib.h> > +#include <Library/MemoryAllocationLib.h> > +#include <Library/DebugLib.h> > + > +typedef struct { > + UINT32 Signature; > + DECODE_IMAGE Decoder; > + LIST_ENTRY Link; > +} IMAGE_DECODER_ENTRY; > +#define IMAGE_DECODER_ENTRY_SIGNATURE SIGNATURE_32 ('i', 'm', 'g', 'd') > +#define IMAGE_DECODER_ENTRY_FROM_LINK(Link) \ > + CR (Link, IMAGE_DECODER_ENTRY, Link, IMAGE_DECODER_ENTRY_SIGNATURE) > + > +LIST_ENTRY mImageDecoderLibDecoders = INITIALIZE_LIST_HEAD_VARIABLE > (mImageDecoderLibDecoders); > + > +/** > + Convert a graphics image to a callee allocated GOP blt buffer. > + > + @param ImageFormat Format of the image file. > + @param Image Pointer to image file. > + @param ImageSize Number of bytes in Image. > + @param GopBlt Buffer containing GOP version of Image. > + @param GopBltSize Size of GopBlt in bytes. > + @param PixelWidth Width of GopBlt/Image in pixels. > + @param PixelHeight Height of GopBlt/Image in pixels. > + > + @retval EFI_SUCCESS GopBlt and GopBltSize are returned. > + @retval EFI_INVALID_PARAMETER GopBlt or GopBltSize is NULL. > + @retval EFI_INVALID_PARAMETER Image is NULL or ImageSize is 0. > + @retval EFI_UNSUPPORTED Image is not supported. > + @retval EFI_OUT_OF_RESOURCES No enough buffer to allocate. > + > +**/ > +EFI_STATUS > +EFIAPI > +DecodeImage ( > + IN IMAGE_FORMAT ImageFormat, > + IN UINT8 *Image, > + IN UINTN ImageSize, > + OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL **GopBlt, > + OUT UINTN *GopBltSize, > + OUT UINTN *PixelWidth, > + OUT UINTN *PixelHeight > + ) > +{ > + IMAGE_DECODER_ENTRY *Entry; > + LIST_ENTRY *Link; > + EFI_STATUS Status; > + > + if ((GopBlt == NULL) || (GopBltSize == NULL)) { > + return EFI_INVALID_PARAMETER; > + } > + > + if ((Image == NULL) || (ImageSize == 0)) { > + return EFI_INVALID_PARAMETER; > + } > + > + for ( Link = GetFirstNode (&mImageDecoderLibDecoders) > + ; !IsNull (&mImageDecoderLibDecoders, Link) > + ; Link = GetNextNode (&mImageDecoderLibDecoders, Link) > + ) { > + Entry = IMAGE_DECODER_ENTRY_FROM_LINK (Link); > + Status = Entry->Decoder (ImageFormat, Image, ImageSize, GopBlt, > GopBltSize, PixelWidth, PixelHeight); > + if (!EFI_ERROR (Status)) { > + break; > + } > + } > + > + if (IsNull (&mImageDecoderLibDecoders, Link)) { > + return EFI_UNSUPPORTED; > + } else { > + return EFI_SUCCESS; > + } > +} > + > +/** > + Register an image decoder. > + > + @param Decoder An image decoder. > + > + @retval EFI_SUCCESS The decoder was successfully registered. > + @retval EFI_OUT_OF_RESOURCES No enough resource to register the decoder. > + > +**/ > +EFI_STATUS > +EFIAPI > +RegisterImageDecoder ( > + IN DECODE_IMAGE Decoder > + ) > +{ > + IMAGE_DECODER_ENTRY *Entry; > + > + Entry = AllocatePool (sizeof (IMAGE_DECODER_ENTRY)); > + if (Entry == NULL) { > + return EFI_OUT_OF_RESOURCES; > + } > + > + Entry->Signature = IMAGE_DECODER_ENTRY_SIGNATURE; > + Entry->Decoder = Decoder; > + InsertTailList (&mImageDecoderLibDecoders, &Entry->Link); > + > + return EFI_SUCCESS; > +} > \ No newline at end of file > diff --git a/MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.inf > b/MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.inf > new file mode 100644 > index 0000000..5d2ee7b > --- /dev/null > +++ b/MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.inf > @@ -0,0 +1,42 @@ > +## @file > +# This library provides image decoding service by managing the different > +# image decoding libraries. > +# > +# Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR> > +# This program and the accompanying materials are licensed and made > available under > +# the terms and conditions of the BSD License that accompanies this > distribution. > +# The full text of the license may be found at > +# http://opensource.org/licenses/bsd-license.php. > +# > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, > +# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR > IMPLIED. > +# > +## > + > +[Defines] > + INF_VERSION = 0x00010005 > + BASE_NAME = ImageDecoderLib > + FILE_GUID = 5ACDA5F7-AE20-4A17-90C1-7D087F730202 > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = ImageDecoderLib|DXE_DRIVER > UEFI_APPLICATION > + > +# > +# The following information is for reference only and not required by the > build tools. > +# > +# VALID_ARCHITECTURES = IA32 X64 IPF EBC > +# > + > +[Sources] > + ImageDecoderLib.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + > +[LibraryClasses] > + BaseLib > + MemoryAllocationLib > + UefiLib > + BaseMemoryLib > + DebugLib > \ No newline at end of file > diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec > index 08148e3..c35f533 100644 > --- a/MdeModulePkg/MdeModulePkg.dec > +++ b/MdeModulePkg/MdeModulePkg.dec > @@ -131,6 +131,10 @@ > # > PlatformVarCleanupLib|Include/Library/PlatformVarCleanupLib.h > > + ## @libraryclass Provides image decoding service. > + # > + ImageDecoderLib|Include/Library/ImageDecoderLib.h > + > [Guids] > ## MdeModule package token space guid > # Include/Guid/MdeModulePkgTokenSpace.h > diff --git a/MdeModulePkg/MdeModulePkg.dsc b/MdeModulePkg/MdeModulePkg.dsc > index 62f596d..20af2d4 100644 > --- a/MdeModulePkg/MdeModulePkg.dsc > +++ b/MdeModulePkg/MdeModulePkg.dsc > @@ -47,6 +47,7 @@ > PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf > > PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf > SortLib|MdeModulePkg/Library/BaseSortLib/BaseSortLib.inf > + ImageDecoderLib|MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.inf > # > # UEFI & PI > # > @@ -276,6 +277,7 @@ > > MdeModulePkg/Library/PeiDxeDebugLibReportStatusCode/PeiDxeDebugLibReportStatusCode.inf > MdeModulePkg/Library/UefiBootManagerLib/UefiBootManagerLib.inf > > MdeModulePkg/Library/PlatformBootManagerLibNull/PlatformBootManagerLibNull.inf > + MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.inf > MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf > MdeModulePkg/Library/AuthVariableLibNull/AuthVariableLibNull.inf > MdeModulePkg/Library/VarCheckLib/VarCheckLib.inf > -- > 1.9.5.msysgit.1 > > _______________________________________________ > edk2-devel mailing list > edk2-devel@lists.01.org > https://lists.01.org/mailman/listinfo/edk2-devel _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel