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