aboutsummaryrefslogtreecommitdiff
path: root/include/linux/vcodec/vcodec_OAL_v2.h
diff options
context:
space:
mode:
authorMeizu OpenSource <patchwork@meizu.com>2016-08-15 10:19:42 +0800
committerMeizu OpenSource <patchwork@meizu.com>2016-08-15 10:19:42 +0800
commitd2e1446d81725c351dc73a03b397ce043fb18452 (patch)
tree4dbc616b7f92aea39cd697a9084205ddb805e344 /include/linux/vcodec/vcodec_OAL_v2.h
first commit
Diffstat (limited to 'include/linux/vcodec/vcodec_OAL_v2.h')
-rw-r--r--include/linux/vcodec/vcodec_OAL_v2.h508
1 files changed, 508 insertions, 0 deletions
diff --git a/include/linux/vcodec/vcodec_OAL_v2.h b/include/linux/vcodec/vcodec_OAL_v2.h
new file mode 100644
index 000000000..59f86daa8
--- /dev/null
+++ b/include/linux/vcodec/vcodec_OAL_v2.h
@@ -0,0 +1,508 @@
+#ifndef VCODEC_OAL_V2_H
+#define VCODEC_OAL_V2_H
+#define IN
+#define OUT
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#include "vcodec_if_v2.h"
+
+#ifdef WIN32
+#include <windows.h>
+
+#endif
+#define VCODEC_OAL_VERSION 20140812
+#define VCODEC_ASSERT(expr, a) do {if(!(expr)) rVCODEC_OAL_Function.VCodecAssertFail(__FILE__, __LINE__, a); } while (0)
+
+typedef enum
+{
+ VCODEC_OAL_H264_DEC,
+ VCODEC_OAL_HEVC_DEC,
+ VCODEC_OAL_VP8_DEC ,
+ VCODEC_OAL_VP9_DEC ,
+ VCODEC_OAL_RMVB_DEC ,
+ VCODEC_OAL_MPEG2_DEC ,
+ VCODEC_OAL_MPEG4_DEC,
+ VCODEC_OAL_H264_ENC,
+ VCODEC_OAL_HEVC_ENC,
+ VCODEC_OAL_VP8_ENC ,
+ VCODEC_OAL_VP9_ENC ,
+ VCODEC_OAL_MPEG4_ENC,
+ NUM_OF_VCODEC_OAL_CODEC_TYP,
+} VCODEC_OAL_CODEC_TYPE;
+
+typedef struct
+{
+ VCODEC_OAL_CODEC_TYPE eCodec;
+ void *reserve1;
+ void *reserve2;
+ void *reserve3;
+ void *reserve4;
+}VCODEC_OAL_HW_CTR_INFO_T;
+
+void VCodecQueryMemType(IN void *pBuffer_VA,
+ IN unsigned int u4Size,
+ OUT VCODEC_MEMORY_TYPE_T *peMemType
+ );
+
+void VCodecQueryPhysicalAddr(IN void *pBuffer_VA,
+ OUT void **pBufferOut_PA
+ );
+
+// VCodecSwitchMemType - return 0 if success.
+// return -1 if failed, but pBufferOut_VA will be assigned with pBuffer_VA
+int VCodecSwitchMemType(IN void *pBuffer_VA,
+ IN unsigned int u4Size,
+ IN VCODEC_MEMORY_TYPE_T eMemType,
+ OUT void **pBufferOut_VA
+ );
+
+// VCodecFlushCachedBuffer - u4Size is in byte
+void VCodecFlushCachedBuffer(IN void *pBuffer_VA,
+ IN unsigned int u4Size
+ );
+
+// VCodecInvalidateCachedBuffer - u4Size is in byte
+void VCodecInvalidateCachedBuffer(IN void *pBuffer_VA,
+ IN unsigned int u4Size
+ );
+
+void VCodecFlushCachedBufferAll(void);
+
+void VCodecInvalidateCachedBufferAll(void);
+
+void VCodecFlushInvalidateCacheBufferAll(void);
+
+void VCodecMemSet(IN void *pBuffer_VA,
+ IN char cValue,
+ IN unsigned int u4Length
+ );
+
+void VCodecMemCopy(IN void *pvDest ,
+ IN const void *pvSrc ,
+ IN unsigned int u4Length
+ );
+typedef struct
+{
+ void *pBuffer_PA; ///< [IN] The physical memory address
+ unsigned int u4MemSize; ///< [IN] The memory size to be mapped
+ void *pBuffer_VA; ///< [OUT] The mapped virtual memory address
+} VCODEC_OAL_MMAP_T;
+
+void VCodecMMAP(VCODEC_OAL_MMAP_T *prParam);
+void VCodecUnMMAP(VCODEC_OAL_MMAP_T *prParam);
+
+
+typedef enum
+{
+ VCODEC_OAL_VDEC,
+ VCODEC_OAL_VENC
+} VCODEC_OAL_CODEC;
+
+typedef struct
+{
+ unsigned int u4ReadAddr; /// [IN] memory source address in VA
+ unsigned int u4ReadData; /// [OUT] memory data
+} VCODEC_OAL_MEM_STAUTS_T;
+
+typedef struct
+{
+ unsigned int u4HWIsCompleted; ///< [IOUT] HW is Completed or not, set by driver & clear by codec (0: not completed or still in lock status; 1: HW is completed or in unlock status)
+ unsigned int u4HWIsTimeout; ///< [OUT] HW is Timeout or not, set by driver & clear by codec (0: not in timeout status; 1: HW is in timeout status)
+ unsigned int u4NumOfRegister; ///< [IN] Number of HW register need to store;
+ VCODEC_OAL_MEM_STAUTS_T *pHWStatus; ///< [OUT] HW status based on input address.
+} VCODEC_OAL_HW_REGISTER_T;
+
+typedef struct
+{
+ void *pvHandle; ///< [IN] The video codec handle
+ void *pvIsrFunction; ///< [IN] The isr function
+ unsigned int u4TimeoutMs; ///< [IN] The timeout in ms
+ VCODEC_OAL_CODEC eCodec; ///< [IN] VDEC or VENC interrupt
+} VCODEC_OAL_ISR_T;
+
+// return value: HW is completed (1) or not (0) when function return
+int VCodecWaitISR(VCODEC_OAL_ISR_T *prParam);
+
+
+typedef struct
+{
+ void *pvHandle; ///< [IN] The video codec handle
+ unsigned int u4TimeoutMs; ///< [IN] The timeout ms
+} VCODEC_OAL_HW_LOCK_T;
+
+// return value: HW is completed (1) or not (0) when function return
+int VCodecLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+// return value: HW is completed (1) or not (0) when function return
+int VCodecUnLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
+
+
+void VCodecInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
+
+void VCodecDeInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
+
+
+/****** Pthread define******/
+#ifdef WIN32
+#define VCODEC_PTHREAD_PROCESS_PRIVATE 0
+#define VCODEC_PTHREAD_PROCESS_SHARED 1
+#define VCODEC_PTHREAD_CREATE_JOINABLE 0
+#define VCODEC_PTHREAD_CREATE_DETACHED 1
+#define VCODEC_PTHREAD_SCOPE_PROCESS 0
+#define VCODEC_PTHREAD_SCOPE_SYSTEM 1
+#define VCODEC_PTHREAD_ONCE_INIT 0
+typedef volatile int VCODEC_PTHREAD_ONCE_T;
+
+typedef int VCODEC_PTHREAD_ATTR_T;
+
+typedef int VCODEC_PTHREAD_MUTEXATTR_T;
+typedef int VCODEC_PTHREAD_CONDATTR_T;
+typedef CRITICAL_SECTION VCODEC_PTHREAD_MUTEX_T;
+
+typedef struct
+{
+ void *handle;
+ void *(*func)( void* arg );
+ void *arg;
+ void *ret;
+} VCODEC_PTHREAD_T;
+
+
+typedef struct
+{
+ int interlock;
+ VCODEC_PTHREAD_MUTEX_T mutex;
+}VCODEC_PTHREAD_SPINLOCK_T;
+typedef struct
+{
+ void *ptr;
+} VCODEC_PTHREAD_COND_T;
+#elif defined(ANDROID)
+#define VCODEC_PTHREAD_PROCESS_PRIVATE 0
+#define VCODEC_PTHREAD_PROCESS_SHARED 1
+#define VCODEC_PTHREAD_CREATE_JOINABLE 0
+#define VCODEC_PTHREAD_CREATE_DETACHED 1
+#define VCODEC_PTHREAD_SCOPE_PROCESS 0
+#define VCODEC_PTHREAD_SCOPE_SYSTEM 1
+#define VCODEC_PTHREAD_ONCE_INIT 0
+typedef long VCODEC_PTHREAD_T;
+typedef volatile int VCODEC_PTHREAD_ONCE_T;
+typedef long VCODEC_PTHREAD_MUTEXATTR_T;
+typedef long VCODEC_PTHREAD_CONDATTR_T;
+typedef struct
+{
+ unsigned int flags;
+ void *stack_base;
+ unsigned int stack_size;
+ unsigned int guard_size;
+ unsigned int sched_policy;
+ unsigned int sched_priority;
+} VCODEC_PTHREAD_ATTR_T;
+
+typedef struct
+{
+ int volatile value;
+} VCODEC_PTHREAD_MUTEX_T;
+
+typedef struct
+{
+ int volatile value;
+} VCODEC_PTHREAD_COND_T;
+
+typedef struct
+{
+ int interlock;
+ VCODEC_PTHREAD_MUTEX_T mutex;
+} VCODEC_PTHREAD_SPINLOCK_T;
+/****** End of Pthread define******/
+#elif defined(LINUX)
+#define VCODEC_PTHREAD_CREATE_JOINABLE 0
+#define VCODEC_PTHREAD_CREATE_DETACHED 1
+#define VCODEC_SIZEOF_PTHREAD_ATTR_T 36
+#define VCODEC_SIZEOF_PTHREAD_MUTEX_T 24
+#define VCODEC_SIZEOF_PTHREAD_MUTEXATTR_T 4
+#define VCODEC_SIZEOF_PTHREAD_COND_T 48
+#define VCODEC_SIZEOF_PTHREAD_COND_COMPAT_T 12
+#define VCODEC_SIZEOF_PTHREAD_CONDATTR_T 4
+typedef unsigned long int VCODEC_PTHREAD_T;
+typedef union
+{
+ char __size[VCODEC_SIZEOF_PTHREAD_ATTR_T];
+ long int _align;
+} VCODEC_PTHREAD_ATTR_T;
+typedef struct VCODEC_PTHREAD_INTERNAL_SLIST
+{
+ struct VCODEC_PTHREAD_INTERNAL_SLIST *__next;
+} VCODEC_PTHREAD_SLIST_T;
+typedef union
+{
+ struct VCODEC_PTHREAD_MUTEX_S
+ {
+ int __lock;
+ unsigned int __count;
+ int __owner;
+ int __kind;
+ unsigned int __nusers;
+ __extension__ union
+ {
+ int __spins;
+ VCODEC_PTHREAD_SLIST_T __list;
+ };
+ } __data;
+ char __size[VCODEC_SIZEOF_PTHREAD_MUTEX_T];
+ long int _align;
+} VCODEC_PTHREAD_MUTEX_T;
+typedef union
+{
+ char __size[VCODEC_SIZEOF_PTHREAD_MUTEXATTR_T];
+ long int _align;
+} VCODEC_PTHREAD_MUTEXATTR_T;
+typedef union
+{
+ struct
+ {
+ int __lock;
+ unsigned int __futex;
+ __extension__ unsigned long long int __total_seq;
+ __extension__ unsigned long long int __wakeup_seq;
+ __extension__ unsigned long long int __woken_seq;
+ void *__mutex;
+ unsigned int __nwaiters;
+ unsigned int __broadcast_seq;
+ } __data;
+ char __size[VCODEC_SIZEOF_PTHREAD_COND_T];
+ __extension__ long long int _align;
+} VCODEC_PTHREAD_COND_T;
+typedef union
+{
+ char __size[VCODEC_SIZEOF_PTHREAD_CONDATTR_T];
+ long int _align;
+} VCODEC_PTHREAD_CONDATTR_T;
+typedef int VCODEC_PTHREAD_ONCE_T;
+typedef volatile int VCODEC_PTHREAD_SPINLOCK_T;
+#else
+#error "platform undefined. @ vcodec_OAL.h"
+#endif //endif WIN32
+
+
+typedef enum
+{
+ VCODEC_OAL_ERROR_NONE,
+ VCODEC_OAL_ERROR_ERROR,
+ VCODEC_OAL_ERROR_ASSERT_FAIL,
+ VCODEC_OAL_ERROR_ATTR_NOT_SUPPORT,
+ NUM_OF_VCODEC_OAL_ERROR_TYPE
+} VCODEC_OAL_ERROR_T;
+
+/* Semaphore */
+
+typedef struct
+{
+ volatile unsigned int count;
+} VCODEC_OAL_SEM_T;
+
+
+int VCodecPthread_attr_init(OUT VCODEC_PTHREAD_ATTR_T *attr);
+int VCodecPthread_attr_destroy(IN VCODEC_PTHREAD_ATTR_T *attr);
+int VCodecPthread_attr_getdetachstate(IN const VCODEC_PTHREAD_ATTR_T *attr,
+ OUT int *detachstate);
+int VCodecPthread_attr_setdetachstate(IN VCODEC_PTHREAD_ATTR_T *attr,
+ IN int detachstate);
+int VCodecPthread_create(OUT VCODEC_PTHREAD_T *thread,
+ IN const VCODEC_PTHREAD_ATTR_T *attr,
+ IN void * (*start_routine)(void *),
+ IN void *arg);
+int VCodecPthread_kill(IN VCODEC_PTHREAD_T tid, IN int sig);
+void VCodecPthread_exit(OUT void *retval);
+int VCodecPthread_join(IN VCODEC_PTHREAD_T thid, OUT void **ret_val);
+int VCodecPthread_once(IN VCODEC_PTHREAD_ONCE_T *once_control, IN void (*init_routine)(void));
+VCODEC_PTHREAD_T VCodecPthread_self(void);
+int VCodecPthread_mutexattr_init(OUT VCODEC_PTHREAD_MUTEXATTR_T *attr);
+int VCodecPthread_mutexattr_destroy(IN VCODEC_PTHREAD_MUTEXATTR_T *attr);
+int VCodecPthread_mutex_init(OUT VCODEC_PTHREAD_MUTEX_T *mutex, IN const VCODEC_PTHREAD_MUTEXATTR_T *attr);
+int VCodecPthread_mutex_destroy(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+int VCodecPthread_mutex_lock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+int VCodecPthread_mutex_unlock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+int VCodecPthread_mutex_trylock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+int VCodecPthread_spin_init(OUT VCODEC_PTHREAD_SPINLOCK_T *lock, IN int pshared);
+int VCodecPthread_spin_destroy(IN VCODEC_PTHREAD_SPINLOCK_T *lock);
+int VCodecPthread_spin_lock(IN VCODEC_PTHREAD_SPINLOCK_T *lock);
+int VCodecPthread_spin_trylock(IN VCODEC_PTHREAD_SPINLOCK_T *lock);
+int VCodecPthread_spin_unlock(IN VCODEC_PTHREAD_SPINLOCK_T *lock);
+int VCodecPthread_condattr_init(OUT VCODEC_PTHREAD_CONDATTR_T *attr);
+int VCodecPthread_condattr_destroy(IN VCODEC_PTHREAD_CONDATTR_T *attr);
+int VCodecPthread_cond_init(OUT VCODEC_PTHREAD_COND_T *cond, IN const VCODEC_PTHREAD_CONDATTR_T *attr);
+int VCodecPthread_cond_destroy(IN VCODEC_PTHREAD_COND_T *cond);
+int VCodecPthread_cond_broadcast(IN VCODEC_PTHREAD_COND_T *cond);
+int VCodecPthread_cond_signal(IN VCODEC_PTHREAD_COND_T *cond);
+int VCodecPthread_cond_wait(IN VCODEC_PTHREAD_COND_T *cond, IN VCODEC_PTHREAD_MUTEX_T *mutex);
+
+VCODEC_OAL_ERROR_T VCodecBindingCore(IN VCODEC_PTHREAD_T tid,
+ IN unsigned int u4Mask);
+VCODEC_OAL_ERROR_T VCodecDeBindingCore(IN VCODEC_PTHREAD_T tid);
+VCODEC_OAL_ERROR_T VCodecGetAffinity(IN VCODEC_PTHREAD_T tid,
+ OUT unsigned int *pu4Mask,
+ OUT unsigned int *pu4SetMask);
+VCODEC_OAL_ERROR_T VCodecCoreLoading(IN int s4CPUid,
+ OUT int *ps4Loading);
+VCODEC_OAL_ERROR_T VCodecCoreNumber(OUT int *ps4CPUNums);
+void VCodecSleep(IN unsigned int u4Tick);
+int VCodec_sem_init(IN VCODEC_OAL_SEM_T *sem,
+ IN int pshared,
+ IN unsigned int value);
+int VCodec_sem_destroy(IN VCODEC_OAL_SEM_T *sem);
+int VCodec_sem_post(IN VCODEC_OAL_SEM_T *sem);
+int VCodec_sem_wait(IN VCODEC_OAL_SEM_T *sem);
+
+int VCodecCheck_Version(IN int version);
+
+#define VCodecOALPrintf(...) rVCODEC_OAL_Function.VCodecPrintf(__VA_ARGS__);
+
+VCODEC_OAL_ERROR_T VCodecConfigMCIPort(IN unsigned int u4PortConfig, OUT unsigned int *pu4PortResult, IN VCODEC_CODEC_TYPE_T eCodecType);
+typedef struct
+{
+
+ void (*VCodecQueryMemType)(IN void *pBuffer_VA,
+ IN unsigned int u4Size,
+ OUT VCODEC_MEMORY_TYPE_T *peMemType);
+
+ void (*VCodecQueryPhysicalAddr)(IN void *pBuffer_VA,
+ OUT void **pBufferOut_PA);
+
+ // VCodecSwitchMemType - return 0 if success.
+ // return -1 if failed, but pBufferOut_VA will be assigned with pBuffer_VA
+ int (*VCodecSwitchMemType)(IN void *pBuffer_VA,
+ IN unsigned int u4Size,
+ IN VCODEC_MEMORY_TYPE_T eMemType,
+ OUT void **pBufferOut_VA);
+
+ // VCodecFlushCachedBuffer - u4Size is in byte
+ void (*VCodecFlushCachedBuffer)(IN void *pBuffer_VA,
+ IN unsigned int u4Size);
+
+ // VCodecInvalidateCachedBuffer - u4Size is in byte
+ void (*VCodecInvalidateCachedBuffer)(IN void *pBuffer_VA,
+ IN unsigned int u4Size);
+
+ void (*VCodecFlushCachedBufferAll)(void);
+
+ void (*VCodecInvalidateCachedBufferAll)(void);
+
+ void (*VCodecFlushInvalidateCacheBufferAll)(void);
+
+ void (*VCodecMemSet)(IN void *pBuffer_VA,
+ IN char cValue,
+ IN unsigned int u4Length);
+
+ void (*VCodecMemCopy)(IN void *pvDest ,
+ IN const void *pvSrc ,
+ IN unsigned int u4Length);
+
+ void (*VCodecAssertFail)(IN char *ptr,
+ IN int i4Line,
+ IN int i4Arg);
+
+ void (*VCodecMMAP)(VCODEC_OAL_MMAP_T *prParam);
+ void (*VCodecUnMMAP)(VCODEC_OAL_MMAP_T *prParam);
+ int (*VCodecWaitISR)(VCODEC_OAL_ISR_T *prParam);
+ int (*VCodecLockHW)(VCODEC_OAL_HW_LOCK_T *prParam);
+ int (*VCodecUnLockHW)(VCODEC_OAL_HW_LOCK_T *prParam);
+
+ void (*VCodecInitHWLock)(IN VCODEC_OAL_HW_REGISTER_T *prParam);
+
+ void (*VCodecDeInitHWLock)(IN VCODEC_OAL_HW_REGISTER_T *prParam);
+ int (*VCodecCheck_Version)(IN int version);
+ /************ Multi-thread function ***********/
+
+ /***** Thread Management Functions ******/
+ int (*VCodecPthread_attr_init)(OUT VCODEC_PTHREAD_ATTR_T *attr);
+ int (*VCodecPthread_attr_destroy)(IN VCODEC_PTHREAD_ATTR_T *attr);
+ int (*VCodecPthread_attr_getdetachstate)(IN const VCODEC_PTHREAD_ATTR_T *attr,
+ OUT int *detachstate);
+ int (*VCodecPthread_attr_setdetachstate)(IN VCODEC_PTHREAD_ATTR_T *attr,
+ IN int detachstate);
+ int (*VCodecPthread_create)(OUT VCODEC_PTHREAD_T *thread,
+ IN const VCODEC_PTHREAD_ATTR_T *attr,
+ IN void * (*start_routine)(void *),
+ IN void *arg);
+ int (*VCodecPthread_kill)(IN VCODEC_PTHREAD_T tid,
+ IN int sig);
+ void (*VCodecPthread_exit)(OUT void *retval);
+ int (*VCodecPthread_join)(IN VCODEC_PTHREAD_T thid,
+ OUT void **ret_val);
+ int (*VCodecPthread_once)(IN VCODEC_PTHREAD_ONCE_T *once_control,
+ IN void (*init_routine)(void));
+ VCODEC_PTHREAD_T(*VCodecPthread_self)(void);
+
+ /***** Mutex Functions ******/
+ int (*VCodecPthread_mutexattr_init)(OUT VCODEC_PTHREAD_MUTEXATTR_T *attr);
+ int (*VCodecPthread_mutexattr_destroy)(IN VCODEC_PTHREAD_MUTEXATTR_T *attr);
+ int (*VCodecPthread_mutex_init)(OUT VCODEC_PTHREAD_MUTEX_T *mutex,
+ IN const VCODEC_PTHREAD_MUTEXATTR_T *attr);
+ int (*VCodecPthread_mutex_destroy)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+ int (*VCodecPthread_mutex_lock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+ int (*VCodecPthread_mutex_unlock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+ int (*VCodecPthread_mutex_trylock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
+
+ /***** Spin Functions ******/
+ int (*VCodecPthread_spin_init)(OUT VCODEC_PTHREAD_SPINLOCK_T *lock,
+ IN int pshared);
+ int (*VCodecPthread_spin_destroy)(IN VCODEC_PTHREAD_SPINLOCK_T *lock);
+ int (*VCodecPthread_spin_lock)(IN VCODEC_PTHREAD_SPINLOCK_T *lock);
+ int (*VCodecPthread_spin_trylock)(IN VCODEC_PTHREAD_SPINLOCK_T *lock);
+ int (*VCodecPthread_spin_unlock)(IN VCODEC_PTHREAD_SPINLOCK_T *lock);
+
+ /***** Condition Variable Functions ******/
+ int (*VCodecPthread_condattr_init)(OUT VCODEC_PTHREAD_CONDATTR_T *attr);
+ int (*VCodecPthread_condattr_destroy)(IN VCODEC_PTHREAD_CONDATTR_T *attr);
+ int (*VCodecPthread_cond_init)(OUT VCODEC_PTHREAD_COND_T *cond,
+ IN const VCODEC_PTHREAD_CONDATTR_T *attr);
+ int (*VCodecPthread_cond_destroy)(IN VCODEC_PTHREAD_COND_T *cond);
+ int (*VCodecPthread_cond_broadcast)(IN VCODEC_PTHREAD_COND_T *cond);
+ int (*VCodecPthread_cond_signal)(IN VCODEC_PTHREAD_COND_T *cond);
+ int (*VCodecPthread_cond_wait)(IN VCODEC_PTHREAD_COND_T *cond,
+ IN VCODEC_PTHREAD_MUTEX_T *mutex);
+
+ /************ End of Multi-thread function ***********/
+
+ /***** Semaphore Functions ******/
+
+ int (*VCodec_sem_init)(IN VCODEC_OAL_SEM_T *sem,
+ IN int pshared,
+ IN unsigned int value);
+
+ int (*VCodec_sem_destroy)(IN VCODEC_OAL_SEM_T *sem);
+
+ int (*VCodec_sem_post)(IN VCODEC_OAL_SEM_T *sem);
+
+ int (*VCodec_sem_wait)(IN VCODEC_OAL_SEM_T *sem);
+
+ /***** Binding Functions ******/
+
+ VCODEC_OAL_ERROR_T(*VCodecBindingCore)(IN VCODEC_PTHREAD_T tid,
+ IN unsigned int u4SetMask);
+ VCODEC_OAL_ERROR_T(*VCodecDeBindingCore)(IN VCODEC_PTHREAD_T tid);
+
+ VCODEC_OAL_ERROR_T(*VCodecGetAffinity)(IN VCODEC_PTHREAD_T tid,
+ OUT unsigned int *pu4CPUMask,
+ OUT unsigned int *pu4SetMask);
+
+ VCODEC_OAL_ERROR_T(*VCodecCoreLoading)(IN int s4CPUid,
+ OUT int *ps4Loading);
+ VCODEC_OAL_ERROR_T(*VCodecCoreNumber)(OUT int *ps4CPUNums);
+ /***** Others Functions ******/
+ void (*VCodecSleep)(IN unsigned int u4Tick);
+
+ VCODEC_OAL_ERROR_T(*VCodecConfigMCIPort)(IN unsigned int u4PortConfig, OUT unsigned int *pu4PortResult, IN VCODEC_CODEC_TYPE_T eCodecType);
+
+ VCODEC_OAL_ERROR_T(*VCodecPrintf)(IN const char *_Format, ...);
+
+} VCODEC_OAL_CALLBACK_T;
+
+extern VCODEC_OAL_CALLBACK_T rVCODEC_OAL_Function;
+int VCodecOALInit(IN VCODEC_OAL_CALLBACK_T *prVCODEC_OAL_Function);
+
+#endif /* VCODEC_OAL_H */ \ No newline at end of file