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