Home | History | Annotate | Download | only in include
      1 /*
      2  * Copyright (c) 2010 The Khronos Group Inc.
      3  *
      4  * Permission is hereby granted, free of charge, to any person obtaining
      5  * a copy of this software and associated documentation files (the
      6  * "Software"), to deal in the Software without restriction, including
      7  * without limitation the rights to use, copy, modify, merge, publish,
      8  * distribute, sublicense, and/or sell copies of the Software, and to
      9  * permit persons to whom the Software is furnished to do so, subject
     10  * to the following conditions:
     11  * The above copyright notice and this permission notice shall be included
     12  * in all copies or substantial portions of the Software.
     13  *
     14  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
     15  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     16  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
     17  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
     18  * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
     19  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
     20  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     21  *
     22  */
     23 
     24 /** OMX_VideoExt.h - OpenMax IL version 1.1.2
     25  * The OMX_VideoExt header file contains extensions to the
     26  * definitions used by both the application and the component to
     27  * access video items.
     28  */
     29 
     30 #ifndef OMX_IntelVideoExt_h
     31 #define OMX_IntelVideoExt_h
     32 
     33 #ifdef __cplusplus
     34 extern "C" {
     35 #endif /* __cplusplus */
     36 
     37 /* Each OMX header shall include all required header files to allow the
     38  * header to compile without errors.  The includes below are required
     39  * for this header file to compile successfully
     40  */
     41 #include <OMX_Core.h>
     42 #include <OMX_Video.h>
     43 
     44 /** NALU Formats */
     45 typedef enum OMX_INTEL_NALUFORMATSTYPE {
     46     OMX_NaluFormatZeroByteInterleaveLength = 32,
     47     OMX_NaluFormatStartCodesSeparateFirstHeader = 64,
     48     OMX_NaluFormatLengthPrefixedSeparateFirstHeader = 128,
     49 } OMX_INTEL_NALUFORMATSTYPE;
     50 
     51 
     52 typedef struct OMX_VIDEO_PARAM_BYTESTREAMTYPE {
     53      OMX_U32 nSize;                 // Size of the structure
     54      OMX_VERSIONTYPE nVersion;      // OMX specification version
     55      OMX_U32 nPortIndex;            // Port that this structure applies to
     56      OMX_BOOL bBytestream;          // Enable/disable bytestream support
     57 } OMX_VIDEO_PARAM_BYTESTREAMTYPE;
     58 
     59 typedef struct OMX_VIDEO_CONFIG_INTEL_BITRATETYPE {
     60      OMX_U32 nSize;
     61      OMX_VERSIONTYPE nVersion;
     62      OMX_U32 nPortIndex;
     63      OMX_U32 nMaxEncodeBitrate;    // Maximum bitrate
     64      OMX_U32 nTargetPercentage;    // Target bitrate as percentage of maximum bitrate; e.g. 95 is 95%
     65      OMX_U32 nWindowSize;          // Window size in milliseconds allowed for bitrate to reach target
     66      OMX_U32 nInitialQP;           // Initial QP for I frames
     67      OMX_U32 nMinQP;
     68      OMX_U32 nMaxQP;
     69      OMX_U32 nFrameRate;
     70      OMX_U32 nTemporalID;
     71 } OMX_VIDEO_CONFIG_INTEL_BITRATETYPE;
     72 
     73 enum  {
     74     OMX_Video_Intel_ControlRateVideoConferencingMode = OMX_Video_ControlRateVendorStartUnused + 1
     75 };
     76 
     77 typedef struct OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS {
     78      OMX_U32 nSize;                       // Size of the structure
     79      OMX_VERSIONTYPE nVersion;            // OMX specification version
     80      OMX_U32 nPortIndex;                  // Port that this structure applies to
     81      OMX_U32 nMaxNumberOfReferenceFrame;  // Maximum number of reference frames
     82      OMX_U32 nMaxWidth;                   // Maximum width of video
     83      OMX_U32 nMaxHeight;                  // Maximum height of video
     84 } OMX_VIDEO_PARAM_INTEL_AVC_DECODE_SETTINGS;
     85 
     86 
     87 typedef struct OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS {
     88      OMX_U32 nSize;                       // Size of the structure
     89      OMX_VERSIONTYPE nVersion;            // OMX specification version
     90      OMX_U32 nPortIndex;                  // Port that this structure applies to
     91      OMX_U32 nISliceNumber;               // I frame slice number
     92      OMX_U32 nPSliceNumber;               // P frame slice number
     93 } OMX_VIDEO_CONFIG_INTEL_SLICE_NUMBERS;
     94 
     95 
     96 typedef struct OMX_VIDEO_CONFIG_INTEL_AIR {
     97      OMX_U32 nSize;                       // Size of the structure
     98      OMX_VERSIONTYPE nVersion;            // OMX specification version
     99      OMX_U32 nPortIndex;                  // Port that this structure applies to
    100      OMX_BOOL bAirEnable;                 // Enable AIR
    101      OMX_BOOL bAirAuto;                   // AIR auto
    102      OMX_U32 nAirMBs;                     // Number of AIR MBs
    103      OMX_U32 nAirThreshold;               // AIR Threshold
    104 
    105 } OMX_VIDEO_CONFIG_INTEL_AIR;
    106 
    107 typedef struct OMX_VIDEO_PARAM_INTEL_AVCVUI {
    108      OMX_U32 nSize;                       // Size of the structure
    109      OMX_VERSIONTYPE nVersion;            // OMX specification version
    110      OMX_U32 nPortIndex;                  // Port that this structure applies to
    111      OMX_BOOL  bVuiGeneration;            // Enable/disable VUI generation
    112 
    113 } OMX_VIDEO_PARAM_INTEL_AVCVUI;
    114 
    115 typedef struct OMX_VIDEO_PARAM_INTEL_ADAPTIVE_SLICE_CONTROL {
    116      OMX_U32 nSize;                       // Size of the structure
    117      OMX_VERSIONTYPE nVersion;            // OMX specification version
    118      OMX_U32 nPortIndex;                  // Port that this structure applies to
    119      OMX_BOOL bEnable;                    // enable adaptive slice control
    120      OMX_U32 nMinPSliceNumber;            // minimum number of P slices
    121      OMX_U32 nNumPFramesToSkip;           // number of P frames after an I frame to skip before kicking in adaptive slice control
    122      OMX_U32 nSliceSizeThreshold;         // Slice size threshold for adaptive slice control to start a new slice
    123      OMX_U32 nSliceSizeSkipThreshold;     // Slice size skip threshold for adaptive slice control to start a new slice
    124 } OMX_VIDEO_PARAM_INTEL_ADAPTIVE_SLICE_CONTROL;
    125 
    126 /**
    127  * Vendor Private Configs
    128  *
    129  * STRUCT MEMBERS:
    130  *  nSize      : Size of the structure in bytes
    131  *  nVersion   : OMX specification version information
    132  *  nPortIndex : Port that this structure applies to
    133  *  nCapacity  : Specifies the private unit size
    134  *  nHolder    : Pointer to private unit address
    135  */
    136 typedef struct OMX_VIDEO_CONFIG_PRI_INFOTYPE {
    137     OMX_U32 nSize;
    138     OMX_VERSIONTYPE nVersion;
    139     OMX_U32 nPortIndex;
    140     OMX_U32 nCapacity;
    141     OMX_PTR nHolder;
    142 } OMX_VIDEO_CONFIG_PRI_INFOTYPE;
    143 
    144 // Error reporting data structure
    145 typedef struct OMX_VIDEO_CONFIG_INTEL_ERROR_REPORT {
    146     OMX_U32 nSize;
    147     OMX_VERSIONTYPE nVersion;
    148     OMX_U32 nPortIndex;
    149     OMX_BOOL bEnable;
    150 } OMX_VIDEO_CONFIG_INTEL_ERROR_REPORT;
    151 
    152 #define MAX_ERR_NUM 10
    153 
    154 typedef enum
    155 {
    156     OMX_Decode_HeaderError   = 0,
    157     OMX_Decode_MBError       = 1,
    158     OMX_Decode_SliceMissing  = 2,
    159     OMX_Decode_RefMissing    = 3,
    160 } OMX_VIDEO_DECODE_ERRORTYPE;
    161 
    162 typedef struct OMX_VIDEO_ERROR_INFO {
    163     OMX_VIDEO_DECODE_ERRORTYPE type;
    164     OMX_U32 num_mbs;
    165     union {
    166         struct {OMX_U32 start_mb; OMX_U32 end_mb;} mb_pos;
    167     } error_data;
    168 } OMX_VIDEO_ERROR_INFO;
    169 
    170 typedef struct OMX_VIDEO_ERROR_BUFFER {
    171     OMX_U32 errorNumber;   // Error number should be no more than MAX_ERR_NUM
    172     OMX_S64 timeStamp;      // presentation time stamp
    173     OMX_VIDEO_ERROR_INFO errorArray[MAX_ERR_NUM];
    174 } OMX_VIDEO_ERROR_BUFFER;
    175 
    176 // Force K frame for VP8 encode
    177 typedef struct OMX_VIDEO_CONFIG_INTEL_VP8_FORCE_KFRAME {
    178     OMX_U32 nSize;
    179     OMX_VERSIONTYPE nVersion;
    180     OMX_U32 nPortIndex;
    181     OMX_BOOL bForceKFrame;
    182 } OMX_VIDEO_CONFIG_INTEL_VP8_FORCE_KFRAME;
    183 
    184 // max frame size for VP8 encode during WebRTC feature
    185 typedef struct OMX_VIDEO_CONFIG_INTEL_VP8_MAX_FRAME_SIZE_RATIO {
    186     OMX_U32 nSize;
    187     OMX_VERSIONTYPE nVersion;
    188     OMX_U32 nPortIndex;
    189     OMX_U32 nMaxFrameSizeRatio;
    190 } OMX_VIDEO_CONFIG_INTEL_VP8_MAX_FRAME_SIZE_RATIO;
    191 
    192 // temporal layer for Sand
    193 typedef struct OMX_VIDEO_PARAM_INTEL_TEMPORAL_LAYER {
    194     OMX_U32 nSize;
    195     OMX_VERSIONTYPE nVersion;
    196     OMX_U32 nPortIndex;
    197     OMX_U32 nNumberOfTemporalLayer;
    198     OMX_U32 nPeriodicity;
    199     OMX_U32 nLayerID[32];
    200 } OMX_VIDEO_PARAM_INTEL_TEMPORAL_LAYER;
    201 
    202 
    203 // Request OMX to allocate a black frame to video mute feature
    204 typedef struct OMX_VIDEO_INTEL_REQUEST_BALCK_FRAME_POINTER {
    205     OMX_U32 nSize;
    206     OMX_VERSIONTYPE nVersion;
    207     OMX_U32 nPortIndex;
    208     OMX_U32 nFramePointer;
    209 } OMX_VIDEO_INTEL_REQUEST_BALCK_FRAME_POINTER;
    210 
    211 #define OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar (OMX_COLOR_FORMATTYPE)0x7FA00E00
    212 #define OMX_INTEL_COLOR_FormatYUV420PackedSemiPlanar_Tiled (OMX_COLOR_FORMATTYPE)0x7FA00F00
    213 
    214 #ifdef __cplusplus
    215 }
    216 #endif /* __cplusplus */
    217 
    218 #endif /* OMX_VideoExt_h */
    219 /* File EOF */
    220