aboutsummaryrefslogtreecommitdiff
path: root/kernel-headers/vcodec_OAL_v2.h
diff options
context:
space:
mode:
authorMister Oyster <oysterized@gmail.com>2017-01-02 12:44:35 +0100
committerMister Oyster <oysterized@gmail.com>2017-01-02 12:44:35 +0100
commita184d985bf43d3fe6eeba971bc6b32f79ea38b37 (patch)
tree6f6e56e090777cc149bc1ab39e5987cc2b03e867 /kernel-headers/vcodec_OAL_v2.h
initial releasecm-13.0
Diffstat (limited to 'kernel-headers/vcodec_OAL_v2.h')
-rw-r--r--kernel-headers/vcodec_OAL_v2.h497
1 files changed, 497 insertions, 0 deletions
diff --git a/kernel-headers/vcodec_OAL_v2.h b/kernel-headers/vcodec_OAL_v2.h
new file mode 100644
index 0000000..fa4ef40
--- /dev/null
+++ b/kernel-headers/vcodec_OAL_v2.h
@@ -0,0 +1,497 @@
+#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_CODEC_NONE = 0,
+ 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_VC1_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 {
+ /* /< [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 u4HWIsCompleted;
+ /* /< [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 u4HWIsTimeout;
+ unsigned int u4NumOfRegister; /* /< [IN] Number of HW register need to store; */
+ VCODEC_OAL_MEM_STAUTS_T *pHWStatus;
+} 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 */