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

Reply via email to