10c1bc742181ded4930842b46e9507372f0b1b963James Dong/**
20c1bc742181ded4930842b46e9507372f0b1b963James Dong * File: omxtypes.h
30c1bc742181ded4930842b46e9507372f0b1b963James Dong * Brief: Defines basic Data types used in OpenMAX v1.0.2 header files.
40c1bc742181ded4930842b46e9507372f0b1b963James Dong *
50c1bc742181ded4930842b46e9507372f0b1b963James Dong * Copyright � 2005-2008 The Khronos Group Inc. All Rights Reserved.
60c1bc742181ded4930842b46e9507372f0b1b963James Dong *
70c1bc742181ded4930842b46e9507372f0b1b963James Dong * These materials are protected by copyright laws and contain material
80c1bc742181ded4930842b46e9507372f0b1b963James Dong * proprietary to the Khronos Group, Inc.  You may use these materials
90c1bc742181ded4930842b46e9507372f0b1b963James Dong * for implementing Khronos specifications, without altering or removing
100c1bc742181ded4930842b46e9507372f0b1b963James Dong * any trademark, copyright or other notice from the specification.
110c1bc742181ded4930842b46e9507372f0b1b963James Dong *
120c1bc742181ded4930842b46e9507372f0b1b963James Dong * Khronos Group makes no, and expressly disclaims any, representations
130c1bc742181ded4930842b46e9507372f0b1b963James Dong * or warranties, express or implied, regarding these materials, including,
140c1bc742181ded4930842b46e9507372f0b1b963James Dong * without limitation, any implied warranties of merchantability or fitness
150c1bc742181ded4930842b46e9507372f0b1b963James Dong * for a particular purpose or non-infringement of any intellectual property.
160c1bc742181ded4930842b46e9507372f0b1b963James Dong * Khronos Group makes no, and expressly disclaims any, warranties, express
170c1bc742181ded4930842b46e9507372f0b1b963James Dong * or implied, regarding the correctness, accuracy, completeness, timeliness,
180c1bc742181ded4930842b46e9507372f0b1b963James Dong * and reliability of these materials.
190c1bc742181ded4930842b46e9507372f0b1b963James Dong *
200c1bc742181ded4930842b46e9507372f0b1b963James Dong * Under no circumstances will the Khronos Group, or any of its Promoters,
210c1bc742181ded4930842b46e9507372f0b1b963James Dong * Contributors or Members or their respective partners, officers, directors,
220c1bc742181ded4930842b46e9507372f0b1b963James Dong * employees, agents or representatives be liable for any damages, whether
230c1bc742181ded4930842b46e9507372f0b1b963James Dong * direct, indirect, special or consequential damages for lost revenues,
240c1bc742181ded4930842b46e9507372f0b1b963James Dong * lost profits, or otherwise, arising from or in connection with these
250c1bc742181ded4930842b46e9507372f0b1b963James Dong * materials.
260c1bc742181ded4930842b46e9507372f0b1b963James Dong *
270c1bc742181ded4930842b46e9507372f0b1b963James Dong * Khronos and OpenMAX are trademarks of the Khronos Group Inc.
280c1bc742181ded4930842b46e9507372f0b1b963James Dong *
290c1bc742181ded4930842b46e9507372f0b1b963James Dong */
300c1bc742181ded4930842b46e9507372f0b1b963James Dong
310c1bc742181ded4930842b46e9507372f0b1b963James Dong#ifndef _OMXTYPES_H_
320c1bc742181ded4930842b46e9507372f0b1b963James Dong#define _OMXTYPES_H_
330c1bc742181ded4930842b46e9507372f0b1b963James Dong
340c1bc742181ded4930842b46e9507372f0b1b963James Dong#include <limits.h>
35db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyn#include <stdint.h>
360c1bc742181ded4930842b46e9507372f0b1b963James Dong
370c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_IN
380c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_OUT
390c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_INOUT
400c1bc742181ded4930842b46e9507372f0b1b963James Dong
410c1bc742181ded4930842b46e9507372f0b1b963James Dong
420c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef enum {
430c1bc742181ded4930842b46e9507372f0b1b963James Dong
440c1bc742181ded4930842b46e9507372f0b1b963James Dong    /* Mandatory return codes - use cases are explicitly described for each function */
450c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_Sts_NoErr                    =  0,    /* No error, the function completed successfully */
460c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_Sts_Err                      = -2,    /* Unknown/unspecified error */
470c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_Sts_InvalidBitstreamValErr   = -182,  /* Invalid value detected during bitstream processing */
480c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_Sts_MemAllocErr              = -9,    /* Not enough memory allocated for the operation */
490c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_GainCtrErr    	     = -159,  /* AAC: Unsupported gain control data detected */
500c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_PrgNumErr           = -167,  /* AAC: Invalid number of elements for one program   */
510c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_CoefValErr          = -163,  /* AAC: Invalid quantized coefficient value          */
520c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_MaxSfbErr           = -162,  /* AAC: Invalid maxSfb value in relation to numSwb */
530c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_StsACAAC_PlsDataErr		     = -160,  /* AAC: pulse escape sequence data error */
540c1bc742181ded4930842b46e9507372f0b1b963James Dong
550c1bc742181ded4930842b46e9507372f0b1b963James Dong    /* Optional return codes - use cases are explicitly described for each function*/
560c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_Sts_BadArgErr                = -5,    /* Bad Arguments */
570c1bc742181ded4930842b46e9507372f0b1b963James Dong
580c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_TnsNumFiltErr       = -157,  /* AAC: Invalid number of TNS filters  */
590c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_TnsLenErr           = -156,  /* AAC: Invalid TNS region length  */
600c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_TnsOrderErr         = -155,  /* AAC: Invalid order of TNS filter  */
610c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_TnsCoefResErr       = -154,  /* AAC: Invalid bit-resolution for TNS filter coefficients  */
620c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_TnsCoefErr          = -153,  /* AAC: Invalid TNS filter coefficients  */
630c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsACAAC_TnsDirectErr        = -152,  /* AAC: Invalid TNS filter direction  */
640c1bc742181ded4930842b46e9507372f0b1b963James Dong
650c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsICJP_JPEGMarkerErr        = -183,  /* JPEG marker encountered within an entropy-coded block; */
660c1bc742181ded4930842b46e9507372f0b1b963James Dong                                              /* Huffman decoding operation terminated early.           */
670c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsICJP_JPEGMarker           = -181,  /* JPEG marker encountered; Huffman decoding */
680c1bc742181ded4930842b46e9507372f0b1b963James Dong                                              /* operation terminated early.                         */
690c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsIPPP_ContextMatchErr      = -17,   /* Context parameter doesn't match to the operation */
700c1bc742181ded4930842b46e9507372f0b1b963James Dong
710c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_StsSP_EvenMedianMaskSizeErr  = -180,  /* Even size of the Median Filter mask was replaced by the odd one */
720c1bc742181ded4930842b46e9507372f0b1b963James Dong
730c1bc742181ded4930842b46e9507372f0b1b963James Dong    OMX_Sts_MaximumEnumeration       = INT_MAX  /*Placeholder, forces enum of size OMX_INT*/
740c1bc742181ded4930842b46e9507372f0b1b963James Dong
750c1bc742181ded4930842b46e9507372f0b1b963James Dong } OMXResult;          /** Return value or error value returned from a function. Identical to OMX_INT */
760c1bc742181ded4930842b46e9507372f0b1b963James Dong
770c1bc742181ded4930842b46e9507372f0b1b963James Dong
780c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_U8 */
79db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyntypedef uint8_t OMX_U8;
800c1bc742181ded4930842b46e9507372f0b1b963James Dong
810c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_S8 */
82db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyntypedef int8_t OMX_S8;
830c1bc742181ded4930842b46e9507372f0b1b963James Dong
840c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_U16 */
85db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyntypedef uint16_t OMX_U16;
860c1bc742181ded4930842b46e9507372f0b1b963James Dong
870c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_S16 */
88db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyntypedef int16_t OMX_S16;
890c1bc742181ded4930842b46e9507372f0b1b963James Dong
900c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_U32 */
91db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyntypedef uint32_t OMX_U32;
920c1bc742181ded4930842b46e9507372f0b1b963James Dong
930c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_S32 */
94db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyntypedef int32_t OMX_S32;
950c1bc742181ded4930842b46e9507372f0b1b963James Dong
960c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_U64 & OMX_S64 */
970c1bc742181ded4930842b46e9507372f0b1b963James Dong#if defined( _WIN32 ) || defined ( _WIN64 )
980c1bc742181ded4930842b46e9507372f0b1b963James Dong    typedef __int64 OMX_S64; /** Signed 64-bit integer */
990c1bc742181ded4930842b46e9507372f0b1b963James Dong    typedef unsigned __int64 OMX_U64; /** Unsigned 64-bit integer */
1000c1bc742181ded4930842b46e9507372f0b1b963James Dong    #define OMX_MIN_S64			(0x8000000000000000i64)
1010c1bc742181ded4930842b46e9507372f0b1b963James Dong    #define OMX_MIN_U64			(0x0000000000000000i64)
1020c1bc742181ded4930842b46e9507372f0b1b963James Dong    #define OMX_MAX_S64			(0x7FFFFFFFFFFFFFFFi64)
1030c1bc742181ded4930842b46e9507372f0b1b963James Dong    #define OMX_MAX_U64			(0xFFFFFFFFFFFFFFFFi64)
1040c1bc742181ded4930842b46e9507372f0b1b963James Dong#else
105db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyn    typedef int64_t OMX_S64; /** Signed 64-bit integer */
106db43b34c3428e480f8c4c66e7e88f4001f37f91eMark Salyzyn    typedef uint64_t OMX_U64; /** Unsigned 64-bit integer */
1070c1bc742181ded4930842b46e9507372f0b1b963James Dong    #define OMX_MIN_S64			(0x8000000000000000LL)
1080c1bc742181ded4930842b46e9507372f0b1b963James Dong    #define OMX_MIN_U64			(0x0000000000000000LL)
1090c1bc742181ded4930842b46e9507372f0b1b963James Dong    #define OMX_MAX_S64			(0x7FFFFFFFFFFFFFFFLL)
1100c1bc742181ded4930842b46e9507372f0b1b963James Dong    #define OMX_MAX_U64			(0xFFFFFFFFFFFFFFFFLL)
1110c1bc742181ded4930842b46e9507372f0b1b963James Dong#endif
1120c1bc742181ded4930842b46e9507372f0b1b963James Dong
1130c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_SC8 */
1140c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef struct
1150c1bc742181ded4930842b46e9507372f0b1b963James Dong{
1160c1bc742181ded4930842b46e9507372f0b1b963James Dong  OMX_S8 Re; /** Real part */
1170c1bc742181ded4930842b46e9507372f0b1b963James Dong  OMX_S8 Im; /** Imaginary part */
1180c1bc742181ded4930842b46e9507372f0b1b963James Dong
1190c1bc742181ded4930842b46e9507372f0b1b963James Dong} OMX_SC8; /** Signed 8-bit complex number */
1200c1bc742181ded4930842b46e9507372f0b1b963James Dong
1210c1bc742181ded4930842b46e9507372f0b1b963James Dong
1220c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_SC16 */
1230c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef struct
1240c1bc742181ded4930842b46e9507372f0b1b963James Dong{
1250c1bc742181ded4930842b46e9507372f0b1b963James Dong  OMX_S16 Re; /** Real part */
1260c1bc742181ded4930842b46e9507372f0b1b963James Dong  OMX_S16 Im; /** Imaginary part */
1270c1bc742181ded4930842b46e9507372f0b1b963James Dong
1280c1bc742181ded4930842b46e9507372f0b1b963James Dong} OMX_SC16; /** Signed 16-bit complex number */
1290c1bc742181ded4930842b46e9507372f0b1b963James Dong
1300c1bc742181ded4930842b46e9507372f0b1b963James Dong
1310c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_SC32 */
1320c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef struct
1330c1bc742181ded4930842b46e9507372f0b1b963James Dong{
1340c1bc742181ded4930842b46e9507372f0b1b963James Dong  OMX_S32 Re; /** Real part */
1350c1bc742181ded4930842b46e9507372f0b1b963James Dong  OMX_S32 Im; /** Imaginary part */
1360c1bc742181ded4930842b46e9507372f0b1b963James Dong
1370c1bc742181ded4930842b46e9507372f0b1b963James Dong} OMX_SC32; /** Signed 32-bit complex number */
1380c1bc742181ded4930842b46e9507372f0b1b963James Dong
1390c1bc742181ded4930842b46e9507372f0b1b963James Dong
1400c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_SC64 */
1410c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef struct
1420c1bc742181ded4930842b46e9507372f0b1b963James Dong{
1430c1bc742181ded4930842b46e9507372f0b1b963James Dong  OMX_S64 Re; /** Real part */
1440c1bc742181ded4930842b46e9507372f0b1b963James Dong  OMX_S64 Im; /** Imaginary part */
1450c1bc742181ded4930842b46e9507372f0b1b963James Dong
1460c1bc742181ded4930842b46e9507372f0b1b963James Dong} OMX_SC64; /** Signed 64-bit complex number */
1470c1bc742181ded4930842b46e9507372f0b1b963James Dong
1480c1bc742181ded4930842b46e9507372f0b1b963James Dong
1490c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_F32 */
1500c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef float OMX_F32; /** Single precision floating point,IEEE 754 */
1510c1bc742181ded4930842b46e9507372f0b1b963James Dong
1520c1bc742181ded4930842b46e9507372f0b1b963James Dong
1530c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_F64 */
1540c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef double OMX_F64; /** Double precision floating point,IEEE 754 */
1550c1bc742181ded4930842b46e9507372f0b1b963James Dong
1560c1bc742181ded4930842b46e9507372f0b1b963James Dong
1570c1bc742181ded4930842b46e9507372f0b1b963James Dong/* OMX_INT */
1580c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef int OMX_INT; /** signed integer corresponding to machine word length, has maximum signed value INT_MAX*/
1590c1bc742181ded4930842b46e9507372f0b1b963James Dong
1600c1bc742181ded4930842b46e9507372f0b1b963James Dong
1610c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MIN_S8  	   	(-128)
1620c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MIN_U8  		0
1630c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MIN_S16		 	(-32768)
1640c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MIN_U16			0
1650c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MIN_S32			(-2147483647-1)
1660c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MIN_U32			0
1670c1bc742181ded4930842b46e9507372f0b1b963James Dong
1680c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MAX_S8			(127)
1690c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MAX_U8			(255)
1700c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MAX_S16			(32767)
1710c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MAX_U16			(0xFFFF)
1720c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MAX_S32			(2147483647)
1730c1bc742181ded4930842b46e9507372f0b1b963James Dong#define OMX_MAX_U32			(0xFFFFFFFF)
1740c1bc742181ded4930842b46e9507372f0b1b963James Dong
1750c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef void OMXVoid;
1760c1bc742181ded4930842b46e9507372f0b1b963James Dong
1770c1bc742181ded4930842b46e9507372f0b1b963James Dong#ifndef NULL
1780c1bc742181ded4930842b46e9507372f0b1b963James Dong#define NULL ((void*)0)
1790c1bc742181ded4930842b46e9507372f0b1b963James Dong#endif
1800c1bc742181ded4930842b46e9507372f0b1b963James Dong
1810c1bc742181ded4930842b46e9507372f0b1b963James Dong/** Defines the geometric position and size of a rectangle,
1820c1bc742181ded4930842b46e9507372f0b1b963James Dong  * where x,y defines the coordinates of the top left corner
1830c1bc742181ded4930842b46e9507372f0b1b963James Dong  * of the rectangle, with dimensions width in the x-direction
1840c1bc742181ded4930842b46e9507372f0b1b963James Dong  * and height in the y-direction */
1850c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef struct {
1860c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_INT x;      /** x-coordinate of top left corner of rectangle */
1870c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_INT y;      /** y-coordinate of top left corner of rectangle */
1880c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_INT width;  /** Width in the x-direction. */
1890c1bc742181ded4930842b46e9507372f0b1b963James Dong	OMX_INT height; /** Height in the y-direction. */
1900c1bc742181ded4930842b46e9507372f0b1b963James Dong}OMXRect;
1910c1bc742181ded4930842b46e9507372f0b1b963James Dong
1920c1bc742181ded4930842b46e9507372f0b1b963James Dong
1930c1bc742181ded4930842b46e9507372f0b1b963James Dong/** Defines the geometric position of a point, */
1940c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef struct
1950c1bc742181ded4930842b46e9507372f0b1b963James Dong{
1960c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_INT x; /** x-coordinate */
1970c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_INT y;	/** y-coordinate */
1980c1bc742181ded4930842b46e9507372f0b1b963James Dong
1990c1bc742181ded4930842b46e9507372f0b1b963James Dong} OMXPoint;
2000c1bc742181ded4930842b46e9507372f0b1b963James Dong
2010c1bc742181ded4930842b46e9507372f0b1b963James Dong
2020c1bc742181ded4930842b46e9507372f0b1b963James Dong/** Defines the dimensions of a rectangle, or region of interest in an image */
2030c1bc742181ded4930842b46e9507372f0b1b963James Dongtypedef struct
2040c1bc742181ded4930842b46e9507372f0b1b963James Dong{
2050c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_INT width;  /** Width of the rectangle, in the x-direction */
2060c1bc742181ded4930842b46e9507372f0b1b963James Dong OMX_INT height; /** Height of the rectangle, in the y-direction */
2070c1bc742181ded4930842b46e9507372f0b1b963James Dong
2080c1bc742181ded4930842b46e9507372f0b1b963James Dong} OMXSize;
2090c1bc742181ded4930842b46e9507372f0b1b963James Dong
2100c1bc742181ded4930842b46e9507372f0b1b963James Dong#endif /* _OMXTYPES_H_ */
211