/*--------------------------------------------------------------------------
Copyright (c) 2009-2017, The Linux Foundation. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
    * Redistributions of source code must retain the above copyright
      notice, this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
      notice, this list of conditions and the following disclaimer in the
      documentation and/or other materials provided with the distribution.
    * Neither the name of The Linux Foundation nor
      the names of its contributors may be used to endorse or promote
      products derived from this software without specific prior written
      permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NON-INFRINGEMENT ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------*/
#ifndef __OMX_QCOM_EXTENSIONS_H__
#define __OMX_QCOM_EXTENSIONS_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/*============================================================================
*//** @file OMX_QCOMExtns.h
  This header contains constants and type definitions that specify the
  extensions added to the OpenMAX Vendor specific APIs.

*//*========================================================================*/


///////////////////////////////////////////////////////////////////////////////
//                             Include Files
///////////////////////////////////////////////////////////////////////////////
#include "OMX_Core.h"
#include "OMX_Video.h"
#include "string.h"

#define OMX_VIDEO_MAX_HP_LAYERS 6

/**
 * These MACROS used by Camera and Video to decide buffer count.
 * This is to avoid mismatch of buffer count between Camera and Video.
 * In Meta mode, read this count as buffer count in Camera and Header
 * count in Video.
 * 1) Number of buffers in Non-DCVS mode.
 * 2) DCVS resolution.
 * 3) Buffer count when Current resolution is greater than DCVS resolution
 * defined in 2)
 */

#define OMX_VIDEO_MIN_CAMERA_BUFFERS 9
#define OMX_VIDEO_ENC_DCVS_RESOLUTION 3840 * 2160
#define OMX_VIDEO_MIN_CAMERA_BUFFERS_DCVS 11

/**
 * This count indicates the number of Ints in the legacy Camera payload
 * used for HAL1
 */

#define VIDEO_METADATA_NUM_COMMON_INTS 1

/**
 * This extension is used to register mapping of a virtual
 * address to a physical address. This extension is a parameter
 * which can be set using the OMX_SetParameter macro. The data
 * pointer corresponding to this extension is
 * OMX_QCOM_MemMapEntry. This parameter is a 'write only'
 * parameter (Current value cannot be queried using
 * OMX_GetParameter macro).
 */
#define OMX_QCOM_EXTN_REGISTER_MMAP     "OMX.QCOM.index.param.register_mmap"

/**
 * This structure describes the data pointer corresponding to
 * the OMX_QCOM_MMAP_REGISTER_EXTN extension. This parameter
 * must be set only 'after' populating a port with a buffer
 * using OMX_UseBuffer, wherein the data pointer of the buffer
 * corresponds to the virtual address as specified in this
 * structure.
 */
struct OMX_QCOM_PARAM_MEMMAPENTRYTYPE
{
    OMX_U32 nSize;              /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
    OMX_U32 nPortIndex;         /**< Port number the structure applies to */

    /**
     * The virtual address of memory block
     */
    OMX_U64 nVirtualAddress;

    /**
     * The physical address corresponding to the virtual address. The physical
     * address is contiguous for the entire valid range of the virtual
     * address.
     */
    OMX_U64 nPhysicalAddress;
};

#define QOMX_VIDEO_IntraRefreshRandom (OMX_VIDEO_IntraRefreshVendorStartUnused + 0)

/* This error event is used for H.264 long-term reference (LTR) encoding.
 * When IL client specifies an LTR frame with its identifier via
 * OMX_QCOM_INDEX_CONFIG_VIDEO_LTRUSE to the encoder, if the specified
 * LTR frame can not be located by the encoder in its LTR list, the encoder
 * issues this error event to IL client to notify the failure of LTRUse config.
 */
#define QOMX_ErrorLTRUseFailed        (OMX_ErrorVendorStartUnused + 1)

/*
 * This rate control will be used for low bitrate applications to get better
 * video quality for a given bitrate.
 */
#define QOMX_Video_ControlRateMaxBitrate (OMX_Video_ControlRateVendorStartUnused + 1)

#define QOMX_Video_ControlRateMaxBitrateSkipFrames (OMX_Video_ControlRateVendorStartUnused + 2)

#define QOMX_VIDEO_BUFFERFLAG_BFRAME 0x00100000

#define QOMX_VIDEO_BUFFERFLAG_EOSEQ  0x00200000

#define QOMX_VIDEO_BUFFERFLAG_MBAFF  0x00400000

#define QOMX_VIDEO_BUFFERFLAG_CANCEL 0x00800000

#define OMX_QCOM_PORTDEFN_EXTN   "OMX.QCOM.index.param.portdefn"
/* Allowed APIs on the above Index: OMX_GetParameter() and OMX_SetParameter() */

typedef enum OMX_QCOMMemoryRegion
{
    OMX_QCOM_MemRegionInvalid,
    OMX_QCOM_MemRegionEBI1,
    OMX_QCOM_MemRegionSMI,
    OMX_QCOM_MemRegionMax = 0X7FFFFFFF
} OMX_QCOMMemoryRegion;

typedef enum OMX_QCOMCacheAttr
{
    OMX_QCOM_CacheAttrNone,
    OMX_QCOM_CacheAttrWriteBack,
    OMX_QCOM_CacheAttrWriteThrough,
    OMX_QCOM_CacheAttrMAX = 0X7FFFFFFF
} OMX_QCOMCacheAttr;

typedef struct OMX_QCOMRectangle
{
   OMX_S32 x;
   OMX_S32 y;
   OMX_S32 dx;
   OMX_S32 dy;
} OMX_QCOMRectangle;

/** OMX_QCOMFramePackingFormat
  * Input or output buffer format
  */
typedef enum OMX_QCOMFramePackingFormat
{
  /* 0 - unspecified
   */
  OMX_QCOM_FramePacking_Unspecified,

  /*  1 - Partial frames may be present OMX IL 1.1.1 Figure 2-10:
   *  Case 1??Each Buffer Filled In Whole or In Part
   */
  OMX_QCOM_FramePacking_Arbitrary,

  /*  2 - Multiple complete frames per buffer (integer number)
   *  OMX IL 1.1.1 Figure 2-11: Case 2-Each Buffer Filled with
   *  Only Complete Frames of Data
   */
  OMX_QCOM_FramePacking_CompleteFrames,

  /*  3 - Only one complete frame per buffer, no partial frame
   *  OMX IL 1.1.1 Figure 2-12: Case 3-Each Buffer Filled with
   *  Only One Frame of Compressed Data. Usually at least one
   *  complete unit of data will be delivered in a buffer for
   *  uncompressed data formats.
   */
  OMX_QCOM_FramePacking_OnlyOneCompleteFrame,

  /*  4 - Only one complete subframe per buffer, no partial subframe
   *  Example: In H264, one complete NAL per buffer, where one frame
   *  can contatin multiple NAL
   */
  OMX_QCOM_FramePacking_OnlyOneCompleteSubFrame,

  OMX_QCOM_FramePacking_MAX = 0X7FFFFFFF
} OMX_QCOMFramePackingFormat;

typedef struct OMX_QCOM_PARAM_PORTDEFINITIONTYPE {
 OMX_U32 nSize;           /** Size of the structure in bytes */
 OMX_VERSIONTYPE nVersion;/** OMX specification version information */
 OMX_U32 nPortIndex;    /** Portindex which is extended by this structure */

 /** Platform specific memory region EBI1, SMI, etc.,*/
 OMX_QCOMMemoryRegion nMemRegion;

 OMX_QCOMCacheAttr nCacheAttr; /** Cache attributes */

 /** Input or output buffer format */
 OMX_U32 nFramePackingFormat;

} OMX_QCOM_PARAM_PORTDEFINITIONTYPE;

typedef struct OMX_QCOM_VIDEO_CONFIG_QP {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nQP;
} OMX_QCOM_VIDEO_CONFIG_QP;

typedef struct OMX_QCOM_VIDEO_PARAM_IPB_QPRANGETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 minIQP;
    OMX_U32 maxIQP;
    OMX_U32 minPQP;
    OMX_U32 maxPQP;
    OMX_U32 minBQP;
    OMX_U32 maxBQP;
} OMX_QCOM_VIDEO_PARAM_IPB_QPRANGETYPE;

#define OMX_QCOM_PLATFORMPVT_EXTN   "OMX.QCOM.index.param.platformprivate"
/** Allowed APIs on the above Index: OMX_SetParameter() */

typedef enum OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE
{
    /** Enum for PMEM information */
    OMX_QCOM_PLATFORM_PRIVATE_PMEM = 0x1
} OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE;

/** IL client will set the following structure. A failure
 *  code will be returned if component does not support the
 *  value provided for 'type'.
 */
struct OMX_QCOM_PLATFORMPRIVATE_EXTN
{
    OMX_U32 nSize;        /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion; /** OMX spec version information */
    OMX_U32 nPortIndex;  /** Port number on which usebuffer extn is applied */

    /** Type of extensions should match an entry from
     OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE
    */
    OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE type;
};

typedef struct OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO
{
    /** pmem file descriptor */
    unsigned long pmem_fd;
    /** Offset from pmem device base address */
    OMX_U32 offset;
    OMX_U32 size;
    OMX_U32 mapped_size;
    OMX_PTR buffer;
}OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO;

typedef struct OMX_QCOM_PLATFORM_PRIVATE_ENTRY
{
    /** Entry type */
    OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE type;

    /** Pointer to platform specific entry */
    OMX_PTR entry;
}OMX_QCOM_PLATFORM_PRIVATE_ENTRY;

typedef struct OMX_QCOM_PLATFORM_PRIVATE_LIST
{
    /** Number of entries */
    OMX_U32 nEntries;

    /** Pointer to array of platform specific entries *
     * Contiguous block of OMX_QCOM_PLATFORM_PRIVATE_ENTRY element
    */
    OMX_QCOM_PLATFORM_PRIVATE_ENTRY* entryList;
}OMX_QCOM_PLATFORM_PRIVATE_LIST;

#define OMX_QCOM_FRAME_PACKING_FORMAT   "OMX.QCOM.index.param.framepackfmt"
/* Allowed API call: OMX_GetParameter() */
/* IL client can use this index to rerieve the list of frame formats *
 * supported by the component */

typedef struct OMX_QCOM_FRAME_PACKINGFORMAT_TYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nIndex;
    OMX_QCOMFramePackingFormat eframePackingFormat;
} OMX_QCOM_FRAME_PACKINGFORMAT_TYPE;


/**
 * Following is the enum for color formats supported on Qualcomm
 * MSMs YVU420SemiPlanar color format is not defined in OpenMAX
 * 1.1.1 and prior versions of OpenMAX specification.
 */

enum OMX_QCOM_COLOR_FORMATTYPE
{

/** YVU420SemiPlanar: YVU planar format, organized with a first
 *  plane containing Y pixels, and a second plane containing
 *  interleaved V and U pixels. V and U pixels are sub-sampled
 *  by a factor of two both horizontally and vertically.
 */
    QOMX_COLOR_FormatYVU420SemiPlanar = 0x7FA30C00,
    QOMX_COLOR_FormatYVU420PackedSemiPlanar32m4ka,
    QOMX_COLOR_FormatYUV420PackedSemiPlanar16m2ka,
    QOMX_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka,
    QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m,
    QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView,
    QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed,
    QOMX_COLOR_Format32bitRGBA8888,
    QOMX_COLOR_Format32bitRGBA8888Compressed,
    QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m10bitCompressed,
    QOMX_COLOR_FORMATYUV420SemiPlanarP010Venus,
    QOMX_COLOR_FormatAndroidOpaque = (OMX_COLOR_FORMATTYPE) OMX_COLOR_FormatVendorStartUnused  + 0x789,
};

