1 /*--------------------------------------------------------------------------
2 Copyright (c) 2011,2015 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_VPFormat9      = 0x10, /**< VP9 Video Format */
159     QOMX_VIDEO_VPFormatKhronosExtensions = 0x6F000000,
160     QOMX_VIDEO_VPFormatVendorStartUnused = 0x7F000000,
161     QOMX_VIDEO_VPFormatMax = 0x7FFFFFFF
162 } QOMX_VIDEO_VPFORMATTYPE;
163 
164 /**
165  * VP profile types, each profile indicates support for various
166  * encoding tools.
167  */
168 typedef enum QOMX_VIDEO_VPPROFILETYPE {
169     QOMX_VIDEO_VPProfileSimple   = 0x01, /**< Simple Profile, applies to VP6 only */
170     QOMX_VIDEO_VPProfileAdvanced = 0x02, /**< Advanced Profile, applies to VP6 only */
171     QOMX_VIDEO_VPProfileVersion0 = 0x04, /**< Version 0, applies to VP7 and VP8 */
172     QOMX_VIDEO_VPProfileVersion1 = 0x08, /**< Version 1, applies to VP7 and VP8 */
173     QOMX_VIDEO_VPProfileVersion2 = 0x10, /**< Version 2, applies to VP8 only */
174     QOMX_VIDEO_VPProfileVersion3 = 0x20, /**< Version 3, applies to VP8 only */
175     QOMX_VIDEO_VPProfileKhronosExtensions = 0x6F000000,
176     QOMX_VIDEO_VPProfileVendorStartUnused = 0x7F000000,
177     QOMX_VIDEO_VPProfileMax = 0x7FFFFFFF
178 } QOMX_VIDEO_VPPROFILETYPE;
179 
180 /**
181  * VP Video Params
182  *
183  *  STRUCT MEMBERS:
184  *  nSize      : Size of the structure in bytes
185  *  nVersion   : OMX specification version information
186  *  nPortIndex : Port that this structure applies to
187  *  eFormat    : Format of VP stream / data
188  *  eProfile   : Profile or Version of VP stream / data
189  */
190 typedef struct QOMX_VIDEO_PARAM_VPTYPE {
191     OMX_U32 nSize;
192     OMX_VERSIONTYPE nVersion;
193     OMX_U32 nPortIndex;
194     QOMX_VIDEO_VPFORMATTYPE eFormat;
195     QOMX_VIDEO_VPPROFILETYPE eProfile;
196 } QOMX_VIDEO_PARAM_VPTYPE;
197 
198 /**
199  * Spark Versions
200  */
201 typedef enum QOMX_VIDEO_SPARKFORMATTYPE {
202     QOMX_VIDEO_SparkFormatUnused = 0x01, /**< Format unused or unknown */
203     QOMX_VIDEO_SparkFormat0      = 0x02, /**< Video Format Version 0 */
204     QOMX_VIDEO_SparkFormat1      = 0x04, /**< Video Format Version 1 */
205     QOMX_VIDEO_SparkFormatKhronosExtensions = 0x6F000000,
206     QOMX_VIDEO_SparkFormatVendorStartUnused = 0x7F000000,
207     QOMX_VIDEO_SparkFormatMax = 0x7FFFFFFF
208 } QOMX_VIDEO_SPARKFORMATTYPE;
209 
210 /**
211  * Spark Video Params
212  *
213  *  STRUCT MEMBERS:
214  *  nSize      : Size of the structure in bytes
215  *  nVersion   : OMX specification version information
216  *  nPortIndex : Port that this structure applies to
217  *  eFormat    : Version of Spark stream / data
218  */
219 typedef struct QOMX_VIDEO_PARAM_SPARKTYPE {
220     OMX_U32 nSize;
221     OMX_VERSIONTYPE nVersion;
222     OMX_U32 nPortIndex;
223     QOMX_VIDEO_SPARKFORMATTYPE eFormat;
224 } QOMX_VIDEO_PARAM_SPARKTYPE;
225 
226 /**
227  * VC-1 profile types, each profile indicates support for
228  * various encoding tools.
229  */
230 typedef enum QOMX_VIDEO_VC1PROFILETYPE {
231     QOMX_VIDEO_VC1ProfileSimple   = 0x01, /**< Simple Profile */
232     QOMX_VIDEO_VC1ProfileMain     = 0x02, /**< Main Profile */
233     QOMX_VIDEO_VC1ProfileAdvanced = 0x04, /**< Advanced Profile */
234     QOMX_VIDEO_VC1ProfileKhronosExtensions = 0x6F000000,
235     QOMX_VIDEO_VC1ProfileVendorStartUnused = 0x7F000000,
236     QOMX_VIDEO_VC1ProfileMax = 0x7FFFFFFF
237 } QOMX_VIDEO_VC1PROFILETYPE;
238 
239 /**
240  * VC-1 level types, each level indicates support for various
241  * performance bounds.
242  */
243 typedef enum QOMX_VIDEO_VC1LEVELTYPE {
244     QOMX_VIDEO_VC1LevelLow    = 0x01, /**< Low Level, applies to simple and main profiles*/
245     QOMX_VIDEO_VC1LevelMedium = 0x02, /**< Medium Level, applies to simple and main profiles */
246     QOMX_VIDEO_VC1LevelHigh   = 0x04, /**< High Level, applies to main profile only */
247     QOMX_VIDEO_VC1Level0      = 0x08, /**< Level 0, applies to advanced profile only */
248     QOMX_VIDEO_VC1Level1      = 0x10, /**< Level 1, applies to advanced profile only */
249     QOMX_VIDEO_VC1Level2      = 0x20, /**< Level 2, applies to advanced profile only */
250     QOMX_VIDEO_VC1Level3      = 0x40, /**< Level 3, applies to advanced profile only */
251     QOMX_VIDEO_VC1Level4      = 0x80, /**< Level 4, applies to advanced profile only */
252     QOMX_VIDEO_VC1LevelKhronosExtensions = 0x6F000000,
253     QOMX_VIDEO_VC1LevelVendorStartUnused = 0x7F000000,
254     QOMX_VIDEO_VC1LevelMax = 0x7FFFFFFF
255 } QOMX_VIDEO_VC1LEVELTYPE;
256 
257 /**
258  * VC-1 Video Params
259  *
260  *  STRUCT MEMBERS:
261  *  nSize      : Size of the structure in bytes
262  *  nVersion   : OMX specification version information
263  *  nPortIndex : Port that this structure applies to
264  *  eProfile   : Profile of VC-1 stream / data
265  *  eLevel     : Level of VC-1 stream / data
266  */
267 typedef struct QOMX_VIDEO_PARAM_VC1TYPE {
268     OMX_U32 nSize;
269     OMX_VERSIONTYPE nVersion;
270     OMX_U32 nPortIndex;
271     QOMX_VIDEO_VC1PROFILETYPE eProfile;
272     QOMX_VIDEO_VC1LEVELTYPE eLevel;
273 } QOMX_VIDEO_PARAM_VC1TYPE;
274 
275 /**
276  * Extended MPEG-4 level types not defined in the OpenMax IL
277  * 1.1.2 specification, each level indicates support for various
278  * frame sizes, bit rates, decoder frame rates.
279  */
280 typedef enum QOMX_VIDEO_MPEG4LEVELTYPE {
281     QOMX_VIDEO_MPEG4Level6 = 0x7F000001, /**< Level 6 */
282     QOMX_VIDEO_MPEG4Level7 = 0x7F000002, /**< Level 7 */
283     QOMX_VIDEO_MPEG4Level8 = 0x7F000003, /**< Level 8 */
284     QOMX_VIDEO_MPEG4Level9 = 0x7F000004, /**< Level 9 */
285     QOMX_VIDEO_MPEG4LevelMax = 0x7FFFFFFF
286 } QOMX_VIDEO_MPEG4LEVELTYPE;
287 
288 /**
289  * This structure is used in retrieving the syntax header from a
290  * video encoder component, or setting the out of band syntax
291  * header configuration data on a video decoder component.
292  *
293  * STRUCT MEMBERS:
294  *  nSize      : Size of the structure in bytes
295  *  nVersion   : OMX specification version info
296  *  nPortIndex : Port that this structure applies to
297  *  nBytes     : When used with OMX_GetParameter for the encoder
298  *               component, it is a read-write field. When
299  *               QOMX_VIDEO_SYNTAXHDRTYPE is passed in
300  *               OMX_GetParameter this is the size of the buffer
301  *               array pointed by data field. When the
302  *               OMX_GetParameter call returns this is the
303  *               amount of data within the buffer array.
304  *
305  *               The IL client needs to allocate the buffer
306  *               array and then request for the syntax header.
307  *               If the size of buffer array to allocate is
308  *               unknown to the IL client, then it can call
309  *               OMX_GetParamter with nBytes set to 0. In this
310  *               case, when OMX_GetParameter returns, the nBytes
311  *               field will be set to the size of the syntax
312  *               header. IL Client can then allocate a buffer of
313  *               this size and call OMX_GetParamter again.
314  *
315  *               When used with OMX_SetParameter for the decoder
316  *               component, it is a read-only field specifying
317  *               the amount of data in the buffer array.
318  *  data       : The syntax header data. The format of the
319  *               syntax header is specific to the video codec,
320  *               and is described below.
321  *
322  *   H.263      : N/A
323  *   H.264      : The SPS and PPS parameter sets
324  *   MPEG-4     : The VO, VOS, and VOL header
325  *   WMV7       : The "Extra Data" info, in the ASF Stream
326  *                Properties Object.
327  *   WMV8       : The "Extra Data" info, in the ASF Stream
328  *                Properties Object.
329  *   WMV9 SP/MP : The STRUCT_C portion of the sequence layer
330  *                meta data, defined in Table 263 of the VC-1
331  *                specification.
332  *   VC-1 SP/MP : The STRUCT_C portion of the sequence layer
333  *                meta data, defined in Table 263 of the VC-1
334  *                specification.
335  *   VC-1 AP    : The sequence and entry point header
336  *   DivX 3     : N/A
337  *   DivX 4.x   : The VO, VOS, and VOL header
338  *   DivX 5.x   : The VO, VOS, and VOL header
339  *   DivX 6.x   : The VO, VOS, and VOL header
340  *   VP6        : N/A
341  *   Spark      : N/A
342  */
343 typedef struct QOMX_VIDEO_SYNTAXHDRTYPE {
344     OMX_U32 nSize;
345     OMX_VERSIONTYPE nVersion;
346     OMX_U32 nPortIndex;
347     OMX_U32 nBytes;
348     OMX_U8  data[1];
349 } QOMX_VIDEO_SYNTAXHDRTYPE;
350 
351 
352 /**
353  * Enumeration used to define the extended video intra refresh types, not
354  * present in the OpenMax IL 1.1.2 specification.
355  *
356  * ENUMS:
357  *  IntraRefreshRandom         : Random intra refresh mode.
358  */
359 typedef enum QOMX_VIDEO_INTRAREFRESHTYPE
360 {
361     QOMX_VIDEO_IntraRefreshRandom      = 0x7F100000
362 } QOMX_VIDEO_INTRAREFRESHTYPE;
363 
364 
365 /**
366  * This structure is used to configure the intra periodicity for encoder.
367  *
368  * STRUCT MEMBERS:
369  *  nSize      : Size of the structure in bytes
370  *  nVersion   : OMX specification version info
371  *  nPortIndex : Port that this structure applies to
372  *  nIDRPeriod : Defines the periodicity of IDR occurrence. This specifies
373  *               coding a frame as IDR after a specific number of intra
374  *               frames. The periodicity of intra frame coding is specified by
375  *               the nPFrames.  If nIDRPeriod is set to 0, only the first
376  *               frame of the encode session is an IDR frame. This field is
377  *               ignored for non-AVC codecs and is used only for codecs that
378  *               support IDR Period.
379  *  nPFrames : Specifies the number of P frames between each I Frame.
380  *  nBFrames : Specifies the number of B frames between each I Frame.
381  */
382 typedef struct QOMX_VIDEO_INTRAPERIODTYPE  {
383     OMX_U32 nSize;
384     OMX_VERSIONTYPE nVersion;
385     OMX_U32 nPortIndex;
386     OMX_U32 nIDRPeriod;
387     OMX_U32 nPFrames;
388     OMX_U32 nBFrames;
389 } QOMX_VIDEO_INTRAPERIODTYPE;
390 
391 
392 /**
393  * Enumeration used to define the extended video extra data payload types not
394  * present in the OpenMax IL 1.1.2 specification.
395  *
396  * ENUMS:
397  *  VideoMultiSliceInfo : Multi slice layout information
398  *
399  *  Slice information layout:
400  *  First 4 bytes = Number of Slice Entries
401  *
402  *  Then individual slice entries: 8 bytes per entry.
403  *  Slice1 information: offset (4 bytes), Length (4 bytes)
404  *  Slice2 information: offset (4 bytes), Length (4 bytes)
405  *  Slice3 information: offset (4 bytes), Length (4 bytes)
406  *  ...................................
407  *  ...................................
408  *  SliceN information: offset (4 bytes), Length (4 bytes)
409  *
410  *
411  *  VideoNumConcealedMB : Number of concealed MBs
412  *
413  *  The data array consists of an unsigned 32-bit size field
414  *  indicating the number of concealed macroblocks in the
415  *  uncompressed frame.
416  *
417  *
418  *  QOMX_ExtraDataOMXIndex : Indicates that the data payload contains an
419  *  OpenMax index and associated payload.
420  *
421  *  The data of the extra data payload shall contain the value of the
422  *  OMX_INDEXTYPE corresponding to the requested operation as an unsigned
423  *  32 bit number occupying the first four bytes of the payload. The index
424  *  will be immediately followed by the associated structure. Padding bytes
425  *  are appended to ensure 32 bit address alignment if needed.
426  */
427 typedef enum QOMX_VIDEO_EXTRADATATYPE
428 {
429    QOMX_ExtraDataVideoMultiSliceInfo = 0x7F100000,
430    QOMX_ExtraDataVideoNumConcealedMB,
431    QOMX_ExtraDataOMXIndex,
432    QOMX_ExtraDataHDCPEncryptionInfo
433 } QOMX_VIDEO_EXTRADATATYPE;
434 
435 
436 /**
437  * Enumeration used to define the video encoder modes
438  *
439  * ENUMS:
440  *  EncoderModeDefault : Default video recording mode.
441  *                       All encoder settings made through
442  *                       OMX_SetParameter/OMX_SetConfig are applied. No
443  *                       parameter is overridden.
444  *  EncoderModeMMS : Video recording mode for MMS (Multimedia Messaging
445  *                   Service). This mode is similar to EncoderModeDefault
446  *                   except that here the Rate control mode is overridden
447  *                   internally and set as a variant of variable bitrate with
448  *                   variable frame rate. After this mode is set if the IL
449  *                   client tries to set OMX_VIDEO_CONTROLRATETYPE via
450  *                   OMX_IndexParamVideoBitrate that would be rejected. For
451  *                   this, client should set mode back to EncoderModeDefault
452  *                   first and then change OMX_VIDEO_CONTROLRATETYPE.
453  */
454 typedef enum QOMX_VIDEO_ENCODERMODETYPE
455 {
456     QOMX_VIDEO_EncoderModeDefault        = 0x01,
457     QOMX_VIDEO_EncoderModeMMS            = 0x02,
458     QOMX_VIDEO_EncoderModeMax            = 0x7FFFFFFF
459 } QOMX_VIDEO_ENCODERMODETYPE;
460 
461 /**
462  * This structure is used to set the video encoder mode.
463  *
464  * STRUCT MEMBERS:
465  *  nSize      : Size of the structure in bytes
466  *  nVersion   : OMX specification version info
467  *  nPortIndex : Port that this structure applies to
468  *  nMode : defines the video encoder mode
469  */
470 typedef struct QOMX_VIDEO_PARAM_ENCODERMODETYPE {
471     OMX_U32 nSize;
472     OMX_VERSIONTYPE nVersion;
473     OMX_U32 nPortIndex;
474     QOMX_VIDEO_ENCODERMODETYPE nMode;
475 } QOMX_VIDEO_PARAM_ENCODERMODETYPE;
476 
477 
478 /**
479  * This structure is used to set the temporal (picture rate) - spatial
480  * (picture quality) trade-off factor.
481  * This setting is only valid when rate control is enabled and set to a mode
482  * with variable frame rate. For all other rate control modes this setting is
483  * ignored.
484  *
485  * STRUCT MEMBERS:
486  *  nSize      : Size of the structure in bytes
487  *  nVersion   : OMX specification version info
488  *  nPortIndex : Port that this structure applies to
489  *  nTSFactor : temporal-spatial tradeoff factor value in the range of 0-100.
490  *              A factor of 0 won't emphasizes picture rate in rate
491  *  control decisions at all i.e only picture quality is emphasized. For
492  *  increasing values from 1 to 99 the emphasis of picture rate in rate
493  *  control decisions increases. A factor of 100 emphasizes only picture rate
494  *  in rate control decisions.
495  */
496 typedef struct QOMX_VIDEO_TEMPORALSPATIALTYPE {
497     OMX_U32 nSize;
498     OMX_VERSIONTYPE nVersion;
499     OMX_U32 nPortIndex;
500     OMX_U32 nTSFactor;
501 } QOMX_VIDEO_TEMPORALSPATIALTYPE;
502 
503 /**
504  * This structure is used to enable or disable the MB concealmenet reporting
505  * for the uncompressed frames emitted from the port.
506  *
507  * STRUCT MEMBERS:
508  *  nSize      : Size of the structure in bytes
509  *  nVersion   : OMX specification version info
510  *  nPortIndex : Port that this structure applies to
511  *  bEnableMBConcealmentReporting : Flag indicating whether MB concealment
512  *               reporting is enabled or disabled.
513  *               OMX_TRUE: Enables MB concealment reporting
514  *               OMX_FALSE: Disables MB concealment reporting
515  */
516 typedef struct QOMX_VIDEO_MBCONCEALMENTREPORTINGTYPE {
517     OMX_U32 nSize;
518     OMX_VERSIONTYPE nVersion;
519     OMX_U32 nPortIndex;
520     OMX_BOOL bEnableMBConcealmentReporting;
521 } QOMX_VIDEO_MBCONCEALMENTREPORTINGTYPE;
522 
523 /**
524  * Specifies the extended picture types. These values should be
525  * OR'd along with the types defined in OMX_VIDEO_PICTURETYPE to
526  * signal all pictures types which are allowed.
527  *
528  * ENUMS:
529  *  H.264 Specific Picture Types:   IDR
530  */
531 typedef enum QOMX_VIDEO_PICTURETYPE {
532     QOMX_VIDEO_PictureTypeIDR = OMX_VIDEO_PictureTypeVendorStartUnused + 0x1000
533 } QOMX_VIDEO_PICTURETYPE;
534 
535 /**
536  * This structure is used to configure the processing of
537  * specific picture types.
538  *
539  * STRUCT MEMBERS:
540  *  nSize         : Size of the structure in bytes
541  *  nVersion      : OMX specification version info
542  *  nPortIndex    : Port that this structure applies to
543  *  nPictureTypes : Specifies the picture type(s)
544  *                  that shall be processed. The value consists
545  *                  of the desired picture types, defined by the
546  *                  OMX_VIDEO_PICTURETYPE and
547  *                  QOMX_VIDEO_PICTURETYPE enumerations, OR'd to
548  *                  signal all the pictures types which are
549  *                  allowed.
550  */
551 typedef struct QOMX_VIDEO_DECODEPICTURETYPE {
552     OMX_U32 nSize;
553     OMX_VERSIONTYPE nVersion;
554     OMX_U32 nPortIndex;
555     OMX_U32 nPictureTypes;
556 } QOMX_VIDEO_DECODEPICTURETYPE;
557 
558 /**
559  * This structure describes the sample aspect ratio information.
560  *
561  * STRUCT MEMBERS:
562  *  nSize        : Size of the structure in bytes
563  *  nVersion     : OMX specification version info
564  *  nPortIndex   : Port that this structure applies to
565  *  nWidth       : Specifies the horizontal aspect size of
566  *                 the sample
567  *  nHeight      : Specifies the vertical aspect size of the
568  *                 sample
569  */
570 typedef struct QOMX_VIDEO_SAMPLEASPECTRATIO {
571     OMX_U32 nSize;
572     OMX_VERSIONTYPE nVersion;
573     OMX_U32 nPortIndex;
574     OMX_U16 nWidth;
575     OMX_U16 nHeight;
576 } QOMX_VIDEO_SAMPLEASPECTRATIO;
577 
578 #if defined( __cplusplus )
579 }
580 #endif /* end of macro __cplusplus */
581 
582 #endif /* end of macro __H_QOMX_VIDEOEXTENSIONS_H__ */
583