summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Library
diff options
context:
space:
mode:
authorRuiyu Ni <ruiyu.ni@intel.com>2015-11-18 08:51:42 +0000
committervanjeff <vanjeff@Edk2>2015-11-18 08:51:42 +0000
commit6aaf1ccb97ea99817ca27600289e47d25acf9615 (patch)
tree7d6a763f6c63b245f97297937a4f92922b24e967 /MdeModulePkg/Library
parent25e3b3522b9a5028002e8fc1c5a5b6915b9709f7 (diff)
downloadedk2-platforms-6aaf1ccb97ea99817ca27600289e47d25acf9615.tar.xz
MdeModulePkg: Add ImageDecoderLib to provide image decoding service.
The library itself doesn't provide any image decoding capabilities but manages the different image decoders. (Sync patch r18770 from main trunk.) Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/branches/UDK2015@18880 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'MdeModulePkg/Library')
-rw-r--r--MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.c121
-rw-r--r--MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.inf42
2 files changed, 163 insertions, 0 deletions
diff --git a/MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.c b/MdeModulePkg/Library/ImageDecoderLib/ImageDecoderLib.c
new file mode 100644
index 0000000000..4a6219bbb1
--- /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 0000000000..5d2ee7b429
--- /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