]> git.sesse.net Git - vlc/blob - modules/codec/omxil/OMX_Video.h
Use var_Inherit* instead of var_CreateGet*.
[vlc] / modules / codec / omxil / OMX_Video.h
1 /**\r
2  * Copyright (c) 2008 The Khronos Group Inc. \r
3  * \r
4  * Permission is hereby granted, free of charge, to any person obtaining\r
5  * a copy of this software and associated documentation files (the\r
6  * "Software"), to deal in the Software without restriction, including\r
7  * without limitation the rights to use, copy, modify, merge, publish,\r
8  * distribute, sublicense, and/or sell copies of the Software, and to\r
9  * permit persons to whom the Software is furnished to do so, subject\r
10  * to the following conditions: \r
11  * The above copyright notice and this permission notice shall be included\r
12  * in all copies or substantial portions of the Software. \r
13  * \r
14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r
17  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\r
18  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\r
19  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\r
20  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \r
21  *\r
22  */\r
23 \r
24 /** \r
25  *  @file OMX_Video.h - OpenMax IL version 1.1.2\r
26  *  The structures is needed by Video components to exchange parameters \r
27  *  and configuration data with OMX components.\r
28  */\r
29 #ifndef OMX_Video_h\r
30 #define OMX_Video_h\r
31 \r
32 /** @defgroup video OpenMAX IL Video Domain\r
33  * @ingroup iv\r
34  * Structures for OpenMAX IL Video domain\r
35  * @{\r
36  */\r
37 \r
38 #ifdef __cplusplus\r
39 extern "C" {\r
40 #endif /* __cplusplus */\r
41 \r
42 \r
43 /**\r
44  * Each OMX header must include all required header files to allow the\r
45  * header to compile without errors.  The includes below are required\r
46  * for this header file to compile successfully \r
47  */\r
48 \r
49 #include <OMX_IVCommon.h>\r
50 \r
51 \r
52 /**\r
53  * Enumeration used to define the possible video compression codings.  \r
54  * NOTE:  This essentially refers to file extensions. If the coding is \r
55  *        being used to specify the ENCODE type, then additional work \r
56  *        must be done to configure the exact flavor of the compression \r
57  *        to be used.  For decode cases where the user application can \r
58  *        not differentiate between MPEG-4 and H.264 bit streams, it is \r
59  *        up to the codec to handle this.\r
60  */\r
61 typedef enum OMX_VIDEO_CODINGTYPE {\r
62     OMX_VIDEO_CodingUnused,     /**< Value when coding is N/A */\r
63     OMX_VIDEO_CodingAutoDetect, /**< Autodetection of coding type */\r
64     OMX_VIDEO_CodingMPEG2,      /**< AKA: H.262 */\r
65     OMX_VIDEO_CodingH263,       /**< H.263 */\r
66     OMX_VIDEO_CodingMPEG4,      /**< MPEG-4 */\r
67     OMX_VIDEO_CodingWMV,        /**< all versions of Windows Media Video */\r
68     OMX_VIDEO_CodingRV,         /**< all versions of Real Video */\r
69     OMX_VIDEO_CodingAVC,        /**< H.264/AVC */\r
70     OMX_VIDEO_CodingMJPEG,      /**< Motion JPEG */\r
71     OMX_VIDEO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
72     OMX_VIDEO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
73     OMX_VIDEO_CodingMax = 0x7FFFFFFF\r
74 } OMX_VIDEO_CODINGTYPE;\r
75 \r
76 \r
77 /**\r
78  * Data structure used to define a video path.  The number of Video paths for \r
79  * input and output will vary by type of the Video component.  \r
80  * \r
81  *    Input (aka Source) : zero Inputs, one Output,\r
82  *    Splitter           : one Input, 2 or more Outputs,\r
83  *    Processing Element : one Input, one output,\r
84  *    Mixer              : 2 or more inputs, one output,\r
85  *    Output (aka Sink)  : one Input, zero outputs.\r
86  * \r
87  * The PortDefinition structure is used to define all of the parameters \r
88  * necessary for the compliant component to setup an input or an output video \r
89  * path.  If additional vendor specific data is required, it should be \r
90  * transmitted to the component using the CustomCommand function.  Compliant \r
91  * components will prepopulate this structure with optimal values during the \r
92  * GetDefaultInitParams command.\r
93  *\r
94  * STRUCT MEMBERS:\r
95  *  cMIMEType             : MIME type of data for the port\r
96  *  pNativeRender         : Platform specific reference for a display if a \r
97  *                          sync, otherwise this field is 0\r
98  *  nFrameWidth           : Width of frame to be used on channel if \r
99  *                          uncompressed format is used.  Use 0 for unknown,\r
100  *                          don't care or variable\r
101  *  nFrameHeight          : Height of frame to be used on channel if \r
102  *                          uncompressed format is used. Use 0 for unknown,\r
103  *                          don't care or variable\r
104  *  nStride               : Number of bytes per span of an image \r
105  *                          (i.e. indicates the number of bytes to get\r
106  *                          from span N to span N+1, where negative stride\r
107  *                          indicates the image is bottom up\r
108  *  nSliceHeight          : Height used when encoding in slices\r
109  *  nBitrate              : Bit rate of frame to be used on channel if \r
110  *                          compressed format is used. Use 0 for unknown, \r
111  *                          don't care or variable\r
112  *  xFramerate            : Frame rate to be used on channel if uncompressed \r
113  *                          format is used. Use 0 for unknown, don't care or \r
114  *                          variable.  Units are Q16 frames per second.\r
115  *  bFlagErrorConcealment : Turns on error concealment if it is supported by \r
116  *                          the OMX component\r
117  *  eCompressionFormat    : Compression format used in this instance of the \r
118  *                          component. When OMX_VIDEO_CodingUnused is \r
119  *                          specified, eColorFormat is used\r
120  *  eColorFormat : Decompressed format used by this component\r
121  *  pNativeWindow : Platform specific reference for a window object if a \r
122  *                          display sink , otherwise this field is 0x0. \r
123  */\r
124 typedef struct OMX_VIDEO_PORTDEFINITIONTYPE {\r
125     OMX_STRING cMIMEType;\r
126     OMX_NATIVE_DEVICETYPE pNativeRender;\r
127     OMX_U32 nFrameWidth;\r
128     OMX_U32 nFrameHeight;\r
129     OMX_S32 nStride;\r
130     OMX_U32 nSliceHeight;\r
131     OMX_U32 nBitrate;\r
132     OMX_U32 xFramerate;\r
133     OMX_BOOL bFlagErrorConcealment;\r
134     OMX_VIDEO_CODINGTYPE eCompressionFormat;\r
135     OMX_COLOR_FORMATTYPE eColorFormat;\r
136     OMX_NATIVE_WINDOWTYPE pNativeWindow;\r
137 } OMX_VIDEO_PORTDEFINITIONTYPE;\r
138 \r
139 /**  \r
140  * Port format parameter.  This structure is used to enumerate the various \r
141  * data input/output format supported by the port.\r
142  * \r
143  * STRUCT MEMBERS:\r
144  *  nSize              : Size of the structure in bytes\r
145  *  nVersion           : OMX specification version information\r
146  *  nPortIndex         : Indicates which port to set\r
147  *  nIndex             : Indicates the enumeration index for the format from \r
148  *                       0x0 to N-1\r
149  *  eCompressionFormat : Compression format used in this instance of the \r
150  *                       component. When OMX_VIDEO_CodingUnused is specified, \r
151  *                       eColorFormat is used \r
152  *  eColorFormat       : Decompressed format used by this component\r
153  *  xFrameRate         : Indicates the video frame rate in Q16 format\r
154  */\r
155 typedef struct OMX_VIDEO_PARAM_PORTFORMATTYPE {\r
156     OMX_U32 nSize;\r
157     OMX_VERSIONTYPE nVersion;\r
158     OMX_U32 nPortIndex;\r
159     OMX_U32 nIndex;\r
160     OMX_VIDEO_CODINGTYPE eCompressionFormat; \r
161     OMX_COLOR_FORMATTYPE eColorFormat;\r
162     OMX_U32 xFramerate;\r
163 } OMX_VIDEO_PARAM_PORTFORMATTYPE;\r
164 \r
165 \r
166 /**\r
167  * This is a structure for configuring video compression quantization \r
168  * parameter values.  Codecs may support different QP values for different\r
169  * frame types.\r
170  *\r
171  * STRUCT MEMBERS:\r
172  *  nSize      : Size of the structure in bytes\r
173  *  nVersion   : OMX specification version info\r
174  *  nPortIndex : Port that this structure applies to\r
175  *  nQpI       : QP value to use for index frames\r
176  *  nQpP       : QP value to use for P frames\r
177  *  nQpB       : QP values to use for bidirectional frames \r
178  */\r
179 typedef struct OMX_VIDEO_PARAM_QUANTIZATIONTYPE {\r
180     OMX_U32 nSize;            \r
181     OMX_VERSIONTYPE nVersion;\r
182     OMX_U32 nPortIndex;\r
183     OMX_U32 nQpI;\r
184     OMX_U32 nQpP;\r
185     OMX_U32 nQpB;\r
186 } OMX_VIDEO_PARAM_QUANTIZATIONTYPE;\r
187 \r
188 \r
189 /** \r
190  * Structure for configuration of video fast update parameters. \r
191  *  \r
192  * STRUCT MEMBERS:\r
193  *  nSize      : Size of the structure in bytes\r
194  *  nVersion   : OMX specification version info \r
195  *  nPortIndex : Port that this structure applies to\r
196  *  bEnableVFU : Enable/Disable video fast update\r
197  *  nFirstGOB  : Specifies the number of the first macroblock row\r
198  *  nFirstMB   : specifies the first MB relative to the specified first GOB\r
199  *  nNumMBs    : Specifies the number of MBs to be refreshed from nFirstGOB \r
200  *               and nFirstMB\r
201  */\r
202 typedef struct OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE {\r
203     OMX_U32 nSize;            \r
204     OMX_VERSIONTYPE nVersion; \r
205     OMX_U32 nPortIndex;       \r
206     OMX_BOOL bEnableVFU;      \r
207     OMX_U32 nFirstGOB;                            \r
208     OMX_U32 nFirstMB;                            \r
209     OMX_U32 nNumMBs;                                  \r
210 } OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE;\r
211 \r
212 \r
213 /** \r
214  * Enumeration of possible bitrate control types \r
215  */\r
216 typedef enum OMX_VIDEO_CONTROLRATETYPE {\r
217     OMX_Video_ControlRateDisable,\r
218     OMX_Video_ControlRateVariable,\r
219     OMX_Video_ControlRateConstant,\r
220     OMX_Video_ControlRateVariableSkipFrames,\r
221     OMX_Video_ControlRateConstantSkipFrames,\r
222     OMX_Video_ControlRateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
223     OMX_Video_ControlRateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
224     OMX_Video_ControlRateMax = 0x7FFFFFFF\r
225 } OMX_VIDEO_CONTROLRATETYPE;\r
226 \r
227 \r
228 /** \r
229  * Structure for configuring bitrate mode of a codec. \r
230  *\r
231  * STRUCT MEMBERS:\r
232  *  nSize          : Size of the struct in bytes\r
233  *  nVersion       : OMX spec version info\r
234  *  nPortIndex     : Port that this struct applies to\r
235  *  eControlRate   : Control rate type enum\r
236  *  nTargetBitrate : Target bitrate to encode with\r
237  */\r
238 typedef struct OMX_VIDEO_PARAM_BITRATETYPE {\r
239     OMX_U32 nSize;                          \r
240     OMX_VERSIONTYPE nVersion;               \r
241     OMX_U32 nPortIndex;                     \r
242     OMX_VIDEO_CONTROLRATETYPE eControlRate; \r
243     OMX_U32 nTargetBitrate;                 \r
244 } OMX_VIDEO_PARAM_BITRATETYPE;\r
245 \r
246 \r
247 /** \r
248  * Enumeration of possible motion vector (MV) types \r
249  */\r
250 typedef enum OMX_VIDEO_MOTIONVECTORTYPE {\r
251     OMX_Video_MotionVectorPixel,\r
252     OMX_Video_MotionVectorHalfPel,\r
253     OMX_Video_MotionVectorQuarterPel,\r
254     OMX_Video_MotionVectorEighthPel,\r
255     OMX_Video_MotionVectorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
256     OMX_Video_MotionVectorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
257     OMX_Video_MotionVectorMax = 0x7FFFFFFF\r
258 } OMX_VIDEO_MOTIONVECTORTYPE;\r
259 \r
260 \r
261 /**\r
262  * Structure for configuring the number of motion vectors used as well\r
263  * as their accuracy.\r
264  * \r
265  * STRUCT MEMBERS:\r
266  *  nSize            : Size of the struct in bytes\r
267  *  nVersion         : OMX spec version info\r
268  *  nPortIndex       : port that this structure applies to\r
269  *  eAccuracy        : Enumerated MV accuracy\r
270  *  bUnrestrictedMVs : Allow unrestricted MVs\r
271  *  bFourMV          : Allow use of 4 MVs\r
272  *  sXSearchRange    : Search range in horizontal direction for MVs\r
273  *  sYSearchRange    : Search range in vertical direction for MVs\r
274  */\r
275 typedef struct OMX_VIDEO_PARAM_MOTIONVECTORTYPE {\r
276     OMX_U32 nSize;\r
277     OMX_VERSIONTYPE nVersion;\r
278     OMX_U32 nPortIndex;\r
279     OMX_VIDEO_MOTIONVECTORTYPE eAccuracy;\r
280     OMX_BOOL bUnrestrictedMVs;\r
281     OMX_BOOL bFourMV;\r
282     OMX_S32 sXSearchRange;\r
283     OMX_S32 sYSearchRange;\r
284 } OMX_VIDEO_PARAM_MOTIONVECTORTYPE;\r
285 \r
286 \r
287 /** \r
288  * Enumeration of possible methods to use for Intra Refresh \r
289  */\r
290 typedef enum OMX_VIDEO_INTRAREFRESHTYPE {\r
291     OMX_VIDEO_IntraRefreshCyclic,\r
292     OMX_VIDEO_IntraRefreshAdaptive,\r
293     OMX_VIDEO_IntraRefreshBoth,\r
294     OMX_VIDEO_IntraRefreshKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
295     OMX_VIDEO_IntraRefreshVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
296     OMX_VIDEO_IntraRefreshMax = 0x7FFFFFFF\r
297 } OMX_VIDEO_INTRAREFRESHTYPE;\r
298 \r
299 \r
300 /**\r
301  * Structure for configuring intra refresh mode \r
302  * \r
303  * STRUCT MEMBERS:\r
304  *  nSize        : Size of the structure in bytes\r
305  *  nVersion     : OMX specification version information\r
306  *  nPortIndex   : Port that this structure applies to\r
307  *  eRefreshMode : Cyclic, Adaptive, or Both\r
308  *  nAirMBs      : Number of intra macroblocks to refresh in a frame when \r
309  *                 AIR is enabled\r
310  *  nAirRef      : Number of times a motion marked macroblock has to be  \r
311  *                 intra coded\r
312  *  nCirMBs      : Number of consecutive macroblocks to be coded as "intra"  \r
313  *                 when CIR is enabled\r
314  */\r
315 typedef struct OMX_VIDEO_PARAM_INTRAREFRESHTYPE {\r
316     OMX_U32 nSize;\r
317     OMX_VERSIONTYPE nVersion;\r
318     OMX_U32 nPortIndex;\r
319     OMX_VIDEO_INTRAREFRESHTYPE eRefreshMode;\r
320     OMX_U32 nAirMBs;\r
321     OMX_U32 nAirRef;\r
322     OMX_U32 nCirMBs;\r
323 } OMX_VIDEO_PARAM_INTRAREFRESHTYPE;\r
324 \r
325 \r
326 /**\r
327  * Structure for enabling various error correction methods for video \r
328  * compression.\r
329  *\r
330  * STRUCT MEMBERS:\r
331  *  nSize                   : Size of the structure in bytes\r
332  *  nVersion                : OMX specification version information \r
333  *  nPortIndex              : Port that this structure applies to \r
334  *  bEnableHEC              : Enable/disable header extension codes (HEC)\r
335  *  bEnableResync           : Enable/disable resynchronization markers\r
336  *  nResynchMarkerSpacing   : Resynch markers interval (in bits) to be \r
337  *                            applied in the stream \r
338  *  bEnableDataPartitioning : Enable/disable data partitioning \r
339  *  bEnableRVLC             : Enable/disable reversible variable length \r
340  *                            coding\r
341  */\r
342 typedef struct OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE {\r
343     OMX_U32 nSize;\r
344     OMX_VERSIONTYPE nVersion;\r
345     OMX_U32 nPortIndex;\r
346     OMX_BOOL bEnableHEC;\r
347     OMX_BOOL bEnableResync;\r
348     OMX_U32  nResynchMarkerSpacing;\r
349     OMX_BOOL bEnableDataPartitioning;\r
350     OMX_BOOL bEnableRVLC;\r
351 } OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE;\r
352 \r
353 \r
354 /** \r
355  * Configuration of variable block-size motion compensation (VBSMC) \r
356  * \r
357  * STRUCT MEMBERS:\r
358  *  nSize      : Size of the structure in bytes\r
359  *  nVersion   : OMX specification version information \r
360  *  nPortIndex : Port that this structure applies to\r
361  *  b16x16     : Enable inter block search 16x16\r
362  *  b16x8      : Enable inter block search 16x8\r
363  *  b8x16      : Enable inter block search 8x16\r
364  *  b8x8       : Enable inter block search 8x8\r
365  *  b8x4       : Enable inter block search 8x4\r
366  *  b4x8       : Enable inter block search 4x8\r
367  *  b4x4       : Enable inter block search 4x4\r
368  */\r
369 typedef struct OMX_VIDEO_PARAM_VBSMCTYPE {\r
370     OMX_U32 nSize; \r
371     OMX_VERSIONTYPE nVersion; \r
372     OMX_U32 nPortIndex;       \r
373     OMX_BOOL b16x16; \r
374     OMX_BOOL b16x8; \r
375     OMX_BOOL b8x16;\r
376     OMX_BOOL b8x8;\r
377     OMX_BOOL b8x4;\r
378     OMX_BOOL b4x8;\r
379     OMX_BOOL b4x4;\r
380 } OMX_VIDEO_PARAM_VBSMCTYPE;\r
381 \r
382 \r
383 /** \r
384  * H.263 profile types, each profile indicates support for various \r
385  * performance bounds and different annexes.\r
386  *\r
387  * ENUMS:\r
388  *  Baseline           : Baseline Profile: H.263 (V1), no optional modes                                                    \r
389  *  H320 Coding        : H.320 Coding Efficiency Backward Compatibility \r
390  *                       Profile: H.263+ (V2), includes annexes I, J, L.4\r
391  *                       and T\r
392  *  BackwardCompatible : Backward Compatibility Profile: H.263 (V1), \r
393  *                       includes annex F                                    \r
394  *  ISWV2              : Interactive Streaming Wireless Profile: H.263+ \r
395  *                       (V2), includes annexes I, J, K and T                 \r
396  *  ISWV3              : Interactive Streaming Wireless Profile: H.263++  \r
397  *                       (V3), includes profile 3 and annexes V and W.6.3.8   \r
398  *  HighCompression    : Conversational High Compression Profile: H.263++  \r
399  *                       (V3), includes profiles 1 & 2 and annexes D and U   \r
400  *  Internet           : Conversational Internet Profile: H.263++ (V3),  \r
401  *                       includes profile 5 and annex K                       \r
402  *  Interlace          : Conversational Interlace Profile: H.263++ (V3),  \r
403  *                       includes profile 5 and annex W.6.3.11               \r
404  *  HighLatency        : High Latency Profile: H.263++ (V3), includes  \r
405  *                       profile 6 and annexes O.1 and P.5                       \r
406  */\r
407 typedef enum OMX_VIDEO_H263PROFILETYPE {\r
408     OMX_VIDEO_H263ProfileBaseline            = 0x01,        \r
409     OMX_VIDEO_H263ProfileH320Coding          = 0x02,          \r
410     OMX_VIDEO_H263ProfileBackwardCompatible  = 0x04,  \r
411     OMX_VIDEO_H263ProfileISWV2               = 0x08,               \r
412     OMX_VIDEO_H263ProfileISWV3               = 0x10,               \r
413     OMX_VIDEO_H263ProfileHighCompression     = 0x20,     \r
414     OMX_VIDEO_H263ProfileInternet            = 0x40,            \r
415     OMX_VIDEO_H263ProfileInterlace           = 0x80,           \r
416     OMX_VIDEO_H263ProfileHighLatency         = 0x100,         \r
417     OMX_VIDEO_H263ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
418     OMX_VIDEO_H263ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
419     OMX_VIDEO_H263ProfileMax                 = 0x7FFFFFFF  \r
420 } OMX_VIDEO_H263PROFILETYPE;\r
421 \r
422 \r
423 /** \r
424  * H.263 level types, each level indicates support for various frame sizes, \r
425  * bit rates, decoder frame rates.\r
426  */\r
427 typedef enum OMX_VIDEO_H263LEVELTYPE {\r
428     OMX_VIDEO_H263Level10  = 0x01,  \r
429     OMX_VIDEO_H263Level20  = 0x02,      \r
430     OMX_VIDEO_H263Level30  = 0x04,      \r
431     OMX_VIDEO_H263Level40  = 0x08,      \r
432     OMX_VIDEO_H263Level45  = 0x10,      \r
433     OMX_VIDEO_H263Level50  = 0x20,      \r
434     OMX_VIDEO_H263Level60  = 0x40,      \r
435     OMX_VIDEO_H263Level70  = 0x80, \r
436     OMX_VIDEO_H263LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
437     OMX_VIDEO_H263LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
438     OMX_VIDEO_H263LevelMax = 0x7FFFFFFF  \r
439 } OMX_VIDEO_H263LEVELTYPE;\r
440 \r
441 \r
442 /** \r
443  * Specifies the picture type. These values should be OR'd to signal all \r
444  * pictures types which are allowed.\r
445  *\r
446  * ENUMS:\r
447  *  Generic Picture Types:          I, P and B\r
448  *  H.263 Specific Picture Types:   SI and SP\r
449  *  H.264 Specific Picture Types:   EI and EP\r
450  *  MPEG-4 Specific Picture Types:  S\r
451  */\r
452 typedef enum OMX_VIDEO_PICTURETYPE {\r
453     OMX_VIDEO_PictureTypeI   = 0x01,\r
454     OMX_VIDEO_PictureTypeP   = 0x02,\r
455     OMX_VIDEO_PictureTypeB   = 0x04,\r
456     OMX_VIDEO_PictureTypeSI  = 0x08,\r
457     OMX_VIDEO_PictureTypeSP  = 0x10,\r
458     OMX_VIDEO_PictureTypeEI  = 0x11,\r
459     OMX_VIDEO_PictureTypeEP  = 0x12,\r
460     OMX_VIDEO_PictureTypeS   = 0x14,\r
461     OMX_VIDEO_PictureTypeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
462     OMX_VIDEO_PictureTypeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
463     OMX_VIDEO_PictureTypeMax = 0x7FFFFFFF\r
464 } OMX_VIDEO_PICTURETYPE;\r
465 \r
466 \r
467 /** \r
468  * H.263 Params \r
469  *\r
470  * STRUCT MEMBERS:\r
471  *  nSize                    : Size of the structure in bytes\r
472  *  nVersion                 : OMX specification version information \r
473  *  nPortIndex               : Port that this structure applies to\r
474  *  nPFrames                 : Number of P frames between each I frame\r
475  *  nBFrames                 : Number of B frames between each I frame\r
476  *  eProfile                 : H.263 profile(s) to use\r
477  *  eLevel                   : H.263 level(s) to use\r
478  *  bPLUSPTYPEAllowed        : Indicating that it is allowed to use PLUSPTYPE \r
479  *                             (specified in the 1998 version of H.263) to \r
480  *                             indicate custom picture sizes or clock \r
481  *                             frequencies \r
482  *  nAllowedPictureTypes     : Specifies the picture types allowed in the \r
483  *                             bitstream\r
484  *  bForceRoundingTypeToZero : value of the RTYPE bit (bit 6 of MPPTYPE) is \r
485  *                             not constrained. It is recommended to change \r
486  *                             the value of the RTYPE bit for each reference \r
487  *                             picture in error-free communication\r
488  *  nPictureHeaderRepetition : Specifies the frequency of picture header \r
489  *                             repetition\r
490  *  nGOBHeaderInterval       : Specifies the interval of non-empty GOB  \r
491  *                             headers in units of GOBs\r
492  */\r
493 typedef struct OMX_VIDEO_PARAM_H263TYPE {\r
494     OMX_U32 nSize;\r
495     OMX_VERSIONTYPE nVersion;\r
496     OMX_U32 nPortIndex;\r
497     OMX_U32 nPFrames;\r
498     OMX_U32 nBFrames;\r
499     OMX_VIDEO_H263PROFILETYPE eProfile;\r
500         OMX_VIDEO_H263LEVELTYPE eLevel;\r
501     OMX_BOOL bPLUSPTYPEAllowed;\r
502     OMX_U32 nAllowedPictureTypes;\r
503     OMX_BOOL bForceRoundingTypeToZero;\r
504     OMX_U32 nPictureHeaderRepetition;\r
505     OMX_U32 nGOBHeaderInterval;\r
506 } OMX_VIDEO_PARAM_H263TYPE;\r
507 \r
508 \r
509 /** \r
510  * MPEG-2 profile types, each profile indicates support for various \r
511  * performance bounds and different annexes.\r
512  */\r
513 typedef enum OMX_VIDEO_MPEG2PROFILETYPE {\r
514     OMX_VIDEO_MPEG2ProfileSimple = 0,  /**< Simple Profile */\r
515     OMX_VIDEO_MPEG2ProfileMain,        /**< Main Profile */\r
516     OMX_VIDEO_MPEG2Profile422,         /**< 4:2:2 Profile */\r
517     OMX_VIDEO_MPEG2ProfileSNR,         /**< SNR Profile */\r
518     OMX_VIDEO_MPEG2ProfileSpatial,     /**< Spatial Profile */\r
519     OMX_VIDEO_MPEG2ProfileHigh,        /**< High Profile */\r
520     OMX_VIDEO_MPEG2ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
521     OMX_VIDEO_MPEG2ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
522     OMX_VIDEO_MPEG2ProfileMax = 0x7FFFFFFF  \r
523 } OMX_VIDEO_MPEG2PROFILETYPE;\r
524 \r
525 \r
526 /** \r
527  * MPEG-2 level types, each level indicates support for various frame \r
528  * sizes, bit rates, decoder frame rates.  No need \r
529  */\r
530 typedef enum OMX_VIDEO_MPEG2LEVELTYPE {\r
531     OMX_VIDEO_MPEG2LevelLL = 0,  /**< Low Level */ \r
532     OMX_VIDEO_MPEG2LevelML,      /**< Main Level */ \r
533     OMX_VIDEO_MPEG2LevelH14,     /**< High 1440 */ \r
534     OMX_VIDEO_MPEG2LevelHL,      /**< High Level */   \r
535     OMX_VIDEO_MPEG2LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
536     OMX_VIDEO_MPEG2LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
537     OMX_VIDEO_MPEG2LevelMax = 0x7FFFFFFF  \r
538 } OMX_VIDEO_MPEG2LEVELTYPE;\r
539 \r
540 \r
541 /** \r
542  * MPEG-2 params \r
543  *\r
544  * STRUCT MEMBERS:\r
545  *  nSize      : Size of the structure in bytes\r
546  *  nVersion   : OMX specification version information\r
547  *  nPortIndex : Port that this structure applies to\r
548  *  nPFrames   : Number of P frames between each I frame\r
549  *  nBFrames   : Number of B frames between each I frame\r
550  *  eProfile   : MPEG-2 profile(s) to use\r
551  *  eLevel     : MPEG-2 levels(s) to use\r
552  */\r
553 typedef struct OMX_VIDEO_PARAM_MPEG2TYPE {\r
554     OMX_U32 nSize;           \r
555     OMX_VERSIONTYPE nVersion;\r
556     OMX_U32 nPortIndex;      \r
557     OMX_U32 nPFrames;        \r
558     OMX_U32 nBFrames;        \r
559     OMX_VIDEO_MPEG2PROFILETYPE eProfile;\r
560         OMX_VIDEO_MPEG2LEVELTYPE eLevel;   \r
561 } OMX_VIDEO_PARAM_MPEG2TYPE;\r
562 \r
563 \r
564 /** \r
565  * MPEG-4 profile types, each profile indicates support for various \r
566  * performance bounds and different annexes.\r
567  * \r
568  * ENUMS:\r
569  *  - Simple Profile, Levels 1-3\r
570  *  - Simple Scalable Profile, Levels 1-2\r
571  *  - Core Profile, Levels 1-2\r
572  *  - Main Profile, Levels 2-4\r
573  *  - N-bit Profile, Level 2\r
574  *  - Scalable Texture Profile, Level 1\r
575  *  - Simple Face Animation Profile, Levels 1-2\r
576  *  - Simple Face and Body Animation (FBA) Profile, Levels 1-2\r
577  *  - Basic Animated Texture Profile, Levels 1-2\r
578  *  - Hybrid Profile, Levels 1-2\r
579  *  - Advanced Real Time Simple Profiles, Levels 1-4\r
580  *  - Core Scalable Profile, Levels 1-3\r
581  *  - Advanced Coding Efficiency Profile, Levels 1-4\r
582  *  - Advanced Core Profile, Levels 1-2\r
583  *  - Advanced Scalable Texture, Levels 2-3\r
584  */\r
585 typedef enum OMX_VIDEO_MPEG4PROFILETYPE {\r
586     OMX_VIDEO_MPEG4ProfileSimple           = 0x01,        \r
587     OMX_VIDEO_MPEG4ProfileSimpleScalable   = 0x02,    \r
588     OMX_VIDEO_MPEG4ProfileCore             = 0x04,              \r
589     OMX_VIDEO_MPEG4ProfileMain             = 0x08,             \r
590     OMX_VIDEO_MPEG4ProfileNbit             = 0x10,              \r
591     OMX_VIDEO_MPEG4ProfileScalableTexture  = 0x20,   \r
592     OMX_VIDEO_MPEG4ProfileSimpleFace       = 0x40,        \r
593     OMX_VIDEO_MPEG4ProfileSimpleFBA        = 0x80,         \r
594     OMX_VIDEO_MPEG4ProfileBasicAnimated    = 0x100,     \r
595     OMX_VIDEO_MPEG4ProfileHybrid           = 0x200,            \r
596     OMX_VIDEO_MPEG4ProfileAdvancedRealTime = 0x400,  \r
597     OMX_VIDEO_MPEG4ProfileCoreScalable     = 0x800,      \r
598     OMX_VIDEO_MPEG4ProfileAdvancedCoding   = 0x1000,    \r
599     OMX_VIDEO_MPEG4ProfileAdvancedCore     = 0x2000,      \r
600     OMX_VIDEO_MPEG4ProfileAdvancedScalable = 0x4000,\r
601     OMX_VIDEO_MPEG4ProfileAdvancedSimple   = 0x8000,\r
602     OMX_VIDEO_MPEG4ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
603     OMX_VIDEO_MPEG4ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
604     OMX_VIDEO_MPEG4ProfileMax              = 0x7FFFFFFF  \r
605 } OMX_VIDEO_MPEG4PROFILETYPE;\r
606 \r
607 \r
608 /** \r
609  * MPEG-4 level types, each level indicates support for various frame \r
610  * sizes, bit rates, decoder frame rates.  No need \r
611  */\r
612 typedef enum OMX_VIDEO_MPEG4LEVELTYPE {\r
613     OMX_VIDEO_MPEG4Level0  = 0x01,   /**< Level 0 */   \r
614     OMX_VIDEO_MPEG4Level0b = 0x02,   /**< Level 0b */   \r
615     OMX_VIDEO_MPEG4Level1  = 0x04,   /**< Level 1 */ \r
616     OMX_VIDEO_MPEG4Level2  = 0x08,   /**< Level 2 */ \r
617     OMX_VIDEO_MPEG4Level3  = 0x10,   /**< Level 3 */ \r
618     OMX_VIDEO_MPEG4Level4  = 0x20,   /**< Level 4 */  \r
619     OMX_VIDEO_MPEG4Level4a = 0x40,   /**< Level 4a */  \r
620     OMX_VIDEO_MPEG4Level5  = 0x80,   /**< Level 5 */  \r
621     OMX_VIDEO_MPEG4LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
622     OMX_VIDEO_MPEG4LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
623     OMX_VIDEO_MPEG4LevelMax = 0x7FFFFFFF  \r
624 } OMX_VIDEO_MPEG4LEVELTYPE;\r
625 \r
626 \r
627 /** \r
628  * MPEG-4 configuration.  This structure handles configuration options\r
629  * which are specific to MPEG4 algorithms\r
630  *\r
631  * STRUCT MEMBERS:\r
632  *  nSize                : Size of the structure in bytes\r
633  *  nVersion             : OMX specification version information\r
634  *  nPortIndex           : Port that this structure applies to\r
635  *  nSliceHeaderSpacing  : Number of macroblocks between slice header (H263+ \r
636  *                         Annex K). Put zero if not used\r
637  *  bSVH                 : Enable Short Video Header mode\r
638  *  bGov                 : Flag to enable GOV\r
639  *  nPFrames             : Number of P frames between each I frame (also called \r
640  *                         GOV period)\r
641  *  nBFrames             : Number of B frames between each I frame\r
642  *  nIDCVLCThreshold     : Value of intra DC VLC threshold\r
643  *  bACPred              : Flag to use ac prediction\r
644  *  nMaxPacketSize       : Maximum size of packet in bytes.\r
645  *  nTimeIncRes          : Used to pass VOP time increment resolution for MPEG4. \r
646  *                         Interpreted as described in MPEG4 standard.\r
647  *  eProfile             : MPEG-4 profile(s) to use.\r
648  *  eLevel               : MPEG-4 level(s) to use.\r
649  *  nAllowedPictureTypes : Specifies the picture types allowed in the bitstream\r
650  *  nHeaderExtension     : Specifies the number of consecutive video packet\r
651  *                         headers within a VOP\r
652  *  bReversibleVLC       : Specifies whether reversible variable length coding \r
653  *                         is in use\r
654  */\r
655 typedef struct OMX_VIDEO_PARAM_MPEG4TYPE {\r
656     OMX_U32 nSize;\r
657     OMX_VERSIONTYPE nVersion;\r
658     OMX_U32 nPortIndex;\r
659     OMX_U32 nSliceHeaderSpacing;\r
660     OMX_BOOL bSVH;\r
661     OMX_BOOL bGov;\r
662     OMX_U32 nPFrames;\r
663     OMX_U32 nBFrames;\r
664     OMX_U32 nIDCVLCThreshold;\r
665     OMX_BOOL bACPred;\r
666     OMX_U32 nMaxPacketSize;\r
667     OMX_U32 nTimeIncRes;\r
668     OMX_VIDEO_MPEG4PROFILETYPE eProfile;\r
669     OMX_VIDEO_MPEG4LEVELTYPE eLevel;\r
670     OMX_U32 nAllowedPictureTypes;\r
671     OMX_U32 nHeaderExtension;\r
672     OMX_BOOL bReversibleVLC;\r
673 } OMX_VIDEO_PARAM_MPEG4TYPE;\r
674 \r
675 \r
676 /** \r
677  * WMV Versions \r
678  */\r
679 typedef enum OMX_VIDEO_WMVFORMATTYPE {\r
680     OMX_VIDEO_WMVFormatUnused = 0x01,   /**< Format unused or unknown */\r
681     OMX_VIDEO_WMVFormat7      = 0x02,   /**< Windows Media Video format 7 */\r
682     OMX_VIDEO_WMVFormat8      = 0x04,   /**< Windows Media Video format 8 */\r
683     OMX_VIDEO_WMVFormat9      = 0x08,   /**< Windows Media Video format 9 */\r
684     OMX_VIDEO_WMFFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
685     OMX_VIDEO_WMFFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
686     OMX_VIDEO_WMVFormatMax    = 0x7FFFFFFF\r
687 } OMX_VIDEO_WMVFORMATTYPE;\r
688 \r
689 \r
690 /** \r
691  * WMV Params \r
692  *\r
693  * STRUCT MEMBERS:\r
694  *  nSize      : Size of the structure in bytes\r
695  *  nVersion   : OMX specification version information\r
696  *  nPortIndex : Port that this structure applies to\r
697  *  eFormat    : Version of WMV stream / data\r
698  */\r
699 typedef struct OMX_VIDEO_PARAM_WMVTYPE {\r
700     OMX_U32 nSize; \r
701     OMX_VERSIONTYPE nVersion;\r
702     OMX_U32 nPortIndex;\r
703     OMX_VIDEO_WMVFORMATTYPE eFormat;\r
704 } OMX_VIDEO_PARAM_WMVTYPE;\r
705 \r
706 \r
707 /** \r
708  * Real Video Version \r
709  */\r
710 typedef enum OMX_VIDEO_RVFORMATTYPE {\r
711     OMX_VIDEO_RVFormatUnused = 0, /**< Format unused or unknown */\r
712     OMX_VIDEO_RVFormat8,          /**< Real Video format 8 */\r
713     OMX_VIDEO_RVFormat9,          /**< Real Video format 9 */\r
714     OMX_VIDEO_RVFormatG2,         /**< Real Video Format G2 */\r
715     OMX_VIDEO_RVFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
716     OMX_VIDEO_RVFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
717     OMX_VIDEO_RVFormatMax = 0x7FFFFFFF\r
718 } OMX_VIDEO_RVFORMATTYPE;\r
719 \r
720 \r
721 /** \r
722  * Real Video Params \r
723  *\r
724  * STUCT MEMBERS:\r
725  *  nSize              : Size of the structure in bytes\r
726  *  nVersion           : OMX specification version information \r
727  *  nPortIndex         : Port that this structure applies to\r
728  *  eFormat            : Version of RV stream / data\r
729  *  nBitsPerPixel      : Bits per pixel coded in the frame\r
730  *  nPaddedWidth       : Padded width in pixel of a video frame\r
731  *  nPaddedHeight      : Padded Height in pixels of a video frame\r
732  *  nFrameRate         : Rate of video in frames per second\r
733  *  nBitstreamFlags    : Flags which internal information about the bitstream\r
734  *  nBitstreamVersion  : Bitstream version\r
735  *  nMaxEncodeFrameSize: Max encoded frame size\r
736  *  bEnablePostFilter  : Turn on/off post filter\r
737  *  bEnableTemporalInterpolation : Turn on/off temporal interpolation\r
738  *  bEnableLatencyMode : When enabled, the decoder does not display a decoded \r
739  *                       frame until it has detected that no enhancement layer \r
740  *                                       frames or dependent B frames will be coming. This \r
741  *                                       detection usually occurs when a subsequent non-B \r
742  *                                       frame is encountered \r
743  */\r
744 typedef struct OMX_VIDEO_PARAM_RVTYPE {\r
745     OMX_U32 nSize;\r
746     OMX_VERSIONTYPE nVersion;\r
747     OMX_U32 nPortIndex;\r
748     OMX_VIDEO_RVFORMATTYPE eFormat;\r
749     OMX_U16 nBitsPerPixel;\r
750     OMX_U16 nPaddedWidth;\r
751     OMX_U16 nPaddedHeight;\r
752     OMX_U32 nFrameRate;\r
753     OMX_U32 nBitstreamFlags;\r
754     OMX_U32 nBitstreamVersion;\r
755     OMX_U32 nMaxEncodeFrameSize;\r
756     OMX_BOOL bEnablePostFilter;\r
757     OMX_BOOL bEnableTemporalInterpolation;\r
758     OMX_BOOL bEnableLatencyMode;\r
759 } OMX_VIDEO_PARAM_RVTYPE;\r
760 \r
761 \r
762 /** \r
763  * AVC profile types, each profile indicates support for various \r
764  * performance bounds and different annexes.\r
765  */\r
766 typedef enum OMX_VIDEO_AVCPROFILETYPE {\r
767     OMX_VIDEO_AVCProfileBaseline = 0x01,   /**< Baseline profile */\r
768     OMX_VIDEO_AVCProfileMain     = 0x02,   /**< Main profile */\r
769     OMX_VIDEO_AVCProfileExtended = 0x04,   /**< Extended profile */\r
770     OMX_VIDEO_AVCProfileHigh     = 0x08,   /**< High profile */\r
771     OMX_VIDEO_AVCProfileHigh10   = 0x10,   /**< High 10 profile */\r
772     OMX_VIDEO_AVCProfileHigh422  = 0x20,   /**< High 4:2:2 profile */\r
773     OMX_VIDEO_AVCProfileHigh444  = 0x40,   /**< High 4:4:4 profile */\r
774     OMX_VIDEO_AVCProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
775     OMX_VIDEO_AVCProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
776     OMX_VIDEO_AVCProfileMax      = 0x7FFFFFFF  \r
777 } OMX_VIDEO_AVCPROFILETYPE;\r
778 \r
779 \r
780 /** \r
781  * AVC level types, each level indicates support for various frame sizes, \r
782  * bit rates, decoder frame rates.  No need \r
783  */\r
784 typedef enum OMX_VIDEO_AVCLEVELTYPE {\r
785     OMX_VIDEO_AVCLevel1   = 0x01,     /**< Level 1 */\r
786     OMX_VIDEO_AVCLevel1b  = 0x02,     /**< Level 1b */\r
787     OMX_VIDEO_AVCLevel11  = 0x04,     /**< Level 1.1 */\r
788     OMX_VIDEO_AVCLevel12  = 0x08,     /**< Level 1.2 */\r
789     OMX_VIDEO_AVCLevel13  = 0x10,     /**< Level 1.3 */\r
790     OMX_VIDEO_AVCLevel2   = 0x20,     /**< Level 2 */\r
791     OMX_VIDEO_AVCLevel21  = 0x40,     /**< Level 2.1 */\r
792     OMX_VIDEO_AVCLevel22  = 0x80,     /**< Level 2.2 */\r
793     OMX_VIDEO_AVCLevel3   = 0x100,    /**< Level 3 */\r
794     OMX_VIDEO_AVCLevel31  = 0x200,    /**< Level 3.1 */\r
795     OMX_VIDEO_AVCLevel32  = 0x400,    /**< Level 3.2 */\r
796     OMX_VIDEO_AVCLevel4   = 0x800,    /**< Level 4 */\r
797     OMX_VIDEO_AVCLevel41  = 0x1000,   /**< Level 4.1 */\r
798     OMX_VIDEO_AVCLevel42  = 0x2000,   /**< Level 4.2 */\r
799     OMX_VIDEO_AVCLevel5   = 0x4000,   /**< Level 5 */\r
800     OMX_VIDEO_AVCLevel51  = 0x8000,   /**< Level 5.1 */\r
801     OMX_VIDEO_AVCLevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
802     OMX_VIDEO_AVCLevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
803     OMX_VIDEO_AVCLevelMax = 0x7FFFFFFF  \r
804 } OMX_VIDEO_AVCLEVELTYPE;\r
805 \r
806 \r
807 /** \r
808  * AVC loop filter modes \r
809  *\r
810  * OMX_VIDEO_AVCLoopFilterEnable               : Enable\r
811  * OMX_VIDEO_AVCLoopFilterDisable              : Disable\r
812  * OMX_VIDEO_AVCLoopFilterDisableSliceBoundary : Disabled on slice boundaries\r
813  */\r
814 typedef enum OMX_VIDEO_AVCLOOPFILTERTYPE {\r
815     OMX_VIDEO_AVCLoopFilterEnable = 0,\r
816     OMX_VIDEO_AVCLoopFilterDisable,\r
817     OMX_VIDEO_AVCLoopFilterDisableSliceBoundary,\r
818     OMX_VIDEO_AVCLoopFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
819     OMX_VIDEO_AVCLoopFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
820     OMX_VIDEO_AVCLoopFilterMax = 0x7FFFFFFF\r
821 } OMX_VIDEO_AVCLOOPFILTERTYPE;\r
822 \r
823 \r
824 /** \r
825  * AVC params \r
826  *\r
827  * STRUCT MEMBERS:\r
828  *  nSize                     : Size of the structure in bytes\r
829  *  nVersion                  : OMX specification version information\r
830  *  nPortIndex                : Port that this structure applies to\r
831  *  nSliceHeaderSpacing       : Number of macroblocks between slice header, put  \r
832  *                              zero if not used\r
833  *  nPFrames                  : Number of P frames between each I frame\r
834  *  nBFrames                  : Number of B frames between each I frame\r
835  *  bUseHadamard              : Enable/disable Hadamard transform\r
836  *  nRefFrames                : Max number of reference frames to use for inter\r
837  *                              motion search (1-16)\r
838  *  nRefIdxTrailing           : Pic param set ref frame index (index into ref\r
839  *                              frame buffer of trailing frames list), B frame\r
840  *                              support\r
841  *  nRefIdxForward            : Pic param set ref frame index (index into ref\r
842  *                              frame buffer of forward frames list), B frame\r
843  *                              support\r
844  *  bEnableUEP                : Enable/disable unequal error protection. This \r
845  *                              is only valid of data partitioning is enabled.\r
846  *  bEnableFMO                : Enable/disable flexible macroblock ordering\r
847  *  bEnableASO                : Enable/disable arbitrary slice ordering\r
848  *  bEnableRS                 : Enable/disable sending of redundant slices\r
849  *  eProfile                  : AVC profile(s) to use\r
850  *  eLevel                    : AVC level(s) to use\r
851  *  nAllowedPictureTypes      : Specifies the picture types allowed in the \r
852  *                              bitstream\r
853  *  bFrameMBsOnly             : specifies that every coded picture of the \r
854  *                              coded video sequence is a coded frame \r
855  *                              containing only frame macroblocks\r
856  *  bMBAFF                    : Enable/disable switching between frame and \r
857  *                              field macroblocks within a picture\r
858  *  bEntropyCodingCABAC       : Entropy decoding method to be applied for the \r
859  *                              syntax elements for which two descriptors appear \r
860  *                              in the syntax tables\r
861  *  bWeightedPPrediction      : Enable/disable weighted prediction shall not \r
862  *                              be applied to P and SP slices\r
863  *  nWeightedBipredicitonMode : Default weighted prediction is applied to B \r
864  *                              slices \r
865  *  bconstIpred               : Enable/disable intra prediction\r
866  *  bDirect8x8Inference       : Specifies the method used in the derivation \r
867  *                              process for luma motion vectors for B_Skip, \r
868  *                              B_Direct_16x16 and B_Direct_8x8 as specified \r
869  *                              in subclause 8.4.1.2 of the AVC spec \r
870  *  bDirectSpatialTemporal    : Flag indicating spatial or temporal direct\r
871  *                              mode used in B slice coding (related to \r
872  *                              bDirect8x8Inference) . Spatial direct mode is \r
873  *                              more common and should be the default.\r
874  *  nCabacInitIdx             : Index used to init CABAC contexts\r
875  *  eLoopFilterMode           : Enable/disable loop filter\r
876  */\r
877 typedef struct OMX_VIDEO_PARAM_AVCTYPE {\r
878     OMX_U32 nSize;                 \r
879     OMX_VERSIONTYPE nVersion;      \r
880     OMX_U32 nPortIndex;            \r
881     OMX_U32 nSliceHeaderSpacing;  \r
882     OMX_U32 nPFrames;     \r
883     OMX_U32 nBFrames;     \r
884     OMX_BOOL bUseHadamard;\r
885     OMX_U32 nRefFrames;  \r
886         OMX_U32 nRefIdx10ActiveMinus1;\r
887         OMX_U32 nRefIdx11ActiveMinus1;\r
888     OMX_BOOL bEnableUEP;  \r
889     OMX_BOOL bEnableFMO;  \r
890     OMX_BOOL bEnableASO;  \r
891     OMX_BOOL bEnableRS;   \r
892     OMX_VIDEO_AVCPROFILETYPE eProfile;\r
893         OMX_VIDEO_AVCLEVELTYPE eLevel; \r
894     OMX_U32 nAllowedPictureTypes;  \r
895         OMX_BOOL bFrameMBsOnly;                                                                         \r
896     OMX_BOOL bMBAFF;               \r
897     OMX_BOOL bEntropyCodingCABAC;  \r
898     OMX_BOOL bWeightedPPrediction; \r
899     OMX_U32 nWeightedBipredicitonMode; \r
900     OMX_BOOL bconstIpred ;\r
901     OMX_BOOL bDirect8x8Inference;  \r
902         OMX_BOOL bDirectSpatialTemporal;\r
903         OMX_U32 nCabacInitIdc;\r
904         OMX_VIDEO_AVCLOOPFILTERTYPE eLoopFilterMode;\r
905 } OMX_VIDEO_PARAM_AVCTYPE;\r
906 \r
907 typedef struct OMX_VIDEO_PARAM_PROFILELEVELTYPE {\r
908    OMX_U32 nSize;                 \r
909    OMX_VERSIONTYPE nVersion;      \r
910    OMX_U32 nPortIndex;            \r
911    OMX_U32 eProfile;      /**< type is OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE, \r
912                                  or OMX_VIDEO_MPEG4PROFILETYPE depending on context */\r
913    OMX_U32 eLevel;        /**< type is OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE, \r
914                                  or OMX_VIDEO_MPEG4PROFILETYPE depending on context */\r
915    OMX_U32 nProfileIndex; /**< Used to query for individual profile support information,\r
916                                This parameter is valid only for \r
917                                OMX_IndexParamVideoProfileLevelQuerySupported index,\r
918                                For all other indices this parameter is to be ignored. */\r
919 } OMX_VIDEO_PARAM_PROFILELEVELTYPE;\r
920 \r
921 /** \r
922  * Structure for dynamically configuring bitrate mode of a codec. \r
923  *\r
924  * STRUCT MEMBERS:\r
925  *  nSize          : Size of the struct in bytes\r
926  *  nVersion       : OMX spec version info\r
927  *  nPortIndex     : Port that this struct applies to\r
928  *  nEncodeBitrate : Target average bitrate to be generated in bps\r
929  */\r
930 typedef struct OMX_VIDEO_CONFIG_BITRATETYPE {\r
931     OMX_U32 nSize;                          \r
932     OMX_VERSIONTYPE nVersion;               \r
933     OMX_U32 nPortIndex;                     \r
934     OMX_U32 nEncodeBitrate;                 \r
935 } OMX_VIDEO_CONFIG_BITRATETYPE;\r
936 \r
937 /** \r
938  * Defines Encoder Frame Rate setting\r
939  *\r
940  * STRUCT MEMBERS:\r
941  *  nSize            : Size of the structure in bytes\r
942  *  nVersion         : OMX specification version information \r
943  *  nPortIndex       : Port that this structure applies to\r
944  *  xEncodeFramerate : Encoding framerate represented in Q16 format\r
945  */\r
946 typedef struct OMX_CONFIG_FRAMERATETYPE {\r
947     OMX_U32 nSize;\r
948     OMX_VERSIONTYPE nVersion;\r
949     OMX_U32 nPortIndex;\r
950     OMX_U32 xEncodeFramerate; /* Q16 format */\r
951 } OMX_CONFIG_FRAMERATETYPE;\r
952 \r
953 typedef struct OMX_CONFIG_INTRAREFRESHVOPTYPE {\r
954     OMX_U32 nSize;\r
955     OMX_VERSIONTYPE nVersion;\r
956     OMX_U32 nPortIndex;\r
957     OMX_BOOL IntraRefreshVOP;\r
958 } OMX_CONFIG_INTRAREFRESHVOPTYPE;\r
959 \r
960 typedef struct OMX_CONFIG_MACROBLOCKERRORMAPTYPE {\r
961     OMX_U32 nSize;\r
962     OMX_VERSIONTYPE nVersion;\r
963     OMX_U32 nPortIndex;\r
964     OMX_U32 nErrMapSize;           /* Size of the Error Map in bytes */\r
965     OMX_U8  ErrMap[1];             /* Error map hint */\r
966 } OMX_CONFIG_MACROBLOCKERRORMAPTYPE;\r
967 \r
968 typedef struct OMX_CONFIG_MBERRORREPORTINGTYPE {\r
969     OMX_U32 nSize;\r
970     OMX_VERSIONTYPE nVersion;\r
971     OMX_U32 nPortIndex;\r
972     OMX_BOOL bEnabled;\r
973 } OMX_CONFIG_MBERRORREPORTINGTYPE;\r
974 \r
975 typedef struct OMX_PARAM_MACROBLOCKSTYPE {\r
976     OMX_U32 nSize;\r
977     OMX_VERSIONTYPE nVersion;\r
978     OMX_U32 nPortIndex;\r
979     OMX_U32 nMacroblocks;\r
980 } OMX_PARAM_MACROBLOCKSTYPE;\r
981 \r
982 /** \r
983  * AVC Slice Mode modes \r
984  *\r
985  * OMX_VIDEO_SLICEMODE_AVCDefault   : Normal frame encoding, one slice per frame\r
986  * OMX_VIDEO_SLICEMODE_AVCMBSlice   : NAL mode, number of MBs per frame\r
987  * OMX_VIDEO_SLICEMODE_AVCByteSlice : NAL mode, number of bytes per frame\r
988  */\r
989 typedef enum OMX_VIDEO_AVCSLICEMODETYPE {\r
990     OMX_VIDEO_SLICEMODE_AVCDefault = 0,\r
991     OMX_VIDEO_SLICEMODE_AVCMBSlice,\r
992     OMX_VIDEO_SLICEMODE_AVCByteSlice,\r
993     OMX_VIDEO_SLICEMODE_AVCKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ \r
994     OMX_VIDEO_SLICEMODE_AVCVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */\r
995     OMX_VIDEO_SLICEMODE_AVCLevelMax = 0x7FFFFFFF\r
996 } OMX_VIDEO_AVCSLICEMODETYPE;\r
997 \r
998 /** \r
999  * AVC FMO Slice Mode Params \r
1000  *\r
1001  * STRUCT MEMBERS:\r
1002  *  nSize      : Size of the structure in bytes\r
1003  *  nVersion   : OMX specification version information\r
1004  *  nPortIndex : Port that this structure applies to\r
1005  *  nNumSliceGroups : Specifies the number of slice groups\r
1006  *  nSliceGroupMapType : Specifies the type of slice groups\r
1007  *  eSliceMode : Specifies the type of slice\r
1008  */\r
1009 typedef struct OMX_VIDEO_PARAM_AVCSLICEFMO {\r
1010     OMX_U32 nSize; \r
1011     OMX_VERSIONTYPE nVersion;\r
1012     OMX_U32 nPortIndex;\r
1013     OMX_U8 nNumSliceGroups;\r
1014     OMX_U8 nSliceGroupMapType;\r
1015     OMX_VIDEO_AVCSLICEMODETYPE eSliceMode;\r
1016 } OMX_VIDEO_PARAM_AVCSLICEFMO;\r
1017 \r
1018 /** \r
1019  * AVC IDR Period Configs\r
1020  *\r
1021  * STRUCT MEMBERS:\r
1022  *  nSize      : Size of the structure in bytes\r
1023  *  nVersion   : OMX specification version information\r
1024  *  nPortIndex : Port that this structure applies to\r
1025  *  nIDRPeriod : Specifies periodicity of IDR frames\r
1026  *  nPFrames : Specifies internal of coding Intra frames\r
1027  */\r
1028 typedef struct OMX_VIDEO_CONFIG_AVCINTRAPERIOD {\r
1029     OMX_U32 nSize; \r
1030     OMX_VERSIONTYPE nVersion;\r
1031     OMX_U32 nPortIndex;\r
1032     OMX_U32 nIDRPeriod;\r
1033     OMX_U32 nPFrames;\r
1034 } OMX_VIDEO_CONFIG_AVCINTRAPERIOD;\r
1035 \r
1036 /** \r
1037  * AVC NAL Size Configs\r
1038  *\r
1039  * STRUCT MEMBERS:\r
1040  *  nSize      : Size of the structure in bytes\r
1041  *  nVersion   : OMX specification version information\r
1042  *  nPortIndex : Port that this structure applies to\r
1043  *  nNaluBytes : Specifies the NAL unit size\r
1044  */\r
1045 typedef struct OMX_VIDEO_CONFIG_NALSIZE {\r
1046     OMX_U32 nSize; \r
1047     OMX_VERSIONTYPE nVersion;\r
1048     OMX_U32 nPortIndex;\r
1049     OMX_U32 nNaluBytes;\r
1050 } OMX_VIDEO_CONFIG_NALSIZE;\r
1051 \r
1052 /** @} */\r
1053 \r
1054 #ifdef __cplusplus\r
1055 }\r
1056 #endif /* __cplusplus */\r
1057 \r
1058 #endif\r
1059 /* File EOF */\r
1060 \r