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