blob: 42e39ec492abdf54d3bb1ab526c2df207e546bc6 [file] [log] [blame]
Andreas Huber6ac35f02010-10-15 13:30:27 -07001/* ------------------------------------------------------------------
2 * Copyright (C) 1998-2009 PacketVideo
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
13 * express or implied.
14 * See the License for the specific language governing permissions
15 * and limitations under the License.
16 * -------------------------------------------------------------------
17 */
18/**
19 * Copyright (c) 2008 The Khronos Group Inc.
20 *
21 * Permission is hereby granted, free of charge, to any person obtaining
22 * a copy of this software and associated documentation files (the
23 * "Software"), to deal in the Software without restriction, including
24 * without limitation the rights to use, copy, modify, merge, publish,
25 * distribute, sublicense, and/or sell copies of the Software, and to
26 * permit persons to whom the Software is furnished to do so, subject
27 * to the following conditions:
28 * The above copyright notice and this permission notice shall be included
29 * in all copies or substantial portions of the Software.
30 *
31 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
32 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
34 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
35 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
36 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
37 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38 */
39
40/**
41 * @file OMX_Image.h - OpenMax IL version 1.1.2
42 * The structures needed by Image components to exchange parameters and
43 * configuration data with the components.
44 */
45#ifndef OMX_Image_h
46#define OMX_Image_h
47
48#ifdef __cplusplus
49extern "C" {
50#endif /* __cplusplus */
51
52
53/**
54 * Each OMX header must include all required header files to allow the
55 * header to compile without errors. The includes below are required
56 * for this header file to compile successfully
57 */
58
59#include <OMX_IVCommon.h>
60
61/** @defgroup imaging OpenMAX IL Imaging Domain
62 * @ingroup iv
63 * Structures for OpenMAX IL Imaging domain
64 * @{
65 */
66
67/**
68 * Enumeration used to define the possible image compression coding.
69 */
70typedef enum OMX_IMAGE_CODINGTYPE {
71 OMX_IMAGE_CodingUnused, /**< Value when format is N/A */
72 OMX_IMAGE_CodingAutoDetect, /**< Auto detection of image format */
73 OMX_IMAGE_CodingJPEG, /**< JPEG/JFIF image format */
74 OMX_IMAGE_CodingJPEG2K, /**< JPEG 2000 image format */
75 OMX_IMAGE_CodingEXIF, /**< EXIF image format */
76 OMX_IMAGE_CodingTIFF, /**< TIFF image format */
77 OMX_IMAGE_CodingGIF, /**< Graphics image format */
78 OMX_IMAGE_CodingPNG, /**< PNG image format */
79 OMX_IMAGE_CodingLZW, /**< LZW image format */
80 OMX_IMAGE_CodingBMP, /**< Windows Bitmap format */
81 OMX_IMAGE_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
82 OMX_IMAGE_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
83 OMX_IMAGE_CodingMax = 0x7FFFFFFF
84} OMX_IMAGE_CODINGTYPE;
85
86
87/**
88 * Data structure used to define an image path. The number of image paths
89 * for input and output will vary by type of the image component.
90 *
91 * Input (aka Source) : Zero Inputs, one Output,
92 * Splitter : One Input, 2 or more Outputs,
93 * Processing Element : One Input, one output,
94 * Mixer : 2 or more inputs, one output,
95 * Output (aka Sink) : One Input, zero outputs.
96 *
97 * The PortDefinition structure is used to define all of the parameters
98 * necessary for the compliant component to setup an input or an output
99 * image path. If additional vendor specific data is required, it should
100 * be transmitted to the component using the CustomCommand function.
101 * Compliant components will prepopulate this structure with optimal
102 * values during the OMX_GetParameter() command.
103 *
104 * STRUCT MEMBERS:
105 * cMIMEType : MIME type of data for the port
106 * pNativeRender : Platform specific reference for a display if a
107 * sync, otherwise this field is 0
108 * nFrameWidth : Width of frame to be used on port if
109 * uncompressed format is used. Use 0 for
110 * unknown, don't care or variable
111 * nFrameHeight : Height of frame to be used on port if
112 * uncompressed format is used. Use 0 for
113 * unknown, don't care or variable
114 * nStride : Number of bytes per span of an image (i.e.
115 * indicates the number of bytes to get from
116 * span N to span N+1, where negative stride
117 * indicates the image is bottom up
118 * nSliceHeight : Height used when encoding in slices
119 * bFlagErrorConcealment : Turns on error concealment if it is supported by
120 * the OMX component
121 * eCompressionFormat : Compression format used in this instance of
122 * the component. When OMX_IMAGE_CodingUnused is
123 * specified, eColorFormat is valid
124 * eColorFormat : Decompressed format used by this component
125 * pNativeWindow : Platform specific reference for a window object if a
126 * display sink , otherwise this field is 0x0.
127 */
128typedef struct OMX_IMAGE_PORTDEFINITIONTYPE {
129 OMX_STRING cMIMEType;
130 OMX_NATIVE_DEVICETYPE pNativeRender;
131 OMX_U32 nFrameWidth;
132 OMX_U32 nFrameHeight;
133 OMX_S32 nStride;
134 OMX_U32 nSliceHeight;
135 OMX_BOOL bFlagErrorConcealment;
136 OMX_IMAGE_CODINGTYPE eCompressionFormat;
137 OMX_COLOR_FORMATTYPE eColorFormat;
138 OMX_NATIVE_WINDOWTYPE pNativeWindow;
139} OMX_IMAGE_PORTDEFINITIONTYPE;
140
141
142/**
143 * Port format parameter. This structure is used to enumerate the various
144 * data input/output format supported by the port.
145 *
146 * STRUCT MEMBERS:
147 * nSize : Size of the structure in bytes
148 * nVersion : OMX specification version information
149 * nPortIndex : Indicates which port to set
150 * nIndex : Indicates the enumeration index for the format from
151 * 0x0 to N-1
152 * eCompressionFormat : Compression format used in this instance of the
153 * component. When OMX_IMAGE_CodingUnused is specified,
154 * eColorFormat is valid
155 * eColorFormat : Decompressed format used by this component
156 */
157typedef struct OMX_IMAGE_PARAM_PORTFORMATTYPE {
158 OMX_U32 nSize;
159 OMX_VERSIONTYPE nVersion;
160 OMX_U32 nPortIndex;
161 OMX_U32 nIndex;
162 OMX_IMAGE_CODINGTYPE eCompressionFormat;
163 OMX_COLOR_FORMATTYPE eColorFormat;
164} OMX_IMAGE_PARAM_PORTFORMATTYPE;
165
166
167/**
168 * Flash control type
169 *
170 * ENUMS
171 * Torch : Flash forced constantly on
172 */
173typedef enum OMX_IMAGE_FLASHCONTROLTYPE {
174 OMX_IMAGE_FlashControlOn = 0,
175 OMX_IMAGE_FlashControlOff,
176 OMX_IMAGE_FlashControlAuto,
177 OMX_IMAGE_FlashControlRedEyeReduction,
178 OMX_IMAGE_FlashControlFillin,
179 OMX_IMAGE_FlashControlTorch,
180 OMX_IMAGE_FlashControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
181 OMX_IMAGE_FlashControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
182 OMX_IMAGE_FlashControlMax = 0x7FFFFFFF
183} OMX_IMAGE_FLASHCONTROLTYPE;
184
185
186/**
187 * Flash control configuration
188 *
189 * STRUCT MEMBERS:
190 * nSize : Size of the structure in bytes
191 * nVersion : OMX specification version information
192 * nPortIndex : Port that this structure applies to
193 * eFlashControl : Flash control type
194 */
195typedef struct OMX_IMAGE_PARAM_FLASHCONTROLTYPE {
196 OMX_U32 nSize;
197 OMX_VERSIONTYPE nVersion;
198 OMX_U32 nPortIndex;
199 OMX_IMAGE_FLASHCONTROLTYPE eFlashControl;
200} OMX_IMAGE_PARAM_FLASHCONTROLTYPE;
201
202
203/**
204 * Focus control type
205 */
206typedef enum OMX_IMAGE_FOCUSCONTROLTYPE {
207 OMX_IMAGE_FocusControlOn = 0,
208 OMX_IMAGE_FocusControlOff,
209 OMX_IMAGE_FocusControlAuto,
210 OMX_IMAGE_FocusControlAutoLock,
211 OMX_IMAGE_FocusControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
212 OMX_IMAGE_FocusControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
213 OMX_IMAGE_FocusControlMax = 0x7FFFFFFF
214} OMX_IMAGE_FOCUSCONTROLTYPE;
215
216
217/**
218 * Focus control configuration
219 *
220 * STRUCT MEMBERS:
221 * nSize : Size of the structure in bytes
222 * nVersion : OMX specification version information
223 * nPortIndex : Port that this structure applies to
224 * eFocusControl : Focus control
225 * nFocusSteps : Focus can take on values from 0 mm to infinity.
226 * Interest is only in number of steps over this range.
227 * nFocusStepIndex : Current focus step index
228 */
229typedef struct OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE {
230 OMX_U32 nSize;
231 OMX_VERSIONTYPE nVersion;
232 OMX_U32 nPortIndex;
233 OMX_IMAGE_FOCUSCONTROLTYPE eFocusControl;
234 OMX_U32 nFocusSteps;
235 OMX_U32 nFocusStepIndex;
236} OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE;
237
238
239/**
240 * Q Factor for JPEG compression, which controls the tradeoff between image
241 * quality and size. Q Factor provides a more simple means of controlling
242 * JPEG compression quality, without directly programming Quantization
243 * tables for chroma and luma
244 *
245 * STRUCT MEMBERS:
246 * nSize : Size of the structure in bytes
247 * nVersion : OMX specification version information
248 * nPortIndex : Port that this structure applies to
249 * nQFactor : JPEG Q factor value in the range of 1-100. A factor of 1
250 * produces the smallest, worst quality images, and a factor
251 * of 100 produces the largest, best quality images. A
252 * typical default is 75 for small good quality images
253 */
254typedef struct OMX_IMAGE_PARAM_QFACTORTYPE {
255 OMX_U32 nSize;
256 OMX_VERSIONTYPE nVersion;
257 OMX_U32 nPortIndex;
258 OMX_U32 nQFactor;
259} OMX_IMAGE_PARAM_QFACTORTYPE;
260
261/**
262 * Quantization table type
263 */
264
265typedef enum OMX_IMAGE_QUANTIZATIONTABLETYPE {
266 OMX_IMAGE_QuantizationTableLuma = 0,
267 OMX_IMAGE_QuantizationTableChroma,
268 OMX_IMAGE_QuantizationTableChromaCb,
269 OMX_IMAGE_QuantizationTableChromaCr,
270 OMX_IMAGE_QuantizationTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
271 OMX_IMAGE_QuantizationTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
272 OMX_IMAGE_QuantizationTableMax = 0x7FFFFFFF
273} OMX_IMAGE_QUANTIZATIONTABLETYPE;
274
275/**
276 * JPEG quantization tables are used to determine DCT compression for
277 * YUV data, as an alternative to specifying Q factor, providing exact
278 * control of compression
279 *
280 * STRUCT MEMBERS:
281 * nSize : Size of the structure in bytes
282 * nVersion : OMX specification version information
283 * nPortIndex : Port that this structure applies to
284 * eQuantizationTable : Quantization table type
285 * nQuantizationMatrix[64] : JPEG quantization table of coefficients stored
286 * in increasing columns then by rows of data (i.e.
287 * row 1, ... row 8). Quantization values are in
288 * the range 0-255 and stored in linear order
289 * (i.e. the component will zig-zag the
290 * quantization table data if required internally)
291 */
292typedef struct OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE {
293 OMX_U32 nSize;
294 OMX_VERSIONTYPE nVersion;
295 OMX_U32 nPortIndex;
296 OMX_IMAGE_QUANTIZATIONTABLETYPE eQuantizationTable;
297 OMX_U8 nQuantizationMatrix[64];
298} OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE;
299
300
301/**
302 * Huffman table type, the same Huffman table is applied for chroma and
303 * luma component
304 */
305typedef enum OMX_IMAGE_HUFFMANTABLETYPE {
306 OMX_IMAGE_HuffmanTableAC = 0,
307 OMX_IMAGE_HuffmanTableDC,
308 OMX_IMAGE_HuffmanTableACLuma,
309 OMX_IMAGE_HuffmanTableACChroma,
310 OMX_IMAGE_HuffmanTableDCLuma,
311 OMX_IMAGE_HuffmanTableDCChroma,
312 OMX_IMAGE_HuffmanTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
313 OMX_IMAGE_HuffmanTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
314 OMX_IMAGE_HuffmanTableMax = 0x7FFFFFFF
315} OMX_IMAGE_HUFFMANTABLETYPE;
316
317/**
318 * JPEG Huffman table
319 *
320 * STRUCT MEMBERS:
321 * nSize : Size of the structure in bytes
322 * nVersion : OMX specification version information
323 * nPortIndex : Port that this structure applies to
324 * eHuffmanTable : Huffman table type
325 * nNumberOfHuffmanCodeOfLength[16] : 0-16, number of Huffman codes of each
326 * possible length
327 * nHuffmanTable[256] : 0-255, the size used for AC and DC
328 * HuffmanTable are 16 and 162
329 */
330typedef struct OMX_IMAGE_PARAM_HUFFMANTTABLETYPE {
331 OMX_U32 nSize;
332 OMX_VERSIONTYPE nVersion;
333 OMX_U32 nPortIndex;
334 OMX_IMAGE_HUFFMANTABLETYPE eHuffmanTable;
335 OMX_U8 nNumberOfHuffmanCodeOfLength[16];
336 OMX_U8 nHuffmanTable[256];
337}OMX_IMAGE_PARAM_HUFFMANTTABLETYPE;
338
339/** @} */
340#ifdef __cplusplus
341}
342#endif /* __cplusplus */
343
344#endif
345/* File EOF */