enum OMX_QCOM_VIDEO_CODINGTYPE
{
/** Codecs support by qualcomm which are not listed in OMX 1.1.x
 *  spec
 *   */
    OMX_QCOM_VIDEO_CodingVC1  = 0x7FA30C00 ,
    OMX_QCOM_VIDEO_CodingWMV9 = 0x7FA30C01,
    QOMX_VIDEO_CodingDivx = 0x7FA30C02,     /**< Value when coding is Divx */
    QOMX_VIDEO_CodingSpark = 0x7FA30C03,     /**< Value when coding is Sorenson Spark */
    QOMX_VIDEO_CodingVp = 0x7FA30C04,
    QOMX_VIDEO_CodingVp8 = OMX_VIDEO_CodingVP8,   /**< keeping old enum for backwards compatibility*/
    QOMX_VIDEO_CodingHevc = OMX_VIDEO_CodingHEVC, /**< keeping old enum for backwards compatibility*/
    QOMX_VIDEO_CodingMVC = 0x7FA30C07,
    QOMX_VIDEO_CodingVp9 = OMX_VIDEO_CodingVP9,   /**< keeping old enum for backwards compatibility*/
    QOMX_VIDEO_CodingTME = 0x7FA30C09,
};

enum OMX_QCOM_EXTN_INDEXTYPE
{
    /** Qcom proprietary extension index list */

    /* "OMX.QCOM.index.param.register_mmap" */
    OMX_QcomIndexRegmmap = 0x7F000000,

    /* "OMX.QCOM.index.param.platformprivate" */
    OMX_QcomIndexPlatformPvt = 0x7F000001,

    /* "OMX.QCOM.index.param.portdefn" */
    OMX_QcomIndexPortDefn = 0x7F000002,

    /* "OMX.QCOM.index.param.framepackingformat" */
    OMX_QcomIndexPortFramePackFmt = 0x7F000003,

    /*"OMX.QCOM.index.param.Interlaced */
    OMX_QcomIndexParamInterlaced = 0x7F000004,

    /*"OMX.QCOM.index.config.interlaceformat */
    OMX_QcomIndexConfigInterlaced = 0x7F000005,

    /*"OMX.QCOM.index.param.syntaxhdr" */
    QOMX_IndexParamVideoSyntaxHdr = 0x7F000006,

    /*"OMX.QCOM.index.config.intraperiod" */
    QOMX_IndexConfigVideoIntraperiod = 0x7F000007,

    /*"OMX.QCOM.index.config.randomIntrarefresh" */
    QOMX_IndexConfigVideoIntraRefresh = 0x7F000008,

    /*"OMX.QCOM.index.config.video.TemporalSpatialTradeOff" */
    QOMX_IndexConfigVideoTemporalSpatialTradeOff = 0x7F000009,

    /*"OMX.QCOM.index.param.video.EncoderMode" */
    QOMX_IndexParamVideoEncoderMode = 0x7F00000A,

    /*"OMX.QCOM.index.param.Divxtype */
    OMX_QcomIndexParamVideoDivx = 0x7F00000B,

    /*"OMX.QCOM.index.param.Sparktype */
    OMX_QcomIndexParamVideoSpark = 0x7F00000C,

    /*"OMX.QCOM.index.param.Vptype */
    OMX_QcomIndexParamVideoVp = 0x7F00000D,

    OMX_QcomIndexQueryNumberOfVideoDecInstance = 0x7F00000E,

    OMX_QcomIndexParamVideoSyncFrameDecodingMode = 0x7F00000F,

    OMX_QcomIndexParamVideoDecoderPictureOrder = 0x7F000010,

    /* "OMX.QCOM.index.config.video.FramePackingInfo" */
    OMX_QcomIndexConfigVideoFramePackingArrangement = 0x7F000011,

    OMX_QcomIndexParamConcealMBMapExtraData = 0x7F000012,

    OMX_QcomIndexParamFrameInfoExtraData = 0x7F000013,

    OMX_QcomIndexParamInterlaceExtraData = 0x7F000014,

    OMX_QcomIndexParamH264TimeInfo = 0x7F000015,

    OMX_QcomIndexParamIndexExtraDataType = 0x7F000016,

    OMX_GoogleAndroidIndexEnableAndroidNativeBuffers = 0x7F000017,

    OMX_GoogleAndroidIndexUseAndroidNativeBuffer = 0x7F000018,

    OMX_GoogleAndroidIndexGetAndroidNativeBufferUsage = 0x7F000019,

    /*"OMX.QCOM.index.param.EnableTimeStampReoder"*/
    OMX_QcomIndexParamEnableTimeStampReorder = 0x7F00001B,

    /*"OMX.google.android.index.storeMetaDataInBuffers"*/
    OMX_QcomIndexParamVideoMetaBufferMode = 0x7F00001C,

    /*"OMX.google.android.index.useAndroidNativeBuffer2"*/
    OMX_GoogleAndroidIndexUseAndroidNativeBuffer2 = 0x7F00001D,

    /*"OMX.QCOM.index.param.VideoMaxAllowedBitrateCheck"*/
    OMX_QcomIndexParamVideoMaxAllowedBitrateCheck = 0x7F00001E,

    OMX_QcomIndexEnableSliceDeliveryMode = 0x7F00001F,

    /* "OMX.QCOM.index.param.video.ExtnUserExtraData" */
    OMX_QcomIndexEnableExtnUserData = 0x7F000020,

    /*"OMX.QCOM.index.param.video.EnableSmoothStreaming"*/
    OMX_QcomIndexParamEnableSmoothStreaming = 0x7F000021,

    OMX_QcomIndexEnableH263PlusPType = 0x7F000023,

    /*"OMX.QCOM.index.param.video.LTRCount"*/
    QOMX_IndexParamVideoLTRCount = 0x7F000026,

    /*"OMX.QCOM.index.config.video.LTRUse"*/
    QOMX_IndexConfigVideoLTRUse = 0x7F000028,

    /*"OMX.QCOM.index.config.video.LTRMark"*/
    QOMX_IndexConfigVideoLTRMark = 0x7F000029,

    /* OMX.google.android.index.prependSPSPPSToIDRFrames */
    OMX_QcomIndexParamSequenceHeaderWithIDR = 0x7F00002A,

    OMX_QcomIndexParamAUDelimiter = 0x7F00002B,

    OMX_QcomIndexParamVideoDownScalar = 0x7F00002C,

    /* "OMX.QCOM.index.param.video.FramePackingExtradata" */
    OMX_QcomIndexParamVideoFramePackingExtradata = 0x7F00002D,

    /* "OMX.QCOM.index.config.activeregiondetection" */
    OMX_QcomIndexConfigActiveRegionDetection = 0x7F00002E,

    /* "OMX.QCOM.index.config.activeregiondetectionstatus" */
    OMX_QcomIndexConfigActiveRegionDetectionStatus = 0x7F00002F,

    /* "OMX.QCOM.index.config.scalingmode" */
    OMX_QcomIndexConfigScalingMode = 0x7F000030,

    /* "OMX.QCOM.index.config.noisereduction" */
    OMX_QcomIndexConfigNoiseReduction = 0x7F000031,

    /* "OMX.QCOM.index.config.imageenhancement" */
    OMX_QcomIndexConfigImageEnhancement = 0x7F000032,

    /* google smooth-streaming support */
    OMX_QcomIndexParamVideoAdaptivePlaybackMode = 0x7F000033,

    /* H.264 MVC codec index */
    QOMX_IndexParamVideoMvc = 0x7F000034,

    /* "OMX.QCOM.index.param.video.QPExtradata" */
    OMX_QcomIndexParamVideoQPExtraData = 0x7F000035,

    /* "OMX.QCOM.index.param.video.InputBitsInfoExtradata" */
    OMX_QcomIndexParamVideoInputBitsInfoExtraData = 0x7F000036,

    /* VP8 Hierarchical P support */
    OMX_QcomIndexHierarchicalStructure = 0x7F000037,

    OMX_QcomIndexParamH264VUITimingInfo = 0x7F000039,

    OMX_QcomIndexParamPeakBitrate = 0x7F00003A,

    /* Enable InitialQP : QOMX_EXTNINDEX_VIDEO_INITIALQP */
    QOMX_IndexParamVideoInitialQp = 0x7F00003B,

    OMX_QcomIndexParamSetMVSearchrange = 0x7F00003C,

    /* Note: This will get deprecated */
    OMX_QcomIndexConfigPerfLevel = 0x7F00003D,

    /*"OMX.QCOM.index.param.video.LTRCount"*/
    OMX_QcomIndexParamVideoLTRCount = QOMX_IndexParamVideoLTRCount,

    /*"OMX.QCOM.index.config.video.LTRUse"*/
    OMX_QcomIndexConfigVideoLTRUse = QOMX_IndexConfigVideoLTRUse,

    /*"OMX.QCOM.index.config.video.LTRMark"*/
    OMX_QcomIndexConfigVideoLTRMark = QOMX_IndexConfigVideoLTRMark,

    /*"OMX.QCOM.index.param.video.CustomBufferSize"*/
    OMX_QcomIndexParamVideoCustomBufferSize = 0x7F00003E,

    /* Max Hierarchical P layers */
    OMX_QcomIndexMaxHierarchicallayers = 0x7F000041,

    /* Set Hybrid Hier-p layers */
    OMX_QcomIndexParamVideoHybridHierpMode = 0x7F000043,

    OMX_QcomIndexFlexibleYUVDescription = 0x7F000044,

    /* Vpp Hqv Control Type */
    OMX_QcomIndexParamVppHqvControl = 0x7F000045,

    /* Enable VPP */
    OMX_QcomIndexParamEnableVpp = 0x7F000046,

    /* MBI statistics mode */
    OMX_QcomIndexParamMBIStatisticsMode = 0x7F000047,

    /* Set PictureTypeDecode */
    OMX_QcomIndexConfigPictureTypeDecode = 0x7F000048,

    OMX_QcomIndexConfigH264EntropyCodingCabac = 0x7F000049,

    /* "OMX.QCOM.index.param.video.InputBatch" */
    OMX_QcomIndexParamBatchSize = 0x7F00004A,

    OMX_QcomIndexConfigNumHierPLayers = 0x7F00004B,

    OMX_QcomIndexConfigRectType = 0x7F00004C,

    OMX_QcomIndexConfigBaseLayerId = 0x7F00004E,

    OMX_QcomIndexParamDriverVersion = 0x7F00004F,

    /* Reference : OMX_QCOM_VIDEO_CONFIG_QP */
    OMX_QcomIndexConfigQp = 0x7F000050,

    OMX_QcomIndexParamVencAspectRatio = 0x7F000051,

    OMX_QTIIndexParamVQZipSEIExtraData = 0x7F000052,

    /* Enable VQZIP SEI NAL type */
    OMX_QTIIndexParamVQZIPSEIType = 0x7F000053,

    OMX_QTIIndexParamPassInputBufferFd = 0x7F000054,

    /* Set Prefer-adaptive playback*/
    /* "OMX.QTI.index.param.video.PreferAdaptivePlayback" */
    OMX_QTIIndexParamVideoPreferAdaptivePlayback = 0x7F000055,

    /* Set time params */
    OMX_QTIIndexConfigSetTimeData = 0x7F000056,
    /* Force Compressed format for DPB when resolution <=1080p
     * and OPB is cpu_access */
    /* OMX.QTI.index.param.video.ForceCompressedForDPB */
    OMX_QTIIndexParamForceCompressedForDPB = 0x7F000057,

    /* Enable ROI info */
    OMX_QTIIndexParamVideoEnableRoiInfo = 0x7F000058,

    /* Configure ROI info */
    OMX_QTIIndexConfigVideoRoiInfo = 0x7F000059,

    /* Set Low Latency Mode */
    OMX_QTIIndexParamLowLatencyMode = 0x7F00005B,

    /* Force OPB to UnCompressed mode */
    OMX_QTIIndexParamForceUnCompressedForOPB = 0x7F00005C,

