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