1 /* ------------------------------------------------------------------ 2 * Copyright (C) 1998-2009 PacketVideo 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 13 * express or implied. 14 * See the License for the specific language governing permissions 15 * and limitations under the License. 16 * ------------------------------------------------------------------- 17 */ 18 /* 19 * Copyright (c) 2008 The Khronos Group Inc. 20 * 21 * Permission is hereby granted, free of charge, to any person obtaining 22 * a copy of this software and associated documentation files (the 23 * "Software"), to deal in the Software without restriction, including 24 * without limitation the rights to use, copy, modify, merge, publish, 25 * distribute, sublicense, and/or sell copies of the Software, and to 26 * permit persons to whom the Software is furnished to do so, subject 27 * to the following conditions: 28 * The above copyright notice and this permission notice shall be included 29 * in all copies or substantial portions of the Software. 30 * 31 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 32 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 33 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 34 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 35 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 36 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 37 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 38 * 39 */ 40 41 /** OMX_Types.h - OpenMax IL version 1.1.2 42 * The OMX_Types header file contains the primitive type definitions used by 43 * the core, the application and the component. This file may need to be 44 * modified to be used on systems that do not have "char" set to 8 bits, 45 * "short" set to 16 bits and "long" set to 32 bits. 46 */ 47 48 #ifndef OMX_Types_h 49 #define OMX_Types_h 50 51 #ifdef __cplusplus 52 extern "C" { 53 #endif /* __cplusplus */ 54 55 /** The OMX_API and OMX_APIENTRY are platform specific definitions used 56 * to declare OMX function prototypes. They are modified to meet the 57 * requirements for a particular platform */ 58 #ifdef __SYMBIAN32__ 59 # ifdef __OMX_EXPORTS 60 # define OMX_API __declspec(dllexport) 61 # else 62 # ifdef _WIN32 63 # define OMX_API __declspec(dllexport) 64 # else 65 # define OMX_API __declspec(dllimport) 66 # endif 67 # endif 68 #else 69 # ifdef _WIN32 70 # ifdef __OMX_EXPORTS 71 # define OMX_API __declspec(dllexport) 72 # else 73 //# define OMX_API __declspec(dllimport) 74 #define OMX_API 75 # endif 76 # else 77 # ifdef __OMX_EXPORTS 78 # define OMX_API 79 # else 80 # define OMX_API extern 81 # endif 82 # endif 83 #endif 84 85 #ifndef OMX_APIENTRY 86 #define OMX_APIENTRY 87 #endif 88 89 /** OMX_IN is used to identify inputs to an OMX function. This designation 90 will also be used in the case of a pointer that points to a parameter 91 that is used as an output. */ 92 #ifndef OMX_IN 93 #define OMX_IN 94 #endif 95 96 /** OMX_OUT is used to identify outputs from an OMX function. This 97 designation will also be used in the case of a pointer that points 98 to a parameter that is used as an input. */ 99 #ifndef OMX_OUT 100 #define OMX_OUT 101 #endif 102 103 104 /** OMX_INOUT is used to identify parameters that may be either inputs or 105 outputs from an OMX function at the same time. This designation will 106 also be used in the case of a pointer that points to a parameter that 107 is used both as an input and an output. */ 108 #ifndef OMX_INOUT 109 #define OMX_INOUT 110 #endif 111 112 /** OMX_ALL is used to as a wildcard to select all entities of the same type 113 * when specifying the index, or referring to a object by an index. (i.e. 114 * use OMX_ALL to indicate all N channels). When used as a port index 115 * for a config or parameter this OMX_ALL denotes that the config or 116 * parameter applies to the entire component not just one port. */ 117 #define OMX_ALL 0xFFFFFFFF 118 119 /** In the following we define groups that help building doxygen documentation */ 120 121 /** @defgroup core OpenMAX IL core 122 * Functions and structure related to the OMX IL core 123 */ 124 125 /** @defgroup comp OpenMAX IL component 126 * Functions and structure related to the OMX IL component 127 */ 128 129 /** @defgroup rpm Resource and Policy Management 130 * Structures for resource and policy management of components 131 */ 132 133 /** @defgroup buf Buffer Management 134 * Buffer handling functions and structures 135 */ 136 137 /** @defgroup tun Tunneling 138 * @ingroup core comp 139 * Structures and functions to manage tunnels among component ports 140 */ 141 142 /** @defgroup cp Content Pipes 143 * @ingroup core 144 */ 145 146 /** @defgroup metadata Metadata handling 147 * 148 */ 149 150 /** OMX_U8 is an 8 bit unsigned quantity that is byte aligned */ 151 typedef unsigned char OMX_U8; 152 153 /** OMX_S8 is an 8 bit signed quantity that is byte aligned */ 154 typedef signed char OMX_S8; 155 156 /** OMX_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */ 157 typedef unsigned short OMX_U16; 158 159 /** OMX_S16 is a 16 bit signed quantity that is 16 bit word aligned */ 160 typedef signed short OMX_S16; 161 162 /** OMX_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */ 163 typedef unsigned long OMX_U32; 164 165 /** OMX_S32 is a 32 bit signed quantity that is 32 bit word aligned */ 166 typedef signed long OMX_S32; 167 168 169 /* Users with compilers that cannot accept the "long long" designation should 170 define the OMX_SKIP64BIT macro. It should be noted that this may cause 171 some components to fail to compile if the component was written to require 172 64 bit integral types. However, these components would NOT compile anyway 173 since the compiler does not support the way the component was written. 174 */ 175 #ifndef OMX_SKIP64BIT 176 #ifdef __SYMBIAN32__ 177 /** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ 178 typedef unsigned long long OMX_U64; 179 180 /** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ 181 typedef signed long long OMX_S64; 182 183 #elif defined(WIN32) 184 185 /** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ 186 typedef unsigned __int64 OMX_U64; 187 188 /** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ 189 typedef signed __int64 OMX_S64; 190 191 #else /* WIN32 */ 192 193 /** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ 194 typedef unsigned long long OMX_U64; 195 196 /** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ 197 typedef signed long long OMX_S64; 198 199 #endif /* WIN32 */ 200 #endif 201 202 203 /** The OMX_BOOL type is intended to be used to represent a true or a false 204 value when passing parameters to and from the OMX core and components. The 205 OMX_BOOL is a 32 bit quantity and is aligned on a 32 bit word boundary. 206 */ 207 typedef enum OMX_BOOL { 208 OMX_FALSE = 0, 209 OMX_TRUE = !OMX_FALSE, 210 OMX_BOOL_MAX = 0x7FFFFFFF 211 } OMX_BOOL; 212 213 /** The OMX_PTR type is intended to be used to pass pointers between the OMX 214 applications and the OMX Core and components. This is a 32 bit pointer and 215 is aligned on a 32 bit boundary. 216 */ 217 typedef void* OMX_PTR; 218 219 /** The OMX_STRING type is intended to be used to pass "C" type strings between 220 the application and the core and component. The OMX_STRING type is a 32 221 bit pointer to a zero terminated string. The pointer is word aligned and 222 the string is byte aligned. 223 */ 224 typedef char* OMX_STRING; 225 226 /** The OMX_BYTE type is intended to be used to pass arrays of bytes such as 227 buffers between the application and the component and core. The OMX_BYTE 228 type is a 32 bit pointer to a zero terminated string. The pointer is word 229 aligned and the string is byte aligned. 230 */ 231 typedef unsigned char* OMX_BYTE; 232 233 /** OMX_UUIDTYPE is a very long unique identifier to uniquely identify 234 at runtime. This identifier should be generated by a component in a way 235 that guarantees that every instance of the identifier running on the system 236 is unique. */ 237 typedef unsigned char OMX_UUIDTYPE[128]; 238 239 /** The OMX_DIRTYPE enumeration is used to indicate if a port is an input or 240 an output port. This enumeration is common across all component types. 241 */ 242 typedef enum OMX_DIRTYPE 243 { 244 OMX_DirInput, /**< Port is an input port */ 245 OMX_DirOutput, /**< Port is an output port */ 246 OMX_DirMax = 0x7FFFFFFF 247 } OMX_DIRTYPE; 248 249 /** The OMX_ENDIANTYPE enumeration is used to indicate the bit ordering 250 for numerical data (i.e. big endian, or little endian). 251 */ 252 typedef enum OMX_ENDIANTYPE 253 { 254 OMX_EndianBig, /**< big endian */ 255 OMX_EndianLittle, /**< little endian */ 256 OMX_EndianMax = 0x7FFFFFFF 257 } OMX_ENDIANTYPE; 258 259 260 /** The OMX_NUMERICALDATATYPE enumeration is used to indicate if data 261 is signed or unsigned 262 */ 263 typedef enum OMX_NUMERICALDATATYPE 264 { 265 OMX_NumericalDataSigned, /**< signed data */ 266 OMX_NumericalDataUnsigned, /**< unsigned data */ 267 OMX_NumercialDataMax = 0x7FFFFFFF 268 } OMX_NUMERICALDATATYPE; 269 270 271 /** Unsigned bounded value type */ 272 typedef struct OMX_BU32 { 273 OMX_U32 nValue; /**< actual value */ 274 OMX_U32 nMin; /**< minimum for value (i.e. nValue >= nMin) */ 275 OMX_U32 nMax; /**< maximum for value (i.e. nValue <= nMax) */ 276 } OMX_BU32; 277 278 279 /** Signed bounded value type */ 280 typedef struct OMX_BS32 { 281 OMX_S32 nValue; /**< actual value */ 282 OMX_S32 nMin; /**< minimum for value (i.e. nValue >= nMin) */ 283 OMX_S32 nMax; /**< maximum for value (i.e. nValue <= nMax) */ 284 } OMX_BS32; 285 286 287 /** Structure representing some time or duration in microseconds. This structure 288 * must be interpreted as a signed 64 bit value. The quantity is signed to accommodate 289 * negative deltas and preroll scenarios. The quantity is represented in microseconds 290 * to accomodate high resolution timestamps (e.g. DVD presentation timestamps based 291 * on a 90kHz clock) and to allow more accurate and synchronized delivery (e.g. 292 * individual audio samples delivered at 192 kHz). The quantity is 64 bit to 293 * accommodate a large dynamic range (signed 32 bit values would allow only for plus 294 * or minus 35 minutes). 295 * 296 * Implementations with limited precision may convert the signed 64 bit value to 297 * a signed 32 bit value internally but risk loss of precision. 298 */ 299 #ifndef OMX_SKIP64BIT 300 typedef OMX_S64 OMX_TICKS; 301 #else 302 typedef struct OMX_TICKS 303 { 304 OMX_U32 nLowPart; /** low bits of the signed 64 bit tick value */ 305 OMX_U32 nHighPart; /** high bits of the signed 64 bit tick value */ 306 } OMX_TICKS; 307 #endif 308 #define OMX_TICKS_PER_SECOND 1000000 309 310 /** Define the public interface for the OMX Handle. The core will not use 311 this value internally, but the application should only use this value. 312 */ 313 typedef void* OMX_HANDLETYPE; 314 315 typedef struct OMX_MARKTYPE 316 { 317 OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will 318 generate a mark event upon 319 processing the mark. */ 320 OMX_PTR pMarkData; /**< Application specific data associated with 321 the mark sent on a mark event to disambiguate 322 this mark from others. */ 323 } OMX_MARKTYPE; 324 325 326 /** OMX_NATIVE_DEVICETYPE is used to map a OMX video port to the 327 * platform & operating specific object used to reference the display 328 * or can be used by a audio port for native audio rendering */ 329 typedef void* OMX_NATIVE_DEVICETYPE; 330 331 /** OMX_NATIVE_WINDOWTYPE is used to map a OMX video port to the 332 * platform & operating specific object used to reference the window */ 333 typedef void* OMX_NATIVE_WINDOWTYPE; 334 335 /** The OMX_VERSIONTYPE union is used to specify the version for 336 a structure or component. For a component, the version is entirely 337 specified by the component vendor. Components doing the same function 338 from different vendors may or may not have the same version. For 339 structures, the version shall be set by the entity that allocates the 340 structure. For structures specified in the OMX 1.1 specification, the 341 value of the version shall be set to 1.1.0.0 in all cases. Access to the 342 OMX_VERSIONTYPE can be by a single 32 bit access (e.g. by nVersion) or 343 by accessing one of the structure elements to, for example, check only 344 the Major revision. 345 */ 346 typedef union OMX_VERSIONTYPE 347 { 348 struct 349 { 350 OMX_U8 nVersionMajor; /**< Major version accessor element */ 351 OMX_U8 nVersionMinor; /**< Minor version accessor element */ 352 OMX_U8 nRevision; /**< Revision version accessor element */ 353 OMX_U8 nStep; /**< Step version accessor element */ 354 } s; 355 OMX_U32 nVersion; /**< 32 bit value to make accessing the 356 version easily done in a single word 357 size copy/compare operation */ 358 } OMX_VERSIONTYPE; 359 360 #ifdef __cplusplus 361 } 362 #endif /* __cplusplus */ 363 364 #endif 365 /* File EOF */ 366