    /* OMX.google.android.index.allocateNativeHandle */
    OMX_GoogleAndroidIndexAllocateNativeHandle = 0x7F00005D,

    /* Configure BLUR resolution for encode */
    OMX_QTIIndexConfigVideoBlurResolution = 0x7F00005E,

    /* QP range for I/P/B frames : OMX_QCOM_VIDEO_PARAM_IPB_QPRANGETYPE */
    OMX_QcomIndexParamVideoIPBQPRange = 0x7F00005F,

    /* Enable client extradata */
    OMX_QTIIndexParamVideoClientExtradata = 0x7F000060,

    /* H264 transform 8x8 mode */
    OMX_QcomIndexConfigH264Transform8x8 = 0x7F000061,

    /*"OMX.google.android.index.describeColorAspects"*/
    OMX_QTIIndexConfigDescribeColorAspects = 0x7F000062,

    OMX_QTIIndexParamVUIExtraDataExtraData = 0x7F000063,

    OMX_QTIIndexParamMPEG2SeqDispExtraData = 0x7F000064,

    OMX_QTIIndexParamVC1SeqDispExtraData = 0x7F000065,

    OMX_QTIIndexParamVPXColorSpaceExtraData = 0x7F000066,

    /*"OMX.google.android.index.describeHDRStaticInfo"*/
    OMX_QTIIndexConfigDescribeHDRColorInfo = 0x7F000067,

    /* Configure to disable PQ*/
    OMX_QTIIndexParamDisablePQ = 0x7F000068,

    /* Dither control for 10bit */
    OMX_QTIIndexParamDitherControl = 0x7F000069,

    /* Suggest how big Iframe sizes should be */
    OMX_QTIIndexParamIframeSizeType = 0x7F000070,

    /* use av-timer ticks as timestamp (used by VT-client) */
    OMX_QTIIndexParamEnableAVTimerTimestamps = 0x7F000071,

    /* Output Crop extradata (includes MISR) */
    OMX_QcomIndexParamOutputCropExtraData = 0x7F000072,

    /* Controlled Input queue mode for frame accurate configuration */
    OMX_QcomIndexParamVencControlInputQueue = 0x7F000073,

    /**
    *  Configure Slice Header Spacing
    *  This index will be used to configure both byte based
    *  and MB based slice header spacing. This is the preferred
    *  alternative to OMX_IndexParamVideoAvc (for MB based)
    *  and OMX_IndexParamVideoErrorCorrection (for byte based)
    */
    OMX_QcomIndexParamVideoSliceSpacing = 0x7F000074,

    /* OMX.QTI.index.config.video.getdsmode */
    OMX_QTIIndexConfigGetDSMode = 0x7F000075,

    /*
     * Client configured profile and level for sufficiency
     * This index will be set by the OMX client which will
     * specify profile and level of the clip upto which
     * buffer sufficiency should be considered. if the profile
     * or level of the clip exceeds the client specified
     * profile and level via this index, sufficient buffer
     * events will be converted to insufficient.
     * Structure to be used for this extension is:
     * typedef struct OMX_VIDEO_PARAM_PROFILELEVELTYPE {
     * OMX_U32 nSize;
     * OMX_VERSIONTYPE nVersion;
     * OMX_U32 nPortIndex;
     * OMX_U32 eProfile;
     * OMX_U32 eLevel;
     * OMX_U32 nProfileIndex; // index not needed
     * } OMX_VIDEO_PARAM_PROFILELEVELTYPE;
     */
    OMX_QTIIndexParamClientConfiguredProfileLevelForSufficiency = 0x7F000076,

    /* TME configuration */
    OMX_IndexParamVideoTme = 0x7F000077,

    /* Set Color Space Conversion */
    OMX_QTIIndexParamColorSpaceConversion = 0x7F000078,

    /* Capabilities */
    OMX_QTIIndexParamCapabilitiesVTDriverVersion = 0x7F100000,

    OMX_QTIIndexParamCapabilitiesMaxTemporalLayers = 0x7F100001,

    OMX_QTIIndexParamCapabilitiesMaxLTR = 0x7F100002,

    OMX_QTIIndexParamCapabilitiesMaxDownScaleRatio = 0x7F100003,

    OMX_QTIIndexParamCapabilitiesRotationSupport = 0x7F100004,
};

/**
* This is custom extension to configure Low Latency Mode.
*
* STRUCT MEMBERS
*
* nSize         : Size of Structure in bytes
* nVersion      : OpenMAX IL specification version information
* bEnableLowLatencyMode   : Enable/Disable Low Latency mode
* nNumFrames    : Latency in terms of num of frames
*                 0: Minimum possible latency,
*                 n: n-frame latency
*                 Valid when bEnableLowLatencyMode is TRUE
*/

typedef struct QOMX_EXTNINDEX_VIDEO_LOW_LATENCY_MODE
{
   OMX_U32 nSize;
   OMX_VERSIONTYPE nVersion;
   OMX_BOOL bEnableLowLatencyMode;
   OMX_U32  nNumFrames;
} QOMX_EXTNINDEX_VIDEO_LOW_LATENCY_MODE;

/**
* This is custom extension to configure Encoder Aspect Ratio.
*
* STRUCT MEMBERS
*
* nSize         : Size of Structure in bytes
* nVersion      : OpenMAX IL specification version information
* nSARWidth     : Horizontal aspect size
* nSARHeight    : Vertical aspect size
*/

typedef struct QOMX_EXTNINDEX_VIDEO_VENC_SAR
{
   OMX_U32 nSize;
   OMX_VERSIONTYPE nVersion;
   OMX_U32 nSARWidth;
   OMX_U32 nSARHeight;
} QOMX_EXTNINDEX_VIDEO_VENC_SAR;

/**
* This is custom extension to configure Hier-p layers.
* This mode configures Hier-p layers dynamically.
*
* STRUCT MEMBERS
*
* nSize         : Size of Structure in bytes
* nVersion      : OpenMAX IL specification version information
* nNumHierLayers: Set the number of Hier-p layers for the session
*                  - This should be less than the MAX Hier-P
*                    layers set for the session.
*/

typedef struct QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS {
   OMX_U32 nSize;
   OMX_VERSIONTYPE nVersion;
   OMX_U32 nNumHierLayers;
} QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS;


/**
* This is custom extension to configure Hybrid Hier-p settings.
* This mode is different from enabling Hier-p mode. This
* property enables Hier-p encoding with LTR referencing in each
* sub-GOP.
*
* STRUCT MEMBERS
*
* nSize         : Size of Structure in bytes
* nVersion      : OpenMAX IL specification version information
* nKeyFrameInterval : Indicates the I frame interval
* nHpLayers     : Set the number of Hier-p layers for the session
*                  - This should be <= 6. (1 Base layer +
*                    5 Enhancement layers)
* nTemporalLayerBitrateRatio[OMX_VIDEO_MAX_HP_LAYERS] : Bitrate to
*                    be set for each enhancement layer
* nMinQuantizer  : minimum session QP
* nMaxQuantizer  : Maximun session QP
*/

typedef struct QOMX_EXTNINDEX_VIDEO_HYBRID_HP_MODE {
   OMX_U32 nSize;
   OMX_VERSIONTYPE nVersion;
   OMX_U32 nKeyFrameInterval;
   OMX_U32 nTemporalLayerBitrateRatio[OMX_VIDEO_MAX_HP_LAYERS];
   OMX_U32 nMinQuantizer;
   OMX_U32 nMaxQuantizer;
   OMX_U32 nHpLayers;
} QOMX_EXTNINDEX_VIDEO_HYBRID_HP_MODE;

/**
 * Initial QP parameter.  This structure is used to enable
 * vendor specific extension to let client enable setting
 * initial QP values to I P B Frames
 *
 * STRUCT MEMBERS:
 *  nSize              : Size of Structure in bytes
 *  nVersion           : OpenMAX IL specification version information
 *  nPortIndex         : Index of the port to which this structure applies
 *  OMX_U32 nQpI       : First Iframe QP
 *  OMX_U32 nQpP       : First Pframe QP
 *  OMX_U32 nQpB       : First Bframe QP
 *  OMX_U32 bEnableInitQp : Bit field indicating which frame type(s) shall
 *                             use the specified initial QP.
 *                          Bit 0: Enable initial QP for I/IDR
 *                                 and use value specified in nInitQpI
 *                          Bit 1: Enable initial QP for
 *                                 and use value specified in nInitQpP
 *                          Bit 2: Enable initial QP for B
 *                                 and use value specified in nInitQpB
 */
typedef struct QOMX_EXTNINDEX_VIDEO_INITIALQP {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nQpI;
    OMX_U32 nQpP;
    OMX_U32 nQpB;
    OMX_U32 bEnableInitQp;
} QOMX_EXTNINDEX_VIDEO_INITIALQP;

/**
 * Extension index parameter.  This structure is used to enable
 * vendor specific extension on input/output port and
 * to pass the required flags and data, if any.
 * The format of flags and data being passed is known to
 * the client and component apriori.
 *
 * STRUCT MEMBERS:
 *  nSize              : Size of Structure plus pData size
 *  nVersion           : OMX specification version information
 *  nPortIndex         : Indicates which port to set
 *  bEnable            : Extension index enable (1) or disable (0)
 *  nFlags             : Extension index flags, if any
 *  nDataSize          : Size of the extension index data to follow
 *  pData              : Extension index data, if present.
 */
typedef struct QOMX_EXTNINDEX_PARAMTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnable;
    OMX_U32 nFlags;
    OMX_U32 nDataSize;
    OMX_PTR pData;
} QOMX_EXTNINDEX_PARAMTYPE;

/**
 * Range index parameter.  This structure is used to enable
 * vendor specific extension on input/output port and
 * to pass the required minimum and maximum values
 *
 * STRUCT MEMBERS:
 *  nSize              : Size of Structure in bytes
 *  nVersion           : OpenMAX IL specification version information
 *  nPortIndex         : Index of the port to which this structure applies
 *  nMin               : Minimum value
 *  nMax               : Maximum value
 *  nSteSize           : Step size
 */
typedef struct QOMX_EXTNINDEX_RANGETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_S32 nMin;
    OMX_S32 nMax;
    OMX_S32 nStepSize;
} QOMX_EXTNINDEX_RANGETYPE;

/**
 * LTR count index parameter.  This structure is used
 * to enable vendor specific extension on output port
 * to pass the LTR count information.
 *
 * STRUCT MEMBERS:
 *  nSize              : Size of Structure in bytes
 *  nVersion           : OpenMAX IL specification version information
 *  nPortIndex         : Index of the port to which this structure applies
 *  nCount             : Specifies the number of LTR frames stored in the
 *                       encoder component
 */
typedef struct QOMX_VIDEO_PARAM_LTRCOUNT_TYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nCount;
} QOMX_VIDEO_PARAM_LTRCOUNT_TYPE;


/**
 * This should be used with OMX_QcomIndexParamVideoLTRCount extension.
 */
typedef QOMX_VIDEO_PARAM_LTRCOUNT_TYPE OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE;

/**
 * Marks the next encoded frame as an LTR frame.
 * STRUCT MEMBERS:
 *  nSize              : Size of Structure in bytes
 *  nVersion           : OpenMAX IL specification version information
 *  nPortIndex         : Index of the port to which this structure applies
 *  nID                : Specifies the identifier of the LTR frame to be marked
 *                       as reference frame for encoding subsequent frames.
 */
typedef struct QOMX_VIDEO_CONFIG_LTRMARK_TYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nID;
} QOMX_VIDEO_CONFIG_LTRMARK_TYPE;

/**
 * This should be used with OMX_QcomIndexConfigVideoLTRMark extension.
 */
typedef QOMX_VIDEO_CONFIG_LTRMARK_TYPE OMX_QCOM_VIDEO_CONFIG_LTRMARK_TYPE;

