/*
 ** Copyright 2003-2010, VisualOn, Inc.
 **
 ** Licensed under the Apache License, Version 2.0 (the "License");
 ** you may not use this file except in compliance with the License.
 ** You may obtain a copy of the License at
 **
 **     http://www.apache.org/licenses/LICENSE-2.0
 **
 ** Unless required by applicable law or agreed to in writing, software
 ** distributed under the License is distributed on an "AS IS" BASIS,
 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 ** See the License for the specific language governing permissions and
 ** limitations under the License.
 */
/*******************************************************************************
	File:		voType.h

	Content:	data type definition

*******************************************************************************/
#ifndef __voType_H__
#define __voType_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#ifdef _WIN32
#	define VO_API __cdecl
#	define VO_CBI __stdcall
#else
#	define VO_API
#	define VO_CBI
#endif //_WIN32

/** VO_IN is used to identify inputs to an VO function.  This designation
    will also be used in the case of a pointer that points to a parameter
    that is used as an output. */
#ifndef VO_IN
#define VO_IN
#endif

/** VO_OUT is used to identify outputs from an VO function.  This
    designation will also be used in the case of a pointer that points
    to a parameter that is used as an input. */
#ifndef VO_OUT
#define VO_OUT
#endif

/** VO_INOUT is used to identify parameters that may be either inputs or
    outputs from an VO function at the same time.  This designation will
    also be used in the case of a pointer that  points to a parameter that
    is used both as an input and an output. */
#ifndef VO_INOUT
#define VO_INOUT
#endif

#define VO_MAX_ENUM_VALUE	0X7FFFFFFF

/** VO_VOID */
typedef void VO_VOID;

/** VO_U8 is an 8 bit unsigned quantity that is byte aligned */
typedef unsigned char VO_U8;

/** VO_BYTE is an 8 bit unsigned quantity that is byte aligned */
typedef unsigned char VO_BYTE;

/** VO_S8 is an 8 bit signed quantity that is byte aligned */
typedef signed char VO_S8;

/** VO_CHAR is an 8 bit signed quantity that is byte aligned */
typedef char VO_CHAR;

/** VO_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */
typedef unsigned short VO_U16;

/** VO_WCHAR is a 16 bit unsigned quantity that is 16 bit word aligned */
#if defined _WIN32
typedef unsigned short VO_WCHAR;
typedef unsigned short* VO_PWCHAR;
#elif defined LINUX
typedef unsigned char VO_WCHAR;
typedef unsigned char* VO_PWCHAR;
#endif

/** VO_S16 is a 16 bit signed quantity that is 16 bit word aligned */
typedef signed short VO_S16;

/** VO_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */
typedef unsigned long VO_U32;

/** VO_S32 is a 32 bit signed quantity that is 32 bit word aligned */
typedef signed long VO_S32;

/* Users with compilers that cannot accept the "long long" designation should
   define the VO_SKIP64BIT macro.  It should be noted that this may cause
   some components to fail to compile if the component was written to require
   64 bit integral types.  However, these components would NOT compile anyway
   since the compiler does not support the way the component was written.
*/
#ifndef VO_SKIP64BIT
#ifdef _WIN32
/** VO_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
typedef unsigned __int64  VO_U64;
/** VO_S64 is a 64 bit signed quantity that is 64 bit word aligned */
typedef signed   __int64  VO_S64;
#else // WIN32
/** VO_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */
typedef unsigned long long VO_U64;
/** VO_S64 is a 64 bit signed quantity that is 64 bit word aligned */
typedef signed long long VO_S64;
#endif // WIN32
#endif // VO_SKIP64BIT

/** The VO_BOOL type is intended to be used to represent a true or a false
    value when passing parameters to and from the VO core and components.  The
    VO_BOOL is a 32 bit quantity and is aligned on a 32 bit word boundary.
 */
typedef enum VO_BOOL {
    VO_FALSE = 0,
    VO_TRUE = !VO_FALSE,
	VO_BOOL_MAX = VO_MAX_ENUM_VALUE
} VO_BOOL;

/** The VO_PTR type is intended to be used to pass pointers between the VO
    applications and the VO Core and components.  This is a 32 bit pointer and
    is aligned on a 32 bit boundary.
 */
typedef void* VO_PTR;

/** The VO_HANDLE type is intended to be used to pass pointers between the VO
    applications and the VO Core and components.  This is a 32 bit pointer and
    is aligned on a 32 bit boundary.
 */
typedef void* VO_HANDLE;

/** The VO_STRING type is intended to be used to pass "C" type strings between
    the application and the core and component.  The VO_STRING type is a 32
    bit pointer to a zero terminated string.  The  pointer is word aligned and
    the string is byte aligned.
 */
typedef char* VO_PCHAR;

/** The VO_PBYTE type is intended to be used to pass arrays of bytes such as
    buffers between the application and the component and core.  The VO_PBYTE
    type is a 32 bit pointer to a zero terminated string.  The  pointer is word
    aligned and the string is byte aligned.
 */
typedef unsigned char* VO_PBYTE;

/** The VO_PTCHAR type is intended to be used to pass arrays of wchar such as
    unicode char between the application and the component and core.  The VO_PTCHAR
    type is a 32 bit pointer to a zero terminated string.  The  pointer is word
    aligned and the string is byte aligned.
 */
/*
#if !defined LINUX
typedef unsigned short* VO_PTCHAR;
typedef unsigned short* VO_TCHAR;
#else
typedef char* VO_PTCHAR;
typedef char VO_TCHAR;
#endif
*/

#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif

/**
 * Input stream format, Frame or Stream..
 */
typedef enum {
    VO_INPUT_FRAME	= 1,	/*!< Input contains completely frame(s) data. */
    VO_INPUT_STREAM,		/*!< Input is stream data. */
	VO_INPUT_STREAM_MAX = VO_MAX_ENUM_VALUE
} VO_INPUT_TYPE;


/**
 * General data buffer, used as input or output.
 */
typedef struct {
	VO_PBYTE	Buffer;		/*!< Buffer pointer */
	VO_U32		Length;		/*!< Buffer size in byte */
	VO_S64		Time;		/*!< The time of the buffer */
} VO_CODECBUFFER;


/**
 * The init memdata flag.
 */
typedef enum{
	VO_IMF_USERMEMOPERATOR		=0,	/*!< memData is  the pointer of memoperator function*/
	VO_IMF_PREALLOCATEDBUFFER	=1,	/*!< memData is  preallocated memory*/
	VO_IMF_MAX = VO_MAX_ENUM_VALUE
}VO_INIT_MEM_FlAG;


/**
 * The init memory structure..
 */
typedef struct{
	VO_INIT_MEM_FlAG			memflag;	/*!<memory flag  */
	VO_PTR						memData;	/*!<a pointer to VO_MEM_OPERATOR or a preallocated buffer  */
	VO_U32						reserved1;	/*!<reserved  */
	VO_U32						reserved2;	/*!<reserved */
}VO_CODEC_INIT_USERDATA;


#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif // __voType_H__
