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