/**
 * Specifies an LTR frame to encode subsequent frames.
 * STRUCT MEMBERS:
 *  nSize              : Size of Structure in bytes
 *  nVersion           : OpenMAX IL specification version information
 *  nPortIndex         : Index of the port to which this structure applies
 *  nID                : Specifies the identifier of the LTR frame to be used
                         as reference frame for encoding subsequent frames.
 *  nFrames            : Specifies the number of subsequent frames to be
                         encoded using the LTR frame with its identifier
                         nID as reference frame. Short-term reference frames
                         will be used thereafter. The value of 0xFFFFFFFF
                         indicates that all subsequent frames will be
                         encodedusing this LTR frame as reference frame.
 */
typedef struct QOMX_VIDEO_CONFIG_LTRUSE_TYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nID;
    OMX_U32 nFrames;
} QOMX_VIDEO_CONFIG_LTRUSE_TYPE;

/**
 * This should be used with OMX_QcomIndexConfigVideoLTRUse extension.
 */
typedef QOMX_VIDEO_CONFIG_LTRUSE_TYPE OMX_QCOM_VIDEO_CONFIG_LTRUSE_TYPE;

/**
 * Enumeration used to define the video encoder modes
 *
 * ENUMS:
 *  EncoderModeDefault : Default video recording mode.
 *                       All encoder settings made through
 *                       OMX_SetParameter/OMX_SetConfig are applied. No
 *                       parameter is overridden.
 *  EncoderModeMMS : Video recording mode for MMS (Multimedia Messaging
 *                   Service). This mode is similar to EncoderModeDefault
 *                   except that here the Rate control mode is overridden
 *                   internally and set as a variant of variable bitrate with
 *                   variable frame rate. After this mode is set if the IL
 *                   client tries to set OMX_VIDEO_CONTROLRATETYPE via
 *                   OMX_IndexParamVideoBitrate that would be rejected. For
 *                   this, client should set mode back to EncoderModeDefault
 *                   first and then change OMX_VIDEO_CONTROLRATETYPE.
 */
typedef enum QOMX_VIDEO_ENCODERMODETYPE
{
    QOMX_VIDEO_EncoderModeDefault        = 0x00,
    QOMX_VIDEO_EncoderModeMMS            = 0x01,
    QOMX_VIDEO_EncoderModeMax            = 0x7FFFFFFF
} QOMX_VIDEO_ENCODERMODETYPE;

/**
 * This structure is used to set the video encoder mode.
 *
 * STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version info
 *  nPortIndex : Port that this structure applies to
 *  nMode : defines the video encoder mode
 */
typedef struct QOMX_VIDEO_PARAM_ENCODERMODETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_ENCODERMODETYPE nMode;
} QOMX_VIDEO_PARAM_ENCODERMODETYPE;

/**
 * This structure describes the parameters corresponding to the
 * QOMX_VIDEO_SYNTAXHDRTYPE extension. This parameter can be queried
 * during the loaded state.
 */

typedef struct QOMX_VIDEO_SYNTAXHDRTYPE
{
   OMX_U32 nSize;           /** Size of the structure in bytes */
   OMX_VERSIONTYPE nVersion;/** OMX specification version information */
   OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
   OMX_U32 nBytes;          /** The number of bytes filled in to the buffer */
   OMX_U8 data[1];          /** Buffer to store the header information */
} QOMX_VIDEO_SYNTAXHDRTYPE;

/**
 * This structure describes the parameters corresponding to the
 * QOMX_VIDEO_TEMPORALSPATIALTYPE extension. This parameter can be set
 * dynamically during any state except the state invalid.  This is primarily
 * used for setting MaxQP from the application.  This is set on the out port.
 */

typedef struct QOMX_VIDEO_TEMPORALSPATIALTYPE
{
   OMX_U32 nSize;           /** Size of the structure in bytes */
   OMX_VERSIONTYPE nVersion;/** OMX specification version information */
   OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
   OMX_U32 nTSFactor;       /** Temoral spatial tradeoff factor value in 0-100 */
} QOMX_VIDEO_TEMPORALSPATIALTYPE;

/**
 * This structure describes the parameters corresponding to the
 * OMX_QCOM_VIDEO_CONFIG_INTRAPERIODTYPE extension. This parameter can be set
 * dynamically during any state except the state invalid.  This is set on the out port.
 */

typedef struct QOMX_VIDEO_INTRAPERIODTYPE
{
   OMX_U32 nSize;           /** Size of the structure in bytes */
   OMX_VERSIONTYPE nVersion;/** OMX specification version information */
   OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
   OMX_U32 nIDRPeriod;      /** This specifies coding a frame as IDR after every nPFrames
                                of intra frames. If this parameter is set to 0, only the
                                first frame of the encode session is an IDR frame. This
                                field is ignored for non-AVC codecs and is used only for
                                codecs that support IDR Period */
   OMX_U32 nPFrames;         /** The number of "P" frames between two "I" frames */
   OMX_U32 nBFrames;         /** The number of "B" frames between two "I" frames */
} QOMX_VIDEO_INTRAPERIODTYPE;

/**
 * This structure describes the parameters corresponding to the
 * OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE extension. This parameter can be set
 * dynamically during any state except the state invalid. This is used for the buffer negotiation
 * with other clients.  This is set on the out port.
 */
typedef struct OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE
{
   OMX_U32 nSize;            /** Size of the structure in bytes */
   OMX_VERSIONTYPE nVersion; /** OMX specification version information */
   OMX_U32 nPortIndex;       /** Portindex which is extended by this structure */
   OMX_U32 nBufferOccupancy; /** The number of bytes to be set for the buffer occupancy */
} OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE;

/**
 * This structure describes the parameters corresponding to the
 * OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE extension. This parameter can be set
 * dynamically during any state except the state invalid. This is primarily used for the dynamic/random
 * intrarefresh.  This is set on the out port.
 */
typedef struct OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE
{
   OMX_U32 nSize;           /** Size of the structure in bytes */
   OMX_VERSIONTYPE nVersion;/** OMX specification version information */
   OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
   OMX_U32 nRirMBs;         /** The number of MBs to be set for intrarefresh */
} OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE;

/**
 * This structure describes the parameters for the
 * OMX_QcomIndexParamAUDelimiter extension. It enables/disables
 * the AU delimiters in H264/HEVC stream.
 */
typedef struct OMX_QCOM_VIDEO_CONFIG_AUD
{
    OMX_U32 nSize;           /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    OMX_BOOL bEnable;        /** Enable/disable the setting */
} OMX_QCOM_VIDEO_CONFIG_AUD;

#define QOMX_VIDEO_HIGH_PERF_OPERATING_MODE    (0x7FFFFFFF)

/**
 * Note: This will get deprecated
 */
typedef enum QOMX_VIDEO_PERF_LEVEL
{
    OMX_QCOM_PerfLevelNominal,
    OMX_QCOM_PerfLevelTurbo
} QOMX_VIDEO_PERF_LEVEL;

/**
  * This structure describes the parameters corresponding
  * to OMX_QcomIndexParamPerfLevel extension. It will set
  * the performance mode specified as QOMX_VIDEO_PERF_LEVEL.
  * Note: This will get deprecated
  */
typedef struct OMX_QCOM_VIDEO_PARAM_PERF_LEVEL {
    OMX_U32 nSize;                      /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;           /** OMX specification version information */
    QOMX_VIDEO_PERF_LEVEL ePerfLevel;   /** Performance level */
} OMX_QCOM_VIDEO_PARAM_PERF_LEVEL;

/**
 * This structure describes the parameters corresponding
 * to OMX_QcomIndexConfigPerfLevel extension. It will set
 * the performance mode specified as QOMX_VIDEO_PERF_LEVEL.
 * Note: This will get deprecated
 */
typedef struct OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL {
    OMX_U32 nSize;                      /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;           /** OMX specification version information */
    QOMX_VIDEO_PERF_LEVEL ePerfLevel;   /** Performance level */
} OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL;

typedef enum QOMX_VIDEO_PICTURE_TYPE_DECODE
{
    OMX_QCOM_PictypeDecode_IPB,
    OMX_QCOM_PictypeDecode_I
} QOMX_VIDEO_PICTURE_TYPE_DECODE;

/**
 * This structure describes the parameters corresponding
 * to OMX_QcomIndexConfigPictureTypeDecode extension. It
 * will set the picture type decode specified by eDecodeType.
 */
typedef struct OMX_QCOM_VIDEO_CONFIG_PICTURE_TYPE_DECODE {
    OMX_U32 nSize;                      /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;           /** OMX specification version information */
    QOMX_VIDEO_PICTURE_TYPE_DECODE eDecodeType;   /** Decode type */
} OMX_QCOM_VIDEO_CONFIG_PICTURE_TYPE_DECODE;

/**
 * This structure describes the parameters corresponding
 * to OMX_QcomIndexParamH264VUITimingInfo extension. It
 * will enable/disable the VUI timing info.
 */
typedef struct OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO {
    OMX_U32 nSize;              /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
    OMX_BOOL bEnable;           /** Enable/disable the setting */
} OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO;

/**
 * This structure describes the parameters corresponding
 * to OMX_QcomIndexParamVQZIPSEIType extension. It
 * will enable/disable the VQZIP SEI info.
 */
typedef struct OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE {
    OMX_U32 nSize;              /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
    OMX_BOOL bEnable;           /** Enable/disable the setting */
} OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE;

/**
 * This structure describes the parameters corresponding
 * to OMX_QcomIndexParamPeakBitrate extension. It will
 * set the peak bitrate specified by nPeakBitrate.
 */
typedef struct OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE {
    OMX_U32 nSize;              /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
    OMX_U32 nPeakBitrate;       /** Peak bitrate value */
} OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE;

/**
 * This structure describes the parameters corresponding
 * to OMX_QTIIndexParamForceCompressedForDPB extension. Enabling
 * this extension will force the split mode DPB(compressed)/OPB(Linear)
 * for all resolutions.On some chipsets preferred mode would be combined
 * Linear for both DPB/OPB to save memory. For example on 8996 preferred mode
 * would be combined linear for resolutions <= 1080p .
 * Enabling this might save power but with the cost
 * of increased memory i.e almost double the number on output YUV buffers.
 */
typedef struct OMX_QTI_VIDEO_PARAM_FORCE_COMPRESSED_FOR_DPB_TYPE {
    OMX_U32 nSize;              /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
    OMX_BOOL bEnable;           /** Enable/disable the setting */
} OMX_QTI_VIDEO_PARAM_FORCE_COMPRESSED_FOR_DPB_TYPE;

/**
 * This structure describes the parameters corresponding
 * to OMX_QTIIndexParamForceUnCompressedForOPB extension. Enabling this
 * extension will force the OPB to be linear for the current video session.
 * If this property is not set, then the OPB will be set to linear or compressed
 * based on resolution selected and/or if cpu access is requested on the
 * OPB buffer.
 */
typedef struct OMX_QTI_VIDEO_PARAM_FORCE_UNCOMPRESSED_FOR_OPB_TYPE {
    OMX_U32 nSize;              /** Sizeo f the structure in bytes */
    OMX_VERSIONTYPE nVersion;   /** OMX specification version information */
    OMX_BOOL bEnable;           /** Enable/disable the setting */
} OMX_QTI_VIDEO_PARAM_FORCE_UNCOMPRESSED_FOR_OPB_TYPE;

typedef struct OMX_VENDOR_EXTRADATATYPE  {
    OMX_U32 nPortIndex;
    OMX_U32 nDataSize;
    OMX_U8  *pData;     // cdata (codec_data/extradata)
} OMX_VENDOR_EXTRADATATYPE;

/**
 * This structure describes the parameters corresponding to the
 * OMX_VENDOR_VIDEOFRAMERATE extension. This parameter can be set
 * dynamically during any state except the state invalid. This is
 * used for frame rate to be set from the application. This
 * is set on the in port.
 */
