/*--------------------------------------------------------------------------
Copyright (c) 2011,2015 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 __H_QOMX_VIDEOEXTENSIONS_H__
#define __H_QOMX_VIDEOEXTENSIONS_H__

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

*//** @file QOMX_VideoExtensions.h

@par FILE SERVICES:
      Qualcomm extensions API for OpenMax IL Video.

      This file contains the description of the Qualcomm OpenMax IL
      video extention interface, through which the IL client and OpenMax
      components can access additional video capabilities.

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


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

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

                     INCLUDE FILES FOR MODULE

========================================================================== */
#include <OMX_Core.h>
#include <OMX_Video.h>

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

                      DEFINITIONS AND DECLARATIONS

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

#if defined( __cplusplus )
extern "C"
{
#endif /* end of macro __cplusplus */

/* Video extension strings */
#define OMX_QCOM_INDEX_PARAM_VIDEO_SYNTAXHDR                "OMX.QCOM.index.param.video.SyntaxHdr"
#define OMX_QCOM_INDEX_PARAM_VIDEO_ENCODERMODE              "OMX.QCOM.index.param.video.EncoderMode"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_INTRAREFRESH            "OMX.QCOM.index.config.video.IntraRefresh"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_INTRAPERIOD             "OMX.QCOM.index.config.video.IntraPeriod"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_TEMPORALSPATIALTRADEOFF "OMX.QCOM.index.config.video.TemporalSpatialTradeOff"
#define OMX_QCOM_INDEX_CONFIG_VIDEO_MBCONCEALMENTREPORTING  "OMX.QCOM.index.config.video.MBConcealmentReporting"
#define OMX_QCOM_INDEX_PARAM_VIDEO_EXTRADATAMULTISLICEINFO  "OMX.QCOM.index.param.video.ExtraDataMultiSliceInfo" /**< reference: QOMX_ENABLETYPE */
#define OMX_QCOM_INDEX_CONFIG_VIDEO_FLOWSTATUS              "OMX.QCOM.index.config.video.FlowStatus"             /**< reference: QOMX_FLOWSTATUSTYPE */
#define OMX_QCOM_INDEX_PARAM_VIDEO_PICTURETYPEDECODE        "OMX.QCOM.index.param.video.PictureTypeDecode"       /**< reference: QOMX_VIDEO_DECODEPICTURETYPE */
#define OMX_QCOM_INDEX_PARAM_VIDEO_SAMPLEASPECTRATIO        "OMX.QCOM.index.param.video.SampleAspectRatio"       /**< reference: QOMX_VIDEO_SAMPLEASPECTRATIO */
#define OMX_QCOM_INDEX_PARAM_VIDEO_EXTRADATALTRINFO         "OMX.QCOM.index.param.video.ExtraDataLTRInfo"        /**< reference: QOMX_ENABLETYPE */

/* Video coding types */
#define OMX_QCOM_INDEX_PARAM_VIDEO_DIVX                     "OMX.QCOM.index.param.video.DivX"
#define OMX_QCOM_INDEX_PARAM_VIDEO_VP                       "OMX.QCOM.index.param.video.VP"
#define OMX_QCOM_INDEX_PARAM_VIDEO_SPARK                    "OMX.QCOM.index.param.video.Spark"
#define OMX_QCOM_INDEX_PARAM_VIDEO_VC1                      "OMX.QCOM.index.param.video.VC1"

/**
 * Enumeration used to define the extended video compression
 * codings, not present in the OpenMax IL 1.1.2 specification.
 * NOTE:  This essentially refers to file extensions. If the
 *        coding is being used to specify the ENCODE type, then
 *        additional work must be done to configure the exact
 *        flavor of the compression to be used.
 */
typedef enum QOMX_VIDEO_CODINGTYPE
{
    QOMX_VIDEO_CodingDivX   = 0x7F000001, /**< all versions of DivX */
    QOMX_VIDEO_CodingVP     = 0x7F000002, /**< all versions of On2 VP codec */
    QOMX_VIDEO_CodingSpark  = 0x7F000003, /**< Sorenson Spark */
    QOMX_VIDEO_CodingVC1    = 0x7F000004, /**< VC-1 */
    QOMX_VIDEO_MPEG1        = 0x7F000005  /**< MPEG-1 */
} QOMX_VIDEO_CODINGTYPE;

/**
 * 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;

/**
 * VC-1 profile types, each profile indicates support for
 * various encoding tools.
 */
typedef enum QOMX_VIDEO_VC1PROFILETYPE {
    QOMX_VIDEO_VC1ProfileSimple   = 0x01, /**< Simple Profile */
    QOMX_VIDEO_VC1ProfileMain     = 0x02, /**< Main Profile */
    QOMX_VIDEO_VC1ProfileAdvanced = 0x04, /**< Advanced Profile */
    QOMX_VIDEO_VC1ProfileKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_VC1ProfileVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_VC1ProfileMax = 0x7FFFFFFF
} QOMX_VIDEO_VC1PROFILETYPE;

/**
 * VC-1 level types, each level indicates support for various
 * performance bounds.
 */
typedef enum QOMX_VIDEO_VC1LEVELTYPE {
    QOMX_VIDEO_VC1LevelLow    = 0x01, /**< Low Level, applies to simple and main profiles*/
    QOMX_VIDEO_VC1LevelMedium = 0x02, /**< Medium Level, applies to simple and main profiles */
    QOMX_VIDEO_VC1LevelHigh   = 0x04, /**< High Level, applies to main profile only */
    QOMX_VIDEO_VC1Level0      = 0x08, /**< Level 0, applies to advanced profile only */
    QOMX_VIDEO_VC1Level1      = 0x10, /**< Level 1, applies to advanced profile only */
    QOMX_VIDEO_VC1Level2      = 0x20, /**< Level 2, applies to advanced profile only */
    QOMX_VIDEO_VC1Level3      = 0x40, /**< Level 3, applies to advanced profile only */
    QOMX_VIDEO_VC1Level4      = 0x80, /**< Level 4, applies to advanced profile only */
    QOMX_VIDEO_VC1LevelKhronosExtensions = 0x6F000000,
    QOMX_VIDEO_VC1LevelVendorStartUnused = 0x7F000000,
    QOMX_VIDEO_VC1LevelMax = 0x7FFFFFFF
} QOMX_VIDEO_VC1LEVELTYPE;

/**
 * VC-1 Video Params
 *
 *  STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version information
 *  nPortIndex : Port that this structure applies to
 *  eProfile   : Profile of VC-1 stream / data
 *  eLevel     : Level of VC-1 stream / data
 */
typedef struct QOMX_VIDEO_PARAM_VC1TYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    QOMX_VIDEO_VC1PROFILETYPE eProfile;
    QOMX_VIDEO_VC1LEVELTYPE eLevel;
} QOMX_VIDEO_PARAM_VC1TYPE;

