• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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