Home | History | Annotate | Download | only in inc
      1 /*--------------------------------------------------------------------------
      2 Copyright (c) 2009, Code Aurora Forum. 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 Code Aurora 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 /*============================================================================
     32 *//** @file OMX_QCOMExtns.h
     33   This header contains constants and type definitions that specify the
     34   extensions added to the OpenMAX Vendor specific APIs.
     35 
     36 *//*========================================================================*/
     37 
     38 
     39 //////////////////////////////////////////////////////////////////////////////
     40 //                             Include Files
     41 //////////////////////////////////////////////////////////////////////////////
     42 #include "OMX_Core.h"
     43 #include "OMX_Video.h"
     44 
     45 /**
     46  * This extension is used to register mapping of a virtual
     47  * address to a physical address. This extension is a parameter
     48  * which can be set using the OMX_SetParameter macro. The data
     49  * pointer corresponding to this extension is
     50  * OMX_QCOM_MemMapEntry. This parameter is a 'write only'
     51  * parameter (Current value cannot be queried using
     52  * OMX_GetParameter macro).
     53  */
     54 #define OMX_QCOM_EXTN_REGISTER_MMAP     "OMX.QCOM.index.param.register_mmap"
     55 
     56 /**
     57  * This structure describes the data pointer corresponding to
     58  * the OMX_QCOM_MMAP_REGISTER_EXTN extension. This parameter
     59  * must be set only 'after' populating a port with a buffer
     60  * using OMX_UseBuffer, wherein the data pointer of the buffer
     61  * corresponds to the virtual address as specified in this
     62  * structure.
     63  */
     64 struct OMX_QCOM_PARAM_MEMMAPENTRYTYPE
     65 {
     66     OMX_U32 nSize;              /** Size of the structure in bytes */
     67     OMX_VERSIONTYPE nVersion;   /**< OMX specification version information */
     68     OMX_U32 nPortIndex;         /**< Port number the structure applies to */
     69 
     70     /**
     71      * The virtual address of memory block
     72      */
     73     OMX_U64 nVirtualAddress;
     74 
     75     /**
     76      * The physical address corresponding to the virtual address. The physical
     77      * address is contiguous for the entire valid range of the virtual
     78      * address.
     79      */
     80     OMX_U64 nPhysicalAddress;
     81 };
     82 
     83 #define QOMX_VIDEO_IntraRefreshRandom (OMX_VIDEO_IntraRefreshVendorStartUnused + 0)
     84 
     85 #define OMX_QCOM_PORTDEFN_EXTN   "OMX.QCOM.index.param.portdefn"
     86 /* Allowed APIs on the above Index: OMX_GetParameter() and OMX_SetParameter() */
     87 
     88 typedef enum OMX_QCOMMemoryRegion
     89 {
     90     OMX_QCOM_MemRegionInvalid,
     91     OMX_QCOM_MemRegionEBI1,
     92     OMX_QCOM_MemRegionSMI,
     93     OMX_QCOM_MemRegionMax = 0X7FFFFFFF
     94 } OMX_QCOMMemoryRegion;
     95 
     96 typedef enum OMX_QCOMCacheAttr
     97 {
     98     OMX_QCOM_CacheAttrNone,
     99     OMX_QCOM_CacheAttrWriteBack,
    100     OMX_QCOM_CacheAttrWriteThrough,
    101     OMX_QCOM_CacheAttrMAX = 0X7FFFFFFF
    102 } OMX_QCOMCacheAttr;
    103 
    104 typedef struct OMX_QCOMRectangle
    105 {
    106    OMX_S32 x;
    107    OMX_S32 y;
    108    OMX_S32 dx;
    109    OMX_S32 dy;
    110 } OMX_QCOMRectangle;
    111 
    112 /** OMX_QCOMFramePackingFormat
    113   * Input or output buffer format
    114   */
    115 typedef enum OMX_QCOMFramePackingFormat
    116 {
    117   /* 0 - unspecified
    118    */
    119   OMX_QCOM_FramePacking_Unspecified,
    120 
    121   /*  1 - Partial frames may be present OMX IL 1.1.1 Figure 2-10:
    122    *  Case 1??Each Buffer Filled In Whole or In Part
    123    */
    124   OMX_QCOM_FramePacking_Arbitrary,
    125 
    126   /*  2 - Multiple complete frames per buffer (integer number)
    127    *  OMX IL 1.1.1 Figure 2-11: Case 2Each Buffer Filled with
    128    *  Only Complete Frames of Data
    129    */
    130   OMX_QCOM_FramePacking_CompleteFrames,
    131 
    132   /*  3 - Only one complete frame per buffer, no partial frame
    133    *  OMX IL 1.1.1 Figure 2-12: Case 3Each Buffer Filled with
    134    *  Only One Frame of Compressed Data. Usually at least one
    135    *  complete unit of data will be delivered in a buffer for
    136    *  uncompressed data formats.
    137    */
    138   OMX_QCOM_FramePacking_OnlyOneCompleteFrame,
    139 
    140   /*  4 - Only one complete subframe per buffer, no partial subframe
    141    *  Example: In H264, one complete NAL per buffer, where one frame
    142    *  can contatin multiple NAL
    143    */
    144   OMX_QCOM_FramePacking_OnlyOneCompleteSubFrame,
    145 
    146   OMX_QCOM_FramePacking_MAX = 0X7FFFFFFF
    147 } OMX_QCOMFramePackingFormat;
    148 
    149 typedef struct OMX_QCOM_PARAM_PORTDEFINITIONTYPE {
    150  OMX_U32 nSize;           /** Size of the structure in bytes */
    151  OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    152  OMX_U32 nPortIndex;    /** Portindex which is extended by this structure */
    153 
    154  /** Platform specific memory region EBI1, SMI, etc.,*/
    155  OMX_QCOMMemoryRegion nMemRegion;
    156 
    157  OMX_QCOMCacheAttr nCacheAttr; /** Cache attributes */
    158 
    159  /** Input or output buffer format */
    160  OMX_U32 nFramePackingFormat;
    161 
    162 } OMX_QCOM_PARAM_PORTDEFINITIONTYPE;
    163 
    164 #define OMX_QCOM_PLATFORMPVT_EXTN   "OMX.QCOM.index.param.platformprivate"
    165 /** Allowed APIs on the above Index: OMX_SetParameter() */
    166 
    167 typedef enum OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE
    168 {
    169     /** Enum for PMEM information */
    170     OMX_QCOM_PLATFORM_PRIVATE_PMEM = 0x1
    171 } OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE;
    172 
    173 /** IL client will set the following structure. A failure
    174  *  code will be returned if component does not support the
    175  *  value provided for 'type'.
    176  */
    177 struct OMX_QCOM_PLATFORMPRIVATE_EXTN
    178 {
    179     OMX_U32 nSize;        /** Size of the structure in bytes */
    180     OMX_VERSIONTYPE nVersion; /** OMX spec version information */
    181     OMX_U32 nPortIndex;  /** Port number on which usebuffer extn is applied */
    182 
    183     /** Type of extensions should match an entry from
    184      OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE
    185     */
    186     OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE type;
    187 };
    188 
    189 typedef struct OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO
    190 {
    191     /** pmem file descriptor */
    192     OMX_U32 pmem_fd;
    193     /** Offset from pmem device base address */
    194     OMX_U32 offset;
    195 }OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO;
    196 
    197 typedef struct OMX_QCOM_PLATFORM_PRIVATE_ENTRY
    198 {
    199     /** Entry type */
    200     OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE type;
    201 
    202     /** Pointer to platform specific entry */
    203     void* entry;
    204 }OMX_QCOM_PLATFORM_PRIVATE_ENTRY;
    205 
    206 typedef struct OMX_QCOM_PLATFORM_PRIVATE_LIST
    207 {
    208     /** Number of entries */
    209     OMX_U32 nEntries;
    210 
    211     /** Pointer to array of platform specific entries *
    212      * Contiguous block of OMX_QCOM_PLATFORM_PRIVATE_ENTRY element
    213     */
    214     OMX_QCOM_PLATFORM_PRIVATE_ENTRY* entryList;
    215 }OMX_QCOM_PLATFORM_PRIVATE_LIST;
    216 
    217 #define OMX_QCOM_FRAME_PACKING_FORMAT   "OMX.QCOM.index.param.framepackfmt"
    218 /* Allowed API call: OMX_GetParameter() */
    219 /* IL client can use this index to rerieve the list of frame formats *
    220  * supported by the component */
    221 
    222 typedef struct OMX_QCOM_FRAME_PACKINGFORMAT_TYPE {
    223     OMX_U32 nSize;
    224     OMX_VERSIONTYPE nVersion;
    225     OMX_U32 nPortIndex;
    226     OMX_U32 nIndex;
    227     OMX_QCOMFramePackingFormat eframePackingFormat;
    228 } OMX_QCOM_FRAME_PACKINGFORMAT_TYPE;
    229 
    230 
    231 /**
    232  * Following is the enum for color formats supported on Qualcomm
    233  * MSMs YVU420SemiPlanar color format is not defined in OpenMAX
    234  * 1.1.1 and prior versions of OpenMAX specification.
    235  */
    236 
    237 enum OMX_QCOM_COLOR_FORMATTYPE
    238 {
    239 
    240 /** YVU420SemiPlanar: YVU planar format, organized with a first
    241  *  plane containing Y pixels, and a second plane containing
    242  *  interleaved V and U pixels. V and U pixels are sub-sampled
    243  *  by a factor of two both horizontally and vertically.
    244  */
    245     OMX_QCOM_COLOR_FormatYVU420SemiPlanar = 0x7FA30C00,
    246     QOMX_COLOR_FormatYVU420PackedSemiPlanar32m4ka,
    247     QOMX_COLOR_FormatYUV420PackedSemiPlanar16m2ka,
    248     QOMX_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka
    249 };
    250 
    251 enum OMX_QCOM_VIDEO_CODINGTYPE
    252 {
    253 /** Codecs support by qualcomm which are not listed in OMX 1.1.x
    254  *  spec
    255  *   */
    256     OMX_QCOM_VIDEO_CodingVC1  = 0x7FA30C00 ,
    257     OMX_QCOM_VIDEO_CodingWMV9 = 0x7FA30C01,
    258     QOMX_VIDEO_CodingDivx = 0x7FA30C02,     /**< Value when coding is Divx */
    259     QOMX_VIDEO_CodingSpark = 0x7FA30C03,     /**< Value when coding is Sorenson Spark */
    260     QOMX_VIDEO_CodingVp = 0x7FA30C04
    261 };
    262 
    263 enum OMX_QCOM_EXTN_INDEXTYPE
    264 {
    265     /** Qcom proprietary extension index list */
    266 
    267     /* "OMX.QCOM.index.param.register_mmap" */
    268     OMX_QcomIndexRegmmap = 0x7F000000,
    269 
    270     /* "OMX.QCOM.index.param.platformprivate" */
    271     OMX_QcomIndexPlatformPvt = 0x7F000001,
    272 
    273     /* "OMX.QCOM.index.param.portdefn" */
    274     OMX_QcomIndexPortDefn = 0x7F000002,
    275 
    276     /* "OMX.QCOM.index.param.framepackingformat" */
    277     OMX_QcomIndexPortFramePackFmt = 0x7F000003,
    278 
    279     /*"OMX.QCOM.index.param.Interlaced */
    280     OMX_QcomIndexParamInterlaced = 0x7F000004,
    281 
    282     /*"OMX.QCOM.index.config.interlaceformat */
    283     OMX_QcomIndexConfigInterlaced = 0x7F000005,
    284 
    285     /*"OMX.QCOM.index.param.syntaxhdr" */
    286     QOMX_IndexParamVideoSyntaxHdr = 0x7F000006,
    287 
    288     /*"OMX.QCOM.index.config.intraperiod" */
    289     QOMX_IndexConfigVideoIntraperiod = 0x7F000007,
    290 
    291     /*"OMX.QCOM.index.config.randomIntrarefresh" */
    292     QOMX_IndexConfigVideoIntraRefresh = 0x7F000008,
    293 
    294     /*"OMX.QCOM.index.config.video.TemporalSpatialTradeOff" */
    295     QOMX_IndexConfigVideoTemporalSpatialTradeOff = 0x7F000009,
    296 
    297     /*"OMX.QCOM.index.param.video.EncoderMode" */
    298     QOMX_IndexParamVideoEncoderMode = 0x7F00000A,
    299 
    300     /*"OMX.QCOM.index.param.Divxtype */
    301     OMX_QcomIndexParamVideoDivx = 0x7F00000B,
    302 
    303     /*"OMX.QCOM.index.param.Sparktype */
    304     OMX_QcomIndexParamVideoSpark = 0x7F00000C,
    305 
    306     /*"OMX.QCOM.index.param.Vptype */
    307     OMX_QcomIndexParamVideoVp = 0x7F00000D,
    308 
    309     OMX_QcomIndexQueryNumberOfVideoDecInstance = 0x7F00000E
    310 };
    311 
    312 /**
    313  * Enumeration used to define the video encoder modes
    314  *
    315  * ENUMS:
    316  *  EncoderModeDefault : Default video recording mode.
    317  *                       All encoder settings made through
    318  *                       OMX_SetParameter/OMX_SetConfig are applied. No
    319  *                       parameter is overridden.
    320  *  EncoderModeMMS : Video recording mode for MMS (Multimedia Messaging
    321  *                   Service). This mode is similar to EncoderModeDefault
    322  *                   except that here the Rate control mode is overridden
    323  *                   internally and set as a variant of variable bitrate with
    324  *                   variable frame rate. After this mode is set if the IL
    325  *                   client tries to set OMX_VIDEO_CONTROLRATETYPE via
    326  *                   OMX_IndexParamVideoBitrate that would be rejected. For
    327  *                   this, client should set mode back to EncoderModeDefault
    328  *                   first and then change OMX_VIDEO_CONTROLRATETYPE.
    329  */
    330 typedef enum QOMX_VIDEO_ENCODERMODETYPE
    331 {
    332     QOMX_VIDEO_EncoderModeDefault        = 0x00,
    333     QOMX_VIDEO_EncoderModeMMS            = 0x01,
    334     QOMX_VIDEO_EncoderModeMax            = 0x7FFFFFFF
    335 } QOMX_VIDEO_ENCODERMODETYPE;
    336 
    337 /**
    338  * This structure is used to set the video encoder mode.
    339  *
    340  * STRUCT MEMBERS:
    341  *  nSize      : Size of the structure in bytes
    342  *  nVersion   : OMX specification version info
    343  *  nPortIndex : Port that this structure applies to
    344  *  nMode : defines the video encoder mode
    345  */
    346 typedef struct QOMX_VIDEO_PARAM_ENCODERMODETYPE {
    347     OMX_U32 nSize;
    348     OMX_VERSIONTYPE nVersion;
    349     OMX_U32 nPortIndex;
    350     QOMX_VIDEO_ENCODERMODETYPE nMode;
    351 } QOMX_VIDEO_PARAM_ENCODERMODETYPE;
    352 
    353 /**
    354  * This structure describes the parameters corresponding to the
    355  * QOMX_VIDEO_SYNTAXHDRTYPE extension. This parameter can be queried
    356  * during the loaded state.
    357  */
    358 
    359 typedef struct QOMX_VIDEO_SYNTAXHDRTYPE
    360 {
    361    OMX_U32 nSize;           /** Size of the structure in bytes */
    362    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    363    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
    364    OMX_U32 nBytes;    	    /** The number of bytes filled in to the buffer */
    365    OMX_U8 data[1];          /** Buffer to store the header information */
    366 } QOMX_VIDEO_SYNTAXHDRTYPE;
    367 
    368 /**
    369  * This structure describes the parameters corresponding to the
    370  * QOMX_VIDEO_TEMPORALSPATIALTYPE extension. This parameter can be set
    371  * dynamically during any state except the state invalid.  This is primarily
    372  * used for setting MaxQP from the application.  This is set on the out port.
    373  */
    374 
    375 typedef struct QOMX_VIDEO_TEMPORALSPATIALTYPE
    376 {
    377    OMX_U32 nSize;           /** Size of the structure in bytes */
    378    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    379    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
    380    OMX_U32 nTSFactor;       /** Temoral spatial tradeoff factor value in 0-100 */
    381 } QOMX_VIDEO_TEMPORALSPATIALTYPE;
    382 
    383 /**
    384  * This structure describes the parameters corresponding to the
    385  * OMX_QCOM_VIDEO_CONFIG_INTRAPERIODTYPE extension. This parameter can be set
    386  * dynamically during any state except the state invalid.  This is set on the out port.
    387  */
    388 
    389 typedef struct QOMX_VIDEO_INTRAPERIODTYPE
    390 {
    391    OMX_U32 nSize;           /** Size of the structure in bytes */
    392    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    393    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
    394    OMX_U32 nIDRPeriod;      /** This specifies coding a frame as IDR after every nPFrames
    395 			        of intra frames. If this parameter is set to 0, only the
    396 				first frame of the encode session is an IDR frame. This
    397 				field is ignored for non-AVC codecs and is used only for
    398 				codecs that support IDR Period */
    399    OMX_U32 nPFrames;         /** The number of "P" frames between two "I" frames */
    400    OMX_U32 nBFrames;         /** The number of "B" frames between two "I" frames */
    401 } QOMX_VIDEO_INTRAPERIODTYPE;
    402 
    403 /**
    404  * This structure describes the parameters corresponding to the
    405  * OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE extension. This parameter can be set
    406  * dynamically during any state except the state invalid. This is used for the buffer negotiation
    407  * with other clients.  This is set on the out port.
    408  */
    409 typedef struct OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE
    410 {
    411    OMX_U32 nSize;            /** Size of the structure in bytes */
    412    OMX_VERSIONTYPE nVersion; /** OMX specification version information */
    413    OMX_U32 nPortIndex;       /** Portindex which is extended by this structure */
    414    OMX_U32 nBufferOccupancy; /** The number of bytes to be set for the buffer occupancy */
    415 } OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE;
    416 
    417 /**
    418  * This structure describes the parameters corresponding to the
    419  * OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE extension. This parameter can be set
    420  * dynamically during any state except the state invalid. This is primarily used for the dynamic/random
    421  * intrarefresh.  This is set on the out port.
    422  */
    423 typedef struct OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE
    424 {
    425    OMX_U32 nSize;           /** Size of the structure in bytes */
    426    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    427    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
    428    OMX_U32 nRirMBs;         /** The number of MBs to be set for intrarefresh */
    429 } OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE;
    430 
    431 
    432 /**
    433  * This structure describes the parameters corresponding to the
    434  * OMX_QCOM_VIDEO_CONFIG_QPRANGE extension. This parameter can be set
    435  * dynamically during any state except the state invalid. This is primarily
    436  * used for the min/max QP to be set from the application.  This
    437  * is set on the out port.
    438  */
    439 typedef struct OMX_QCOM_VIDEO_CONFIG_QPRANGE
    440 {
    441    OMX_U32 nSize;           /** Size of the structure in bytes */
    442    OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    443    OMX_U32 nPortIndex;      /** Portindex which is extended by this structure */
    444    OMX_U32 nMinQP;          /** The number for minimum quantization parameter */
    445    OMX_U32 nMaxQP;          /** The number for maximum quantization parameter */
    446 } OMX_QCOM_VIDEO_CONFIG_QPRANGE;
    447 
    448 
    449 typedef struct OMX_VENDOR_EXTRADATATYPE  {
    450     OMX_U32 nPortIndex;
    451     OMX_U32 nDataSize;
    452     OMX_U8  *pData;     // cdata (codec_data/extradata)
    453 } OMX_VENDOR_EXTRADATATYPE;
    454 
    455 typedef enum OMX_INDEXVENDORTYPE {
    456     OMX_IndexVendorFileReadInputFilename = 0xFF000001,
    457     OMX_IndexVendorParser3gpInputFilename = 0xFF000002,
    458     OMX_IndexVendorVideoExtraData = 0xFF000003,
    459     OMX_IndexVendorAudioExtraData = 0xFF000004
    460 } OMX_INDEXVENDORTYPE;
    461 
    462 typedef enum OMX_QCOM_VC1RESOLUTIONTYPE
    463 {
    464    OMX_QCOM_VC1_PICTURE_RES_1x1,
    465    OMX_QCOM_VC1_PICTURE_RES_2x1,
    466    OMX_QCOM_VC1_PICTURE_RES_1x2,
    467    OMX_QCOM_VC1_PICTURE_RES_2x2
    468 } OMX_QCOM_VC1RESOLUTIONTYPE;
    469 
    470 typedef enum OMX_QCOM_INTERLACETYPE
    471 {
    472     OMX_QCOM_InterlaceFrameProgressive,
    473     OMX_QCOM_InterlaceInterleaveFrameTopFieldFirst,
    474     OMX_QCOM_InterlaceInterleaveFrameBottomFieldFirst,
    475     OMX_QCOM_InterlaceFrameTopFieldFirst,
    476     OMX_QCOM_InterlaceFrameBottomFieldFirst,
    477     OMX_QCOM_InterlaceFieldTop,
    478     OMX_QCOM_InterlaceFieldBottom
    479 }OMX_QCOM_INTERLACETYPE;
    480 
    481 typedef struct OMX_QCOM_PARAM_VIDEO_INTERLACETYPE
    482 {
    483     OMX_U32 nSize;           /** Size of the structure in bytes */
    484     OMX_VERSIONTYPE nVersion;/** OMX specification version information */
    485     OMX_U32 nPortIndex;    /** Portindex which is extended by this structure */
    486     OMX_BOOL bInterlace;  /** Interlace content **/
    487 }OMX_QCOM_PARAM_VIDEO_INTERLACETYPE;
    488 
    489 typedef struct OMX_QCOM_CONFIG_INTERLACETYPE
    490 {
    491     OMX_U32 nSize;
    492     OMX_VERSIONTYPE nVersion;
    493     OMX_U32 nPortIndex;
    494     OMX_U32 nIndex;
    495     OMX_QCOM_INTERLACETYPE eInterlaceType;
    496 }OMX_QCOM_CONFIG_INTERLACETYPE;
    497 
    498 #define MAX_PAN_SCAN_WINDOWS 4
    499 
    500 typedef struct OMX_QCOM_PANSCAN
    501 {
    502    OMX_U32 numWindows;
    503    OMX_QCOMRectangle window[MAX_PAN_SCAN_WINDOWS];
    504 } OMX_QCOM_PANSCAN;
    505 
    506 typedef struct OMX_QCOM_EXTRADATA_FRAMEINFO
    507 {
    508    // common frame meta data. interlace related info removed
    509    OMX_VIDEO_PICTURETYPE  ePicType;
    510    OMX_QCOM_INTERLACETYPE interlaceType;
    511    OMX_QCOM_PANSCAN       panScan;
    512    OMX_U32                nConcealedMacroblocks;
    513 } OMX_QCOM_EXTRADATA_FRAMEINFO;
    514 
    515 typedef struct OMX_QCOM_EXTRADATA_FRAMEDIMENSION
    516 {
    517    /** Frame Dimensions added to each YUV buffer */
    518    OMX_U32   nDecWidth;  /** Width  rounded to multiple of 16 */
    519    OMX_U32   nDecHeight; /** Height rounded to multiple of 16 */
    520    OMX_U32   nActualWidth; /** Actual Frame Width */
    521    OMX_U32   nActualHeight; /** Actual Frame Height */
    522 
    523 }OMX_QCOM_EXTRADATA_FRAMEDIMENSION;
    524 
    525 typedef struct OMX_QCOM_H264EXTRADATA
    526 {
    527    OMX_U64 seiTimeStamp;
    528 } OMX_QCOM_H264EXTRADATA;
    529 
    530 typedef struct OMX_QCOM_VC1EXTRADATA
    531 {
    532    OMX_U32                     nVC1RangeY;
    533    OMX_U32                     nVC1RangeUV;
    534    OMX_QCOM_VC1RESOLUTIONTYPE eVC1PicResolution;
    535 } OMX_QCOM_VC1EXTRADATA;
    536 
    537 typedef union OMX_QCOM_EXTRADATA_CODEC_DATA
    538 {
    539    OMX_QCOM_H264EXTRADATA h264ExtraData;
    540    OMX_QCOM_VC1EXTRADATA vc1ExtraData;
    541 } OMX_QCOM_EXTRADATA_CODEC_DATA;
    542 
    543 typedef enum OMX_QCOM_EXTRADATATYPE
    544 {
    545    OMX_ExtraDataFrameInfo = 0x7F000001,
    546    OMX_ExtraDataH264 = 0x7F000002,
    547    OMX_ExtraDataVC1 = 0x7F000003,
    548    OMX_ExtraDataFrameDimension = 0x7F000004,
    549    OMX_ExtraDataVideoEncoderSliceInfo = 0x7F000005
    550 } OMX_QCOM_EXTRADATATYPE;
    551 
    552 
    553 #define OMX_EXTRADATA_HEADER_SIZE 20
    554 
    555 /**
    556  * DivX Versions
    557  */
    558 typedef enum  QOMX_VIDEO_DIVXFORMATTYPE {
    559     QOMX_VIDEO_DIVXFormatUnused = 0x01, /**< Format unused or unknown */
    560     QOMX_VIDEO_DIVXFormat311    = 0x02, /**< DivX 3.11 */
    561     QOMX_VIDEO_DIVXFormat4      = 0x04, /**< DivX 4 */
    562     QOMX_VIDEO_DIVXFormat5      = 0x08, /**< DivX 5 */
    563     QOMX_VIDEO_DIVXFormat6      = 0x10, /**< DivX 6 */
    564     QOMX_VIDEO_DIVXFormatKhronosExtensions = 0x6F000000,
    565     QOMX_VIDEO_DIVXFormatVendorStartUnused = 0x7F000000,
    566     QOMX_VIDEO_DIVXFormatMax = 0x7FFFFFFF
    567 } QOMX_VIDEO_DIVXFORMATTYPE;
    568 
    569 /**
    570  * DivX profile types, each profile indicates support for
    571  * various performance bounds.
    572  */
    573 typedef enum QOMX_VIDEO_DIVXPROFILETYPE {
    574     QOMX_VIDEO_DivXProfileqMobile = 0x01, /**< qMobile Profile */
    575     QOMX_VIDEO_DivXProfileMobile  = 0x02, /**< Mobile Profile */
    576     QOMX_VIDEO_DivXProfileMT      = 0x04, /**< Mobile Theatre Profile */
    577     QOMX_VIDEO_DivXProfileHT      = 0x08, /**< Home Theatre Profile */
    578     QOMX_VIDEO_DivXProfileHD      = 0x10, /**< High Definition Profile */
    579     QOMX_VIDEO_DIVXProfileKhronosExtensions = 0x6F000000,
    580     QOMX_VIDEO_DIVXProfileVendorStartUnused = 0x7F000000,
    581     QOMX_VIDEO_DIVXProfileMax = 0x7FFFFFFF
    582 } QOMX_VIDEO_DIVXPROFILETYPE;
    583 
    584 /**
    585  * DivX Video Params
    586  *
    587  *  STRUCT MEMBERS:
    588  *  nSize      : Size of the structure in bytes
    589  *  nVersion   : OMX specification version information
    590  *  nPortIndex : Port that this structure applies to
    591  *  eFormat    : Version of DivX stream / data
    592  *  eProfile   : Profile of DivX stream / data
    593  */
    594 typedef struct QOMX_VIDEO_PARAM_DIVXTYPE {
    595     OMX_U32 nSize;
    596     OMX_VERSIONTYPE nVersion;
    597     OMX_U32 nPortIndex;
    598     QOMX_VIDEO_DIVXFORMATTYPE eFormat;
    599     QOMX_VIDEO_DIVXPROFILETYPE eProfile;
    600 } QOMX_VIDEO_PARAM_DIVXTYPE;
    601 
    602 
    603 
    604 /**
    605  * VP Versions
    606  */
    607 typedef enum QOMX_VIDEO_VPFORMATTYPE {
    608     QOMX_VIDEO_VPFormatUnused = 0x01, /**< Format unused or unknown */
    609     QOMX_VIDEO_VPFormat6      = 0x02, /**< VP6 Video Format */
    610     QOMX_VIDEO_VPFormat7      = 0x04, /**< VP7 Video Format */
    611     QOMX_VIDEO_VPFormat8      = 0x08, /**< VP8 Video Format */
    612     QOMX_VIDEO_VPFormatKhronosExtensions = 0x6F000000,
    613     QOMX_VIDEO_VPFormatVendorStartUnused = 0x7F000000,
    614     QOMX_VIDEO_VPFormatMax = 0x7FFFFFFF
    615 } QOMX_VIDEO_VPFORMATTYPE;
    616 
    617 /**
    618  * VP profile types, each profile indicates support for various
    619  * encoding tools.
    620  */
    621 typedef enum QOMX_VIDEO_VPPROFILETYPE {
    622     QOMX_VIDEO_VPProfileSimple   = 0x01, /**< Simple Profile, applies to VP6 only */
    623     QOMX_VIDEO_VPProfileAdvanced = 0x02, /**< Advanced Profile, applies to VP6 only */
    624     QOMX_VIDEO_VPProfileVersion0 = 0x04, /**< Version 0, applies to VP7 and VP8 */
    625     QOMX_VIDEO_VPProfileVersion1 = 0x08, /**< Version 1, applies to VP7 and VP8 */
    626     QOMX_VIDEO_VPProfileVersion2 = 0x10, /**< Version 2, applies to VP8 only */
    627     QOMX_VIDEO_VPProfileVersion3 = 0x20, /**< Version 3, applies to VP8 only */
    628     QOMX_VIDEO_VPProfileKhronosExtensions = 0x6F000000,
    629     QOMX_VIDEO_VPProfileVendorStartUnused = 0x7F000000,
    630     QOMX_VIDEO_VPProfileMax = 0x7FFFFFFF
    631 } QOMX_VIDEO_VPPROFILETYPE;
    632 
    633 /**
    634  * VP Video Params
    635  *
    636  *  STRUCT MEMBERS:
    637  *  nSize      : Size of the structure in bytes
    638  *  nVersion   : OMX specification version information
    639  *  nPortIndex : Port that this structure applies to
    640  *  eFormat    : Format of VP stream / data
    641  *  eProfile   : Profile or Version of VP stream / data
    642  */
    643 typedef struct QOMX_VIDEO_PARAM_VPTYPE {
    644     OMX_U32 nSize;
    645     OMX_VERSIONTYPE nVersion;
    646     OMX_U32 nPortIndex;
    647     QOMX_VIDEO_VPFORMATTYPE eFormat;
    648     QOMX_VIDEO_VPPROFILETYPE eProfile;
    649 } QOMX_VIDEO_PARAM_VPTYPE;
    650 
    651 /**
    652  * Spark Versions
    653  */
    654 typedef enum QOMX_VIDEO_SPARKFORMATTYPE {
    655     QOMX_VIDEO_SparkFormatUnused = 0x01, /**< Format unused or unknown */
    656     QOMX_VIDEO_SparkFormat0      = 0x02, /**< Video Format Version 0 */
    657     QOMX_VIDEO_SparkFormat1      = 0x04, /**< Video Format Version 1 */
    658     QOMX_VIDEO_SparkFormatKhronosExtensions = 0x6F000000,
    659     QOMX_VIDEO_SparkFormatVendorStartUnused = 0x7F000000,
    660     QOMX_VIDEO_SparkFormatMax = 0x7FFFFFFF
    661 } QOMX_VIDEO_SPARKFORMATTYPE;
    662 
    663 /**
    664  * Spark Video Params
    665  *
    666  *  STRUCT MEMBERS:
    667  *  nSize      : Size of the structure in bytes
    668  *  nVersion   : OMX specification version information
    669  *  nPortIndex : Port that this structure applies to
    670  *  eFormat    : Version of Spark stream / data
    671  */
    672 typedef struct QOMX_VIDEO_PARAM_SPARKTYPE {
    673     OMX_U32 nSize;
    674     OMX_VERSIONTYPE nVersion;
    675     OMX_U32 nPortIndex;
    676     QOMX_VIDEO_SPARKFORMATTYPE eFormat;
    677 } QOMX_VIDEO_PARAM_SPARKTYPE;
    678 
    679 
    680 typedef struct QOMX_VIDEO_QUERY_DECODER_INSTANCES {
    681     OMX_U32 nSize;
    682     OMX_VERSIONTYPE nVersion;
    683     OMX_U32 nPortIndex;
    684     OMX_U32 nNumOfInstances;
    685 } QOMX_VIDEO_QUERY_DECODER_INSTANCES;
    686 
    687 
    688 
    689 #endif /* __OMX_QCOM_EXTENSIONS_H__ */
    690