/**
 * Extended MPEG-4 level types not defined in the OpenMax IL
 * 1.1.2 specification, each level indicates support for various
 * frame sizes, bit rates, decoder frame rates.
 */
typedef enum QOMX_VIDEO_MPEG4LEVELTYPE {
    QOMX_VIDEO_MPEG4Level6 = 0x7F000001, /**< Level 6 */
    QOMX_VIDEO_MPEG4Level7 = 0x7F000002, /**< Level 7 */
    QOMX_VIDEO_MPEG4Level8 = 0x7F000003, /**< Level 8 */
    QOMX_VIDEO_MPEG4Level9 = 0x7F000004, /**< Level 9 */
    QOMX_VIDEO_MPEG4LevelMax = 0x7FFFFFFF
} QOMX_VIDEO_MPEG4LEVELTYPE;

/**
 * This structure is used in retrieving the syntax header from a
 * video encoder component, or setting the out of band syntax
 * header configuration data on a video decoder component.
 *
 * STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version info
 *  nPortIndex : Port that this structure applies to
 *  nBytes     : When used with OMX_GetParameter for the encoder
 *               component, it is a read-write field. When
 *               QOMX_VIDEO_SYNTAXHDRTYPE is passed in
 *               OMX_GetParameter this is the size of the buffer
 *               array pointed by data field. When the
 *               OMX_GetParameter call returns this is the
 *               amount of data within the buffer array.
 *
 *               The IL client needs to allocate the buffer
 *               array and then request for the syntax header.
 *               If the size of buffer array to allocate is
 *               unknown to the IL client, then it can call
 *               OMX_GetParamter with nBytes set to 0. In this
 *               case, when OMX_GetParameter returns, the nBytes
 *               field will be set to the size of the syntax
 *               header. IL Client can then allocate a buffer of
 *               this size and call OMX_GetParamter again.
 *
 *               When used with OMX_SetParameter for the decoder
 *               component, it is a read-only field specifying
 *               the amount of data in the buffer array.
 *  data       : The syntax header data. The format of the
 *               syntax header is specific to the video codec,
 *               and is described below.
 *
 *   H.263      : N/A
 *   H.264      : The SPS and PPS parameter sets
 *   MPEG-4     : The VO, VOS, and VOL header
 *   WMV7       : The "Extra Data" info, in the ASF Stream
 *                Properties Object.
 *   WMV8       : The "Extra Data" info, in the ASF Stream
 *                Properties Object.
 *   WMV9 SP/MP : The STRUCT_C portion of the sequence layer
 *                meta data, defined in Table 263 of the VC-1
 *                specification.
 *   VC-1 SP/MP : The STRUCT_C portion of the sequence layer
 *                meta data, defined in Table 263 of the VC-1
 *                specification.
 *   VC-1 AP    : The sequence and entry point header
 *   DivX 3     : N/A
 *   DivX 4.x   : The VO, VOS, and VOL header
 *   DivX 5.x   : The VO, VOS, and VOL header
 *   DivX 6.x   : The VO, VOS, and VOL header
 *   VP6        : N/A
 *   Spark      : N/A
 */
