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