1 /*--------------------------------------------------------------------------
2 Copyright (c) 2011 The Linux Foundation. All rights reserved.
3 
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions are met:
6     * Redistributions of source code must retain the above copyright
7       notice, this list of conditions and the following disclaimer.
8     * Redistributions in binary form must reproduce the above copyright
9       notice, this list of conditions and the following disclaimer in the
10       documentation and/or other materials provided with the distribution.
11     * Neither the name of The Linux Foundation nor
12       the names of its contributors may be used to endorse or promote
13       products derived from this software without specific prior written
14       permission.
15 
16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19 NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
20 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
21 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
23 OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
25 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
26 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 --------------------------------------------------------------------------*/
28 
29 #ifndef __H_QOMX_VIDEOEXTENSIONS_H__
30 #define __H_QOMX_VIDEOEXTENSIONS_H__
31 
32 /*========================================================================
33 
34 *//** @file QOMX_VideoExtensions.h
35 
36 @par FILE SERVICES:
37       Qualcomm extensions API for OpenMax IL Video.
38 
39       This file contains the description of the Qualcomm OpenMax IL
40       video extention interface, through which the IL client and OpenMax
41       components can access additional video capabilities.
42 
43 *//*====================================================================== */
44 
45 
46 /*========================================================================== */
47 
48 /*========================================================================
49 
50                      INCLUDE FILES FOR MODULE
51 
52 ========================================================================== */
53 #include <OMX_Core.h>
54 #include <OMX_Video.h>
55 
56 /*========================================================================
57 
58                       DEFINITIONS AND DECLARATIONS
59 
60 ========================================================================== */
61 
62 #if defined( __cplusplus )
63 extern "C"
64 {
65 #endif /* end of macro __cplusplus */
66 
67 /* Video extension strings */
68 #define OMX_QCOM_INDEX_PARAM_VIDEO_SYNTAXHDR                "OMX.QCOM.index.param.video.SyntaxHdr"
69 #define OMX_QCOM_INDEX_PARAM_VIDEO_ENCODERMODE              "OMX.QCOM.index.param.video.EncoderMode"
70 #define OMX_QCOM_INDEX_CONFIG_VIDEO_INTRAREFRESH            "OMX.QCOM.index.config.video.IntraRefresh"
71 #define OMX_QCOM_INDEX_CONFIG_VIDEO_INTRAPERIOD             "OMX.QCOM.index.config.video.IntraPeriod"
72 #define OMX_QCOM_INDEX_CONFIG_VIDEO_TEMPORALSPATIALTRADEOFF "OMX.QCOM.index.config.video.TemporalSpatialTradeOff"
73 #define OMX_QCOM_INDEX_CONFIG_VIDEO_MBCONCEALMENTREPORTING  "OMX.QCOM.index.config.video.MBConcealmentReporting"
74 #define OMX_QCOM_INDEX_PARAM_VIDEO_EXTRADATAMULTISLICEINFO  "OMX.QCOM.index.param.video.ExtraDataMultiSliceInfo" /**< reference: QOMX_ENABLETYPE */
75 #define OMX_QCOM_INDEX_CONFIG_VIDEO_FLOWSTATUS              "OMX.QCOM.index.config.video.FlowStatus"             /**< reference: QOMX_FLOWSTATUSTYPE */
76 #define OMX_QCOM_INDEX_PARAM_VIDEO_PICTURETYPEDECODE        "OMX.QCOM.index.param.video.PictureTypeDecode"       /**< reference: QOMX_VIDEO_DECODEPICTURETYPE */
77 #define OMX_QCOM_INDEX_PARAM_VIDEO_SAMPLEASPECTRATIO        "OMX.QCOM.index.param.video.SampleAspectRatio"       /**< reference: QOMX_VIDEO_SAMPLEASPECTRATIO */
78 #define OMX_QCOM_INDEX_PARAM_VIDEO_EXTRADATALTRINFO         "OMX.QCOM.index.param.video.ExtraDataLTRInfo"        /**< reference: QOMX_ENABLETYPE */
79 
80 /* Video coding types */
81 #define OMX_QCOM_INDEX_PARAM_VIDEO_DIVX                     "OMX.QCOM.index.param.video.DivX"
82 #define OMX_QCOM_INDEX_PARAM_VIDEO_VP                       "OMX.QCOM.index.param.video.VP"
83 #define OMX_QCOM_INDEX_PARAM_VIDEO_SPARK                    "OMX.QCOM.index.param.video.Spark"
84 #define OMX_QCOM_INDEX_PARAM_VIDEO_VC1                      "OMX.QCOM.index.param.video.VC1"
85 
86 /**
87  * Enumeration used to define the extended video compression
88  * codings, not present in the OpenMax IL 1.1.2 specification.
89  * NOTE:  This essentially refers to file extensions. If the
90  *        coding is being used to specify the ENCODE type, then
91  *        additional work must be done to configure the exact
92  *        flavor of the compression to be used.
93  */
94 typedef enum QOMX_VIDEO_CODINGTYPE
95 {
96     QOMX_VIDEO_CodingDivX   = 0x7F000001, /**< all versions of DivX */
97     QOMX_VIDEO_CodingVP     = 0x7F000002, /**< all versions of On2 VP codec */
98     QOMX_VIDEO_CodingSpark  = 0x7F000003, /**< Sorenson Spark */
99     QOMX_VIDEO_CodingVC1    = 0x7F000004, /**< VC-1 */
100     QOMX_VIDEO_MPEG1        = 0x7F000005  /**< MPEG-1 */
101 } QOMX_VIDEO_CODINGTYPE;
102 
103 /**
104  * DivX Versions
105  */
106 typedef enum QOMX_VIDEO_DIVXFORMATTYPE {
107     QOMX_VIDEO_DIVXFormatUnused = 0x01, /**< Format unused or unknown */
108     QOMX_VIDEO_DIVXFormat311    = 0x02, /**< DivX 3.11 */
109     QOMX_VIDEO_DIVXFormat4      = 0x04, /**< DivX 4 */
110     QOMX_VIDEO_DIVXFormat5      = 0x08, /**< DivX 5 */
111     QOMX_VIDEO_DIVXFormat6      = 0x10, /**< DivX 6 */
112     QOMX_VIDEO_DIVXFormatKhronosExtensions = 0x6F000000,
113     QOMX_VIDEO_DIVXFormatVendorStartUnused = 0x7F000000,
114     QOMX_VIDEO_DIVXFormatMax = 0x7FFFFFFF
115 } QOMX_VIDEO_DIVXFORMATTYPE;
116 
117 /**
118  * DivX profile types, each profile indicates support for
119  * various performance bounds.
120  */
121 typedef enum QOMX_VIDEO_DIVXPROFILETYPE {
122     QOMX_VIDEO_DivXProfileqMobile = 0x01, /**< qMobile Profile */
123     QOMX_VIDEO_DivXProfileMobile  = 0x02, /**< Mobile Profile */
124     QOMX_VIDEO_DivXProfileMT      = 0x04, /**< Mobile Theatre Profile */
125     QOMX_VIDEO_DivXProfileHT      = 0x08, /**< Home Theatre Profile */
126     QOMX_VIDEO_DivXProfileHD      = 0x10, /**< High Definition Profile */
127     QOMX_VIDEO_DIVXProfileKhronosExtensions = 0x6F000000,
128     QOMX_VIDEO_DIVXProfileVendorStartUnused = 0x7F000000,
129     QOMX_VIDEO_DIVXProfileMax = 0x7FFFFFFF
130 } QOMX_VIDEO_DIVXPROFILETYPE;
131 
132 /**
133  * DivX Video Params
134  *
135  *  STRUCT MEMBERS:
136  *  nSize      : Size of the structure in bytes
137  *  nVersion   : OMX specification version information
138  *  nPortIndex : Port that this structure applies to
139  *  eFormat    : Version of DivX stream / data
140  *  eProfile   : Profile of DivX stream / data
141  */
142 typedef struct QOMX_VIDEO_PARAM_DIVXTYPE {
143     OMX_U32 nSize;
144     OMX_VERSIONTYPE nVersion;
145     OMX_U32 nPortIndex;
146     QOMX_VIDEO_DIVXFORMATTYPE eFormat;
147     QOMX_VIDEO_DIVXPROFILETYPE eProfile;
148 } QOMX_VIDEO_PARAM_DIVXTYPE;
149 
150 /**
151  * VP Versions
152  */
153 typedef enum QOMX_VIDEO_VPFORMATTYPE {
154     QOMX_VIDEO_VPFormatUnused = 0x01, /**< Format unused or unknown */
155     QOMX_VIDEO_VPFormat6      = 0x02, /**< VP6 Video Format */
156     QOMX_VIDEO_VPFormat7      = 0x04, /**< VP7 Video Format */
157     QOMX_VIDEO_VPFormat8      = 0x08, /**< VP8 Video Format */
158     QOMX_VIDEO_VPFormatKhronosExtensions = 0x6F000000,
159     QOMX_VIDEO_VPFormatVendorStartUnused = 0x7F000000,
160     QOMX_VIDEO_VPFormatMax = 0x7FFFFFFF
161 } QOMX_VIDEO_VPFORMATTYPE;
162 
163 /**
164  * VP profile types, each profile indicates support for various
165  * encoding tools.
166  */
167 typedef enum QOMX_VIDEO_VPPROFILETYPE {
168     QOMX_VIDEO_VPProfileSimple   = 0x01, /**< Simple Profile, applies to VP6 only */
169     QOMX_VIDEO_VPProfileAdvanced = 0x02, /**< Advanced Profile, applies to VP6 only */
170     QOMX_VIDEO_VPProfileVersion0 = 0x04, /**< Version 0, applies to VP7 and VP8 */
171     QOMX_VIDEO_VPProfileVersion1 = 0x08, /**< Version 1, applies to VP7 and VP8 */
172     QOMX_VIDEO_VPProfileVersion2 = 0x10, /**< Version 2, applies to VP8 only */
173     QOMX_VIDEO_VPProfileVersion3 = 0x20, /**< Version 3, applies to VP8 only */
174     QOMX_VIDEO_VPProfileKhronosExtensions = 0x6F000000,
175     QOMX_VIDEO_VPProfileVendorStartUnused = 0x7F000000,
176     QOMX_VIDEO_VPProfileMax = 0x7FFFFFFF
177 } QOMX_VIDEO_VPPROFILETYPE;
178 
179 /**
180  * VP Video Params
181  *
182  *  STRUCT MEMBERS:
183  *  nSize      : Size of the structure in bytes
184  *  nVersion   : OMX specification version information
185  *  nPortIndex : Port that this structure applies to
186  *  eFormat    : Format of VP stream / data
187  *  eProfile   : Profile or Version of VP stream / data
188  */
189 typedef struct QOMX_VIDEO_PARAM_VPTYPE {
190     OMX_U32 nSize;
191     OMX_VERSIONTYPE nVersion;
192     OMX_U32 nPortIndex;
193     QOMX_VIDEO_VPFORMATTYPE eFormat;
194     QOMX_VIDEO_VPPROFILETYPE eProfile;
195 } QOMX_VIDEO_PARAM_VPTYPE;
196 
197 /**
198  * Spark Versions
199  */
200 typedef enum QOMX_VIDEO_SPARKFORMATTYPE {
201     QOMX_VIDEO_SparkFormatUnused = 0x01, /**< Format unused or unknown */
202     QOMX_VIDEO_SparkFormat0      = 0x02, /**< Video Format Version 0 */
203     QOMX_VIDEO_SparkFormat1      = 0x04, /**< Video Format Version 1 */
204     QOMX_VIDEO_SparkFormatKhronosExtensions = 0x6F000000,
205     QOMX_VIDEO_SparkFormatVendorStartUnused = 0x7F000000,
206     QOMX_VIDEO_SparkFormatMax = 0x7FFFFFFF
207 } QOMX_VIDEO_SPARKFORMATTYPE;
208 
209 /**
210  * Spark Video Params
211  *
212  *  STRUCT MEMBERS:
213  *  nSize      : Size of the structure in bytes
214  *  nVersion   : OMX specification version information
215  *  nPortIndex : Port that this structure applies to
216  *  eFormat    : Version of Spark stream / data
217  */
218 typedef struct QOMX_VIDEO_PARAM_SPARKTYPE {
219     OMX_U32 nSize;
220     OMX_VERSIONTYPE nVersion;
221     OMX_U32 nPortIndex;
222     QOMX_VIDEO_SPARKFORMATTYPE eFormat;
223 } QOMX_VIDEO_PARAM_SPARKTYPE;
224 
225 /**
226  * VC-1 profile types, each profile indicates support for
227  * various encoding tools.
228  */
229 typedef enum QOMX_VIDEO_VC1PROFILETYPE {
230     QOMX_VIDEO_VC1ProfileSimple   = 0x01, /**< Simple Profile */
231     QOMX_VIDEO_VC1ProfileMain     = 0x02, /**< Main Profile */
232     QOMX_VIDEO_VC1ProfileAdvanced = 0x04, /**< Advanced Profile */
233     QOMX_VIDEO_VC1ProfileKhronosExtensions = 0x6F000000,
234     QOMX_VIDEO_VC1ProfileVendorStartUnused = 0x7F000000,
235     QOMX_VIDEO_VC1ProfileMax = 0x7FFFFFFF
236 } QOMX_VIDEO_VC1PROFILETYPE;
237 
238 /**
239  * VC-1 level types, each level indicates support for various
240  * performance bounds.
241  */
242 typedef enum QOMX_VIDEO_VC1LEVELTYPE {
243     QOMX_VIDEO_VC1LevelLow    = 0x01, /**< Low Level, applies to simple and main profiles*/
244     QOMX_VIDEO_VC1LevelMedium = 0x02, /**< Medium Level, applies to simple and main profiles */
245     QOMX_VIDEO_VC1LevelHigh   = 0x04, /**< High Level, applies to main profile only */
246     QOMX_VIDEO_VC1Level0      = 0x08, /**< Level 0, applies to advanced profile only */
247     QOMX_VIDEO_VC1Level1      = 0x10, /**< Level 1, applies to advanced profile only */
248     QOMX_VIDEO_VC1Level2      = 0x20, /**< Level 2, applies to advanced profile only */
249     QOMX_VIDEO_VC1Level3      = 0x40, /**< Level 3, applies to advanced profile only */
250     QOMX_VIDEO_VC1Level4      = 0x80, /**< Level 4, applies to advanced profile only */
251     QOMX_VIDEO_VC1LevelKhronosExtensions = 0x6F000000,
252     QOMX_VIDEO_VC1LevelVendorStartUnused = 0x7F000000,
253     QOMX_VIDEO_VC1LevelMax = 0x7FFFFFFF
254 } QOMX_VIDEO_VC1LEVELTYPE;
255 
256 /**
257  * VC-1 Video Params
258  *
259  *  STRUCT MEMBERS:
260  *  nSize      : Size of the structure in bytes
261  *  nVersion   : OMX specification version information
262  *  nPortIndex : Port that this structure applies to
263  *  eProfile   : Profile of VC-1 stream / data
264  *  eLevel     : Level of VC-1 stream / data
265  */
266 typedef struct QOMX_VIDEO_PARAM_VC1TYPE {
267     OMX_U32 nSize;
268     OMX_VERSIONTYPE nVersion;
269     OMX_U32 nPortIndex;
270     QOMX_VIDEO_VC1PROFILETYPE eProfile;
271     QOMX_VIDEO_VC1LEVELTYPE eLevel;
272 } QOMX_VIDEO_PARAM_VC1TYPE;
273 
274 /**
275  * Extended MPEG-4 level types not defined in the OpenMax IL
276  * 1.1.2 specification, each level indicates support for various
277  * frame sizes, bit rates, decoder frame rates.
278  */
279 typedef enum QOMX_VIDEO_MPEG4LEVELTYPE {
280     QOMX_VIDEO_MPEG4Level6 = 0x7F000001, /**< Level 6 */
281     QOMX_VIDEO_MPEG4Level7 = 0x7F000002, /**< Level 7 */
282     QOMX_VIDEO_MPEG4Level8 = 0x7F000003, /**< Level 8 */
283     QOMX_VIDEO_MPEG4Level9 = 0x7F000004, /**< Level 9 */
284     QOMX_VIDEO_MPEG4LevelMax = 0x7FFFFFFF
285 } QOMX_VIDEO_MPEG4LEVELTYPE;
286 
287 /**
288  * This structure is used in retrieving the syntax header from a
289  * video encoder component, or setting the out of band syntax
290  * header configuration data on a video decoder component.
291  *
292  * STRUCT MEMBERS:
293  *  nSize      : Size of the structure in bytes
294  *  nVersion   : OMX specification version info
295  *  nPortIndex : Port that this structure applies to
296  *  nBytes     : When used with OMX_GetParameter for the encoder
297  *               component, it is a read-write field. When
298  *               QOMX_VIDEO_SYNTAXHDRTYPE is passed in
299  *               OMX_GetParameter this is the size of the buffer
300  *               array pointed by data field. When the
301  *               OMX_GetParameter call returns this is the
302  *               amount of data within the buffer array.
303  *
304  *               The IL client needs to allocate the buffer
305  *               array and then request for the syntax header.
306  *               If the size of buffer array to allocate is
307  *               unknown to the IL client, then it can call
308  *               OMX_GetParamter with nBytes set to 0. In this
309  *               case, when OMX_GetParameter returns, the nBytes
310  *               field will be set to the size of the syntax
311  *               header. IL Client can then allocate a buffer of
312  *               this size and call OMX_GetParamter again.
313  *
314  *               When used with OMX_SetParameter for the decoder
315  *               component, it is a read-only field specifying
316  *               the amount of data in the buffer array.
317  *  data       : The syntax header data. The format of the
318  *               syntax header is specific to the video codec,
319  *               and is described below.
320  *
321  *   H.263      : N/A
322  *   H.264      : The SPS and PPS parameter sets
323  *   MPEG-4     : The VO, VOS, and VOL header
324  *   WMV7       : The "Extra Data" info, in the ASF Stream
325  *                Properties Object.
326  *   WMV8       : The "Extra Data" info, in the ASF Stream
327  *                Properties Object.
328  *   WMV9 SP/MP : The STRUCT_C portion of the sequence layer
329  *                meta data, defined in Table 263 of the VC-1
330  *                specification.
331  *   VC-1 SP/MP : The STRUCT_C portion of the sequence layer
332  *                meta data, defined in Table 263 of the VC-1
333  *                specification.
334  *   VC-1 AP    : The sequence and entry point header
335  *   DivX 3     : N/A
336  *   DivX 4.x   : The VO, VOS, and VOL header
337  *   DivX 5.x   : The VO, VOS, and VOL header
338  *   DivX 6.x   : The VO, VOS, and VOL header
339  *   VP6        : N/A
340  *   Spark      : N/A
341  */
342 typedef struct QOMX_VIDEO_SYNTAXHDRTYPE {
343     OMX_U32 nSize;
344     OMX_VERSIONTYPE nVersion;
345     OMX_U32 nPortIndex;
346     OMX_U32 nBytes;
347     OMX_U8  data[1];
348 } QOMX_VIDEO_SYNTAXHDRTYPE;
349 
350 
351 /**
352  * Enumeration used to define the extended video intra refresh types, not
353  * present in the OpenMax IL 1.1.2 specification.
354  *
355  * ENUMS:
356  *  IntraRefreshRandom         : Random intra refresh mode.
357  */
358 typedef enum QOMX_VIDEO_INTRAREFRESHTYPE
359 {
360     QOMX_VIDEO_IntraRefreshRandom      = 0x7F100000
361 } QOMX_VIDEO_INTRAREFRESHTYPE;
362 
363 
364 /**
365  * This structure is used to configure the intra periodicity for encoder.
366  *
367  * STRUCT MEMBERS:
368  *  nSize      : Size of the structure in bytes
369  *  nVersion   : OMX specification version info
370  *  nPortIndex : Port that this structure applies to
371  *  nIDRPeriod : Defines the periodicity of IDR occurrence. This specifies
372  *               coding a frame as IDR after a specific number of intra
373  *               frames. The periodicity of intra frame coding is specified by
374  *               the nPFrames.  If nIDRPeriod is set to 0, only the first
375  *               frame of the encode session is an IDR frame. This field is
376  *               ignored for non-AVC codecs and is used only for codecs that
377  *               support IDR Period.
378  *  nPFrames : Specifies the number of P frames between each I Frame.
379  *  nBFrames : Specifies the number of B frames between each I Frame.
380  */
381 typedef struct QOMX_VIDEO_INTRAPERIODTYPE  {
382     OMX_U32 nSize;
383     OMX_VERSIONTYPE nVersion;
384     OMX_U32 nPortIndex;
385     OMX_U32 nIDRPeriod;
386     OMX_U32 nPFrames;
387     OMX_U32 nBFrames;
388 } QOMX_VIDEO_INTRAPERIODTYPE;
389 
390 
391 /**
392  * Enumeration used to define the extended video extra data payload types not
393  * present in the OpenMax IL 1.1.2 specification.
394  *
395  * ENUMS:
396  *  VideoMultiSliceInfo : Multi slice layout information
397  *
398  *  Slice information layout:
399  *  First 4 bytes = Number of Slice Entries
400  *
401  *  Then individual slice entries: 8 bytes per entry.
402  *  Slice1 information: offset (4 bytes), Length (4 bytes)
403  *  Slice2 information: offset (4 bytes), Length (4 bytes)
404  *  Slice3 information: offset (4 bytes), Length (4 bytes)
405  *  ...................................
406  *  ...................................
407  *  SliceN information: offset (4 bytes), Length (4 bytes)
408  *
409  *
410  *  VideoNumConcealedMB : Number of concealed MBs
411  *
412  *  The data array consists of an unsigned 32-bit size field
413  *  indicating the number of concealed macroblocks in the
414  *  uncompressed frame.
415  *
416  *
417  *  QOMX_ExtraDataOMXIndex : Indicates that the data payload contains an
418  *  OpenMax index and associated payload.
419  *
420  *  The data of the extra data payload shall contain the value of the
421  *  OMX_INDEXTYPE corresponding to the requested operation as an unsigned
422  *  32 bit number occupying the first four bytes of the payload. The index
423  *  will be immediately followed by the associated structure. Padding bytes
424  *  are appended to ensure 32 bit address alignment if needed.
425  */
426 typedef enum QOMX_VIDEO_EXTRADATATYPE
427 {
428    QOMX_ExtraDataVideoMultiSliceInfo = 0x7F100000,
429    QOMX_ExtraDataVideoNumConcealedMB,
430    QOMX_ExtraDataOMXIndex,
431    QOMX_ExtraDataHDCPEncryptionInfo
432 } QOMX_VIDEO_EXTRADATATYPE;
433 
434 
435 /**
436  * Enumeration used to define the video encoder modes
437  *
438  * ENUMS:
439  *  EncoderModeDefault : Default video recording mode.
440  *                       All encoder settings made through
441  *                       OMX_SetParameter/OMX_SetConfig are applied. No
442  *                       parameter is overridden.
443  *  EncoderModeMMS : Video recording mode for MMS (Multimedia Messaging
444  *                   Service). This mode is similar to EncoderModeDefault
445  *                   except that here the Rate control mode is overridden
446  *                   internally and set as a variant of variable bitrate with
447  *                   variable frame rate. After this mode is set if the IL
448  *                   client tries to set OMX_VIDEO_CONTROLRATETYPE via
449  *                   OMX_IndexParamVideoBitrate that would be rejected. For
450  *                   this, client should set mode back to EncoderModeDefault
451  *                   first and then change OMX_VIDEO_CONTROLRATETYPE.
452  */
453 typedef enum QOMX_VIDEO_ENCODERMODETYPE
454 {
455     QOMX_VIDEO_EncoderModeDefault        = 0x01,
456     QOMX_VIDEO_EncoderModeMMS            = 0x02,
457     QOMX_VIDEO_EncoderModeMax            = 0x7FFFFFFF
458 } QOMX_VIDEO_ENCODERMODETYPE;
459 
460 /**
461  * This structure is used to set the video encoder mode.
462  *
463  * STRUCT MEMBERS:
464  *  nSize      : Size of the structure in bytes
465  *  nVersion   : OMX specification version info
466  *  nPortIndex : Port that this structure applies to
467  *  nMode : defines the video encoder mode
468  */
469 typedef struct QOMX_VIDEO_PARAM_ENCODERMODETYPE {
470     OMX_U32 nSize;
471     OMX_VERSIONTYPE nVersion;
472     OMX_U32 nPortIndex;
473     QOMX_VIDEO_ENCODERMODETYPE nMode;
474 } QOMX_VIDEO_PARAM_ENCODERMODETYPE;
475 
476 
477 /**
478  * This structure is used to set the temporal (picture rate) - spatial
479  * (picture quality) trade-off factor.
480  * This setting is only valid when rate control is enabled and set to a mode
481  * with variable frame rate. For all other rate control modes this setting is
482  * ignored.
483  *
484  * STRUCT MEMBERS:
485  *  nSize      : Size of the structure in bytes
486  *  nVersion   : OMX specification version info
487  *  nPortIndex : Port that this structure applies to
488  *  nTSFactor : temporal-spatial tradeoff factor value in the range of 0-100.
489  *              A factor of 0 won't emphasizes picture rate in rate
490  *  control decisions at all i.e only picture quality is emphasized. For
491  *  increasing values from 1 to 99 the emphasis of picture rate in rate
492  *  control decisions increases. A factor of 100 emphasizes only picture rate
493  *  in rate control decisions.
494  */
495 typedef struct QOMX_VIDEO_TEMPORALSPATIALTYPE {
496     OMX_U32 nSize;
497     OMX_VERSIONTYPE nVersion;
498     OMX_U32 nPortIndex;
499     OMX_U32 nTSFactor;
500 } QOMX_VIDEO_TEMPORALSPATIALTYPE;
501 
502 /**
503  * This structure is used to enable or disable the MB concealmenet reporting
504  * for the uncompressed frames emitted from the port.
505  *
506  * STRUCT MEMBERS:
507  *  nSize      : Size of the structure in bytes
508  *  nVersion   : OMX specification version info
509  *  nPortIndex : Port that this structure applies to
510  *  bEnableMBConcealmentReporting : Flag indicating whether MB concealment
511  *               reporting is enabled or disabled.
512  *               OMX_TRUE: Enables MB concealment reporting
513  *               OMX_FALSE: Disables MB concealment reporting
514  */
515 typedef struct QOMX_VIDEO_MBCONCEALMENTREPORTINGTYPE {
516     OMX_U32 nSize;
517     OMX_VERSIONTYPE nVersion;
518     OMX_U32 nPortIndex;
519     OMX_BOOL bEnableMBConcealmentReporting;
520 } QOMX_VIDEO_MBCONCEALMENTREPORTINGTYPE;
521 
522 /**
523  * Specifies the extended picture types. These values should be
524  * OR'd along with the types defined in OMX_VIDEO_PICTURETYPE to
525  * signal all pictures types which are allowed.
526  *
527  * ENUMS:
528  *  H.264 Specific Picture Types:   IDR
529  */
530 typedef enum QOMX_VIDEO_PICTURETYPE {
531     QOMX_VIDEO_PictureTypeIDR = OMX_VIDEO_PictureTypeVendorStartUnused + 0x1000
532 } QOMX_VIDEO_PICTURETYPE;
533 
534 /**
535  * This structure is used to configure the processing of
536  * specific picture types.
537  *
538  * STRUCT MEMBERS:
539  *  nSize         : Size of the structure in bytes
540  *  nVersion      : OMX specification version info
541  *  nPortIndex    : Port that this structure applies to
542  *  nPictureTypes : Specifies the picture type(s)
543  *                  that shall be processed. The value consists
544  *                  of the desired picture types, defined by the
545  *                  OMX_VIDEO_PICTURETYPE and
546  *                  QOMX_VIDEO_PICTURETYPE enumerations, OR'd to
547  *                  signal all the pictures types which are
548  *                  allowed.
549  */
550 typedef struct QOMX_VIDEO_DECODEPICTURETYPE {
551     OMX_U32 nSize;
552     OMX_VERSIONTYPE nVersion;
553     OMX_U32 nPortIndex;
554     OMX_U32 nPictureTypes;
555 } QOMX_VIDEO_DECODEPICTURETYPE;
556 
557 /**
558  * This structure describes the sample aspect ratio information.
559  *
560  * STRUCT MEMBERS:
561  *  nSize        : Size of the structure in bytes
562  *  nVersion     : OMX specification version info
563  *  nPortIndex   : Port that this structure applies to
564  *  nWidth       : Specifies the horizontal aspect size of
565  *                 the sample
566  *  nHeight      : Specifies the vertical aspect size of the
567  *                 sample
568  */
569 typedef struct QOMX_VIDEO_SAMPLEASPECTRATIO {
570     OMX_U32 nSize;
571     OMX_VERSIONTYPE nVersion;
572     OMX_U32 nPortIndex;
573     OMX_U16 nWidth;
574     OMX_U16 nHeight;
575 } QOMX_VIDEO_SAMPLEASPECTRATIO;
576 
577 #if defined( __cplusplus )
578 }
579 #endif /* end of macro __cplusplus */
580 
581 #endif /* end of macro __H_QOMX_VIDEOEXTENSIONS_H__ */
582