typedef struct QOMX_VIDEO_SYNTAXHDRTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nBytes;
    OMX_U8  data[1];
} QOMX_VIDEO_SYNTAXHDRTYPE;


/**
 * Enumeration used to define the extended video intra refresh types, not
 * present in the OpenMax IL 1.1.2 specification.
 *
 * ENUMS:
 *  IntraRefreshRandom         : Random intra refresh mode.
 */
typedef enum QOMX_VIDEO_INTRAREFRESHTYPE
{
    QOMX_VIDEO_IntraRefreshRandom      = 0x7F100000
} QOMX_VIDEO_INTRAREFRESHTYPE;


/**
 * This structure is used to configure the intra periodicity for encoder.
 *
 * STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version info
 *  nPortIndex : Port that this structure applies to
 *  nIDRPeriod : Defines the periodicity of IDR occurrence. This specifies
 *               coding a frame as IDR after a specific number of intra
 *               frames. The periodicity of intra frame coding is specified by
 *               the nPFrames.  If nIDRPeriod 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.
 *  nPFrames : Specifies the number of P frames between each I Frame.
 *  nBFrames : Specifies the number of B frames between each I Frame.
 */
typedef struct QOMX_VIDEO_INTRAPERIODTYPE  {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nIDRPeriod;
    OMX_U32 nPFrames;
    OMX_U32 nBFrames;
} QOMX_VIDEO_INTRAPERIODTYPE;


/**
 * Enumeration used to define the extended video extra data payload types not
 * present in the OpenMax IL 1.1.2 specification.
 *
 * ENUMS:
 *  VideoMultiSliceInfo : Multi slice layout information
 *
 *  Slice information layout:
 *  First 4 bytes = Number of Slice Entries
 *
 *  Then individual slice entries: 8 bytes per entry.
 *  Slice1 information: offset (4 bytes), Length (4 bytes)
 *  Slice2 information: offset (4 bytes), Length (4 bytes)
 *  Slice3 information: offset (4 bytes), Length (4 bytes)
 *  ...................................
 *  ...................................
 *  SliceN information: offset (4 bytes), Length (4 bytes)
 *
 *
 *  VideoNumConcealedMB : Number of concealed MBs
 *
 *  The data array consists of an unsigned 32-bit size field
 *  indicating the number of concealed macroblocks in the
 *  uncompressed frame.
 *
 *
 *  QOMX_ExtraDataOMXIndex : Indicates that the data payload contains an
 *  OpenMax index and associated payload.
 *
 *  The data of the extra data payload shall contain the value of the
 *  OMX_INDEXTYPE corresponding to the requested operation as an unsigned
 *  32 bit number occupying the first four bytes of the payload. The index
 *  will be immediately followed by the associated structure. Padding bytes
 *  are appended to ensure 32 bit address alignment if needed.
 */