typedef struct OMX_VENDOR_VIDEOFRAMERATE  {
   OMX_U32 nSize;           /** Size of the structure in bytes */
   OMX_VERSIONTYPE nVersion;/** OMX specification version information */
   OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
   OMX_U32 nFps;            /** Frame rate value */
   OMX_BOOL bEnabled;       /** Flag to enable or disable client's frame rate value */
} OMX_VENDOR_VIDEOFRAMERATE;

typedef enum OMX_INDEXVENDORTYPE {
    OMX_IndexVendorFileReadInputFilename = 0xFF000001,
    OMX_IndexVendorParser3gpInputFilename = 0xFF000002,
    OMX_IndexVendorVideoExtraData = 0xFF000003,
    OMX_IndexVendorAudioExtraData = 0xFF000004,
    OMX_IndexVendorVideoFrameRate = 0xFF000005,
} OMX_INDEXVENDORTYPE;

typedef enum OMX_QCOM_VC1RESOLUTIONTYPE
{
   OMX_QCOM_VC1_PICTURE_RES_1x1,
   OMX_QCOM_VC1_PICTURE_RES_2x1,
   OMX_QCOM_VC1_PICTURE_RES_1x2,
   OMX_QCOM_VC1_PICTURE_RES_2x2
} OMX_QCOM_VC1RESOLUTIONTYPE;

typedef enum OMX_QCOM_INTERLACETYPE
{
    OMX_QCOM_InterlaceFrameProgressive,
    OMX_QCOM_InterlaceInterleaveFrameTopFieldFirst,
    OMX_QCOM_InterlaceInterleaveFrameBottomFieldFirst,
    OMX_QCOM_InterlaceFrameTopFieldFirst,
    OMX_QCOM_InterlaceFrameBottomFieldFirst,
    OMX_QCOM_InterlaceFieldTop,
    OMX_QCOM_InterlaceFieldBottom
}OMX_QCOM_INTERLACETYPE;

typedef struct OMX_QCOM_PARAM_VIDEO_INTERLACETYPE
{
    OMX_U32 nSize;           /** Size of the structure in bytes */
    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    OMX_U32 nPortIndex;    /** Portindex which is extended by this structure */
    OMX_BOOL bInterlace;  /** Interlace content **/
}OMX_QCOM_PARAM_VIDEO_INTERLACETYPE;

typedef struct OMX_QCOM_CONFIG_INTERLACETYPE
{
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nIndex;
    OMX_QCOM_INTERLACETYPE eInterlaceType;
}OMX_QCOM_CONFIG_INTERLACETYPE;

#define MAX_PAN_SCAN_WINDOWS 4

typedef struct OMX_QCOM_MISR_INFO {
    OMX_U32 misr_dpb_luma;
    OMX_U32 misr_dpb_chroma;
    OMX_U32 misr_opb_luma;
    OMX_U32 misr_opb_chroma;
} OMX_QCOM_MISR_INFO;

typedef struct OMX_QCOM_OUTPUT_CROP {
    OMX_U32 size;
    OMX_U32 version;
    OMX_U32 port_index;
    OMX_U32 left;
    OMX_U32 top;
    OMX_U32 display_width;
    OMX_U32 display_height;
    OMX_U32 width;
    OMX_U32 height;
    OMX_U32 frame_num;
    OMX_U32 bit_depth_y;
    OMX_U32 bit_depth_c;
    OMX_QCOM_MISR_INFO misr_info[2];
} OMX_QCOM_OUTPUT_CROP;

typedef struct OMX_QCOM_PANSCAN
{
   OMX_U32 numWindows;
   OMX_QCOMRectangle window[MAX_PAN_SCAN_WINDOWS];
} OMX_QCOM_PANSCAN;

typedef struct OMX_QCOM_ASPECT_RATIO
{
   OMX_U32 aspectRatioX;
   OMX_U32 aspectRatioY;
} OMX_QCOM_ASPECT_RATIO;

typedef struct OMX_QCOM_DISPLAY_ASPECT_RATIO
{
   OMX_U32 displayVerticalSize;
   OMX_U32 displayHorizontalSize;
} OMX_QCOM_DISPLAY_ASPECT_RATIO;

typedef struct OMX_QCOM_FRAME_PACK_ARRANGEMENT
{
  OMX_U32 nSize;
  OMX_VERSIONTYPE nVersion;
  OMX_U32 nPortIndex;
  OMX_U32 id;
  OMX_U32 cancel_flag;
  OMX_U32 type;
  OMX_U32 quincunx_sampling_flag;
  OMX_U32 content_interpretation_type;
  OMX_U32 spatial_flipping_flag;
  OMX_U32 frame0_flipped_flag;
  OMX_U32 field_views_flag;
  OMX_U32 current_frame_is_frame0_flag;
  OMX_U32 frame0_self_contained_flag;
  OMX_U32 frame1_self_contained_flag;
  OMX_U32 frame0_grid_position_x;
  OMX_U32 frame0_grid_position_y;
  OMX_U32 frame1_grid_position_x;
  OMX_U32 frame1_grid_position_y;
  OMX_U32 reserved_byte;
  OMX_U32 repetition_period;
  OMX_U32 extension_flag;
} OMX_QCOM_FRAME_PACK_ARRANGEMENT;

typedef struct OMX_QCOM_EXTRADATA_QP
{
   OMX_U32        nQP;
   OMX_U32        nQPSum;           /* Decode Only */
   OMX_U32        nSkipQPSum;       /* Decode Only */
   OMX_U32        nSkipNumBlocks;   /* Decode Only */
   OMX_U32        nTotalNumBlocks;  /* Decode Only */
} OMX_QCOM_EXTRADATA_QP;

typedef struct OMX_QCOM_EXTRADATA_BITS_INFO
{
   OMX_U32 header_bits;
   OMX_U32 frame_bits;
} OMX_QCOM_EXTRADATA_BITS_INFO;

typedef struct OMX_QCOM_EXTRADATA_USERDATA {
   OMX_U32 type;
   OMX_U32 data[1];
} OMX_QCOM_EXTRADATA_USERDATA;

typedef struct OMX_QCOM_EXTRADATA_FRAMEINFO
{
   // common frame meta data. interlace related info removed
   OMX_VIDEO_PICTURETYPE  ePicType;
   OMX_QCOM_INTERLACETYPE interlaceType;
   OMX_QCOM_PANSCAN       panScan;
   OMX_QCOM_ASPECT_RATIO  aspectRatio;
   OMX_QCOM_DISPLAY_ASPECT_RATIO displayAspectRatio;
   OMX_U32                nConcealedMacroblocks;
   OMX_U32                nRecoverySeiFlag;
   OMX_U32                nFrameRate;
   OMX_TICKS              nTimeStamp;
} OMX_QCOM_EXTRADATA_FRAMEINFO;

typedef struct OMX_QCOM_EXTRADATA_FRAMEDIMENSION
{
   /** Frame Dimensions added to each YUV buffer */
   OMX_U32   nDecWidth;  /** Width  rounded to multiple of 16 */
   OMX_U32   nDecHeight; /** Height rounded to multiple of 16 */
   OMX_U32   nActualWidth; /** Actual Frame Width */
   OMX_U32   nActualHeight; /** Actual Frame Height */

} OMX_QCOM_EXTRADATA_FRAMEDIMENSION;

typedef struct OMX_QCOM_H264EXTRADATA
{
   OMX_U64 seiTimeStamp;
} OMX_QCOM_H264EXTRADATA;

typedef struct OMX_QCOM_VC1EXTRADATA
{
   OMX_U32                     nVC1RangeY;
   OMX_U32                     nVC1RangeUV;
   OMX_QCOM_VC1RESOLUTIONTYPE eVC1PicResolution;
} OMX_QCOM_VC1EXTRADATA;

typedef union OMX_QCOM_EXTRADATA_CODEC_DATA
{
   OMX_QCOM_H264EXTRADATA h264ExtraData;
   OMX_QCOM_VC1EXTRADATA vc1ExtraData;
} OMX_QCOM_EXTRADATA_CODEC_DATA;

typedef struct OMX_QCOM_EXTRADATA_MBINFO
{
   OMX_U32 nFormat;
   OMX_U32 nDataSize;
   OMX_U8  data[0];
} OMX_QCOM_EXTRADATA_MBINFO;

typedef struct OMX_QCOM_EXTRADATA_VQZIPSEI {
    OMX_U32 nSize;
    OMX_U8 data[0];
} OMX_QCOM_EXTRADATA_VQZIPSEI;

typedef struct OMX_QTI_VIDEO_PARAM_ENABLE_ROIINFO {
    OMX_U32         nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32         nPortIndex;
    OMX_BOOL        bEnableRoiInfo;
} OMX_QTI_VIDEO_PARAM_ENABLE_ROIINFO;

typedef struct OMX_QTI_VIDEO_CONFIG_ROIINFO {
    OMX_U32         nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32         nPortIndex;
    OMX_S32         nUpperQpOffset;
    OMX_S32         nLowerQpOffset;
    OMX_BOOL        bUseRoiInfo;
    OMX_S32         nRoiMBInfoSize;
    OMX_PTR         pRoiMBInfo;
} OMX_QTI_VIDEO_CONFIG_ROIINFO;

typedef enum OMX_QTI_VIDEO_BLUR_RESOLUTION {
    BLUR_RESOL_DISABLED = 0,
    BLUR_RESOL_240      = 1,
    BLUR_RESOL_480      = 2,
    BLUR_RESOL_720      = 3,
    BLUR_RESOL_1080     = 4,
} OMX_QTI_VIDEO_BLUR_RESOLUTION;

typedef struct OMX_QTI_VIDEO_CONFIG_BLURINFO {
    OMX_U32         nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32         nPortIndex;
    OMX_QTI_VIDEO_BLUR_RESOLUTION eTargetResol;
} OMX_QTI_VIDEO_CONFIG_BLURINFO;

typedef enum OMX_QCOM_EXTRADATATYPE
{
    OMX_ExtraDataFrameInfo =               0x7F000001,
    OMX_ExtraDataH264 =                    0x7F000002,
    OMX_ExtraDataVC1 =                     0x7F000003,
    OMX_ExtraDataFrameDimension =          0x7F000004,
    OMX_ExtraDataVideoEncoderSliceInfo =   0x7F000005,
    OMX_ExtraDataConcealMB =               0x7F000006,
    OMX_ExtraDataInterlaceFormat =         0x7F000007,
    OMX_ExtraDataPortDef =                 0x7F000008,
    OMX_ExtraDataMP2ExtnData =             0x7F000009,
    OMX_ExtraDataMP2UserData =             0x7F00000a,
    OMX_ExtraDataVideoLTRInfo =            0x7F00000b,
    OMX_ExtraDataFramePackingArrangement = 0x7F00000c,
    OMX_ExtraDataQP =                      0x7F00000d,
    OMX_ExtraDataInputBitsInfo =           0x7F00000e,
    OMX_ExtraDataVideoEncoderMBInfo =      0x7F00000f,
    OMX_ExtraDataVQZipSEI  =               0x7F000010,
    OMX_ExtraDataDisplayColourSEI =        0x7F000011,
    OMX_ExtraDataLightLevelSEI =           0x7F000012,
    OMX_ExtraDataOutputCropInfo =          0x7F000014,
} OMX_QCOM_EXTRADATATYPE;

struct ExtraDataMap {
        const char *type;
        OMX_QCOM_EXTRADATATYPE index;
};
static const struct ExtraDataMap kExtradataMap[] = {
        { "ltrinfo", OMX_ExtraDataVideoLTRInfo },
        { "mbinfo", OMX_ExtraDataVideoEncoderMBInfo },
        { "outputcropinfo", OMX_ExtraDataOutputCropInfo },
};

