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