typedef enum QOMX_VIDEO_EXTRADATATYPE
{
   QOMX_ExtraDataVideoMultiSliceInfo = 0x7F100000,
   QOMX_ExtraDataVideoNumConcealedMB,
   QOMX_ExtraDataOMXIndex,
   QOMX_ExtraDataHDCPEncryptionInfo
} QOMX_VIDEO_EXTRADATATYPE;


/**
 * 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        = 0x01,
    QOMX_VIDEO_EncoderModeMMS            = 0x02,
    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 is used to set the temporal (picture rate) - spatial
 * (picture quality) trade-off factor.
 * This setting is only valid when rate control is enabled and set to a mode
 * with variable frame rate. For all other rate control modes this setting is
 * ignored.
 *
 * STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version info
 *  nPortIndex : Port that this structure applies to
 *  nTSFactor : temporal-spatial tradeoff factor value in the range of 0-100.
 *              A factor of 0 won't emphasizes picture rate in rate
 *  control decisions at all i.e only picture quality is emphasized. For
 *  increasing values from 1 to 99 the emphasis of picture rate in rate
 *  control decisions increases. A factor of 100 emphasizes only picture rate
 *  in rate control decisions.
 */
typedef struct QOMX_VIDEO_TEMPORALSPATIALTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nTSFactor;
} QOMX_VIDEO_TEMPORALSPATIALTYPE;

/**
 * This structure is used to enable or disable the MB concealmenet reporting
 * for the uncompressed frames emitted from the port.
 *
 * STRUCT MEMBERS:
 *  nSize      : Size of the structure in bytes
 *  nVersion   : OMX specification version info
 *  nPortIndex : Port that this structure applies to
 *  bEnableMBConcealmentReporting : Flag indicating whether MB concealment
 *               reporting is enabled or disabled.
 *               OMX_TRUE: Enables MB concealment reporting
 *               OMX_FALSE: Disables MB concealment reporting
 */
typedef struct QOMX_VIDEO_MBCONCEALMENTREPORTINGTYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_BOOL bEnableMBConcealmentReporting;
} QOMX_VIDEO_MBCONCEALMENTREPORTINGTYPE;

/**
 * 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;

/**
 * This structure is used to configure the processing of
 * specific picture types.
 *
 * STRUCT MEMBERS:
 *  nSize         : Size of the structure in bytes
 *  nVersion      : OMX specification version info
 *  nPortIndex    : Port that this structure applies to
 *  nPictureTypes : Specifies the picture type(s)
 *                  that shall be processed. The value consists
 *                  of the desired picture types, defined by the
 *                  OMX_VIDEO_PICTURETYPE and
 *                  QOMX_VIDEO_PICTURETYPE enumerations, OR'd to
 *                  signal all the pictures types which are
 *                  allowed.
 */
typedef struct QOMX_VIDEO_DECODEPICTURETYPE {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U32 nPictureTypes;
} QOMX_VIDEO_DECODEPICTURETYPE;

/**
 * This structure describes the sample aspect ratio information.
 *
 * STRUCT MEMBERS:
 *  nSize        : Size of the structure in bytes
 *  nVersion     : OMX specification version info
 *  nPortIndex   : Port that this structure applies to
 *  nWidth       : Specifies the horizontal aspect size of
 *                 the sample
 *  nHeight      : Specifies the vertical aspect size of the
 *                 sample
 */
typedef struct QOMX_VIDEO_SAMPLEASPECTRATIO {
    OMX_U32 nSize;
    OMX_VERSIONTYPE nVersion;
    OMX_U32 nPortIndex;
    OMX_U16 nWidth;
    OMX_U16 nHeight;
} QOMX_VIDEO_SAMPLEASPECTRATIO;

#if defined( __cplusplus )
}
#endif /* end of macro __cplusplus */

#endif /* end of macro __H_QOMX_VIDEOEXTENSIONS_H__ */