static inline OMX_S32 getIndexForExtradataType(char * type) {
    if(type == NULL) return -1;
    for(int i = 0; i< (int)(sizeof(kExtradataMap)/ sizeof(struct ExtraDataMap)); i++){
        if(!strcmp(kExtradataMap[i].type,type)){
            return kExtradataMap[i].index;
        }
    }
    return -1;
}

static inline const char * getStringForExtradataType(int64_t index) {
    for(int i = 0; i< (int)(sizeof(kExtradataMap)/sizeof(struct ExtraDataMap)); i++){
        if(kExtradataMap[i].index == index){
            return kExtradataMap[i].type;
        }
    }
    return NULL;
}

typedef struct  OMX_STREAMINTERLACEFORMATTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bInterlaceFormat;
    OMX_U32 nInterlaceFormats;
} OMX_STREAMINTERLACEFORMAT;

typedef enum OMX_INTERLACETYPE
{
   OMX_InterlaceFrameProgressive,
   OMX_InterlaceInterleaveFrameTopFieldFirst,
   OMX_InterlaceInterleaveFrameBottomFieldFirst,
   OMX_InterlaceFrameTopFieldFirst,
   OMX_InterlaceFrameBottomFieldFirst
} OMX_INTERLACES;

typedef enum QOMX_VIDEO_RECOVERYSEITYPE {
/*
 * 0: Frame reconstruction is incorrect
 *   a) Open Gop, frames before recovery point SEI
 * 1: Frame reconstruction is correct.
 *   a) Closed Gop, When decoding starts from the top of closed GOP at IDR
 *   b) Open Gop, Output at and subsequent to recovery point SEI with
 *      exact_match_flag = true
 * 2: Frame reconstruction is approximately correct:
 *   a) Closed Gop, When decoding starts from a P/B/I frames wihtout
 *      any recovery point SEI information
 *   b) Open Gop, Output at and subsequent to recovery point SEI with
 *      exact_match_flag = false
 * In case flag is set to 0 or 2, DATACORRUPT shall be enabled
 * for buffer (nFlags) in FILL_BUFFER_DONE
 */
    OMX_FRAME_RECONSTRUCTION_INCORRECT = 0,
    OMX_FRAME_RECONSTRUCTION_CORRECT = 1,
    OMX_FRAME_RECONSTRUCTION_APPROXIMATELY_CORRECT = 2
} QOMX_VIDEO_RECOVERYSEI;

#define OMX_EXTRADATA_HEADER_SIZE 20

/**
 * AVC profile types, each profile indicates support for various
 * performance bounds and different annexes.
 */
typedef enum QOMX_VIDEO_AVCPROFILETYPE {
    QOMX_VIDEO_AVCProfileBaseline      = OMX_VIDEO_AVCProfileBaseline,
    QOMX_VIDEO_AVCProfileMain          = OMX_VIDEO_AVCProfileMain,
    QOMX_VIDEO_AVCProfileExtended      = OMX_VIDEO_AVCProfileExtended,
    QOMX_VIDEO_AVCProfileHigh          = OMX_VIDEO_AVCProfileHigh,
    QOMX_VIDEO_AVCProfileHigh10        = OMX_VIDEO_AVCProfileHigh10,
    QOMX_VIDEO_AVCProfileHigh422       = OMX_VIDEO_AVCProfileHigh422,
    QOMX_VIDEO_AVCProfileHigh444       = OMX_VIDEO_AVCProfileHigh444,
    /* QCom specific profile indexes */
    QOMX_VIDEO_AVCProfileConstrained           = OMX_VIDEO_AVCProfileVendorStartUnused,
    QOMX_VIDEO_AVCProfileConstrainedBaseline,
    QOMX_VIDEO_AVCProfileConstrainedHigh,
} QOMX_VIDEO_AVCPROFILETYPE;


/**
 * H.264 MVC Profiles
  */
typedef enum QOMX_VIDEO_MVCPROFILETYPE {
    QOMX_VIDEO_MVCProfileStereoHigh = 0x1,
    QOMX_VIDEO_MVCProfileMultiViewHigh = 0x2,
    QOMX_VIDEO_MVCProfileKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_MVCProfileVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_MVCProfileMax = 0x7FFFFFFF
} QOMX_VIDEO_MVCPROFILETYPE;

/**
 * H.264 MVC Levels
  */
typedef enum QOMX_VIDEO_MVCLEVELTYPE {
    QOMX_VIDEO_MVCLevel1   = 0x01,     /**< Level 1 */
    QOMX_VIDEO_MVCLevel1b  = 0x02,     /**< Level 1b */
    QOMX_VIDEO_MVCLevel11  = 0x04,     /**< Level 1.1 */
    QOMX_VIDEO_MVCLevel12  = 0x08,     /**< Level 1.2 */
    QOMX_VIDEO_MVCLevel13  = 0x10,     /**< Level 1.3 */
    QOMX_VIDEO_MVCLevel2   = 0x20,     /**< Level 2 */
    QOMX_VIDEO_MVCLevel21  = 0x40,     /**< Level 2.1 */
    QOMX_VIDEO_MVCLevel22  = 0x80,     /**< Level 2.2 */
    QOMX_VIDEO_MVCLevel3   = 0x100,    /**< Level 3 */
    QOMX_VIDEO_MVCLevel31  = 0x200,    /**< Level 3.1 */
    QOMX_VIDEO_MVCLevel32  = 0x400,    /**< Level 3.2 */
    QOMX_VIDEO_MVCLevel4   = 0x800,    /**< Level 4 */
    QOMX_VIDEO_MVCLevel41  = 0x1000,   /**< Level 4.1 */
    QOMX_VIDEO_MVCLevel42  = 0x2000,   /**< Level 4.2 */
    QOMX_VIDEO_MVCLevel5   = 0x4000,   /**< Level 5 */
    QOMX_VIDEO_MVCLevel51  = 0x8000,   /**< Level 5.1 */
    QOMX_VIDEO_MVCLevelKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_MVCLevelVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_MVCLevelMax = 0x7FFFFFFF
} QOMX_VIDEO_MVCLEVELTYPE;

/**
 * DivX Versions
 */
typedef enum  QOMX_VIDEO_DIVXFORMATTYPE {
    QOMX_VIDEO_DIVXFormatUnused = 0x01, /**< Format unused or unknown */
    QOMX_VIDEO_DIVXFormat311    = 0x02, /**< DivX 3.11 */
    QOMX_VIDEO_DIVXFormat4      = 0x04, /**< DivX 4 */
    QOMX_VIDEO_DIVXFormat5      = 0x08, /**< DivX 5 */
    QOMX_VIDEO_DIVXFormat6      = 0x10, /**< DivX 6 */
    QOMX_VIDEO_DIVXFormatKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_DIVXFormatVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_DIVXFormatMax = 0x7FFFFFFF
} QOMX_VIDEO_DIVXFORMATTYPE;

/**
 * DivX profile types, each profile indicates support for
 * various performance bounds.
 */
typedef enum QOMX_VIDEO_DIVXPROFILETYPE {
    QOMX_VIDEO_DivXProfileqMobile = 0x01, /**< qMobile Profile */
    QOMX_VIDEO_DivXProfileMobile  = 0x02, /**< Mobile Profile */
    QOMX_VIDEO_DivXProfileMT      = 0x04, /**< Mobile Theatre Profile */
    QOMX_VIDEO_DivXProfileHT      = 0x08, /**< Home Theatre Profile */
    QOMX_VIDEO_DivXProfileHD      = 0x10, /**< High Definition Profile */
    QOMX_VIDEO_DIVXProfileKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_DIVXProfileVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_DIVXProfileMax = 0x7FFFFFFF
} QOMX_VIDEO_DIVXPROFILETYPE;

/**
 * DivX Video Params
 *
 *  STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version information
 *  nPortIndex : Port that this structure applies to
 *  eFormat    : Version of DivX stream / data
 *  eProfile   : Profile of DivX stream / data
 */
typedef struct QOMX_VIDEO_PARAM_DIVXTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_DIVXFORMATTYPE eFormat;
    QOMX_VIDEO_DIVXPROFILETYPE eProfile;
} QOMX_VIDEO_PARAM_DIVXTYPE;



/**
 *  VP Versions
 */
typedef enum QOMX_VIDEO_VPFORMATTYPE {
    QOMX_VIDEO_VPFormatUnused = 0x01, /**< Format unused or unknown */
    QOMX_VIDEO_VPFormat6      = 0x02, /**< VP6 Video Format */
    QOMX_VIDEO_VPFormat7      = 0x04, /**< VP7 Video Format */
    QOMX_VIDEO_VPFormat8      = 0x08, /**< VP8 Video Format */
    QOMX_VIDEO_VPFormat9      = 0x10, /**< VP9 Video Format */
    QOMX_VIDEO_VPFormatKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_VPFormatVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_VPFormatMax = 0x7FFFFFFF
} QOMX_VIDEO_VPFORMATTYPE;

/**
 * VP profile types, each profile indicates support for various
 * encoding tools.
 */
typedef enum QOMX_VIDEO_VPPROFILETYPE {
    QOMX_VIDEO_VPProfileSimple   = 0x01, /**< Simple Profile, applies to VP6 only */
    QOMX_VIDEO_VPProfileAdvanced = 0x02, /**< Advanced Profile, applies to VP6 only */
    QOMX_VIDEO_VPProfileVersion0 = 0x04, /**< Version 0, applies to VP7 and VP8 */
    QOMX_VIDEO_VPProfileVersion1 = 0x08, /**< Version 1, applies to VP7 and VP8 */
    QOMX_VIDEO_VPProfileVersion2 = 0x10, /**< Version 2, applies to VP8 only */
    QOMX_VIDEO_VPProfileVersion3 = 0x20, /**< Version 3, applies to VP8 only */
    QOMX_VIDEO_VPProfileKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_VPProfileVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_VPProfileMax = 0x7FFFFFFF
} QOMX_VIDEO_VPPROFILETYPE;

/**
 * VP Video Params
 *
 *  STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version information
 *  nPortIndex : Port that this structure applies to
 *  eFormat    : Format of VP stream / data
 *  eProfile   : Profile or Version of VP stream / data
 */
typedef struct QOMX_VIDEO_PARAM_VPTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_VPFORMATTYPE eFormat;
    QOMX_VIDEO_VPPROFILETYPE eProfile;
} QOMX_VIDEO_PARAM_VPTYPE;

/**
 * Spark Versions
 */
typedef enum QOMX_VIDEO_SPARKFORMATTYPE {
    QOMX_VIDEO_SparkFormatUnused = 0x01, /**< Format unused or unknown */
    QOMX_VIDEO_SparkFormat0      = 0x02, /**< Video Format Version 0 */
    QOMX_VIDEO_SparkFormat1      = 0x04, /**< Video Format Version 1 */
    QOMX_VIDEO_SparkFormatKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_SparkFormatVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_SparkFormatMax = 0x7FFFFFFF
} QOMX_VIDEO_SPARKFORMATTYPE;

/**
 * Spark Video Params
 *
 *  STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version information
 *  nPortIndex : Port that this structure applies to
 *  eFormat    : Version of Spark stream / data
 */
typedef struct QOMX_VIDEO_PARAM_SPARKTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_SPARKFORMATTYPE eFormat;
} QOMX_VIDEO_PARAM_SPARKTYPE;

typedef enum QOMX_VIDEO_TMEPROFILETYPE {
    QOMX_VIDEO_TMEProfile0  = 0x1,
    QOMX_VIDEO_TMEProfile1  = 0x2,
    QOMX_VIDEO_TMEProfile2  = 0x4,
    QOMX_VIDEO_TMEProfile3  = 0x8,
} QOMX_VIDEO_TMEPROFILETYPE;

typedef enum QOMX_VIDEO_TMELEVELTYPE {
    QOMX_VIDEO_TMELevelInteger  = 0x1,
} QOMX_VIDEO_TMELEVELTYPE;

