1 /** @file 2 This protocol provides generic image decoder interfaces to various image formats. 3 4 (C) Copyright 2016 Hewlett Packard Enterprise Development LP<BR> 5 Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> 6 7 This program and the accompanying materials are licensed and made available under 8 the terms and conditions of the BSD License that accompanies this distribution. 9 The full text of the license may be found at 10 http://opensource.org/licenses/bsd-license.php. 11 12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 14 15 **/ 16 #ifndef __HII_IMAGE_DECODER_H__ 17 #define __HII_IMAGE_DECODER_H__ 18 19 #include <Protocol/HiiImage.h> 20 21 22 // 23 // In UEFI 2.6 spec,this guid value is duplicate with 24 // EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID. Now update this guid value to 25 // avoid the duplicate guid issue. So its value is not consistent with 26 // UEFI spec definition now. We have proposed to update UEFI spec to 27 // use this new guid. After new spec released, we will remove this 28 // comments. 29 // 30 #define EFI_HII_IMAGE_DECODER_PROTOCOL_GUID \ 31 {0x9e66f251, 0x727c, 0x418c, { 0xbf, 0xd6, 0xc2, 0xb4, 0x25, 0x28, 0x18, 0xea }} 32 33 34 #define EFI_HII_IMAGE_DECODER_NAME_JPEG_GUID \ 35 {0xefefd093, 0xd9b, 0x46eb, { 0xa8, 0x56, 0x48, 0x35, 0x7, 0x0, 0xc9, 0x8 }} 36 37 #define EFI_HII_IMAGE_DECODER_NAME_PNG_GUID \ 38 {0xaf060190, 0x5e3a, 0x4025, { 0xaf, 0xbd, 0xe1, 0xf9, 0x5, 0xbf, 0xaa, 0x4c }} 39 40 typedef struct _EFI_HII_IMAGE_DECODER_PROTOCOL EFI_HII_IMAGE_DECODER_PROTOCOL; 41 42 typedef enum { 43 EFI_HII_IMAGE_DECODER_COLOR_TYPE_RGB = 0x0, 44 EFI_HII_IMAGE_DECODER_COLOR_TYPE_RGBA = 0x1, 45 EFI_HII_IMAGE_DECODER_COLOR_TYPE_CMYK = 0x2, 46 EFI_HII_IMAGE_DECODER_COLOR_TYPE_UNKNOWN = 0xFF 47 } EFI_HII_IMAGE_DECODER_COLOR_TYPE; 48 49 // 50 // EFI_HII_IMAGE_DECODER_IMAGE_INFO_HEADER 51 // 52 // DecoderName Name of the decoder 53 // ImageInfoSize The size of entire image information structure in bytes 54 // ImageWidth The image width 55 // ImageHeight The image height 56 // ColorType The color type, see EFI_HII_IMAGE_DECODER_COLOR_TYPE. 57 // ColorDepthInBits The color depth in bits 58 // 59 typedef struct _EFI_HII_IMAGE_DECODER_IMAGE_INFO_HEADER { 60 EFI_GUID DecoderName; 61 UINT16 ImageInfoSize; 62 UINT16 ImageWidth; 63 UINT16 ImageHeight; 64 EFI_HII_IMAGE_DECODER_COLOR_TYPE ColorType; 65 UINT8 ColorDepthInBits; 66 } EFI_HII_IMAGE_DECODER_IMAGE_INFO_HEADER; 67 68 #define EFI_IMAGE_JPEG_SCANTYPE_PROGREESSIVE 0x01 69 #define EFI_IMAGE_JPEG_SCANTYPE_INTERLACED 0x02 70 71 // 72 // EFI_HII_IMAGE_DECODER_JPEG_INFO 73 // Header The common header 74 // ScanType The scan type of JPEG image 75 // Reserved Reserved 76 // 77 typedef struct _EFI_HII_IMAGE_DECODER_JPEG_INFO { 78 EFI_HII_IMAGE_DECODER_IMAGE_INFO_HEADER Header; 79 UINT16 ScanType; 80 UINT64 Reserved; 81 } EFI_HII_IMAGE_DECODER_JPEG_INFO; 82 83 // 84 // EFI_HII_IMAGE_DECODER_PNG_INFO 85 // Header The common header 86 // Channels Number of channels in the PNG image 87 // Reserved Reserved 88 // 89 typedef struct _EFI_HII_IMAGE_DECODER_PNG_INFO { 90 EFI_HII_IMAGE_DECODER_IMAGE_INFO_HEADER Header; 91 UINT16 Channels; 92 UINT64 Reserved; 93 } EFI_HII_IMAGE_DECODER_PNG_INFO; 94 95 // 96 // EFI_HII_IMAGE_DECODER_OTHER_INFO 97 // 98 typedef struct _EFI_HII_IMAGE_DECODER_OTHER_INFO { 99 EFI_HII_IMAGE_DECODER_IMAGE_INFO_HEADER Header; 100 CHAR16 ImageExtenion[1]; 101 // 102 // Variable length of image file extension name. 103 // 104 } EFI_HII_IMAGE_DECODER_OTHER_INFO; 105 106 /** 107 There could be more than one EFI_HII_IMAGE_DECODER_PROTOCOL instances installed 108 in the system for different image formats. This function returns the decoder 109 name which callers can use to find the proper image decoder for the image. It 110 is possible to support multiple image formats in one EFI_HII_IMAGE_DECODER_PROTOCOL. 111 The capability of the supported image formats is returned in DecoderName and 112 NumberOfDecoderName. 113 114 @param This EFI_HII_IMAGE_DECODER_PROTOCOL instance. 115 @param DecoderName Pointer to a dimension to retrieve the decoder 116 names in EFI_GUID format. The number of the 117 decoder names is returned in NumberOfDecoderName. 118 @param NumberofDecoderName Pointer to retrieve the number of decoders which 119 supported by this decoder driver. 120 121 @retval EFI_SUCCESS Get decoder name success. 122 @retval EFI_UNSUPPORTED Get decoder name fail. 123 124 **/ 125 typedef 126 EFI_STATUS 127 (EFIAPI *EFI_HII_IMAGE_DECODER_GET_NAME)( 128 IN EFI_HII_IMAGE_DECODER_PROTOCOL *This, 129 IN OUT EFI_GUID **DecoderName, 130 IN OUT UINT16 *NumberOfDecoderName 131 ); 132 133 /** 134 This function returns the image information of the given image raw data. This 135 function first checks whether the image raw data is supported by this decoder 136 or not. This function may go through the first few bytes in the image raw data 137 for the specific data structure or the image signature. If the image is not supported 138 by this image decoder, this function returns EFI_UNSUPPORTED to the caller. 139 Otherwise, this function returns the proper image information to the caller. 140 It is the caller?s responsibility to free the ImageInfo. 141 142 @param This EFI_HII_IMAGE_DECODER_PROTOCOL instance. 143 @param Image Pointer to the image raw data. 144 @param SizeOfImage Size of the entire image raw data. 145 @param ImageInfo Pointer to receive EFI_HII_IMAGE_DECODER_IMAGE_INFO_HEADER. 146 147 @retval EFI_SUCCESS Get image info success. 148 @retval EFI_UNSUPPORTED Unsupported format of image. 149 @retval EFI_INVALID_PARAMETER Incorrect parameter. 150 @retval EFI_BAD_BUFFER_SIZE Not enough memory. 151 152 **/ 153 typedef 154 EFI_STATUS 155 (EFIAPI *EFI_HII_IMAGE_DECODER_GET_IMAGE_INFO)( 156 IN EFI_HII_IMAGE_DECODER_PROTOCOL *This, 157 IN VOID *Image, 158 IN UINTN SizeOfImage, 159 IN OUT EFI_HII_IMAGE_DECODER_IMAGE_INFO_HEADER **ImageInfo 160 ); 161 162 /** 163 This function decodes the image which the image type of this image is supported 164 by this EFI_HII_IMAGE_DECODER_PROTOCOL. If **Bitmap is not NULL, the caller intends 165 to put the image in the given image buffer. That allows the caller to put an 166 image overlap on the original image. The transparency is handled by the image 167 decoder because the transparency capability depends on the image format. Callers 168 can set Transparent to FALSE to force disabling the transparency process on the 169 image. Forcing Transparent to FALSE may also improve the performance of the image 170 decoding because the image decoder can skip the transparency processing. If **Bitmap 171 is NULL, the image decoder allocates the memory buffer for the EFI_IMAGE_OUTPUT 172 and decodes the image to the image buffer. It is the caller?s responsibility to 173 free the memory for EFI_IMAGE_OUTPUT. Image decoder doesn?t have to handle the 174 transparency in this case because there is no background image given by the caller. 175 The background color in this case is all black (#00000000). 176 177 @param This EFI_HII_IMAGE_DECODER_PROTOCOL instance. 178 @param Image Pointer to the image raw data. 179 @param ImageRawDataSize Size of the entire image raw data. 180 @param Blt EFI_IMAGE_OUTPUT to receive the image or overlap 181 the image on the original buffer. 182 @param Transparent BOOLEAN value indicates whether the image decoder 183 has to handle the transparent image or not. 184 185 186 @retval EFI_SUCCESS Image decode success. 187 @retval EFI_UNSUPPORTED Unsupported format of image. 188 @retval EFI_INVALID_PARAMETER Incorrect parameter. 189 @retval EFI_BAD_BUFFER_SIZE Not enough memory. 190 191 **/ 192 typedef 193 EFI_STATUS 194 (EFIAPI *EFI_HII_IMAGE_DECODER_DECODE)( 195 IN EFI_HII_IMAGE_DECODER_PROTOCOL *This, 196 IN VOID *Image, 197 IN UINTN ImageRawDataSize, 198 IN OUT EFI_IMAGE_OUTPUT **Bitmap, 199 IN BOOLEAN Transparent 200 ); 201 202 struct _EFI_HII_IMAGE_DECODER_PROTOCOL { 203 EFI_HII_IMAGE_DECODER_GET_NAME GetImageDecoderName; 204 EFI_HII_IMAGE_DECODER_GET_IMAGE_INFO GetImageInfo; 205 EFI_HII_IMAGE_DECODER_DECODE DecodeImage; 206 }; 207 208 extern EFI_GUID gEfiHiiImageDecoderProtocolGuid; 209 extern EFI_GUID gEfiHiiImageDecoderNameJpegGuid; 210 extern EFI_GUID gEfiHiiImageDecoderNamePngGuid; 211 212 #endif 213