1 /*--------------------------------------------------------------------------
2 Copyright (c) 2009-2016, 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 #ifndef __OMX_QCOM_EXTENSIONS_H__
29 #define __OMX_QCOM_EXTENSIONS_H__
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif /* __cplusplus */
34 
35 /*============================================================================
36 *//** @file OMX_QCOMExtns.h
37   This header contains constants and type definitions that specify the
38   extensions added to the OpenMAX Vendor specific APIs.
39 
40 *//*========================================================================*/
41 
42 
43 ///////////////////////////////////////////////////////////////////////////////
44 //                             Include Files
45 ///////////////////////////////////////////////////////////////////////////////
46 #include "OMX_Core.h"
47 #include "OMX_Video.h"
48 
49 #define OMX_VIDEO_MAX_HP_LAYERS 6
50 /**
51  * This extension is used to register mapping of a virtual
52  * address to a physical address. This extension is a parameter
53  * which can be set using the OMX_SetParameter macro. The data
54  * pointer corresponding to this extension is
55  * OMX_QCOM_MemMapEntry. This parameter is a 'write only'
56  * parameter (Current value cannot be queried using
57  * OMX_GetParameter macro).
58  */
59 #define OMX_QCOM_EXTN_REGISTER_MMAP     "OMX.QCOM.index.param.register_mmap"
60 
61 /**
62  * This structure describes the data pointer corresponding to
63  * the OMX_QCOM_MMAP_REGISTER_EXTN extension. This parameter
64  * must be set only 'after' populating a port with a buffer
65  * using OMX_UseBuffer, wherein the data pointer of the buffer
66  * corresponds to the virtual address as specified in this
67  * structure.
68  */
69 struct OMX_QCOM_PARAM_MEMMAPENTRYTYPE
70 {
71     OMX_U32 nSize;              /** Size of the structure in bytes */
72     OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
73     OMX_U32 nPortIndex;         /**< Port number the structure applies to */
74 
75     /**
76      * The virtual address of memory block
77      */
78     OMX_U64 nVirtualAddress;
79 
80     /**
81      * The physical address corresponding to the virtual address. The physical
82      * address is contiguous for the entire valid range of the virtual
83      * address.
84      */
85     OMX_U64 nPhysicalAddress;
86 };
87 
88 #define QOMX_VIDEO_IntraRefreshRandom (OMX_VIDEO_IntraRefreshVendorStartUnused + 0)
89 
90 /* This error event is used for H.264 long-term reference (LTR) encoding.
91  * When IL client specifies an LTR frame with its identifier via
92  * OMX_QCOM_INDEX_CONFIG_VIDEO_LTRUSE to the encoder, if the specified
93  * LTR frame can not be located by the encoder in its LTR list, the encoder
94  * issues this error event to IL client to notify the failure of LTRUse config.
95  */
96 #define QOMX_ErrorLTRUseFailed        (OMX_ErrorVendorStartUnused + 1)
97 
98 #define QOMX_VIDEO_BUFFERFLAG_BFRAME 0x00100000
99 
100 #define QOMX_VIDEO_BUFFERFLAG_EOSEQ  0x00200000
101 
102 #define QOMX_VIDEO_BUFFERFLAG_MBAFF  0x00400000
103 
104 #define QOMX_VIDEO_BUFFERFLAG_CANCEL 0x00800000
105 
106 #define OMX_QCOM_PORTDEFN_EXTN   "OMX.QCOM.index.param.portdefn"
107 /* Allowed APIs on the above Index: OMX_GetParameter() and OMX_SetParameter() */
108 
109 typedef enum OMX_QCOMMemoryRegion
110 {
111     OMX_QCOM_MemRegionInvalid,
112     OMX_QCOM_MemRegionEBI1,
113     OMX_QCOM_MemRegionSMI,
114     OMX_QCOM_MemRegionMax = 0X7FFFFFFF
115 } OMX_QCOMMemoryRegion;
116 
117 typedef enum OMX_QCOMCacheAttr
118 {
119     OMX_QCOM_CacheAttrNone,
120     OMX_QCOM_CacheAttrWriteBack,
121     OMX_QCOM_CacheAttrWriteThrough,
122     OMX_QCOM_CacheAttrMAX = 0X7FFFFFFF
123 } OMX_QCOMCacheAttr;
124 
125 typedef struct OMX_QCOMRectangle
126 {
127    OMX_S32 x;
128    OMX_S32 y;
129    OMX_S32 dx;
130    OMX_S32 dy;
131 } OMX_QCOMRectangle;
132 
133 /** OMX_QCOMFramePackingFormat
134   * Input or output buffer format
135   */
136 typedef enum OMX_QCOMFramePackingFormat
137 {
138   /* 0 - unspecified
139    */
140   OMX_QCOM_FramePacking_Unspecified,
141 
142   /*  1 - Partial frames may be present OMX IL 1.1.1 Figure 2-10:
143    *  Case 1??Each Buffer Filled In Whole or In Part
144    */
145   OMX_QCOM_FramePacking_Arbitrary,
146 
147   /*  2 - Multiple complete frames per buffer (integer number)
148    *  OMX IL 1.1.1 Figure 2-11: Case 2�Each Buffer Filled with
149    *  Only Complete Frames of Data
150    */
151   OMX_QCOM_FramePacking_CompleteFrames,
152 
153   /*  3 - Only one complete frame per buffer, no partial frame
154    *  OMX IL 1.1.1 Figure 2-12: Case 3�Each Buffer Filled with
155    *  Only One Frame of Compressed Data. Usually at least one
156    *  complete unit of data will be delivered in a buffer for
157    *  uncompressed data formats.
158    */
159   OMX_QCOM_FramePacking_OnlyOneCompleteFrame,
160 
161   /*  4 - Only one complete subframe per buffer, no partial subframe
162    *  Example: In H264, one complete NAL per buffer, where one frame
163    *  can contatin multiple NAL
164    */
165   OMX_QCOM_FramePacking_OnlyOneCompleteSubFrame,
166 
167   OMX_QCOM_FramePacking_MAX = 0X7FFFFFFF
168 } OMX_QCOMFramePackingFormat;
169 
170 typedef struct OMX_QCOM_PARAM_PORTDEFINITIONTYPE {
171  OMX_U32 nSize;           /** Size of the structure in bytes */
172  OMX_VERSIONTYPE nVersion;/** OMX specification version information */
173  OMX_U32 nPortIndex;    /** Portindex which is extended by this structure */
174 
175  /** Platform specific memory region EBI1, SMI, etc.,*/
176  OMX_QCOMMemoryRegion nMemRegion;
177 
178  OMX_QCOMCacheAttr nCacheAttr; /** Cache attributes */
179 
180  /** Input or output buffer format */
181  OMX_U32 nFramePackingFormat;
182 
183 } OMX_QCOM_PARAM_PORTDEFINITIONTYPE;
184 
185 typedef struct OMX_QCOM_VIDEO_PARAM_QPRANGETYPE {
186     OMX_U32 nSize;
187     OMX_VERSIONTYPE nVersion;
188     OMX_U32 nPortIndex;
189     OMX_U32 minQP;
190     OMX_U32 maxQP;
191 } OMX_QCOM_VIDEO_PARAM_QPRANGETYPE;
192 
193 #define OMX_QCOM_PLATFORMPVT_EXTN   "OMX.QCOM.index.param.platformprivate"
194 /** Allowed APIs on the above Index: OMX_SetParameter() */
195 
196 typedef enum OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE
197 {
198     /** Enum for PMEM information */
199     OMX_QCOM_PLATFORM_PRIVATE_PMEM = 0x1
200 } OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE;
201 
202 /** IL client will set the following structure. A failure
203  *  code will be returned if component does not support the
204  *  value provided for 'type'.
205  */
206 struct OMX_QCOM_PLATFORMPRIVATE_EXTN
207 {
208     OMX_U32 nSize;        /** Size of the structure in bytes */
209     OMX_VERSIONTYPE nVersion; /** OMX spec version information */
210     OMX_U32 nPortIndex;  /** Port number on which usebuffer extn is applied */
211 
212     /** Type of extensions should match an entry from
213      OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE
214     */
215     OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE type;
216 };
217 
218 typedef struct OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO
219 {
220     /** pmem file descriptor */
221     unsigned long pmem_fd;
222     /** Offset from pmem device base address */
223     OMX_U32 offset;
224     OMX_U32 size;
225     OMX_U32 mapped_size;
226     OMX_PTR buffer;
227 }OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO;
228 
229 typedef struct OMX_QCOM_PLATFORM_PRIVATE_ENTRY
230 {
231     /** Entry type */
232     OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE type;
233 
234     /** Pointer to platform specific entry */
235     OMX_PTR entry;
236 }OMX_QCOM_PLATFORM_PRIVATE_ENTRY;
237 
238 typedef struct OMX_QCOM_PLATFORM_PRIVATE_LIST
239 {
240     /** Number of entries */
241     OMX_U32 nEntries;
242 
243     /** Pointer to array of platform specific entries *
244      * Contiguous block of OMX_QCOM_PLATFORM_PRIVATE_ENTRY element
245     */
246     OMX_QCOM_PLATFORM_PRIVATE_ENTRY* entryList;
247 }OMX_QCOM_PLATFORM_PRIVATE_LIST;
248 
249 #define OMX_QCOM_FRAME_PACKING_FORMAT   "OMX.QCOM.index.param.framepackfmt"
250 /* Allowed API call: OMX_GetParameter() */
251 /* IL client can use this index to rerieve the list of frame formats *
252  * supported by the component */
253 
254 typedef struct OMX_QCOM_FRAME_PACKINGFORMAT_TYPE {
255     OMX_U32 nSize;
256     OMX_VERSIONTYPE nVersion;
257     OMX_U32 nPortIndex;
258     OMX_U32 nIndex;
259     OMX_QCOMFramePackingFormat eframePackingFormat;
260 } OMX_QCOM_FRAME_PACKINGFORMAT_TYPE;
261 
262 
263 /**
264  * Following is the enum for color formats supported on Qualcomm
265  * MSMs YVU420SemiPlanar color format is not defined in OpenMAX
266  * 1.1.1 and prior versions of OpenMAX specification.
267  */
268 
269 enum OMX_QCOM_COLOR_FORMATTYPE
270 {
271 
272 /** YVU420SemiPlanar: YVU planar format, organized with a first
273  *  plane containing Y pixels, and a second plane containing
274  *  interleaved V and U pixels. V and U pixels are sub-sampled
275  *  by a factor of two both horizontally and vertically.
276  */
277     QOMX_COLOR_FormatYVU420SemiPlanar = 0x7FA30C00,
278     QOMX_COLOR_FormatYVU420PackedSemiPlanar32m4ka,
279     QOMX_COLOR_FormatYUV420PackedSemiPlanar16m2ka,
280     QOMX_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka,
281     QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
282     QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
283     QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed,
284     QOMX_COLOR_Format32bitRGBA8888,
285     QOMX_COLOR_Format32bitRGBA8888Compressed,
286     QOMX_COLOR_FormatAndroidOpaque = (OMX_COLOR_FORMATTYPE) OMX_COLOR_FormatVendorStartUnused  + 0x789,
287 };
288 
289 enum OMX_QCOM_VIDEO_CODINGTYPE
290 {
291 /** Codecs support by qualcomm which are not listed in OMX 1.1.x
292  *  spec
293  *   */
294     OMX_QCOM_VIDEO_CodingVC1  = 0x7FA30C00 ,
295     OMX_QCOM_VIDEO_CodingWMV9 = 0x7FA30C01,
296     QOMX_VIDEO_CodingDivx = 0x7FA30C02,     /**< Value when coding is Divx */
297     QOMX_VIDEO_CodingSpark = 0x7FA30C03,     /**< Value when coding is Sorenson Spark */
298     QOMX_VIDEO_CodingVp = 0x7FA30C04,
299     QOMX_VIDEO_CodingVp8 = OMX_VIDEO_CodingVP8,   /**< keeping old enum for backwards compatibility*/
300     QOMX_VIDEO_CodingHevc = OMX_VIDEO_CodingHEVC, /**< keeping old enum for backwards compatibility*/
301     QOMX_VIDEO_CodingMVC = 0x7FA30C07,
302     QOMX_VIDEO_CodingVp9 = OMX_VIDEO_CodingVP9,   /**< keeping old enum for backwards compatibility*/
303 };
304 
305 enum OMX_QCOM_EXTN_INDEXTYPE
306 {
307     /** Qcom proprietary extension index list */
308 
309     /* "OMX.QCOM.index.param.register_mmap" */
310     OMX_QcomIndexRegmmap = 0x7F000000,
311 
312     /* "OMX.QCOM.index.param.platformprivate" */
313     OMX_QcomIndexPlatformPvt = 0x7F000001,
314 
315     /* "OMX.QCOM.index.param.portdefn" */
316     OMX_QcomIndexPortDefn = 0x7F000002,
317 
318     /* "OMX.QCOM.index.param.framepackingformat" */
319     OMX_QcomIndexPortFramePackFmt = 0x7F000003,
320 
321     /*"OMX.QCOM.index.param.Interlaced */
322     OMX_QcomIndexParamInterlaced = 0x7F000004,
323 
324     /*"OMX.QCOM.index.config.interlaceformat */
325     OMX_QcomIndexConfigInterlaced = 0x7F000005,
326 
327     /*"OMX.QCOM.index.param.syntaxhdr" */
328     QOMX_IndexParamVideoSyntaxHdr = 0x7F000006,
329 
330     /*"OMX.QCOM.index.config.intraperiod" */
331     QOMX_IndexConfigVideoIntraperiod = 0x7F000007,
332 
333     /*"OMX.QCOM.index.config.randomIntrarefresh" */
334     QOMX_IndexConfigVideoIntraRefresh = 0x7F000008,
335 
336     /*"OMX.QCOM.index.config.video.TemporalSpatialTradeOff" */
337     QOMX_IndexConfigVideoTemporalSpatialTradeOff = 0x7F000009,
338 
339     /*"OMX.QCOM.index.param.video.EncoderMode" */
340     QOMX_IndexParamVideoEncoderMode = 0x7F00000A,
341 
342     /*"OMX.QCOM.index.param.Divxtype */
343     OMX_QcomIndexParamVideoDivx = 0x7F00000B,
344 
345     /*"OMX.QCOM.index.param.Sparktype */
346     OMX_QcomIndexParamVideoSpark = 0x7F00000C,
347 
348     /*"OMX.QCOM.index.param.Vptype */
349     OMX_QcomIndexParamVideoVp = 0x7F00000D,
350 
351     OMX_QcomIndexQueryNumberOfVideoDecInstance = 0x7F00000E,
352 
353     OMX_QcomIndexParamVideoSyncFrameDecodingMode = 0x7F00000F,
354 
355     OMX_QcomIndexParamVideoDecoderPictureOrder = 0x7F000010,
356 
357     /* "OMX.QCOM.index.config.video.FramePackingInfo" */
358     OMX_QcomIndexConfigVideoFramePackingArrangement = 0x7F000011,
359 
360     OMX_QcomIndexParamConcealMBMapExtraData = 0x7F000012,
361 
362     OMX_QcomIndexParamFrameInfoExtraData = 0x7F000013,
363 
364     OMX_QcomIndexParamInterlaceExtraData = 0x7F000014,
365 
366     OMX_QcomIndexParamH264TimeInfo = 0x7F000015,
367 
368     OMX_QcomIndexParamIndexExtraDataType = 0x7F000016,
369 
370     OMX_GoogleAndroidIndexEnableAndroidNativeBuffers = 0x7F000017,
371 
372     OMX_GoogleAndroidIndexUseAndroidNativeBuffer = 0x7F000018,
373 
374     OMX_GoogleAndroidIndexGetAndroidNativeBufferUsage = 0x7F000019,
375 
376     /*"OMX.QCOM.index.config.video.QPRange" */
377     OMX_QcomIndexConfigVideoQPRange = 0x7F00001A,
378 
379     /*"OMX.QCOM.index.param.EnableTimeStampReoder"*/
380     OMX_QcomIndexParamEnableTimeStampReorder = 0x7F00001B,
381 
382     /*"OMX.google.android.index.storeMetaDataInBuffers"*/
383     OMX_QcomIndexParamVideoMetaBufferMode = 0x7F00001C,
384 
385     /*"OMX.google.android.index.useAndroidNativeBuffer2"*/
386     OMX_GoogleAndroidIndexUseAndroidNativeBuffer2 = 0x7F00001D,
387 
388     /*"OMX.QCOM.index.param.VideoMaxAllowedBitrateCheck"*/
389     OMX_QcomIndexParamVideoMaxAllowedBitrateCheck = 0x7F00001E,
390 
391     OMX_QcomIndexEnableSliceDeliveryMode = 0x7F00001F,
392 
393     /* "OMX.QCOM.index.param.video.ExtnUserExtraData" */
394     OMX_QcomIndexEnableExtnUserData = 0x7F000020,
395 
396     /*"OMX.QCOM.index.param.video.EnableSmoothStreaming"*/
397     OMX_QcomIndexParamEnableSmoothStreaming = 0x7F000021,
398 
399     /*"OMX.QCOM.index.param.video.QPRange" */
400     OMX_QcomIndexParamVideoQPRange = 0x7F000022,
401 
402     OMX_QcomIndexEnableH263PlusPType = 0x7F000023,
403 
404     /*"OMX.QCOM.index.param.video.LTRCountRangeSupported"*/
405     QOMX_IndexParamVideoLTRCountRangeSupported = 0x7F000024,
406 
407     /*"OMX.QCOM.index.param.video.LTRMode"*/
408     QOMX_IndexParamVideoLTRMode = 0x7F000025,
409 
410     /*"OMX.QCOM.index.param.video.LTRCount"*/
411     QOMX_IndexParamVideoLTRCount = 0x7F000026,
412 
413     /*"OMX.QCOM.index.config.video.LTRPeriod"*/
414     QOMX_IndexConfigVideoLTRPeriod = 0x7F000027,
415 
416     /*"OMX.QCOM.index.config.video.LTRUse"*/
417     QOMX_IndexConfigVideoLTRUse = 0x7F000028,
418 
419     /*"OMX.QCOM.index.config.video.LTRMark"*/
420     QOMX_IndexConfigVideoLTRMark = 0x7F000029,
421 
422     /* OMX.google.android.index.prependSPSPPSToIDRFrames */
423     OMX_QcomIndexParamSequenceHeaderWithIDR = 0x7F00002A,
424 
425     OMX_QcomIndexParamH264AUDelimiter = 0x7F00002B,
426 
427     OMX_QcomIndexParamVideoDownScalar = 0x7F00002C,
428 
429     /* "OMX.QCOM.index.param.video.FramePackingExtradata" */
430     OMX_QcomIndexParamVideoFramePackingExtradata = 0x7F00002D,
431 
432     /* "OMX.QCOM.index.config.activeregiondetection" */
433     OMX_QcomIndexConfigActiveRegionDetection = 0x7F00002E,
434 
435     /* "OMX.QCOM.index.config.activeregiondetectionstatus" */
436     OMX_QcomIndexConfigActiveRegionDetectionStatus = 0x7F00002F,
437 
438     /* "OMX.QCOM.index.config.scalingmode" */
439     OMX_QcomIndexConfigScalingMode = 0x7F000030,
440 
441     /* "OMX.QCOM.index.config.noisereduction" */
442     OMX_QcomIndexConfigNoiseReduction = 0x7F000031,
443 
444     /* "OMX.QCOM.index.config.imageenhancement" */
445     OMX_QcomIndexConfigImageEnhancement = 0x7F000032,
446 
447     /* google smooth-streaming support */
448     OMX_QcomIndexParamVideoAdaptivePlaybackMode = 0x7F000033,
449 
450     /* H.264 MVC codec index */
451     QOMX_IndexParamVideoMvc = 0x7F000034,
452 
453     /* "OMX.QCOM.index.param.video.QPExtradata" */
454     OMX_QcomIndexParamVideoQPExtraData = 0x7F000035,
455 
456     /* "OMX.QCOM.index.param.video.InputBitsInfoExtradata" */
457     OMX_QcomIndexParamVideoInputBitsInfoExtraData = 0x7F000036,
458 
459     /* VP8 Hierarchical P support */
460     OMX_QcomIndexHierarchicalStructure = 0x7F000037,
461 
462     OMX_QcomIndexParamPerfLevel = 0x7F000038,
463 
464     OMX_QcomIndexParamH264VUITimingInfo = 0x7F000039,
465 
466     OMX_QcomIndexParamPeakBitrate = 0x7F00003A,
467 
468     /* Enable InitialQP index */
469     QOMX_IndexParamVideoInitialQp = 0x7F00003B,
470 
471     OMX_QcomIndexParamSetMVSearchrange = 0x7F00003C,
472 
473     OMX_QcomIndexConfigPerfLevel = 0x7F00003D,
474 
475     /*"OMX.QCOM.index.param.video.LTRCount"*/
476     OMX_QcomIndexParamVideoLTRCount = QOMX_IndexParamVideoLTRCount,
477 
478     /*"OMX.QCOM.index.config.video.LTRUse"*/
479     OMX_QcomIndexConfigVideoLTRUse = QOMX_IndexConfigVideoLTRUse,
480 
481     /*"OMX.QCOM.index.config.video.LTRMark"*/
482     OMX_QcomIndexConfigVideoLTRMark = QOMX_IndexConfigVideoLTRMark,
483 
484     /*"OMX.QCOM.index.param.video.CustomBufferSize"*/
485     OMX_QcomIndexParamVideoCustomBufferSize = 0x7F00003E,
486 
487     /* Max Hierarchical P layers */
488     OMX_QcomIndexMaxHierarchicallayers = 0x7F000041,
489 
490     /* Set Encoder Performance Index */
491     OMX_QcomIndexConfigVideoVencPerfMode = 0x7F000042,
492 
493     /* Set Hybrid Hier-p layers */
494     OMX_QcomIndexParamVideoHybridHierpMode = 0x7F000043,
495 
496     OMX_QcomIndexFlexibleYUVDescription = 0x7F000044,
497 
498     /* Vpp Hqv Control Type */
499     OMX_QcomIndexParamVppHqvControl = 0x7F000045,
500 
501     /* Enable VPP */
502     OMX_QcomIndexParamEnableVpp = 0x7F000046,
503 
504     /* MBI statistics mode */
505     OMX_QcomIndexParamMBIStatisticsMode = 0x7F000047,
506 
507     /* Set PictureTypeDecode */
508     OMX_QcomIndexConfigPictureTypeDecode = 0x7F000048,
509 
510     OMX_QcomIndexConfigH264EntropyCodingCabac = 0x7F000049,
511 
512     /* "OMX.QCOM.index.param.video.InputBatch" */
513     OMX_QcomIndexParamBatchSize = 0x7F00004A,
514 
515     OMX_QcomIndexConfigMaxHierPLayers = 0x7F00004B,
516 
517     OMX_QcomIndexConfigRectType = 0x7F00004C,
518 
519     OMX_QcomIndexConfigBaseLayerId = 0x7F00004E,
520 
521     OMX_QcomIndexParamDriverVersion = 0x7F00004F,
522 
523     OMX_QcomIndexConfigQp = 0x7F000050,
524 
525     OMX_QcomIndexParamVencAspectRatio = 0x7F000051,
526 
527     OMX_QTIIndexParamVQZipSEIExtraData = 0x7F000052,
528 
529     /* Enable VQZIP SEI NAL type */
530     OMX_QTIIndexParamVQZIPSEIType = 0x7F000053,
531 
532     OMX_QTIIndexParamPassInputBufferFd = 0x7F000054,
533 
534     /* Set Prefer-adaptive playback*/
535     /* "OMX.QTI.index.param.video.PreferAdaptivePlayback" */
536     OMX_QTIIndexParamVideoPreferAdaptivePlayback = 0x7F000055,
537 
538     /* Set time params */
539     OMX_QTIIndexConfigSetTimeData = 0x7F000056,
540     /* Force Compressed format for DPB when resolution <=1080p
541      * and OPB is cpu_access */
542     /* OMX.QTI.index.param.video.ForceCompressedForDPB */
543     OMX_QTIIndexParamForceCompressedForDPB = 0x7F000057,
544 
545     /* Enable ROI info */
546     OMX_QTIIndexParamVideoEnableRoiInfo = 0x7F000058,
547 
548     /* Configure ROI info */
549     OMX_QTIIndexConfigVideoRoiInfo = 0x7F000059,
550 
551     /* Force OPB to UnCompressed mode */
552     OMX_QTIIndexParamForceUnCompressedForOPB = 0x7F00005A,
553 };
554 
555 /**
556 * This is custom extension to configure Encoder Aspect Ratio.
557 *
558 * STRUCT MEMBERS
559 *
560 * nSize         : Size of Structure in bytes
561 * nVersion      : OpenMAX IL specification version information
562 * nSARWidth     : Horizontal aspect size
563 * nSARHeight    : Vertical aspect size
564 */
565 
566 typedef struct QOMX_EXTNINDEX_VIDEO_VENC_SAR
567 {
568    OMX_U32 nSize;
569    OMX_U32 nVersion;
570    OMX_U32 nSARWidth;
571    OMX_U32 nSARHeight;
572 } QOMX_EXTNINDEX_VIDEO_VENC_SAR;
573 
574 /**
575 * This is custom extension to configure Hier-p layers.
576 * This mode configures Hier-p layers dynamically.
577 *
578 * STRUCT MEMBERS
579 *
580 * nSize         : Size of Structure in bytes
581 * nVersion      : OpenMAX IL specification version information
582 * nMaxHierLayers: Set the max number of Hier-p layers for the session
583 *                  - This should be less than the Hier-P layers set
584 *                    for the session.
585 */
586 
587 typedef struct QOMX_EXTNINDEX_VIDEO_MAX_HIER_P_LAYERS {
588    OMX_U32 nSize;
589    OMX_VERSIONTYPE nVersion;
590    OMX_U32 nMaxHierLayers;
591 } QOMX_EXTNINDEX_VIDEO_MAX_HIER_P_LAYERS;
592 
593 
594 /**
595 * This is custom extension to configure Hybrid Hier-p settings.
596 * This mode is different from enabling Hier-p mode. This
597 * property enables Hier-p encoding with LTR referencing in each
598 * sub-GOP.
599 *
600 * STRUCT MEMBERS
601 *
602 * nSize         : Size of Structure in bytes
603 * nVersion      : OpenMAX IL specification version information
604 * nKeyFrameInterval : Indicates the I frame interval
605 * nHpLayers     : Set the number of Hier-p layers for the session
606 *                  - This should be <= 6. (1 Base layer +
607 *                    5 Enhancement layers)
608 * nTemporalLayerBitrateRatio[OMX_VIDEO_MAX_HP_LAYERS] : Bitrate to
609 *                    be set for each enhancement layer
610 * nMinQuantizer  : minimum session QP
611 * nMaxQuantizer  : Maximun session QP
612 */
613 
614 typedef struct QOMX_EXTNINDEX_VIDEO_HYBRID_HP_MODE {
615    OMX_U32 nSize;
616    OMX_VERSIONTYPE nVersion;
617    OMX_U32 nKeyFrameInterval;
618    OMX_U32 nTemporalLayerBitrateRatio[OMX_VIDEO_MAX_HP_LAYERS];
619    OMX_U32 nMinQuantizer;
620    OMX_U32 nMaxQuantizer;
621    OMX_U32 nHpLayers;
622 } QOMX_EXTNINDEX_VIDEO_HYBRID_HP_MODE;
623 
624 /**
625  * Encoder Performance Mode.  This structure is used to set
626  * performance mode or power save mode when encoding. The search
627  * range is modified to save power or improve quality.
628  *
629  * STRUCT MEMBERS:
630  * OMX_U32 nPerfMode  : Performance mode:
631  *                                      1: MAX_QUALITY
632  *                                      2: POWER_SAVE
633  */
634 
635 typedef struct QOMX_EXTNINDEX_VIDEO_PERFMODE {
636     OMX_U32 nSize;
637     OMX_VERSIONTYPE nVersion;
638     OMX_U32 nPerfMode;
639 } QOMX_EXTNINDEX_VIDEO_PERFMODE;
640 
641 /**
642  * Initial QP parameter.  This structure is used to enable
643  * vendor specific extension to let client enable setting
644  * initial QP values to I P B Frames
645  *
646  * STRUCT MEMBERS:
647  *  nSize              : Size of Structure in bytes
648  *  nVersion           : OpenMAX IL specification version information
649  *  nPortIndex         : Index of the port to which this structure applies
650  *  OMX_U32 nQpI       : First Iframe QP
651  *  OMX_U32 nQpP       : First Pframe QP
652  *  OMX_U32 nQpB       : First Bframe QP
653  *  OMX_U32 bEnableInitQp : Bit field indicating which frame type(s) shall
654  *                             use the specified initial QP.
655  *                          Bit 0: Enable initial QP for I/IDR
656  *                                 and use value specified in nInitQpI
657  *                          Bit 1: Enable initial QP for P
658  *                                 and use value specified in nInitQpP
659  *                          Bit 2: Enable initial QP for B
660  *                                 and use value specified in nInitQpB
661  */
662 
663 typedef struct QOMX_EXTNINDEX_VIDEO_INITIALQP {
664     OMX_U32 nSize;
665     OMX_VERSIONTYPE nVersion;
666     OMX_U32 nPortIndex;
667     OMX_U32 nQpI;
668     OMX_U32 nQpP;
669     OMX_U32 nQpB;
670     OMX_U32 bEnableInitQp;
671 } QOMX_EXTNINDEX_VIDEO_INITIALQP;
672 
673 /**
674  * Extension index parameter.  This structure is used to enable
675  * vendor specific extension on input/output port and
676  * to pass the required flags and data, if any.
677  * The format of flags and data being passed is known to
678  * the client and component apriori.
679  *
680  * STRUCT MEMBERS:
681  *  nSize              : Size of Structure plus pData size
682  *  nVersion           : OMX specification version information
683  *  nPortIndex         : Indicates which port to set
684  *  bEnable            : Extension index enable (1) or disable (0)
685  *  nFlags             : Extension index flags, if any
686  *  nDataSize          : Size of the extension index data to follow
687  *  pData              : Extension index data, if present.
688  */
689 typedef struct QOMX_EXTNINDEX_PARAMTYPE {
690     OMX_U32 nSize;
691     OMX_VERSIONTYPE nVersion;
692     OMX_U32 nPortIndex;
693     OMX_BOOL bEnable;
694     OMX_U32 nFlags;
695     OMX_U32 nDataSize;
696     OMX_PTR pData;
697 } QOMX_EXTNINDEX_PARAMTYPE;
698 
699 /**
700  * Range index parameter.  This structure is used to enable
701  * vendor specific extension on input/output port and
702  * to pass the required minimum and maximum values
703  *
704  * STRUCT MEMBERS:
705  *  nSize              : Size of Structure in bytes
706  *  nVersion           : OpenMAX IL specification version information
707  *  nPortIndex         : Index of the port to which this structure applies
708  *  nMin               : Minimum value
709  *  nMax               : Maximum value
710  *  nSteSize           : Step size
711  */
712 typedef struct QOMX_EXTNINDEX_RANGETYPE {
713     OMX_U32 nSize;
714     OMX_VERSIONTYPE nVersion;
715     OMX_U32 nPortIndex;
716     OMX_S32 nMin;
717     OMX_S32 nMax;
718     OMX_S32 nStepSize;
719 } QOMX_EXTNINDEX_RANGETYPE;
720 
721 /**
722  *   Specifies LTR mode types.
723  */
724 typedef enum QOMX_VIDEO_LTRMODETYPE
725 {
726     QOMX_VIDEO_LTRMode_Disable    = 0x0, /**< LTR encoding is disabled */
727     QOMX_VIDEO_LTRMode_Manual     = 0x1, /**< In this mode, IL client configures
728                                            **  the encoder the LTR count and manually
729                                            **  controls the marking and use of LTR
730                                            **  frames during video encoding.
731                                            */
732     QOMX_VIDEO_LTRMode_Auto       = 0x2, /**< In this mode, IL client configures
733                                            **  the encoder the LTR count and LTR
734                                            **  period. The encoder marks LTR frames
735                                            **  automatically based on the LTR period
736                                            **  during video encoding. IL client controls
737                                            **  the use of LTR frames.
738                                            */
739     QOMX_VIDEO_LTRMode_MAX    = 0x7FFFFFFF /** Maximum LTR Mode type */
740 } QOMX_VIDEO_LTRMODETYPE;
741 
742 /**
743  * LTR mode index parameter.  This structure is used
744  * to enable vendor specific extension on output port
745  * to pass the LTR mode information.
746  *
747  * STRUCT MEMBERS:
748  *  nSize              : Size of Structure in bytes
749  *  nVersion           : OpenMAX IL specification version information
750  *  nPortIndex         : Index of the port to which this structure applies
751  *  eLTRMode           : Specifies the LTR mode used in encoder
752  */
753 typedef struct QOMX_VIDEO_PARAM_LTRMODE_TYPE {
754     OMX_U32 nSize;
755     OMX_VERSIONTYPE nVersion;
756     OMX_U32 nPortIndex;
757     QOMX_VIDEO_LTRMODETYPE eLTRMode;
758 } QOMX_VIDEO_PARAM_LTRMODE_TYPE;
759 
760 /**
761  * LTR count index parameter.  This structure is used
762  * to enable vendor specific extension on output port
763  * to pass the LTR count information.
764  *
765  * STRUCT MEMBERS:
766  *  nSize              : Size of Structure in bytes
767  *  nVersion           : OpenMAX IL specification version information
768  *  nPortIndex         : Index of the port to which this structure applies
769  *  nCount             : Specifies the number of LTR frames stored in the
770  *                       encoder component
771  */
772 typedef struct QOMX_VIDEO_PARAM_LTRCOUNT_TYPE {
773     OMX_U32 nSize;
774     OMX_VERSIONTYPE nVersion;
775     OMX_U32 nPortIndex;
776     OMX_U32 nCount;
777 } QOMX_VIDEO_PARAM_LTRCOUNT_TYPE;
778 
779 
780 /**
781  * This should be used with OMX_QcomIndexParamVideoLTRCount extension.
782  */
783 typedef QOMX_VIDEO_PARAM_LTRCOUNT_TYPE OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE;
784 
785 /**
786  * LTR period index parameter.  This structure is used
787  * to enable vendor specific extension on output port
788  * to pass the LTR period information.
789  *
790  * STRUCT MEMBERS:
791  *  nSize              : Size of Structure in bytes
792  *  nVersion           : OpenMAX IL specification version information
793  *  nPortIndex         : Index of the port to which this structure applies
794  *  nFrames            : Specifies the number of frames between two consecutive
795  *                       LTR frames.
796  */
797 typedef struct QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE {
798     OMX_U32 nSize;
799     OMX_VERSIONTYPE nVersion;
800     OMX_U32 nPortIndex;
801     OMX_U32 nFrames;
802 } QOMX_VIDEO_CONFIG_LTRPERIOD_TYPE;
803 
804 /**
805  * Marks the next encoded frame as an LTR frame.
806  * STRUCT MEMBERS:
807  *  nSize              : Size of Structure in bytes
808  *  nVersion           : OpenMAX IL specification version information
809  *  nPortIndex         : Index of the port to which this structure applies
810  *  nID                : Specifies the identifier of the LTR frame to be marked
811  *                       as reference frame for encoding subsequent frames.
812  */
813 typedef struct QOMX_VIDEO_CONFIG_LTRMARK_TYPE {
814     OMX_U32 nSize;
815     OMX_VERSIONTYPE nVersion;
816     OMX_U32 nPortIndex;
817     OMX_U32 nID;
818 } QOMX_VIDEO_CONFIG_LTRMARK_TYPE;
819 
820 /**
821  * This should be used with OMX_QcomIndexConfigVideoLTRMark extension.
822  */
823 typedef QOMX_VIDEO_CONFIG_LTRMARK_TYPE OMX_QCOM_VIDEO_CONFIG_LTRMARK_TYPE;
824 
825 /**
826  * Specifies an LTR frame to encode subsequent frames.
827  * STRUCT MEMBERS:
828  *  nSize              : Size of Structure in bytes
829  *  nVersion           : OpenMAX IL specification version information
830  *  nPortIndex         : Index of the port to which this structure applies
831  *  nID                : Specifies the identifier of the LTR frame to be used
832                          as reference frame for encoding subsequent frames.
833  *  nFrames            : Specifies the number of subsequent frames to be
834                          encoded using the LTR frame with its identifier
835                          nID as reference frame. Short-term reference frames
836                          will be used thereafter. The value of 0xFFFFFFFF
837                          indicates that all subsequent frames will be
838                          encodedusing this LTR frame as reference frame.
839  */
840 typedef struct QOMX_VIDEO_CONFIG_LTRUSE_TYPE {
841     OMX_U32 nSize;
842     OMX_VERSIONTYPE nVersion;
843     OMX_U32 nPortIndex;
844     OMX_U32 nID;
845     OMX_U32 nFrames;
846 } QOMX_VIDEO_CONFIG_LTRUSE_TYPE;
847 
848 /**
849  * This should be used with OMX_QcomIndexConfigVideoLTRUse extension.
850  */
851 typedef QOMX_VIDEO_CONFIG_LTRUSE_TYPE OMX_QCOM_VIDEO_CONFIG_LTRUSE_TYPE;
852 
853 /**
854  * Enumeration used to define the video encoder modes
855  *
856  * ENUMS:
857  *  EncoderModeDefault : Default video recording mode.
858  *                       All encoder settings made through
859  *                       OMX_SetParameter/OMX_SetConfig are applied. No
860  *                       parameter is overridden.
861  *  EncoderModeMMS : Video recording mode for MMS (Multimedia Messaging
862  *                   Service). This mode is similar to EncoderModeDefault
863  *                   except that here the Rate control mode is overridden
864  *                   internally and set as a variant of variable bitrate with
865  *                   variable frame rate. After this mode is set if the IL
866  *                   client tries to set OMX_VIDEO_CONTROLRATETYPE via
867  *                   OMX_IndexParamVideoBitrate that would be rejected. For
868  *                   this, client should set mode back to EncoderModeDefault
869  *                   first and then change OMX_VIDEO_CONTROLRATETYPE.
870  */
871 typedef enum QOMX_VIDEO_ENCODERMODETYPE
872 {
873     QOMX_VIDEO_EncoderModeDefault        = 0x00,
874     QOMX_VIDEO_EncoderModeMMS            = 0x01,
875     QOMX_VIDEO_EncoderModeMax            = 0x7FFFFFFF
876 } QOMX_VIDEO_ENCODERMODETYPE;
877 
878 /**
879  * This structure is used to set the video encoder mode.
880  *
881  * STRUCT MEMBERS:
882  *  nSize      : Size of the structure in bytes
883  *  nVersion   : OMX specification version info
884  *  nPortIndex : Port that this structure applies to
885  *  nMode : defines the video encoder mode
886  */
887 typedef struct QOMX_VIDEO_PARAM_ENCODERMODETYPE {
888     OMX_U32 nSize;
889     OMX_VERSIONTYPE nVersion;
890     OMX_U32 nPortIndex;
891     QOMX_VIDEO_ENCODERMODETYPE nMode;
892 } QOMX_VIDEO_PARAM_ENCODERMODETYPE;
893 
894 /**
895  * This structure describes the parameters corresponding to the
896  * QOMX_VIDEO_SYNTAXHDRTYPE extension. This parameter can be queried
897  * during the loaded state.
898  */
899 
900 typedef struct QOMX_VIDEO_SYNTAXHDRTYPE
901 {
902    OMX_U32 nSize;           /** Size of the structure in bytes */
903    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
904    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
905    OMX_U32 nBytes;          /** The number of bytes filled in to the buffer */
906    OMX_U8 data[1];          /** Buffer to store the header information */
907 } QOMX_VIDEO_SYNTAXHDRTYPE;
908 
909 /**
910  * This structure describes the parameters corresponding to the
911  * QOMX_VIDEO_TEMPORALSPATIALTYPE extension. This parameter can be set
912  * dynamically during any state except the state invalid.  This is primarily
913  * used for setting MaxQP from the application.  This is set on the out port.
914  */
915 
916 typedef struct QOMX_VIDEO_TEMPORALSPATIALTYPE
917 {
918    OMX_U32 nSize;           /** Size of the structure in bytes */
919    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
920    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
921    OMX_U32 nTSFactor;       /** Temoral spatial tradeoff factor value in 0-100 */
922 } QOMX_VIDEO_TEMPORALSPATIALTYPE;
923 
924 /**
925  * This structure describes the parameters corresponding to the
926  * OMX_QCOM_VIDEO_CONFIG_INTRAPERIODTYPE extension. This parameter can be set
927  * dynamically during any state except the state invalid.  This is set on the out port.
928  */
929 
930 typedef struct QOMX_VIDEO_INTRAPERIODTYPE
931 {
932    OMX_U32 nSize;           /** Size of the structure in bytes */
933    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
934    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
935    OMX_U32 nIDRPeriod;      /** This specifies coding a frame as IDR after every nPFrames
936                                 of intra frames. If this parameter is set to 0, only the
937                                 first frame of the encode session is an IDR frame. This
938                                 field is ignored for non-AVC codecs and is used only for
939                                 codecs that support IDR Period */
940    OMX_U32 nPFrames;         /** The number of "P" frames between two "I" frames */
941    OMX_U32 nBFrames;         /** The number of "B" frames between two "I" frames */
942 } QOMX_VIDEO_INTRAPERIODTYPE;
943 
944 /**
945  * This structure describes the parameters corresponding to the
946  * OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE extension. This parameter can be set
947  * dynamically during any state except the state invalid. This is used for the buffer negotiation
948  * with other clients.  This is set on the out port.
949  */
950 typedef struct OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE
951 {
952    OMX_U32 nSize;            /** Size of the structure in bytes */
953    OMX_VERSIONTYPE nVersion; /** OMX specification version information */
954    OMX_U32 nPortIndex;       /** Portindex which is extended by this structure */
955    OMX_U32 nBufferOccupancy; /** The number of bytes to be set for the buffer occupancy */
956 } OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE;
957 
958 /**
959  * This structure describes the parameters corresponding to the
960  * OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE extension. This parameter can be set
961  * dynamically during any state except the state invalid. This is primarily used for the dynamic/random
962  * intrarefresh.  This is set on the out port.
963  */
964 typedef struct OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE
965 {
966    OMX_U32 nSize;           /** Size of the structure in bytes */
967    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
968    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
969    OMX_U32 nRirMBs;         /** The number of MBs to be set for intrarefresh */
970 } OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE;
971 
972 
973 /**
974  * This structure describes the parameters corresponding to the
975  * OMX_QCOM_VIDEO_CONFIG_QPRANGE extension. This parameter can be set
976  * dynamically during any state except the state invalid. This is primarily
977  * used for the min/max QP to be set from the application.  This
978  * is set on the out port.
979  */
980 typedef struct OMX_QCOM_VIDEO_CONFIG_QPRANGE
981 {
982    OMX_U32 nSize;           /** Size of the structure in bytes */
983    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
984    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
985    OMX_U32 nMinQP;          /** The number for minimum quantization parameter */
986    OMX_U32 nMaxQP;          /** The number for maximum quantization parameter */
987 } OMX_QCOM_VIDEO_CONFIG_QPRANGE;
988 
989 /**
990  * This structure describes the parameters for the
991  * OMX_QcomIndexParamH264AUDelimiter extension.  It enables/disables
992  * the AU delimiters in the H264 stream, which is used by WFD.
993  */
994 typedef struct OMX_QCOM_VIDEO_CONFIG_H264_AUD
995 {
996    OMX_U32 nSize;           /** Size of the structure in bytes */
997    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
998    OMX_BOOL bEnable;        /** Enable/disable the setting */
999 } OMX_QCOM_VIDEO_CONFIG_H264_AUD;
1000 
1001 typedef enum QOMX_VIDEO_PERF_LEVEL
1002 {
1003     OMX_QCOM_PerfLevelNominal,
1004     OMX_QCOM_PerfLevelTurbo
1005 } QOMX_VIDEO_PERF_LEVEL;
1006 
1007 /**
1008  * This structure describes the parameters corresponding
1009  * to OMX_QcomIndexParamPerfLevel extension. It will set
1010  * the performance mode specified as QOMX_VIDEO_PERF_LEVEL.
1011  */
1012 typedef struct OMX_QCOM_VIDEO_PARAM_PERF_LEVEL {
1013     OMX_U32 nSize;                      /** Size of the structure in bytes */
1014     OMX_VERSIONTYPE nVersion;           /** OMX specification version information */
1015     QOMX_VIDEO_PERF_LEVEL ePerfLevel;   /** Performance level */
1016 } OMX_QCOM_VIDEO_PARAM_PERF_LEVEL;
1017 
1018 /**
1019  * This structure describes the parameters corresponding
1020  * to OMX_QcomIndexConfigPerfLevel extension. It will set
1021  * the performance mode specified as QOMX_VIDEO_PERF_LEVEL.
1022  */
1023 typedef struct OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL {
1024     OMX_U32 nSize;                      /** Size of the structure in bytes */
1025     OMX_VERSIONTYPE nVersion;           /** OMX specification version information */
1026     QOMX_VIDEO_PERF_LEVEL ePerfLevel;   /** Performance level */
1027 } OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL;
1028 
1029 typedef enum QOMX_VIDEO_PICTURE_TYPE_DECODE
1030 {
1031     OMX_QCOM_PictypeDecode_IPB,
1032     OMX_QCOM_PictypeDecode_I
1033 } QOMX_VIDEO_PICTURE_TYPE_DECODE;
1034 
1035 /**
1036  * This structure describes the parameters corresponding
1037  * to OMX_QcomIndexConfigPictureTypeDecode extension. It
1038  * will set the picture type decode specified by eDecodeType.
1039  */
1040 typedef struct OMX_QCOM_VIDEO_CONFIG_PICTURE_TYPE_DECODE {
1041     OMX_U32 nSize;                      /** Size of the structure in bytes */
1042     OMX_VERSIONTYPE nVersion;           /** OMX specification version information */
1043     QOMX_VIDEO_PICTURE_TYPE_DECODE eDecodeType;   /** Decode type */
1044 } OMX_QCOM_VIDEO_CONFIG_PICTURE_TYPE_DECODE;
1045 
1046 /**
1047  * This structure describes the parameters corresponding
1048  * to OMX_QcomIndexParamH264VUITimingInfo extension. It
1049  * will enable/disable the VUI timing info.
1050  */
1051 typedef struct OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO {
1052     OMX_U32 nSize;              /** Size of the structure in bytes */
1053     OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
1054     OMX_BOOL bEnable;           /** Enable/disable the setting */
1055 } OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO;
1056 
1057 /**
1058  * This structure describes the parameters corresponding
1059  * to OMX_QcomIndexParamVQZIPSEIType extension. It
1060  * will enable/disable the VQZIP SEI info.
1061  */
1062 typedef struct OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE {
1063     OMX_U32 nSize;              /** Size of the structure in bytes */
1064     OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
1065     OMX_BOOL bEnable;           /** Enable/disable the setting */
1066 } OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE;
1067 
1068 /**
1069  * This structure describes the parameters corresponding
1070  * to OMX_QcomIndexParamPeakBitrate extension. It will
1071  * set the peak bitrate specified by nPeakBitrate.
1072  */
1073 typedef struct OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE {
1074     OMX_U32 nSize;              /** Size of the structure in bytes */
1075     OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
1076     OMX_U32 nPeakBitrate;       /** Peak bitrate value */
1077 } OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE;
1078 
1079 /**
1080  * This structure describes the parameters corresponding
1081  * to OMX_QTIIndexParamForceCompressedForDPB extension. Enabling
1082  * this extension will force the split mode DPB(compressed)/OPB(Linear)
1083  * for all resolutions.On some chipsets preferred mode would be combined
1084  * Linear for both DPB/OPB to save memory. For example on 8996 preferred mode
1085  * would be combined linear for resolutions <= 1080p .
1086  * Enabling this might save power but with the cost
1087  * of increased memory i.e almost double the number on output YUV buffers.
1088  */
1089 typedef struct OMX_QTI_VIDEO_PARAM_FORCE_COMPRESSED_FOR_DPB_TYPE {
1090     OMX_U32 nSize;              /** Size of the structure in bytes */
1091     OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
1092     OMX_BOOL bEnable;           /** Enable/disable the setting */
1093 } OMX_QTI_VIDEO_PARAM_FORCE_COMPRESSED_FOR_DPB_TYPE;
1094 
1095 /**
1096  * This structure describes the parameters corresponding
1097  * to OMX_QTIIndexParamForceUnCompressedForOPB extension. Enabling this
1098  * extension will force the OPB to be linear for the current video session.
1099  * If this property is not set, then the OPB will be set to linear or compressed
1100  * based on resolution selected and/or if cpu access is requested on the
1101  * OPB buffer.
1102  */
1103 typedef struct OMX_QTI_VIDEO_PARAM_FORCE_UNCOMPRESSED_FOR_OPB_TYPE {
1104     OMX_U32 nSize;              /** Sizeo f the structure in bytes */
1105     OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
1106     OMX_BOOL bEnable;           /** Enable/disable the setting */
1107 } OMX_QTI_VIDEO_PARAM_FORCE_UNCOMPRESSED_FOR_OPB_TYPE;
1108 
1109 typedef struct OMX_VENDOR_EXTRADATATYPE  {
1110     OMX_U32 nPortIndex;
1111     OMX_U32 nDataSize;
1112     OMX_U8  *pData;     // cdata (codec_data/extradata)
1113 } OMX_VENDOR_EXTRADATATYPE;
1114 
1115 /**
1116  * This structure describes the parameters corresponding to the
1117  * OMX_VENDOR_VIDEOFRAMERATE extension. This parameter can be set
1118  * dynamically during any state except the state invalid. This is
1119  * used for frame rate to be set from the application. This
1120  * is set on the in port.
1121  */
1122 typedef struct OMX_VENDOR_VIDEOFRAMERATE  {
1123    OMX_U32 nSize;           /** Size of the structure in bytes */
1124    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
1125    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
1126    OMX_U32 nFps;            /** Frame rate value */
1127    OMX_BOOL bEnabled;       /** Flag to enable or disable client's frame rate value */
1128 } OMX_VENDOR_VIDEOFRAMERATE;
1129 
1130 typedef enum OMX_INDEXVENDORTYPE {
1131     OMX_IndexVendorFileReadInputFilename = 0xFF000001,
1132     OMX_IndexVendorParser3gpInputFilename = 0xFF000002,
1133     OMX_IndexVendorVideoExtraData = 0xFF000003,
1134     OMX_IndexVendorAudioExtraData = 0xFF000004,
1135     OMX_IndexVendorVideoFrameRate = 0xFF000005,
1136 } OMX_INDEXVENDORTYPE;
1137 
1138 typedef enum OMX_QCOM_VC1RESOLUTIONTYPE
1139 {
1140    OMX_QCOM_VC1_PICTURE_RES_1x1,
1141    OMX_QCOM_VC1_PICTURE_RES_2x1,
1142    OMX_QCOM_VC1_PICTURE_RES_1x2,
1143    OMX_QCOM_VC1_PICTURE_RES_2x2
1144 } OMX_QCOM_VC1RESOLUTIONTYPE;
1145 
1146 typedef enum OMX_QCOM_INTERLACETYPE
1147 {
1148     OMX_QCOM_InterlaceFrameProgressive,
1149     OMX_QCOM_InterlaceInterleaveFrameTopFieldFirst,
1150     OMX_QCOM_InterlaceInterleaveFrameBottomFieldFirst,
1151     OMX_QCOM_InterlaceFrameTopFieldFirst,
1152     OMX_QCOM_InterlaceFrameBottomFieldFirst,
1153     OMX_QCOM_InterlaceFieldTop,
1154     OMX_QCOM_InterlaceFieldBottom
1155 }OMX_QCOM_INTERLACETYPE;
1156 
1157 typedef struct OMX_QCOM_PARAM_VIDEO_INTERLACETYPE
1158 {
1159     OMX_U32 nSize;           /** Size of the structure in bytes */
1160     OMX_VERSIONTYPE nVersion;/** OMX specification version information */
1161     OMX_U32 nPortIndex;    /** Portindex which is extended by this structure */
1162     OMX_BOOL bInterlace;  /** Interlace content **/
1163 }OMX_QCOM_PARAM_VIDEO_INTERLACETYPE;
1164 
1165 typedef struct OMX_QCOM_CONFIG_INTERLACETYPE
1166 {
1167     OMX_U32 nSize;
1168     OMX_VERSIONTYPE nVersion;
1169     OMX_U32 nPortIndex;
1170     OMX_U32 nIndex;
1171     OMX_QCOM_INTERLACETYPE eInterlaceType;
1172 }OMX_QCOM_CONFIG_INTERLACETYPE;
1173 
1174 #define MAX_PAN_SCAN_WINDOWS 4
1175 
1176 typedef struct OMX_QCOM_PANSCAN
1177 {
1178    OMX_U32 numWindows;
1179    OMX_QCOMRectangle window[MAX_PAN_SCAN_WINDOWS];
1180 } OMX_QCOM_PANSCAN;
1181 
1182 typedef struct OMX_QCOM_ASPECT_RATIO
1183 {
1184    OMX_U32 aspectRatioX;
1185    OMX_U32 aspectRatioY;
1186 } OMX_QCOM_ASPECT_RATIO;
1187 
1188 typedef struct OMX_QCOM_DISPLAY_ASPECT_RATIO
1189 {
1190    OMX_U32 displayVerticalSize;
1191    OMX_U32 displayHorizontalSize;
1192 } OMX_QCOM_DISPLAY_ASPECT_RATIO;
1193 
1194 typedef struct OMX_QCOM_FRAME_PACK_ARRANGEMENT
1195 {
1196   OMX_U32 nSize;
1197   OMX_VERSIONTYPE nVersion;
1198   OMX_U32 nPortIndex;
1199   OMX_U32 id;
1200   OMX_U32 cancel_flag;
1201   OMX_U32 type;
1202   OMX_U32 quincunx_sampling_flag;
1203   OMX_U32 content_interpretation_type;
1204   OMX_U32 spatial_flipping_flag;
1205   OMX_U32 frame0_flipped_flag;
1206   OMX_U32 field_views_flag;
1207   OMX_U32 current_frame_is_frame0_flag;
1208   OMX_U32 frame0_self_contained_flag;
1209   OMX_U32 frame1_self_contained_flag;
1210   OMX_U32 frame0_grid_position_x;
1211   OMX_U32 frame0_grid_position_y;
1212   OMX_U32 frame1_grid_position_x;
1213   OMX_U32 frame1_grid_position_y;
1214   OMX_U32 reserved_byte;
1215   OMX_U32 repetition_period;
1216   OMX_U32 extension_flag;
1217 } OMX_QCOM_FRAME_PACK_ARRANGEMENT;
1218 
1219 typedef struct OMX_QCOM_EXTRADATA_QP
1220 {
1221    OMX_U32        nQP;
1222 } OMX_QCOM_EXTRADATA_QP;
1223 
1224 typedef struct OMX_QCOM_EXTRADATA_BITS_INFO
1225 {
1226    OMX_U32 header_bits;
1227    OMX_U32 frame_bits;
1228 } OMX_QCOM_EXTRADATA_BITS_INFO;
1229 
1230 typedef struct OMX_QCOM_EXTRADATA_USERDATA {
1231    OMX_U32 type;
1232    OMX_U32 data[1];
1233 } OMX_QCOM_EXTRADATA_USERDATA;
1234 
1235 typedef struct OMX_QCOM_EXTRADATA_FRAMEINFO
1236 {
1237    // common frame meta data. interlace related info removed
1238    OMX_VIDEO_PICTURETYPE  ePicType;
1239    OMX_QCOM_INTERLACETYPE interlaceType;
1240    OMX_QCOM_PANSCAN       panScan;
1241    OMX_QCOM_ASPECT_RATIO  aspectRatio;
1242    OMX_QCOM_DISPLAY_ASPECT_RATIO displayAspectRatio;
1243    OMX_U32                nConcealedMacroblocks;
1244    OMX_U32                nFrameRate;
1245    OMX_TICKS              nTimeStamp;
1246 } OMX_QCOM_EXTRADATA_FRAMEINFO;
1247 
1248 typedef struct OMX_QCOM_EXTRADATA_FRAMEDIMENSION
1249 {
1250    /** Frame Dimensions added to each YUV buffer */
1251    OMX_U32   nDecWidth;  /** Width  rounded to multiple of 16 */
1252    OMX_U32   nDecHeight; /** Height rounded to multiple of 16 */
1253    OMX_U32   nActualWidth; /** Actual Frame Width */
1254    OMX_U32   nActualHeight; /** Actual Frame Height */
1255 
1256 } OMX_QCOM_EXTRADATA_FRAMEDIMENSION;
1257 
1258 typedef struct OMX_QCOM_H264EXTRADATA
1259 {
1260    OMX_U64 seiTimeStamp;
1261 } OMX_QCOM_H264EXTRADATA;
1262 
1263 typedef struct OMX_QCOM_VC1EXTRADATA
1264 {
1265    OMX_U32                     nVC1RangeY;
1266    OMX_U32                     nVC1RangeUV;
1267    OMX_QCOM_VC1RESOLUTIONTYPE eVC1PicResolution;
1268 } OMX_QCOM_VC1EXTRADATA;
1269 
1270 typedef union OMX_QCOM_EXTRADATA_CODEC_DATA
1271 {
1272    OMX_QCOM_H264EXTRADATA h264ExtraData;
1273    OMX_QCOM_VC1EXTRADATA vc1ExtraData;
1274 } OMX_QCOM_EXTRADATA_CODEC_DATA;
1275 
1276 typedef struct OMX_QCOM_EXTRADATA_MBINFO
1277 {
1278    OMX_U32 nFormat;
1279    OMX_U32 nDataSize;
1280    OMX_U8  data[0];
1281 } OMX_QCOM_EXTRADATA_MBINFO;
1282 
1283 typedef struct OMX_QCOM_EXTRADATA_VQZIPSEI {
1284     OMX_U32 nSize;
1285     OMX_U8 data[0];
1286 } OMX_QCOM_EXTRADATA_VQZIPSEI;
1287 
1288 typedef struct OMX_QTI_VIDEO_PARAM_ENABLE_ROIINFO {
1289     OMX_U32         nSize;
1290     OMX_VERSIONTYPE nVersion;
1291     OMX_U32         nPortIndex;
1292     OMX_BOOL        bEnableRoiInfo;
1293 } OMX_QTI_VIDEO_PARAM_ENABLE_ROIINFO;
1294 
1295 typedef struct OMX_QTI_VIDEO_CONFIG_ROIINFO {
1296     OMX_U32         nSize;
1297     OMX_VERSIONTYPE nVersion;
1298     OMX_U32         nPortIndex;
1299     OMX_S32         nUpperQpOffset;
1300     OMX_S32         nLowerQpOffset;
1301     OMX_BOOL        bUseRoiInfo;
1302     OMX_S32         nRoiMBInfoSize;
1303     OMX_PTR         pRoiMBInfo;
1304 } OMX_QTI_VIDEO_CONFIG_ROIINFO;
1305 
1306 typedef enum OMX_QCOM_EXTRADATATYPE
1307 {
1308     OMX_ExtraDataFrameInfo =               0x7F000001,
1309     OMX_ExtraDataH264 =                    0x7F000002,
1310     OMX_ExtraDataVC1 =                     0x7F000003,
1311     OMX_ExtraDataFrameDimension =          0x7F000004,
1312     OMX_ExtraDataVideoEncoderSliceInfo =   0x7F000005,
1313     OMX_ExtraDataConcealMB =               0x7F000006,
1314     OMX_ExtraDataInterlaceFormat =         0x7F000007,
1315     OMX_ExtraDataPortDef =                 0x7F000008,
1316     OMX_ExtraDataMP2ExtnData =             0x7F000009,
1317     OMX_ExtraDataMP2UserData =             0x7F00000a,
1318     OMX_ExtraDataVideoLTRInfo =            0x7F00000b,
1319     OMX_ExtraDataFramePackingArrangement = 0x7F00000c,
1320     OMX_ExtraDataQP =                      0x7F00000d,
1321     OMX_ExtraDataInputBitsInfo =           0x7F00000e,
1322     OMX_ExtraDataVideoEncoderMBInfo =      0x7F00000f,
1323     OMX_ExtraDataVQZipSEI  =               0x7F000010,
1324 } OMX_QCOM_EXTRADATATYPE;
1325 
1326 typedef struct  OMX_STREAMINTERLACEFORMATTYPE {
1327     OMX_U32 nSize;
1328     OMX_VERSIONTYPE nVersion;
1329     OMX_U32 nPortIndex;
1330     OMX_BOOL bInterlaceFormat;
1331     OMX_U32 nInterlaceFormats;
1332 } OMX_STREAMINTERLACEFORMAT;
1333 
1334 typedef enum OMX_INTERLACETYPE
1335 {
1336    OMX_InterlaceFrameProgressive,
1337    OMX_InterlaceInterleaveFrameTopFieldFirst,
1338    OMX_InterlaceInterleaveFrameBottomFieldFirst,
1339    OMX_InterlaceFrameTopFieldFirst,
1340    OMX_InterlaceFrameBottomFieldFirst
1341 } OMX_INTERLACES;
1342 
1343 
1344 #define OMX_EXTRADATA_HEADER_SIZE 20
1345 
1346 /**
1347  * AVC profile types, each profile indicates support for various
1348  * performance bounds and different annexes.
1349  */
1350 typedef enum QOMX_VIDEO_AVCPROFILETYPE {
1351     QOMX_VIDEO_AVCProfileBaseline      = OMX_VIDEO_AVCProfileBaseline,
1352     QOMX_VIDEO_AVCProfileMain          = OMX_VIDEO_AVCProfileMain,
1353     QOMX_VIDEO_AVCProfileExtended      = OMX_VIDEO_AVCProfileExtended,
1354     QOMX_VIDEO_AVCProfileHigh          = OMX_VIDEO_AVCProfileHigh,
1355     QOMX_VIDEO_AVCProfileHigh10        = OMX_VIDEO_AVCProfileHigh10,
1356     QOMX_VIDEO_AVCProfileHigh422       = OMX_VIDEO_AVCProfileHigh422,
1357     QOMX_VIDEO_AVCProfileHigh444       = OMX_VIDEO_AVCProfileHigh444,
1358     /* QCom specific profile indexes */
1359     QOMX_VIDEO_AVCProfileConstrained           = OMX_VIDEO_AVCProfileVendorStartUnused,
1360     QOMX_VIDEO_AVCProfileConstrainedBaseline,
1361     QOMX_VIDEO_AVCProfileConstrainedHigh,
1362 } QOMX_VIDEO_AVCPROFILETYPE;
1363 
1364 
1365 /**
1366  * H.264 MVC Profiles
1367   */
1368 typedef enum QOMX_VIDEO_MVCPROFILETYPE {
1369     QOMX_VIDEO_MVCProfileStereoHigh = 0x1,
1370     QOMX_VIDEO_MVCProfileMultiViewHigh = 0x2,
1371     QOMX_VIDEO_MVCProfileKhronosExtensions = 0x6F000000,
1372     QOMX_VIDEO_MVCProfileVendorStartUnused = 0x7F000000,
1373     QOMX_VIDEO_MVCProfileMax = 0x7FFFFFFF
1374 } QOMX_VIDEO_MVCPROFILETYPE;
1375 
1376 /**
1377  * H.264 MVC Levels
1378   */
1379 typedef enum QOMX_VIDEO_MVCLEVELTYPE {
1380     QOMX_VIDEO_MVCLevel1   = 0x01,     /**< Level 1 */
1381     QOMX_VIDEO_MVCLevel1b  = 0x02,     /**< Level 1b */
1382     QOMX_VIDEO_MVCLevel11  = 0x04,     /**< Level 1.1 */
1383     QOMX_VIDEO_MVCLevel12  = 0x08,     /**< Level 1.2 */
1384     QOMX_VIDEO_MVCLevel13  = 0x10,     /**< Level 1.3 */
1385     QOMX_VIDEO_MVCLevel2   = 0x20,     /**< Level 2 */
1386     QOMX_VIDEO_MVCLevel21  = 0x40,     /**< Level 2.1 */
1387     QOMX_VIDEO_MVCLevel22  = 0x80,     /**< Level 2.2 */
1388     QOMX_VIDEO_MVCLevel3   = 0x100,    /**< Level 3 */
1389     QOMX_VIDEO_MVCLevel31  = 0x200,    /**< Level 3.1 */
1390     QOMX_VIDEO_MVCLevel32  = 0x400,    /**< Level 3.2 */
1391     QOMX_VIDEO_MVCLevel4   = 0x800,    /**< Level 4 */
1392     QOMX_VIDEO_MVCLevel41  = 0x1000,   /**< Level 4.1 */
1393     QOMX_VIDEO_MVCLevel42  = 0x2000,   /**< Level 4.2 */
1394     QOMX_VIDEO_MVCLevel5   = 0x4000,   /**< Level 5 */
1395     QOMX_VIDEO_MVCLevel51  = 0x8000,   /**< Level 5.1 */
1396     QOMX_VIDEO_MVCLevelKhronosExtensions = 0x6F000000,
1397     QOMX_VIDEO_MVCLevelVendorStartUnused = 0x7F000000,
1398     QOMX_VIDEO_MVCLevelMax = 0x7FFFFFFF
1399 } QOMX_VIDEO_MVCLEVELTYPE;
1400 
1401 /**
1402  * DivX Versions
1403  */
1404 typedef enum  QOMX_VIDEO_DIVXFORMATTYPE {
1405     QOMX_VIDEO_DIVXFormatUnused = 0x01, /**< Format unused or unknown */
1406     QOMX_VIDEO_DIVXFormat311    = 0x02, /**< DivX 3.11 */
1407     QOMX_VIDEO_DIVXFormat4      = 0x04, /**< DivX 4 */
1408     QOMX_VIDEO_DIVXFormat5      = 0x08, /**< DivX 5 */
1409     QOMX_VIDEO_DIVXFormat6      = 0x10, /**< DivX 6 */
1410     QOMX_VIDEO_DIVXFormatKhronosExtensions = 0x6F000000,
1411     QOMX_VIDEO_DIVXFormatVendorStartUnused = 0x7F000000,
1412     QOMX_VIDEO_DIVXFormatMax = 0x7FFFFFFF
1413 } QOMX_VIDEO_DIVXFORMATTYPE;
1414 
1415 /**
1416  * DivX profile types, each profile indicates support for
1417  * various performance bounds.
1418  */
1419 typedef enum QOMX_VIDEO_DIVXPROFILETYPE {
1420     QOMX_VIDEO_DivXProfileqMobile = 0x01, /**< qMobile Profile */
1421     QOMX_VIDEO_DivXProfileMobile  = 0x02, /**< Mobile Profile */
1422     QOMX_VIDEO_DivXProfileMT      = 0x04, /**< Mobile Theatre Profile */
1423     QOMX_VIDEO_DivXProfileHT      = 0x08, /**< Home Theatre Profile */
1424     QOMX_VIDEO_DivXProfileHD      = 0x10, /**< High Definition Profile */
1425     QOMX_VIDEO_DIVXProfileKhronosExtensions = 0x6F000000,
1426     QOMX_VIDEO_DIVXProfileVendorStartUnused = 0x7F000000,
1427     QOMX_VIDEO_DIVXProfileMax = 0x7FFFFFFF
1428 } QOMX_VIDEO_DIVXPROFILETYPE;
1429 
1430 /**
1431  * DivX Video Params
1432  *
1433  *  STRUCT MEMBERS:
1434  *  nSize      : Size of the structure in bytes
1435  *  nVersion   : OMX specification version information
1436  *  nPortIndex : Port that this structure applies to
1437  *  eFormat    : Version of DivX stream / data
1438  *  eProfile   : Profile of DivX stream / data
1439  */
1440 typedef struct QOMX_VIDEO_PARAM_DIVXTYPE {
1441     OMX_U32 nSize;
1442     OMX_VERSIONTYPE nVersion;
1443     OMX_U32 nPortIndex;
1444     QOMX_VIDEO_DIVXFORMATTYPE eFormat;
1445     QOMX_VIDEO_DIVXPROFILETYPE eProfile;
1446 } QOMX_VIDEO_PARAM_DIVXTYPE;
1447 
1448 
1449 
1450 /**
1451  *  VP Versions
1452  */
1453 typedef enum QOMX_VIDEO_VPFORMATTYPE {
1454     QOMX_VIDEO_VPFormatUnused = 0x01, /**< Format unused or unknown */
1455     QOMX_VIDEO_VPFormat6      = 0x02, /**< VP6 Video Format */
1456     QOMX_VIDEO_VPFormat7      = 0x04, /**< VP7 Video Format */
1457     QOMX_VIDEO_VPFormat8      = 0x08, /**< VP8 Video Format */
1458     QOMX_VIDEO_VPFormat9      = 0x10, /**< VP9 Video Format */
1459     QOMX_VIDEO_VPFormatKhronosExtensions = 0x6F000000,
1460     QOMX_VIDEO_VPFormatVendorStartUnused = 0x7F000000,
1461     QOMX_VIDEO_VPFormatMax = 0x7FFFFFFF
1462 } QOMX_VIDEO_VPFORMATTYPE;
1463 
1464 /**
1465  * VP profile types, each profile indicates support for various
1466  * encoding tools.
1467  */
1468 typedef enum QOMX_VIDEO_VPPROFILETYPE {
1469     QOMX_VIDEO_VPProfileSimple   = 0x01, /**< Simple Profile, applies to VP6 only */
1470     QOMX_VIDEO_VPProfileAdvanced = 0x02, /**< Advanced Profile, applies to VP6 only */
1471     QOMX_VIDEO_VPProfileVersion0 = 0x04, /**< Version 0, applies to VP7 and VP8 */
1472     QOMX_VIDEO_VPProfileVersion1 = 0x08, /**< Version 1, applies to VP7 and VP8 */
1473     QOMX_VIDEO_VPProfileVersion2 = 0x10, /**< Version 2, applies to VP8 only */
1474     QOMX_VIDEO_VPProfileVersion3 = 0x20, /**< Version 3, applies to VP8 only */
1475     QOMX_VIDEO_VPProfileKhronosExtensions = 0x6F000000,
1476     QOMX_VIDEO_VPProfileVendorStartUnused = 0x7F000000,
1477     QOMX_VIDEO_VPProfileMax = 0x7FFFFFFF
1478 } QOMX_VIDEO_VPPROFILETYPE;
1479 
1480 /**
1481  * VP Video Params
1482  *
1483  *  STRUCT MEMBERS:
1484  *  nSize      : Size of the structure in bytes
1485  *  nVersion   : OMX specification version information
1486  *  nPortIndex : Port that this structure applies to
1487  *  eFormat    : Format of VP stream / data
1488  *  eProfile   : Profile or Version of VP stream / data
1489  */
1490 typedef struct QOMX_VIDEO_PARAM_VPTYPE {
1491     OMX_U32 nSize;
1492     OMX_VERSIONTYPE nVersion;
1493     OMX_U32 nPortIndex;
1494     QOMX_VIDEO_VPFORMATTYPE eFormat;
1495     QOMX_VIDEO_VPPROFILETYPE eProfile;
1496 } QOMX_VIDEO_PARAM_VPTYPE;
1497 
1498 /**
1499  * Spark Versions
1500  */
1501 typedef enum QOMX_VIDEO_SPARKFORMATTYPE {
1502     QOMX_VIDEO_SparkFormatUnused = 0x01, /**< Format unused or unknown */
1503     QOMX_VIDEO_SparkFormat0      = 0x02, /**< Video Format Version 0 */
1504     QOMX_VIDEO_SparkFormat1      = 0x04, /**< Video Format Version 1 */
1505     QOMX_VIDEO_SparkFormatKhronosExtensions = 0x6F000000,
1506     QOMX_VIDEO_SparkFormatVendorStartUnused = 0x7F000000,
1507     QOMX_VIDEO_SparkFormatMax = 0x7FFFFFFF
1508 } QOMX_VIDEO_SPARKFORMATTYPE;
1509 
1510 /**
1511  * Spark Video Params
1512  *
1513  *  STRUCT MEMBERS:
1514  *  nSize      : Size of the structure in bytes
1515  *  nVersion   : OMX specification version information
1516  *  nPortIndex : Port that this structure applies to
1517  *  eFormat    : Version of Spark stream / data
1518  */
1519 typedef struct QOMX_VIDEO_PARAM_SPARKTYPE {
1520     OMX_U32 nSize;
1521     OMX_VERSIONTYPE nVersion;
1522     OMX_U32 nPortIndex;
1523     QOMX_VIDEO_SPARKFORMATTYPE eFormat;
1524 } QOMX_VIDEO_PARAM_SPARKTYPE;
1525 
1526 
1527 typedef struct QOMX_VIDEO_QUERY_DECODER_INSTANCES {
1528     OMX_U32 nSize;
1529     OMX_VERSIONTYPE nVersion;
1530     OMX_U32 nPortIndex;
1531     OMX_U32 nNumOfInstances;
1532 } QOMX_VIDEO_QUERY_DECODER_INSTANCES;
1533 
1534 typedef struct QOMX_ENABLETYPE {
1535     OMX_U32 nSize;
1536     OMX_VERSIONTYPE nVersion;
1537     OMX_BOOL bEnable;
1538 } QOMX_ENABLETYPE;
1539 
1540 typedef enum QOMX_VIDEO_EVENTS {
1541     OMX_EventIndexsettingChanged = OMX_EventVendorStartUnused
1542 } QOMX_VIDEO_EVENTS;
1543 
1544 typedef enum QOMX_VIDEO_PICTURE_ORDER {
1545     QOMX_VIDEO_DISPLAY_ORDER = 0x1,
1546     QOMX_VIDEO_DECODE_ORDER = 0x2
1547 } QOMX_VIDEO_PICTURE_ORDER;
1548 
1549 typedef struct QOMX_VIDEO_DECODER_PICTURE_ORDER {
1550     OMX_U32 nSize;
1551     OMX_VERSIONTYPE nVersion;
1552     OMX_U32 nPortIndex;
1553     QOMX_VIDEO_PICTURE_ORDER eOutputPictureOrder;
1554 } QOMX_VIDEO_DECODER_PICTURE_ORDER;
1555 
1556 typedef struct QOMX_INDEXEXTRADATATYPE {
1557     OMX_U32 nSize;
1558     OMX_VERSIONTYPE nVersion;
1559     OMX_U32 nPortIndex;
1560     OMX_BOOL bEnabled;
1561     OMX_INDEXTYPE nIndex;
1562 } QOMX_INDEXEXTRADATATYPE;
1563 
1564 typedef struct QOMX_INDEXTIMESTAMPREORDER {
1565     OMX_U32 nSize;
1566     OMX_VERSIONTYPE nVersion;
1567     OMX_U32 nPortIndex;
1568     OMX_BOOL bEnable;
1569 } QOMX_INDEXTIMESTAMPREORDER;
1570 
1571 typedef struct QOMX_INDEXDOWNSCALAR {
1572         OMX_U32 nSize;
1573         OMX_VERSIONTYPE nVersion;
1574         OMX_U32 nPortIndex;
1575         OMX_BOOL bEnable;
1576 } QOMX_INDEXDOWNSCALAR;
1577 
1578 typedef struct QOMX_VIDEO_CUSTOM_BUFFERSIZE {
1579         OMX_U32 nSize;
1580         OMX_VERSIONTYPE nVersion;
1581         OMX_U32 nPortIndex;
1582         OMX_U32 nBufferSize;
1583 } QOMX_VIDEO_CUSTOM_BUFFERSIZE;
1584 
1585 #define OMX_QCOM_INDEX_PARAM_VIDEO_SYNCFRAMEDECODINGMODE "OMX.QCOM.index.param.video.SyncFrameDecodingMode"
1586 #define OMX_QCOM_INDEX_PARAM_INDEXEXTRADATA "OMX.QCOM.index.param.IndexExtraData"
1587 #define OMX_QCOM_INDEX_PARAM_VIDEO_SLICEDELIVERYMODE "OMX.QCOM.index.param.SliceDeliveryMode"
1588 #define OMX_QCOM_INDEX_PARAM_VIDEO_FRAMEPACKING_EXTRADATA "OMX.QCOM.index.param.video.FramePackingExtradata"
1589 #define OMX_QCOM_INDEX_PARAM_VIDEO_QP_EXTRADATA "OMX.QCOM.index.param.video.QPExtradata"
1590 #define OMX_QCOM_INDEX_PARAM_VIDEO_INPUTBITSINFO_EXTRADATA "OMX.QCOM.index.param.video.InputBitsInfoExtradata"
1591 #define OMX_QCOM_INDEX_PARAM_VIDEO_EXTNUSER_EXTRADATA "OMX.QCOM.index.param.video.ExtnUserExtraData"
1592 #define OMX_QCOM_INDEX_CONFIG_VIDEO_FRAMEPACKING_INFO "OMX.QCOM.index.config.video.FramePackingInfo"
1593 #define OMX_QCOM_INDEX_PARAM_VIDEO_MPEG2SEQDISP_EXTRADATA "OMX.QCOM.index.param.video.Mpeg2SeqDispExtraData"
1594 
1595 
1596 #define OMX_QCOM_INDEX_PARAM_VIDEO_HIERSTRUCTURE "OMX.QCOM.index.param.video.HierStructure"
1597 #define OMX_QCOM_INDEX_PARAM_VIDEO_LTRCOUNT "OMX.QCOM.index.param.video.LTRCount"
1598 #define OMX_QCOM_INDEX_PARAM_VIDEO_LTRPERIOD "OMX.QCOM.index.param.video.LTRPeriod"
1599 #define OMX_QCOM_INDEX_CONFIG_VIDEO_LTRUSE "OMX.QCOM.index.config.video.LTRUse"
1600 #define OMX_QCOM_INDEX_CONFIG_VIDEO_LTRMARK "OMX.QCOM.index.config.video.LTRMark"
1601 #define OMX_QCOM_INDEX_CONFIG_VIDEO_MAX_HIER_P_LAYERS "OMX.QCOM.index.config.video.hierplayers"
1602 #define OMX_QCOM_INDEX_CONFIG_RECTANGLE_TYPE "OMX.QCOM.index.config.video.rectangle"
1603 #define OMX_QCOM_INDEX_PARAM_VIDEO_BASE_LAYER_ID "OMX.QCOM.index.param.video.baselayerid"
1604 #define OMX_QCOM_INDEX_PARAM_VIDEO_DRIVERVERSION "OMX.QCOM.index.param.video.FramePackingInfo"
1605 #define OMX_QCOM_INDEX_CONFIG_VIDEO_QP "OMX.QCOM.index.config.video.qp"
1606 #define OMX_QCOM_INDEX_PARAM_VIDEO_SAR "OMX.QCOM.index.param.video.sar"
1607 
1608 
1609 #define OMX_QCOM_INDEX_PARAM_VIDEO_HIERSTRUCTURE "OMX.QCOM.index.param.video.HierStructure"
1610 #define OMX_QCOM_INDEX_PARAM_VIDEO_LTRCOUNT "OMX.QCOM.index.param.video.LTRCount"
1611 #define OMX_QCOM_INDEX_PARAM_VIDEO_LTRPERIOD "OMX.QCOM.index.param.video.LTRPeriod"
1612 #define OMX_QCOM_INDEX_CONFIG_VIDEO_LTRUSE "OMX.QCOM.index.config.video.LTRUse"
1613 #define OMX_QCOM_INDEX_CONFIG_VIDEO_LTRMARK "OMX.QCOM.index.config.video.LTRMark"
1614 #define OMX_QCOM_INDEX_CONFIG_VIDEO_MAX_HIER_P_LAYERS "OMX.QCOM.index.config.video.hierplayers"
1615 #define OMX_QCOM_INDEX_CONFIG_RECTANGLE_TYPE "OMX.QCOM.index.config.video.rectangle"
1616 #define OMX_QCOM_INDEX_PARAM_VIDEO_BASE_LAYER_ID "OMX.QCOM.index.param.video.baselayerid"
1617 #define OMX_QCOM_INDEX_CONFIG_VIDEO_QP "OMX.QCOM.index.config.video.qp"
1618 #define OMX_QCOM_INDEX_PARAM_VIDEO_SAR "OMX.QCOM.index.param.video.sar"
1619 
1620 #define OMX_QCOM_INDEX_PARAM_VIDEO_PASSINPUTBUFFERFD "OMX.QCOM.index.param.video.PassInputBufferFd"
1621 #define OMX_QTI_INDEX_PARAM_VIDEO_PREFER_ADAPTIVE_PLAYBACK "OMX.QTI.index.param.video.PreferAdaptivePlayback"
1622 #define OMX_QTI_INDEX_CONFIG_VIDEO_SETTIMEDATA "OMX.QTI.index.config.video.settimedata"
1623 #define OMX_QTI_INDEX_PARAM_VIDEO_FORCE_COMPRESSED_FOR_DPB "OMX.QTI.index.param.video.ForceCompressedForDPB"
1624 #define OMX_QTI_INDEX_PARAM_VIDEO_ENABLE_ROIINFO "OMX.QTI.index.param.enableRoiInfo"
1625 #define OMX_QTI_INDEX_CONFIG_VIDEO_ROIINFO "OMX.QTI.index.config.RoiInfo"
1626 
1627 typedef enum {
1628     QOMX_VIDEO_FRAME_PACKING_CHECKERBOARD = 0,
1629     QOMX_VIDEO_FRAME_PACKING_COLUMN_INTERLEAVE = 1,
1630     QOMX_VIDEO_FRAME_PACKING_ROW_INTERLEAVE = 2,
1631     QOMX_VIDEO_FRAME_PACKING_SIDE_BY_SIDE = 3,
1632     QOMX_VIDEO_FRAME_PACKING_TOP_BOTTOM = 4,
1633     QOMX_VIDEO_FRAME_PACKING_TEMPORAL = 5,
1634 } QOMX_VIDEO_FRAME_PACKING_ARRANGEMENT;
1635 
1636 typedef enum {
1637     QOMX_VIDEO_CONTENT_UNSPECIFIED = 0,
1638     QOMX_VIDEO_CONTENT_LR_VIEW = 1,
1639     QOMX_VIDEO_CONTENT_RL_VIEW = 2,
1640 } QOMX_VIDEO_CONTENT_INTERPRETATION;
1641 
1642 /**
1643  * Specifies the extended picture types. These values should be
1644  * OR'd along with the types defined in OMX_VIDEO_PICTURETYPE to
1645  * signal all pictures types which are allowed.
1646  *
1647  * ENUMS:
1648  *  H.264 Specific Picture Types:   IDR
1649  */
1650 typedef enum QOMX_VIDEO_PICTURETYPE {
1651     QOMX_VIDEO_PictureTypeIDR = OMX_VIDEO_PictureTypeVendorStartUnused + 0x1000
1652 } QOMX_VIDEO_PICTURETYPE;
1653 
1654 #define OMX_QCOM_INDEX_CONFIG_ACTIVE_REGION_DETECTION           "OMX.QCOM.index.config.activeregiondetection"
1655 #define OMX_QCOM_INDEX_CONFIG_ACTIVE_REGION_DETECTION_STATUS    "OMX.QCOM.index.config.activeregiondetectionstatus"
1656 #define OMX_QCOM_INDEX_CONFIG_SCALING_MODE                      "OMX.QCOM.index.config.scalingmode"
1657 #define OMX_QCOM_INDEX_CONFIG_NOISEREDUCTION                    "OMX.QCOM.index.config.noisereduction"
1658 #define OMX_QCOM_INDEX_CONFIG_IMAGEENHANCEMENT                  "OMX.QCOM.index.config.imageenhancement"
1659 #define OMX_QCOM_INDEX_PARAM_HELDBUFFERCOUNT                    "OMX.QCOM.index.param.HeldBufferCount" /**< reference: QOMX_HELDBUFFERCOUNTTYPE */
1660 
1661 
1662 typedef struct QOMX_RECTTYPE {
1663     OMX_U32 nSize;
1664     OMX_VERSIONTYPE nVersion;
1665     OMX_S32 nLeft;
1666     OMX_S32 nTop;
1667     OMX_U32 nWidth;
1668     OMX_U32 nHeight;
1669 } QOMX_RECTTYPE;
1670 
1671 typedef struct QOMX_ACTIVEREGIONDETECTIONTYPE {
1672     OMX_U32 nSize;
1673     OMX_VERSIONTYPE nVersion;
1674     OMX_U32 nPortIndex;
1675     OMX_BOOL bEnable;
1676     QOMX_RECTTYPE sROI;
1677     OMX_U32 nNumExclusionRegions;
1678     QOMX_RECTTYPE sExclusionRegions[1];
1679 } QOMX_ACTIVEREGIONDETECTIONTYPE;
1680 
1681 typedef struct QOMX_ACTIVEREGIONDETECTION_STATUSTYPE {
1682     OMX_U32 nSize;
1683     OMX_VERSIONTYPE nVersion;
1684     OMX_U32 nPortIndex;
1685     OMX_BOOL bDetected;
1686     QOMX_RECTTYPE sDetectedRegion;
1687 } QOMX_ACTIVEREGIONDETECTION_STATUSTYPE;
1688 
1689 typedef enum QOMX_SCALE_MODETYPE {
1690     QOMX_SCALE_MODE_Normal,
1691     QOMX_SCALE_MODE_Anamorphic,
1692     QOMX_SCALE_MODE_Max = 0x7FFFFFFF
1693 } QOMX_SCALE_MODETYPE;
1694 
1695 typedef struct QOMX_SCALINGMODETYPE {
1696     OMX_U32 nSize;
1697     OMX_VERSIONTYPE nVersion;
1698     QOMX_SCALE_MODETYPE  eScaleMode;
1699 } QOMX_SCALINGMODETYPE;
1700 
1701 typedef struct QOMX_NOISEREDUCTIONTYPE {
1702     OMX_U32 nSize;
1703     OMX_VERSIONTYPE nVersion;
1704     OMX_U32 nPortIndex;
1705     OMX_BOOL bEnable;
1706     OMX_BOOL bAutoMode;
1707     OMX_S32 nNoiseReduction;
1708 } QOMX_NOISEREDUCTIONTYPE;
1709 
1710 typedef struct QOMX_IMAGEENHANCEMENTTYPE {
1711     OMX_U32 nSize;
1712     OMX_VERSIONTYPE nVersion;
1713     OMX_U32 nPortIndex;
1714     OMX_BOOL bEnable;
1715     OMX_BOOL bAutoMode;
1716     OMX_S32 nImageEnhancement;
1717 } QOMX_IMAGEENHANCEMENTTYPE;
1718 
1719 /*
1720  * these are part of OMX1.2 but JB MR2 branch doesn't have them defined
1721  * OMX_IndexParamInterlaceFormat
1722  * OMX_INTERLACEFORMATTYPE
1723  */
1724 #ifndef OMX_IndexParamInterlaceFormat
1725 #define OMX_IndexParamInterlaceFormat (0x7FF00000)
1726 typedef struct OMX_INTERLACEFORMATTYPE {
1727     OMX_U32 nSize;
1728     OMX_VERSIONTYPE nVersion;
1729     OMX_U32 nPortIndex;
1730     OMX_U32 nFormat;
1731     OMX_TICKS nTimeStamp;
1732 } OMX_INTERLACEFORMATTYPE;
1733 #endif
1734 
1735 /**
1736  * This structure is used to indicate the maximum number of buffers
1737  * that a port will hold during data flow.
1738  *
1739  * STRUCT MEMBERS:
1740  *  nSize              : Size of the structure in bytes
1741  *  nVersion           : OMX specification version info
1742  *  nPortIndex         : Port that this structure applies to
1743  *  nHeldBufferCount   : Read-only, maximum number of buffers that will be held
1744  */
1745 typedef struct QOMX_HELDBUFFERCOUNTTYPE {
1746     OMX_U32 nSize;
1747     OMX_VERSIONTYPE nVersion;
1748     OMX_U32 nPortIndex;
1749     OMX_U32 nHeldBufferCount;
1750 } QOMX_HELDBUFFERCOUNTTYPE;
1751 
1752 typedef enum QOMX_VIDEO_HIERARCHICALCODINGTYPE {
1753     QOMX_HIERARCHICALCODING_P = 0x01,
1754     QOMX_HIERARCHICALCODING_B = 0x02,
1755 } QOMX_VIDEO_HIERARCHICALCODINGTYPE;
1756 
1757 typedef struct QOMX_VIDEO_HIERARCHICALLAYERS {
1758     OMX_U32 nSize;
1759     OMX_VERSIONTYPE nVersion;
1760     OMX_U32 nPortIndex;
1761     OMX_U32 nNumLayers;
1762     QOMX_VIDEO_HIERARCHICALCODINGTYPE eHierarchicalCodingType;
1763 } QOMX_VIDEO_HIERARCHICALLAYERS;
1764 
1765 typedef struct QOMX_VIDEO_H264ENTROPYCODINGTYPE {
1766    OMX_U32 nSize;
1767    OMX_VERSIONTYPE nVersion;
1768    OMX_BOOL bCabac;
1769    OMX_U32 nCabacInitIdc;
1770 } QOMX_VIDEO_H264ENTROPYCODINGTYPE;
1771 
1772 
1773 /* VIDEO POSTPROCESSING CTRLS AND ENUMS */
1774 #define QOMX_VPP_HQV_CUSTOMPAYLOAD_SZ 256
1775 #define VPP_HQV_CONTROL_GLOBAL_START (VPP_HQV_CONTROL_CUST + 1)
1776 
1777 typedef enum QOMX_VPP_HQV_MODE {
1778     VPP_HQV_MODE_OFF,
1779     VPP_HQV_MODE_AUTO,
1780     VPP_HQV_MODE_MANUAL,
1781     VPP_HQV_MODE_MAX
1782 } QOMX_VPP_HQV_MODE;
1783 
1784 typedef enum QOMX_VPP_HQVCONTROLTYPE {
1785     VPP_HQV_CONTROL_CADE = 0x1,
1786     VPP_HQV_CONTROL_CNR = 0x04,
1787     VPP_HQV_CONTROL_AIE = 0x05,
1788     VPP_HQV_CONTROL_FRC = 0x06,
1789     VPP_HQV_CONTROL_CUST = 0x07,
1790     VPP_HQV_CONTROL_GLOBAL_DEMO = VPP_HQV_CONTROL_GLOBAL_START,
1791     VPP_HQV_CONTROL_MAX,
1792 } QOMX_VPP_HQVCONTROLTYPE;
1793 
1794 typedef enum QOMX_VPP_HQV_HUE_MODE {
1795     VPP_HQV_HUE_MODE_OFF,
1796     VPP_HQV_HUE_MODE_ON,
1797     VPP_HQV_HUE_MODE_MAX,
1798 } QOMX_VPP_HQV_HUE_MODE;
1799 
1800 typedef enum QOMX_VPP_HQV_FRC_MODE {
1801    VPP_HQV_FRC_MODE_OFF,
1802    VPP_HQV_FRC_MODE_LOW,
1803    VPP_HQV_FRC_MODE_MED,
1804    VPP_HQV_FRC_MODE_HIGH,
1805    VPP_HQV_FRC_MODE_MAX,
1806 } QOMX_VPP_HQV_FRC_MODE;
1807 
1808 
1809 typedef struct QOMX_VPP_HQVCTRL_CADE {
1810     OMX_U32 nSize;
1811     OMX_VERSIONTYPE nVersion;
1812     QOMX_VPP_HQV_MODE mode;
1813     OMX_U32 level;
1814     OMX_S32 contrast;
1815     OMX_S32 saturation;
1816 } QOMX_VPP_HQVCTRL_CADE;
1817 
1818 typedef struct QOMX_VPP_HQVCTRL_CNR {
1819     OMX_U32 nSize;
1820     OMX_VERSIONTYPE nVersion;
1821     QOMX_VPP_HQV_MODE mode;
1822     OMX_U32 level;
1823 } QOMX_VPP_HQVCTRL_CNR;
1824 
1825 typedef struct QOMX_VPP_HQVCTRL_AIE {
1826     OMX_U32 nSize;
1827     OMX_VERSIONTYPE nVersion;
1828     QOMX_VPP_HQV_MODE mode;
1829     QOMX_VPP_HQV_HUE_MODE hue_mode;
1830     OMX_U32 cade_level;
1831     OMX_U32 ltm_level;
1832 } QOMX_VPP_HQVCTRL_AIE;
1833 
1834 typedef struct QOMX_VPP_HQVCTRL_CUSTOM {
1835     OMX_U32 nSize;
1836     OMX_VERSIONTYPE nVersion;
1837     OMX_U32 id;
1838     OMX_U32 len;
1839     OMX_U8 data[QOMX_VPP_HQV_CUSTOMPAYLOAD_SZ];
1840 } QOMX_VPP_HQVCTRL_CUSTOM;
1841 
1842 typedef struct QOMX_VPP_HQVCTRL_GLOBAL_DEMO {
1843     OMX_U32 nSize;
1844     OMX_VERSIONTYPE nVersion;
1845     OMX_U32 process_percent;
1846 } QOMX_VPP_HQVCTRL_GLOBAL_DEMO;
1847 
1848 typedef struct QOMX_VPP_HQVCTRL_FRC {
1849     OMX_U32 nSize;
1850     OMX_VERSIONTYPE nVersion;
1851     QOMX_VPP_HQV_FRC_MODE mode;
1852 } QOMX_VPP_HQVCTRL_FRC;
1853 
1854 typedef struct QOMX_VPP_HQVCONTROL {
1855     OMX_U32 nSize;
1856     OMX_VERSIONTYPE nVersion;
1857     QOMX_VPP_HQV_MODE mode;
1858     QOMX_VPP_HQVCONTROLTYPE ctrl_type;
1859     union {
1860         QOMX_VPP_HQVCTRL_CADE cade;
1861         QOMX_VPP_HQVCTRL_CNR cnr;
1862         QOMX_VPP_HQVCTRL_AIE aie;
1863         QOMX_VPP_HQVCTRL_CUSTOM custom;
1864         QOMX_VPP_HQVCTRL_GLOBAL_DEMO global_demo;
1865         QOMX_VPP_HQVCTRL_FRC frc;
1866     };
1867 } QOMX_VPP_HQVCONTROL;
1868 
1869 /* STRUCTURE TO TURN VPP ON */
1870 typedef struct QOMX_VPP_ENABLE {
1871     OMX_U32 nSize;
1872     OMX_VERSIONTYPE nVersion;
1873     OMX_BOOL enable_vpp;
1874 } QOMX_VPP_ENABLE;
1875 
1876 typedef enum OMX_QOMX_VIDEO_MBISTATISTICSTYPE {
1877     QOMX_MBI_STATISTICS_MODE_DEFAULT = 0,
1878     QOMX_MBI_STATISTICS_MODE_1 = 0x01,
1879     QOMX_MBI_STATISTICS_MODE_2 = 0x02,
1880 } OMX_QOMX_VIDEO_MBISTATISTICSTYPE;
1881 
1882 typedef struct OMX_QOMX_VIDEO_MBI_STATISTICS {
1883     OMX_U32 nSize;
1884     OMX_VERSIONTYPE nVersion;
1885     OMX_U32 nPortIndex;
1886     OMX_QOMX_VIDEO_MBISTATISTICSTYPE eMBIStatisticsType;
1887 } OMX_QOMX_VIDEO_MBI_STATISTICS;
1888 
1889 typedef struct QOMX_VIDEO_BATCHSIZETYPE {
1890     OMX_U32 nSize;
1891     OMX_VERSIONTYPE nVersion;
1892     OMX_U32 nPortIndex;
1893     OMX_U32 nBatchSize;
1894 } QOMX_VIDEO_BATCHSIZETYPE;
1895 
1896 #ifdef __cplusplus
1897 }
1898 #endif /* __cplusplus */
1899 
1900 #endif /* __OMX_QCOM_EXTENSIONS_H__ */
1901