typedef struct QOMX_VIDEO_PARAM_TMETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_TMEPROFILETYPE eProfile;
    QOMX_VIDEO_TMELEVELTYPE eLevel;
    OMX_U32 ePayloadVersion;
} QOMX_VIDEO_PARAM_TMETYPE;

typedef struct QOMX_VIDEO_QUERY_DECODER_INSTANCES {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nNumOfInstances;
} QOMX_VIDEO_QUERY_DECODER_INSTANCES;

typedef struct QOMX_ENABLETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_BOOL bEnable;
} QOMX_ENABLETYPE;

typedef struct QOMX_DISABLETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_BOOL bDisable;
} QOMX_DISABLETYPE;

typedef enum QOMX_VIDEO_EVENTS {
    OMX_EventIndexsettingChanged = OMX_EventVendorStartUnused
} QOMX_VIDEO_EVENTS;

typedef enum QOMX_VIDEO_PICTURE_ORDER {
    QOMX_VIDEO_DISPLAY_ORDER = 0x1,
    QOMX_VIDEO_DECODE_ORDER = 0x2
} QOMX_VIDEO_PICTURE_ORDER;

typedef struct QOMX_VIDEO_DECODER_PICTURE_ORDER {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_PICTURE_ORDER eOutputPictureOrder;
} QOMX_VIDEO_DECODER_PICTURE_ORDER;

typedef struct QOMX_INDEXEXTRADATATYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnabled;
    OMX_INDEXTYPE nIndex;
} QOMX_INDEXEXTRADATATYPE;

typedef struct QOMX_INDEXTIMESTAMPREORDER {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnable;
} QOMX_INDEXTIMESTAMPREORDER;

typedef struct QOMX_INDEXDOWNSCALAR {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnable;
    OMX_U32 nOutputWidth;
    OMX_U32 nOutputHeight;
} QOMX_INDEXDOWNSCALAR;

typedef struct QOMX_VIDEO_CUSTOM_BUFFERSIZE {
        OMX_U32 nSize;
        OMX_VERSIONTYPE nVersion;
        OMX_U32 nPortIndex;
        OMX_U32 nBufferSize;
} QOMX_VIDEO_CUSTOM_BUFFERSIZE;

#define OMX_QCOM_INDEX_PARAM_VIDEO_SYNCFRAMEDECODINGMODE "OMX.QCOM.index.param.video.SyncFrameDecodingMode"
#define OMX_QCOM_INDEX_PARAM_INDEXEXTRADATA "OMX.QCOM.index.param.IndexExtraData"
#define OMX_QCOM_INDEX_PARAM_VIDEO_SLICEDELIVERYMODE "OMX.QCOM.index.param.SliceDeliveryMode"
#define OMX_QCOM_INDEX_PARAM_VIDEO_FRAMEPACKING_EXTRADATA "OMX.QCOM.index.param.video.FramePackingExtradata"
#define OMX_QCOM_INDEX_PARAM_VIDEO_QP_EXTRADATA "OMX.QCOM.index.param.video.QPExtradata"
#define OMX_QCOM_INDEX_PARAM_VIDEO_INPUTBITSINFO_EXTRADATA "OMX.QCOM.index.param.video.InputBitsInfoExtradata"
#define OMX_QCOM_INDEX_PARAM_VIDEO_EXTNUSER_EXTRADATA "OMX.QCOM.index.param.video.ExtnUserExtraData"
#define OMX_QCOM_INDEX_PARAM_VIDEO_EXTNOUTPUTCROP_EXTRADATA "OMX.QCOM.index.param.video.ExtnOutputCropExtraData"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_FRAMEPACKING_INFO "OMX.QCOM.index.config.video.FramePackingInfo"
#define OMX_QCOM_INDEX_PARAM_VIDEO_MPEG2SEQDISP_EXTRADATA "OMX.QCOM.index.param.video.Mpeg2SeqDispExtraData"

#define OMX_QCOM_INDEX_PARAM_VIDEO_HIERSTRUCTURE "OMX.QCOM.index.param.video.HierStructure"
#define OMX_QCOM_INDEX_PARAM_VIDEO_LTRCOUNT "OMX.QCOM.index.param.video.LTRCount"
#define OMX_QCOM_INDEX_PARAM_VIDEO_LTRPERIOD "OMX.QCOM.index.param.video.LTRPeriod"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_LTRUSE "OMX.QCOM.index.config.video.LTRUse"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_LTRMARK "OMX.QCOM.index.config.video.LTRMark"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_HIER_P_LAYERS "OMX.QCOM.index.config.video.hierplayers"
#define OMX_QCOM_INDEX_CONFIG_RECTANGLE_TYPE "OMX.QCOM.index.config.video.rectangle"
#define OMX_QCOM_INDEX_PARAM_VIDEO_BASE_LAYER_ID "OMX.QCOM.index.param.video.baselayerid"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_QP "OMX.QCOM.index.config.video.qp"
#define OMX_QCOM_INDEX_PARAM_VIDEO_SAR "OMX.QCOM.index.param.video.sar"
#define OMX_QTI_INDEX_PARAM_VIDEO_LOW_LATENCY "OMX.QTI.index.param.video.LowLatency"

#define OMX_QCOM_INDEX_PARAM_VIDEO_PASSINPUTBUFFERFD "OMX.QCOM.index.param.video.PassInputBufferFd"
#define OMX_QTI_INDEX_PARAM_VIDEO_PREFER_ADAPTIVE_PLAYBACK "OMX.QTI.index.param.video.PreferAdaptivePlayback"
#define OMX_QTI_INDEX_CONFIG_VIDEO_SETTIMEDATA "OMX.QTI.index.config.video.settimedata"
#define OMX_QTI_INDEX_PARAM_VIDEO_FORCE_COMPRESSED_FOR_DPB "OMX.QTI.index.param.video.ForceCompressedForDPB"
#define OMX_QTI_INDEX_PARAM_VIDEO_ENABLE_ROIINFO "OMX.QTI.index.param.enableRoiInfo"
#define OMX_QTI_INDEX_CONFIG_VIDEO_ROIINFO "OMX.QTI.index.config.RoiInfo"
#define OMX_QTI_INDEX_CONFIG_VIDEO_BLURINFO "OMX.QTI.index.config.BlurInfo"
#define OMX_QTI_INDEX_PARAM_VIDEO_CLIENT_EXTRADATA "OMX.QTI.index.param.client.extradata"
#define OMX_QTI_INDEX_CONFIG_COLOR_ASPECTS "OMX.google.android.index.describeColorAspects"
#define OMX_QTI_INDEX_CONFIG_VIDEO_GETDSMODE "OMX.QTI.index.config.video.getdsmode"
#define OMX_QTI_INDEX_PARAM_TME "OMX.QTI.index.param.tme"

typedef enum {
    QOMX_VIDEO_FRAME_PACKING_CHECKERBOARD = 0,
    QOMX_VIDEO_FRAME_PACKING_COLUMN_INTERLEAVE = 1,
    QOMX_VIDEO_FRAME_PACKING_ROW_INTERLEAVE = 2,
    QOMX_VIDEO_FRAME_PACKING_SIDE_BY_SIDE = 3,
    QOMX_VIDEO_FRAME_PACKING_TOP_BOTTOM = 4,
    QOMX_VIDEO_FRAME_PACKING_TEMPORAL = 5,
} QOMX_VIDEO_FRAME_PACKING_ARRANGEMENT;

typedef enum {
    QOMX_VIDEO_CONTENT_UNSPECIFIED = 0,
    QOMX_VIDEO_CONTENT_LR_VIEW = 1,
    QOMX_VIDEO_CONTENT_RL_VIEW = 2,
} QOMX_VIDEO_CONTENT_INTERPRETATION;

/**
 * Specifies the extended picture types. These values should be
 * OR'd along with the types defined in OMX_VIDEO_PICTURETYPE to
 * signal all pictures types which are allowed.
 *
 * ENUMS:
 *  H.264 Specific Picture Types:   IDR
 */
typedef enum QOMX_VIDEO_PICTURETYPE {
    QOMX_VIDEO_PictureTypeIDR = OMX_VIDEO_PictureTypeVendorStartUnused + 0x1000
} QOMX_VIDEO_PICTURETYPE;

#define OMX_QCOM_INDEX_CONFIG_ACTIVE_REGION_DETECTION           "OMX.QCOM.index.config.activeregiondetection"
#define OMX_QCOM_INDEX_CONFIG_ACTIVE_REGION_DETECTION_STATUS    "OMX.QCOM.index.config.activeregiondetectionstatus"
#define OMX_QCOM_INDEX_CONFIG_SCALING_MODE                      "OMX.QCOM.index.config.scalingmode"
#define OMX_QCOM_INDEX_CONFIG_NOISEREDUCTION                    "OMX.QCOM.index.config.noisereduction"
#define OMX_QCOM_INDEX_CONFIG_IMAGEENHANCEMENT                  "OMX.QCOM.index.config.imageenhancement"
#define OMX_QCOM_INDEX_PARAM_HELDBUFFERCOUNT                    "OMX.QCOM.index.param.HeldBufferCount" /**< reference: QOMX_HELDBUFFERCOUNTTYPE */


typedef struct QOMX_RECTTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_S32 nLeft;
    OMX_S32 nTop;
    OMX_U32 nWidth;
    OMX_U32 nHeight;
} QOMX_RECTTYPE;

typedef struct QOMX_ACTIVEREGIONDETECTIONTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnable;
    QOMX_RECTTYPE sROI;
    OMX_U32 nNumExclusionRegions;
    QOMX_RECTTYPE sExclusionRegions[1];
} QOMX_ACTIVEREGIONDETECTIONTYPE;

typedef struct QOMX_ACTIVEREGIONDETECTION_STATUSTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bDetected;
    QOMX_RECTTYPE sDetectedRegion;
} QOMX_ACTIVEREGIONDETECTION_STATUSTYPE;

typedef enum QOMX_SCALE_MODETYPE {
    QOMX_SCALE_MODE_Normal,
    QOMX_SCALE_MODE_Anamorphic,
    QOMX_SCALE_MODE_Max = 0x7FFFFFFF
} QOMX_SCALE_MODETYPE;

typedef struct QOMX_SCALINGMODETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    QOMX_SCALE_MODETYPE  eScaleMode;
} QOMX_SCALINGMODETYPE;

typedef struct QOMX_NOISEREDUCTIONTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnable;
    OMX_BOOL bAutoMode;
    OMX_S32 nNoiseReduction;
} QOMX_NOISEREDUCTIONTYPE;

typedef struct QOMX_IMAGEENHANCEMENTTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnable;
    OMX_BOOL bAutoMode;
    OMX_S32 nImageEnhancement;
} QOMX_IMAGEENHANCEMENTTYPE;

/*
 * these are part of OMX1.2 but JB MR2 branch doesn't have them defined
 * OMX_IndexParamInterlaceFormat
 * OMX_INTERLACEFORMATTYPE
 */
#ifndef OMX_IndexParamInterlaceFormat
#define OMX_IndexParamInterlaceFormat (0x7FF00000)
typedef struct OMX_INTERLACEFORMATTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nFormat;
    OMX_TICKS nTimeStamp;
} OMX_INTERLACEFORMATTYPE;
#endif

/**
 * This structure is used to indicate the maximum number of buffers
 * that a port will hold during data flow.
 *
 * STRUCT MEMBERS:
 *  nSize              : Size of the structure in bytes
 *  nVersion           : OMX specification version info
 *  nPortIndex         : Port that this structure applies to
 *  nHeldBufferCount   : Read-only, maximum number of buffers that will be held
 */
typedef struct QOMX_HELDBUFFERCOUNTTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nHeldBufferCount;
} QOMX_HELDBUFFERCOUNTTYPE;

