vcodec_OAL_v2.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499
  1. #ifndef VCODEC_OAL_V2_H
  2. #define VCODEC_OAL_V2_H
  3. #define IN
  4. #define OUT
  5. #ifndef NULL
  6. #define NULL 0
  7. #endif
  8. #include "vcodec_if_v2.h"
  9. #ifdef WIN32
  10. #include <windows.h>
  11. #endif
  12. #define VCODEC_OAL_VERSION 20140812
  13. #define VCODEC_ASSERT(expr, a) \
  14. do {if (!(expr)) rVCODEC_OAL_Function.VCodecAssertFail(__FILE__, __LINE__, a); } while (0)
  15. typedef enum {
  16. VCODEC_OAL_CODEC_NONE = 0,
  17. VCODEC_OAL_H264_DEC,
  18. VCODEC_OAL_HEVC_DEC,
  19. VCODEC_OAL_VP8_DEC,
  20. VCODEC_OAL_VP9_DEC,
  21. VCODEC_OAL_RMVB_DEC,
  22. VCODEC_OAL_MPEG2_DEC,
  23. VCODEC_OAL_MPEG4_DEC,
  24. VCODEC_OAL_VC1_DEC,
  25. VCODEC_OAL_H264_ENC,
  26. VCODEC_OAL_HEVC_ENC,
  27. VCODEC_OAL_VP8_ENC,
  28. VCODEC_OAL_VP9_ENC,
  29. VCODEC_OAL_MPEG4_ENC,
  30. NUM_OF_VCODEC_OAL_CODEC_TYP,
  31. } VCODEC_OAL_CODEC_TYPE;
  32. typedef struct {
  33. VCODEC_OAL_CODEC_TYPE eCodec;
  34. void *reserve1;
  35. void *reserve2;
  36. void *reserve3;
  37. void *reserve4;
  38. } VCODEC_OAL_HW_CTR_INFO_T;
  39. void VCodecQueryMemType(IN void *pBuffer_VA, IN unsigned int u4Size, OUT VCODEC_MEMORY_TYPE_T * peMemType);
  40. void VCodecQueryPhysicalAddr(IN void *pBuffer_VA,
  41. OUT void **pBufferOut_PA
  42. );
  43. /* VCodecSwitchMemType - return 0 if success. */
  44. /* return -1 if failed, but pBufferOut_VA will be assigned with pBuffer_VA */
  45. int VCodecSwitchMemType(IN void *pBuffer_VA,
  46. IN unsigned int u4Size,
  47. IN VCODEC_MEMORY_TYPE_T eMemType,
  48. OUT void **pBufferOut_VA
  49. );
  50. /* VCodecFlushCachedBuffer - u4Size is in byte */
  51. void VCodecFlushCachedBuffer(IN void *pBuffer_VA,
  52. IN unsigned int u4Size
  53. );
  54. /* VCodecInvalidateCachedBuffer - u4Size is in byte */
  55. void VCodecInvalidateCachedBuffer(IN void *pBuffer_VA,
  56. IN unsigned int u4Size
  57. );
  58. void VCodecFlushCachedBufferAll(void);
  59. void VCodecInvalidateCachedBufferAll(void);
  60. void VCodecFlushInvalidateCacheBufferAll(void);
  61. void VCodecMemSet(IN void *pBuffer_VA,
  62. IN char cValue,
  63. IN unsigned int u4Length
  64. );
  65. void VCodecMemCopy(IN void *pvDest ,
  66. IN const void *pvSrc ,
  67. IN unsigned int u4Length
  68. );
  69. typedef struct {
  70. void *pBuffer_PA; /* /< [IN] The physical memory address */
  71. unsigned int u4MemSize; /* /< [IN] The memory size to be mapped */
  72. void *pBuffer_VA; /* /< [OUT] The mapped virtual memory address */
  73. } VCODEC_OAL_MMAP_T;
  74. void VCodecMMAP(VCODEC_OAL_MMAP_T *prParam);
  75. void VCodecUnMMAP(VCODEC_OAL_MMAP_T *prParam);
  76. typedef enum {
  77. VCODEC_OAL_VDEC,
  78. VCODEC_OAL_VENC
  79. } VCODEC_OAL_CODEC;
  80. typedef struct {
  81. unsigned int u4ReadAddr; /* / [IN] memory source address in VA */
  82. unsigned int u4ReadData; /* / [OUT] memory data */
  83. } VCODEC_OAL_MEM_STAUTS_T;
  84. typedef struct {
  85. /* /< [IOUT] HW is Completed or not, set by driver & clear by codec
  86. (0: not completed or still in lock status;
  87. 1: HW is completed or in unlock status)
  88. */
  89. unsigned int u4HWIsCompleted;
  90. /* /< [OUT] HW is Timeout or not, set by driver & clear by codec
  91. (0: not in timeout status;
  92. 1: HW is in timeout status)
  93. */
  94. unsigned int u4HWIsTimeout;
  95. unsigned int u4NumOfRegister; /* /< [IN] Number of HW register need to store; */
  96. VCODEC_OAL_MEM_STAUTS_T *pHWStatus;
  97. } VCODEC_OAL_HW_REGISTER_T;
  98. typedef struct {
  99. void *pvHandle; /* /< [IN] The video codec handle */
  100. void *pvIsrFunction; /* /< [IN] The isr function */
  101. unsigned int u4TimeoutMs; /* /< [IN] The timeout in ms */
  102. VCODEC_OAL_CODEC eCodec; /* /< [IN] VDEC or VENC interrupt */
  103. } VCODEC_OAL_ISR_T;
  104. /* return value: HW is completed (1) or not (0) when function return */
  105. int VCodecWaitISR(VCODEC_OAL_ISR_T *prParam);
  106. typedef struct {
  107. void *pvHandle; /* /< [IN] The video codec handle */
  108. unsigned int u4TimeoutMs; /* /< [IN] The timeout ms */
  109. } VCODEC_OAL_HW_LOCK_T;
  110. /* return value: HW is completed (1) or not (0) when function return */
  111. int VCodecLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
  112. /* return value: HW is completed (1) or not (0) when function return */
  113. int VCodecUnLockHW(VCODEC_OAL_HW_LOCK_T *prParam);
  114. void VCodecInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
  115. void VCodecDeInitHWLock(VCODEC_OAL_HW_REGISTER_T *prParam);
  116. /****** Pthread define******/
  117. #ifdef WIN32
  118. #define VCODEC_PTHREAD_PROCESS_PRIVATE 0
  119. #define VCODEC_PTHREAD_PROCESS_SHARED 1
  120. #define VCODEC_PTHREAD_CREATE_JOINABLE 0
  121. #define VCODEC_PTHREAD_CREATE_DETACHED 1
  122. #define VCODEC_PTHREAD_SCOPE_PROCESS 0
  123. #define VCODEC_PTHREAD_SCOPE_SYSTEM 1
  124. #define VCODEC_PTHREAD_ONCE_INIT 0
  125. typedef volatile int VCODEC_PTHREAD_ONCE_T;
  126. typedef int VCODEC_PTHREAD_ATTR_T;
  127. typedef int VCODEC_PTHREAD_MUTEXATTR_T;
  128. typedef int VCODEC_PTHREAD_CONDATTR_T;
  129. typedef CRITICAL_SECTION VCODEC_PTHREAD_MUTEX_T;
  130. typedef struct {
  131. void *handle;
  132. void *(*func)(void *arg);
  133. void *arg;
  134. void *ret;
  135. } VCODEC_PTHREAD_T;
  136. typedef struct {
  137. int interlock;
  138. VCODEC_PTHREAD_MUTEX_T mutex;
  139. } VCODEC_PTHREAD_SPINLOCK_T;
  140. typedef struct {
  141. void *ptr;
  142. } VCODEC_PTHREAD_COND_T;
  143. #elif defined(ANDROID)
  144. #define VCODEC_PTHREAD_PROCESS_PRIVATE 0
  145. #define VCODEC_PTHREAD_PROCESS_SHARED 1
  146. #define VCODEC_PTHREAD_CREATE_JOINABLE 0
  147. #define VCODEC_PTHREAD_CREATE_DETACHED 1
  148. #define VCODEC_PTHREAD_SCOPE_PROCESS 0
  149. #define VCODEC_PTHREAD_SCOPE_SYSTEM 1
  150. #define VCODEC_PTHREAD_ONCE_INIT 0
  151. typedef long VCODEC_PTHREAD_T;
  152. typedef volatile int VCODEC_PTHREAD_ONCE_T;
  153. typedef long VCODEC_PTHREAD_MUTEXATTR_T;
  154. typedef long VCODEC_PTHREAD_CONDATTR_T;
  155. typedef struct {
  156. unsigned int flags;
  157. void *stack_base;
  158. unsigned int stack_size;
  159. unsigned int guard_size;
  160. unsigned int sched_policy;
  161. unsigned int sched_priority;
  162. } VCODEC_PTHREAD_ATTR_T;
  163. typedef struct {
  164. int volatile value;
  165. } VCODEC_PTHREAD_MUTEX_T;
  166. typedef struct {
  167. int volatile value;
  168. } VCODEC_PTHREAD_COND_T;
  169. typedef struct {
  170. int interlock;
  171. VCODEC_PTHREAD_MUTEX_T mutex;
  172. } VCODEC_PTHREAD_SPINLOCK_T;
  173. /****** End of Pthread define******/
  174. #elif defined(LINUX)
  175. #define VCODEC_PTHREAD_CREATE_JOINABLE 0
  176. #define VCODEC_PTHREAD_CREATE_DETACHED 1
  177. #define VCODEC_SIZEOF_PTHREAD_ATTR_T 36
  178. #define VCODEC_SIZEOF_PTHREAD_MUTEX_T 24
  179. #define VCODEC_SIZEOF_PTHREAD_MUTEXATTR_T 4
  180. #define VCODEC_SIZEOF_PTHREAD_COND_T 48
  181. #define VCODEC_SIZEOF_PTHREAD_COND_COMPAT_T 12
  182. #define VCODEC_SIZEOF_PTHREAD_CONDATTR_T 4
  183. typedef unsigned long int VCODEC_PTHREAD_T;
  184. typedef union {
  185. char __size[VCODEC_SIZEOF_PTHREAD_ATTR_T];
  186. long int _align;
  187. } VCODEC_PTHREAD_ATTR_T;
  188. typedef struct VCODEC_PTHREAD_INTERNAL_SLIST {
  189. struct VCODEC_PTHREAD_INTERNAL_SLIST *__next;
  190. } VCODEC_PTHREAD_SLIST_T;
  191. typedef union {
  192. struct VCODEC_PTHREAD_MUTEX_S {
  193. int __lock;
  194. unsigned int __count;
  195. int __owner;
  196. int __kind;
  197. unsigned int __nusers;
  198. __extension__ union {
  199. int __spins;
  200. VCODEC_PTHREAD_SLIST_T __list;
  201. };
  202. } __data;
  203. char __size[VCODEC_SIZEOF_PTHREAD_MUTEX_T];
  204. long int _align;
  205. } VCODEC_PTHREAD_MUTEX_T;
  206. typedef union {
  207. char __size[VCODEC_SIZEOF_PTHREAD_MUTEXATTR_T];
  208. long int _align;
  209. } VCODEC_PTHREAD_MUTEXATTR_T;
  210. typedef union {
  211. struct {
  212. int __lock;
  213. unsigned int __futex;
  214. __extension__ unsigned long long int __total_seq;
  215. __extension__ unsigned long long int __wakeup_seq;
  216. __extension__ unsigned long long int __woken_seq;
  217. void *__mutex;
  218. unsigned int __nwaiters;
  219. unsigned int __broadcast_seq;
  220. } __data;
  221. char __size[VCODEC_SIZEOF_PTHREAD_COND_T];
  222. __extension__ long long int _align;
  223. } VCODEC_PTHREAD_COND_T;
  224. typedef union {
  225. char __size[VCODEC_SIZEOF_PTHREAD_CONDATTR_T];
  226. long int _align;
  227. } VCODEC_PTHREAD_CONDATTR_T;
  228. typedef int VCODEC_PTHREAD_ONCE_T;
  229. typedef volatile int VCODEC_PTHREAD_SPINLOCK_T;
  230. #else
  231. #error "platform undefined. @ vcodec_OAL.h"
  232. #endif /* endif WIN32 */
  233. typedef enum {
  234. VCODEC_OAL_ERROR_NONE,
  235. VCODEC_OAL_ERROR_ERROR,
  236. VCODEC_OAL_ERROR_ASSERT_FAIL,
  237. VCODEC_OAL_ERROR_ATTR_NOT_SUPPORT,
  238. NUM_OF_VCODEC_OAL_ERROR_TYPE
  239. } VCODEC_OAL_ERROR_T;
  240. /* Semaphore */
  241. typedef struct {
  242. volatile unsigned int count;
  243. } VCODEC_OAL_SEM_T;
  244. int VCodecPthread_attr_init(OUT VCODEC_PTHREAD_ATTR_T * attr);
  245. int VCodecPthread_attr_destroy(IN VCODEC_PTHREAD_ATTR_T * attr);
  246. int VCodecPthread_attr_getdetachstate(IN const VCODEC_PTHREAD_ATTR_T * attr,
  247. OUT int *detachstate);
  248. int VCodecPthread_attr_setdetachstate(IN VCODEC_PTHREAD_ATTR_T * attr,
  249. IN int detachstate);
  250. int VCodecPthread_create(
  251. OUT VCODEC_PTHREAD_T *thread,
  252. IN const VCODEC_PTHREAD_ATTR_T * attr,
  253. IN void * (*start_routine)(void *),
  254. IN void *arg
  255. );
  256. int VCodecPthread_kill(IN VCODEC_PTHREAD_T tid, IN int sig);
  257. void VCodecPthread_exit(OUT void *retval);
  258. int VCodecPthread_join(IN VCODEC_PTHREAD_T thid, OUT void **ret_val);
  259. int VCodecPthread_once(IN VCODEC_PTHREAD_ONCE_T * once_control, IN void (*init_routine)(void));
  260. VCODEC_PTHREAD_T VCodecPthread_self(void);
  261. int VCodecPthread_mutexattr_init(OUT VCODEC_PTHREAD_MUTEXATTR_T * attr);
  262. int VCodecPthread_mutexattr_destroy(IN VCODEC_PTHREAD_MUTEXATTR_T * attr);
  263. int VCodecPthread_mutex_init(OUT VCODEC_PTHREAD_MUTEX_T *mutex, IN const VCODEC_PTHREAD_MUTEXATTR_T * attr);
  264. int VCodecPthread_mutex_destroy(IN VCODEC_PTHREAD_MUTEX_T *mutex);
  265. int VCodecPthread_mutex_lock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
  266. int VCodecPthread_mutex_unlock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
  267. int VCodecPthread_mutex_trylock(IN VCODEC_PTHREAD_MUTEX_T *mutex);
  268. int VCodecPthread_spin_init(OUT VCODEC_PTHREAD_SPINLOCK_T * lock, IN int pshared);
  269. int VCodecPthread_spin_destroy(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
  270. int VCodecPthread_spin_lock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
  271. int VCodecPthread_spin_trylock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
  272. int VCodecPthread_spin_unlock(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
  273. int VCodecPthread_condattr_init(OUT VCODEC_PTHREAD_CONDATTR_T * attr);
  274. int VCodecPthread_condattr_destroy(IN VCODEC_PTHREAD_CONDATTR_T * attr);
  275. int VCodecPthread_cond_init(OUT VCODEC_PTHREAD_COND_T * cond, IN const VCODEC_PTHREAD_CONDATTR_T * attr);
  276. int VCodecPthread_cond_destroy(IN VCODEC_PTHREAD_COND_T * cond);
  277. int VCodecPthread_cond_broadcast(IN VCODEC_PTHREAD_COND_T * cond);
  278. int VCodecPthread_cond_signal(IN VCODEC_PTHREAD_COND_T * cond);
  279. int VCodecPthread_cond_wait(IN VCODEC_PTHREAD_COND_T * cond, IN VCODEC_PTHREAD_MUTEX_T *mutex);
  280. VCODEC_OAL_ERROR_T VCodecBindingCore(IN VCODEC_PTHREAD_T tid,
  281. IN unsigned int u4Mask);
  282. VCODEC_OAL_ERROR_T VCodecDeBindingCore(IN VCODEC_PTHREAD_T tid);
  283. VCODEC_OAL_ERROR_T VCodecGetAffinity(IN VCODEC_PTHREAD_T tid,
  284. OUT unsigned int *pu4Mask,
  285. OUT unsigned int *pu4SetMask);
  286. VCODEC_OAL_ERROR_T VCodecCoreLoading(IN int s4CPUid,
  287. OUT int *ps4Loading);
  288. VCODEC_OAL_ERROR_T VCodecCoreNumber(OUT int *ps4CPUNums);
  289. void VCodecSleep(IN unsigned int u4Tick);
  290. int VCodec_sem_init(IN VCODEC_OAL_SEM_T * sem,
  291. IN int pshared,
  292. IN unsigned int value);
  293. int VCodec_sem_destroy(IN VCODEC_OAL_SEM_T * sem);
  294. int VCodec_sem_post(IN VCODEC_OAL_SEM_T * sem);
  295. int VCodec_sem_wait(IN VCODEC_OAL_SEM_T * sem);
  296. int VCodecCheck_Version(IN int version);
  297. #define VCodecOALPrintf(...) {rVCODEC_OAL_Function.VCodecPrintf(__VA_ARGS__); }
  298. VCODEC_OAL_ERROR_T VCodecConfigMCIPort(
  299. IN unsigned int u4PortConfig,
  300. OUT unsigned int *pu4PortResult,
  301. IN VCODEC_CODEC_TYPE_T eCodecType
  302. );
  303. typedef struct {
  304. void (*VCodecQueryMemType)(IN void *pBuffer_VA, IN unsigned int u4Size, OUT VCODEC_MEMORY_TYPE_T * peMemType);
  305. void (*VCodecQueryPhysicalAddr)(IN void *pBuffer_VA,
  306. OUT void **pBufferOut_PA);
  307. /* VCodecSwitchMemType - return 0 if success. */
  308. /* return -1 if failed, but pBufferOut_VA will be assigned with pBuffer_VA */
  309. int (*VCodecSwitchMemType)(IN void *pBuffer_VA,
  310. IN unsigned int u4Size,
  311. IN VCODEC_MEMORY_TYPE_T eMemType,
  312. OUT void **pBufferOut_VA);
  313. /* VCodecFlushCachedBuffer - u4Size is in byte */
  314. void (*VCodecFlushCachedBuffer)(IN void *pBuffer_VA,
  315. IN unsigned int u4Size);
  316. /* VCodecInvalidateCachedBuffer - u4Size is in byte */
  317. void (*VCodecInvalidateCachedBuffer)(IN void *pBuffer_VA,
  318. IN unsigned int u4Size);
  319. void (*VCodecFlushCachedBufferAll)(void);
  320. void (*VCodecInvalidateCachedBufferAll)(void);
  321. void (*VCodecFlushInvalidateCacheBufferAll)(void);
  322. void (*VCodecMemSet)(IN void *pBuffer_VA,
  323. IN char cValue,
  324. IN unsigned int u4Length);
  325. void (*VCodecMemCopy)(IN void *pvDest ,
  326. IN const void *pvSrc ,
  327. IN unsigned int u4Length);
  328. void (*VCodecAssertFail)(IN char *ptr,
  329. IN int i4Line,
  330. IN int i4Arg);
  331. void (*VCodecMMAP)(VCODEC_OAL_MMAP_T *prParam);
  332. void (*VCodecUnMMAP)(VCODEC_OAL_MMAP_T *prParam);
  333. int (*VCodecWaitISR)(VCODEC_OAL_ISR_T *prParam);
  334. int (*VCodecLockHW)(VCODEC_OAL_HW_LOCK_T *prParam);
  335. int (*VCodecUnLockHW)(VCODEC_OAL_HW_LOCK_T *prParam);
  336. void (*VCodecInitHWLock)(IN VCODEC_OAL_HW_REGISTER_T *prParam);
  337. void (*VCodecDeInitHWLock)(IN VCODEC_OAL_HW_REGISTER_T *prParam);
  338. int (*VCodecCheck_Version)(IN int version);
  339. /************ Multi-thread function ***********/
  340. /***** Thread Management Functions ******/
  341. int (*VCodecPthread_attr_init)(OUT VCODEC_PTHREAD_ATTR_T * attr);
  342. int (*VCodecPthread_attr_destroy)(IN VCODEC_PTHREAD_ATTR_T * attr);
  343. int (*VCodecPthread_attr_getdetachstate)(IN const VCODEC_PTHREAD_ATTR_T * attr,
  344. OUT int *detachstate);
  345. int (*VCodecPthread_attr_setdetachstate)(IN VCODEC_PTHREAD_ATTR_T * attr,
  346. IN int detachstate);
  347. int (*VCodecPthread_create)(
  348. OUT VCODEC_PTHREAD_T *thread,
  349. IN const VCODEC_PTHREAD_ATTR_T * attr,
  350. IN void * (*start_routine)(void *),
  351. IN void *arg
  352. );
  353. int (*VCodecPthread_kill)(IN VCODEC_PTHREAD_T tid,
  354. IN int sig);
  355. void (*VCodecPthread_exit)(OUT void *retval);
  356. int (*VCodecPthread_join)(IN VCODEC_PTHREAD_T thid,
  357. OUT void **ret_val);
  358. int (*VCodecPthread_once)(IN VCODEC_PTHREAD_ONCE_T * once_control,
  359. IN void (*init_routine)(void));
  360. VCODEC_PTHREAD_T (*VCodecPthread_self)(void);
  361. /***** Mutex Functions ******/
  362. int (*VCodecPthread_mutexattr_init)(OUT VCODEC_PTHREAD_MUTEXATTR_T * attr);
  363. int (*VCodecPthread_mutexattr_destroy)(IN VCODEC_PTHREAD_MUTEXATTR_T * attr);
  364. int (*VCodecPthread_mutex_init)(OUT VCODEC_PTHREAD_MUTEX_T *mutex, IN const VCODEC_PTHREAD_MUTEXATTR_T * attr);
  365. int (*VCodecPthread_mutex_destroy)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
  366. int (*VCodecPthread_mutex_lock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
  367. int (*VCodecPthread_mutex_unlock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
  368. int (*VCodecPthread_mutex_trylock)(IN VCODEC_PTHREAD_MUTEX_T *mutex);
  369. /***** Spin Functions ******/
  370. int (*VCodecPthread_spin_init)(OUT VCODEC_PTHREAD_SPINLOCK_T * lock,
  371. IN int pshared);
  372. int (*VCodecPthread_spin_destroy)(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
  373. int (*VCodecPthread_spin_lock)(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
  374. int (*VCodecPthread_spin_trylock)(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
  375. int (*VCodecPthread_spin_unlock)(IN VCODEC_PTHREAD_SPINLOCK_T * lock);
  376. /***** Condition Variable Functions ******/
  377. int (*VCodecPthread_condattr_init)(OUT VCODEC_PTHREAD_CONDATTR_T * attr);
  378. int (*VCodecPthread_condattr_destroy)(IN VCODEC_PTHREAD_CONDATTR_T * attr);
  379. int (*VCodecPthread_cond_init)(OUT VCODEC_PTHREAD_COND_T * cond, IN const VCODEC_PTHREAD_CONDATTR_T * attr);
  380. int (*VCodecPthread_cond_destroy)(IN VCODEC_PTHREAD_COND_T * cond);
  381. int (*VCodecPthread_cond_broadcast)(IN VCODEC_PTHREAD_COND_T * cond);
  382. int (*VCodecPthread_cond_signal)(IN VCODEC_PTHREAD_COND_T * cond);
  383. int (*VCodecPthread_cond_wait)(IN VCODEC_PTHREAD_COND_T * cond,
  384. IN VCODEC_PTHREAD_MUTEX_T *mutex);
  385. /************ End of Multi-thread function ***********/
  386. /***** Semaphore Functions ******/
  387. int (*VCodec_sem_init)(IN VCODEC_OAL_SEM_T * sem,
  388. IN int pshared,
  389. IN unsigned int value);
  390. int (*VCodec_sem_destroy)(IN VCODEC_OAL_SEM_T * sem);
  391. int (*VCodec_sem_post)(IN VCODEC_OAL_SEM_T * sem);
  392. int (*VCodec_sem_wait)(IN VCODEC_OAL_SEM_T * sem);
  393. /***** Binding Functions ******/
  394. VCODEC_OAL_ERROR_T (*VCodecBindingCore)(IN VCODEC_PTHREAD_T tid,
  395. IN unsigned int u4SetMask);
  396. VCODEC_OAL_ERROR_T (*VCodecDeBindingCore)(IN VCODEC_PTHREAD_T tid);
  397. VCODEC_OAL_ERROR_T (*VCodecGetAffinity)(IN VCODEC_PTHREAD_T tid,
  398. OUT unsigned int *pu4CPUMask,
  399. OUT unsigned int *pu4SetMask);
  400. VCODEC_OAL_ERROR_T (*VCodecCoreLoading)(IN int s4CPUid,
  401. OUT int *ps4Loading);
  402. VCODEC_OAL_ERROR_T (*VCodecCoreNumber)(OUT int *ps4CPUNums);
  403. /***** Others Functions ******/
  404. void (*VCodecSleep)(IN unsigned int u4Tick);
  405. VCODEC_OAL_ERROR_T (*VCodecConfigMCIPort)(
  406. IN unsigned int u4PortConfig,
  407. OUT unsigned int *pu4PortResult,
  408. IN VCODEC_CODEC_TYPE_T eCodecType
  409. );
  410. VCODEC_OAL_ERROR_T (*VCodecPrintf)(IN const char *_Format, ...);
  411. } VCODEC_OAL_CALLBACK_T;
  412. extern VCODEC_OAL_CALLBACK_T rVCODEC_OAL_Function;
  413. int VCodecOALInit(IN VCODEC_OAL_CALLBACK_T *prVCODEC_OAL_Function);
  414. #endif /* VCODEC_OAL_H */