typedef enum QOMX_VIDEO_HIERARCHICALCODINGTYPE {
    QOMX_HIERARCHICALCODING_P = 0x01,
    QOMX_HIERARCHICALCODING_B = 0x02,
} QOMX_VIDEO_HIERARCHICALCODINGTYPE;

typedef struct QOMX_VIDEO_HIERARCHICALLAYERS {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nNumLayers;
    QOMX_VIDEO_HIERARCHICALCODINGTYPE eHierarchicalCodingType;
} QOMX_VIDEO_HIERARCHICALLAYERS;

typedef struct QOMX_VIDEO_H264ENTROPYCODINGTYPE {
   OMX_U32 nSize;
   OMX_VERSIONTYPE nVersion;
   OMX_BOOL bCabac;
   OMX_U32 nCabacInitIdc;
} QOMX_VIDEO_H264ENTROPYCODINGTYPE;

typedef enum QOMX_VIDEO_IFRAMESIZE_TYPE {
    QOMX_IFRAMESIZE_DEFAULT,
    QOMX_IFRAMESIZE_MEDIUM,
    QOMX_IFRAMESIZE_HUGE,
    QOMX_IFRAMESIZE_UNLIMITED,
} QOMX_VIDEO_IFRAMESIZE_TYPE;

typedef struct QOMX_VIDEO_IFRAMESIZE {
   OMX_U32 nSize;
   OMX_VERSIONTYPE nVersion;
   QOMX_VIDEO_IFRAMESIZE_TYPE eType;
} QOMX_VIDEO_IFRAMESIZE;

/* VIDEO POSTPROCESSING CTRLS AND ENUMS */
/* MUST KEEP SAME AS IN vpp.h */
#define QOMX_VPP_HQV_CUSTOMPAYLOAD_SZ 256
#define VPP_HQV_CONTROL_GLOBAL_START (VPP_HQV_CONTROL_CUST + 1)

typedef enum QOMX_VPP_HQV_MODE {
    VPP_HQV_MODE_OFF,
    VPP_HQV_MODE_AUTO,
    VPP_HQV_MODE_MANUAL,
    VPP_HQV_MODE_MAX
} QOMX_VPP_HQV_MODE;

typedef enum QOMX_VPP_HQVCONTROLTYPE {
    VPP_HQV_CONTROL_CADE = 0x1,
    VPP_HQV_CONTROL_DI = 0x02,
    VPP_HQV_CONTROL_CNR = 0x04,
    VPP_HQV_CONTROL_AIE = 0x05,
    VPP_HQV_CONTROL_FRC = 0x06,
    VPP_HQV_CONTROL_CUST = 0x07,
    VPP_HQV_CONTROL_GLOBAL_DEMO = VPP_HQV_CONTROL_GLOBAL_START,
    VPP_HQV_CONTROL_MAX,
} QOMX_VPP_HQVCONTROLTYPE;

typedef enum QOMX_VPP_HQV_DI_MODE {
    VPP_HQV_DI_MODE_OFF,
    VPP_HQV_DI_MODE_VIDEO_1F,
    VPP_HQV_DI_MODE_VIDEO_3F,
    VPP_HQV_DI_MODE_AUTO,
    VPP_HQV_DI_MODE_MAX,
} QOMX_VPP_HQV_DI_MODE;

typedef enum QOMX_VPP_HQV_HUE_MODE {
    VPP_HQV_HUE_MODE_OFF,
    VPP_HQV_HUE_MODE_ON,
    VPP_HQV_HUE_MODE_MAX,
} QOMX_VPP_HQV_HUE_MODE;

typedef enum QOMX_VPP_SPLIT_DIRECTION {
    VPP_HQV_SPLIT_LEFT_TO_RIGHT,
    VPP_HQV_SPLIT_RIGHT_TO_LEFT,
    VPP_HQV_SPLIT_TOP_TO_BOTTOM,
    VPP_HQV_SPLIT_BOTTOM_TO_TOP,
    VPP_HQV_SPLIT_MAX,
} QOMX_VPP_SPLIT_DIRECTION;

typedef enum QOMX_VPP_HQV_FRC_MODE {
   VPP_HQV_FRC_MODE_OFF,
   VPP_HQV_FRC_MODE_LOW,
   VPP_HQV_FRC_MODE_MED,
   VPP_HQV_FRC_MODE_HIGH,
   VPP_HQV_FRC_MODE_MAX,
} QOMX_VPP_HQV_FRC_MODE;


typedef struct QOMX_VPP_HQVCTRL_CADE {
    QOMX_VPP_HQV_MODE mode;
    OMX_U32 level;
    OMX_S32 contrast;
    OMX_S32 saturation;
} QOMX_VPP_HQVCTRL_CADE;

typedef struct QOMX_VPP_HQVCTRL_DI {
    QOMX_VPP_HQV_DI_MODE mode;
} QOMX_VPP_HQVCTRL_DI;

typedef struct QOMX_VPP_HQVCTRL_CNR {
    QOMX_VPP_HQV_MODE mode;
    OMX_U32 level;
} QOMX_VPP_HQVCTRL_CNR;

typedef struct QOMX_VPP_HQVCTRL_AIE {
    QOMX_VPP_HQV_MODE mode;
    QOMX_VPP_HQV_HUE_MODE hue_mode;
    OMX_U32 cade_level;
    OMX_U32 ltm_level;
} QOMX_VPP_HQVCTRL_AIE;

typedef struct QOMX_VPP_HQVCTRL_CUSTOM {
    OMX_U32 id;
    OMX_U32 len;
    OMX_U8 data[QOMX_VPP_HQV_CUSTOMPAYLOAD_SZ];
} QOMX_VPP_HQVCTRL_CUSTOM;

typedef struct QOMX_VPP_HQVCTRL_GLOBAL_DEMO {
    OMX_U32 process_percent;
    QOMX_VPP_SPLIT_DIRECTION process_direction;
} QOMX_VPP_HQVCTRL_GLOBAL_DEMO;

typedef struct QOMX_VPP_HQVCTRL_FRC {
    QOMX_VPP_HQV_FRC_MODE mode;
} QOMX_VPP_HQVCTRL_FRC;

/* VIDEO POSTPROCESSING OMX CTRLS */
typedef struct QOMX_VPP_HQVCONTROL {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    QOMX_VPP_HQV_MODE mode;
    QOMX_VPP_HQVCONTROLTYPE ctrl_type;
    union {
        QOMX_VPP_HQVCTRL_CADE cade;
        QOMX_VPP_HQVCTRL_DI di;
        QOMX_VPP_HQVCTRL_CNR cnr;
        QOMX_VPP_HQVCTRL_AIE aie;
        QOMX_VPP_HQVCTRL_CUSTOM custom;
        QOMX_VPP_HQVCTRL_GLOBAL_DEMO global_demo;
        QOMX_VPP_HQVCTRL_FRC frc;
    };
} QOMX_VPP_HQVCONTROL;

/* STRUCTURE TO TURN VPP ON */
typedef struct QOMX_VPP_ENABLE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_BOOL enable_vpp;
} QOMX_VPP_ENABLE;

typedef struct QOMX_EXTRADATA_ENABLE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnable;
} QOMX_EXTRADATA_ENABLE;

typedef enum OMX_QOMX_VIDEO_MBISTATISTICSTYPE {
    QOMX_MBI_STATISTICS_MODE_DEFAULT = 0,
    QOMX_MBI_STATISTICS_MODE_1 = 0x01,
    QOMX_MBI_STATISTICS_MODE_2 = 0x02,
} OMX_QOMX_VIDEO_MBISTATISTICSTYPE;

typedef struct OMX_QOMX_VIDEO_MBI_STATISTICS {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_QOMX_VIDEO_MBISTATISTICSTYPE eMBIStatisticsType;
} OMX_QOMX_VIDEO_MBI_STATISTICS;

typedef struct QOMX_VIDEO_BATCHSIZETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nBatchSize;
} QOMX_VIDEO_BATCHSIZETYPE;

typedef struct QOMX_VIDEO_CLIENT_EXTRADATA {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nFd;
    OMX_U32 nExtradataAllocSize;
    OMX_U32 nExtradataSize;
} QOMX_VIDEO_CLIENT_EXTRADATATYPE;

#if defined(__cplusplus) && defined(USE_CAMERA_METABUFFER_UTILS)

#define CAM_META_BUFFER_EVENT_PERF 0x01

/**
 * Camera1 meta-buffer payload create/access/modify utility
 */
struct MetaBufferUtil {

    enum {
        INT_OFFSET      = 1,
        INT_SIZE        = 2,
        INT_USAGE       = 3,
        INT_TIMESTAMP   = 4,
        INT_COLORFORMAT = 5,
        INT_BUFINDEX    = 6,
        INT_BUFEVENT    = 7,
        INT_TOTAL       = INT_BUFINDEX,
    };

    static int getNumFdsForBatch(int batchSize) {
        return batchSize;
    }
    static int getNumIntsForBatch(int batchSize) {
        return batchSize * INT_TOTAL;
    }
    static int getBatchSize(const native_handle_t *hnd) {
        return MetaBufferUtil::isHandleSane(hnd) ? hnd->numFds : -1;
    }

    /* getters */
    /* return a fd at index or -1 if index is invalid */
    static int getFdAt(const native_handle_t *hnd, int index) {
        return (MetaBufferUtil::isHandleSane(hnd) && (index < hnd->numFds)) ? hnd->data[index] : -1;
    }
    /* return a int of type at index or -1 if index or type is invalid */
    static int getIntAt(const native_handle_t *hnd, int index, int type) {
        int idx = MetaBufferUtil::getIntIndex(hnd, index, type);
        return idx < 0 ? -1 : hnd->data[idx];
    }

    /* setters */
    /* replace the fd at index and return 0. Return -1 if index is invalid */
    static int setFdAt(native_handle_t *hnd, int index, int fd) {
        return (MetaBufferUtil::isHandleSane(hnd) && (index < hnd->numFds)) ? hnd->data[index] = fd, 0 : -1;
    }
    /* replace an int of type at index and return 0. Return -1 if index or type is invalid */
    static int setIntAt(native_handle_t *hnd, int index, int type, int value) {
        int idx = MetaBufferUtil::getIntIndex(hnd, index, type);
        return idx < 0 ? -1 : hnd->data[idx] = value, 0;
    }

private:
    static bool isHandleSane(const native_handle_t *hnd) {
        return hnd && hnd->version == sizeof(native_handle_t);
    }

    static int getIntIndex(const native_handle_t *hnd, int index, int type) {
        int idx = index + type * MetaBufferUtil::getBatchSize(hnd);
        return (MetaBufferUtil::isHandleSane(hnd) && (idx < (hnd->numInts + hnd->numFds))) ? idx : -1;
    }
};

#endif // __cplusplus

typedef enum QOMX_VIDEO_DITHERTYPE {
    QOMX_DITHER_DISABLE = 0,
    QOMX_DITHER_COLORSPACE_EXCEPT_BT2020 = 0x01,
    QOMX_DITHER_ALL_COLORSPACE = 0x02,
} QOMX_VIDEO_DITHERTYPE;

typedef struct QOMX_VIDEO_DITHER_CONTROL {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_DITHERTYPE eDitherType;
} QOMX_VIDEO_DITHER_CONTROL;

typedef enum QOMX_VIDEO_SLICEMODETYPE {
    QOMX_SLICEMODE_DISABLE = 0,
    QOMX_SLICEMODE_MB_COUNT = 0x01,
    QOMX_SLICEMODE_BYTE_COUNT = 0x02,
} QOMX_VIDEO_SLICEMODETYPE;

typedef struct QOMX_VIDEO_PARAM_SLICE_SPACING_TYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_SLICEMODETYPE eSliceMode;
    OMX_U32 nSliceSize;
} QOMX_VIDEO_PARAM_SLICE_SPACING_TYPE;

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* __OMX_QCOM_EXTENSIONS_H__ */
