vdec_drv_if_private.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437
  1. #ifndef _VDEC_DRV_IF_PRIVATE_H_
  2. #define _VDEC_DRV_IF_PRIVATE_H_
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include "val_types_private.h"
  7. #include "vdec_drv_if_public.h"
  8. typedef enum {
  9. UNKNOWN_FBTYPE = 0, /* /< Unknown type */
  10. VDEC_DRV_FBTYPE_YUV420_BK_16x1 = (1 << 0), /* /< YCbCr 420 block in three planar */
  11. VDEC_DRV_FBTYPE_YUV420_BK_8x2 = (1 << 1), /* /< YCbCr 420 block in three planar */
  12. VDEC_DRV_FBTYPE_YUV420_BK_4x4 = (1 << 2), /* /< YCbCr 420 block in three planar */
  13. VDEC_DRV_FBTYPE_YUV420_RS = (1 << 3), /* /< YCbCr 420 raster scan in three planar */
  14. VDEC_DRV_FBTYPE_RGB565_RS = (1 << 4) /* /< RGB565 in one planar */
  15. }
  16. VDEC_DRV_FBTYPE_T;
  17. /**
  18. * @par Structure
  19. * VDEC_DRV_BUFFER_CONTROL_T
  20. * @par Description
  21. * Type of buffer control
  22. * - Here are two types of buffer
  23. * - 1.Reference buffer
  24. * - 2.Display buffer
  25. * - Buffer can be fixed size or derived from memory pool.
  26. * - Buffer can be created from internal or external memory.
  27. */
  28. typedef enum {
  29. /* /< Unknown Type */
  30. VDEC_DRV_BUFFER_CONTROL_UNKNOWN = 0,
  31. /* /< Reference frame and Display frame share the same external buffer */
  32. VDEC_DRV_BUFFER_CONTROL_REF_IS_DISP_EXT = (1 << 0),
  33. /* /< Reference frame and Display frame share the same internal buffer */
  34. VDEC_DRV_BUFFER_CONTROL_REF_IS_DISP_INT = (1 << 1),
  35. /* /< Reference frame and Display frame share the same external memory pool */
  36. VDEC_DRV_BUFFER_CONTROL_REF_IS_DISP_EXT_POOL = (1 << 2),
  37. /* /< Reference frame and Display frame share the same internal memory pool */
  38. VDEC_DRV_BUFFER_CONTROL_REF_IS_DISP_INT_POOL = (1 << 3),
  39. /* /< Reference frame uses external buffer and Display frame use another external buffer */
  40. VDEC_DRV_BUFFER_CONTROL_REF_EXT_DISP_EXT = (1 << 4),
  41. /* /< Reference frame uses external buffer and Display frame uses internal buffer */
  42. VDEC_DRV_BUFFER_CONTROL_REF_EXT_DISP_INT = (1 << 5),
  43. /* /< Reference frame uses external buffer and Display frame uses external memory pool */
  44. VDEC_DRV_BUFFER_CONTROL_REF_EXT_DISP_EXT_POOL = (1 << 6),
  45. /* /< Reference frame uses external buffer and Display frame uses internal memory pool */
  46. VDEC_DRV_BUFFER_CONTROL_REF_EXT_DISP_INT_POOL = (1 << 7),
  47. /* /< Reference frame uses external memory pool and Display frame use external buffer */
  48. VDEC_DRV_BUFFER_CONTROL_REF_EXT_POOL_DISP_EXT = (1 << 8),
  49. /* /< Reference frame uses external memory pool and Display frame uses internal buffer */
  50. VDEC_DRV_BUFFER_CONTROL_REF_EXT_POOL_DISP_INT = (1 << 9),
  51. /* /< Reference frame uses external memory pool and Display frame uses external memory pool */
  52. VDEC_DRV_BUFFER_CONTROL_REF_EXT_POOL_DISP_EXT_POOL = (1 << 10),
  53. /* /< Reference frame uses external memory pool and Display frame uses internal memory pool */
  54. VDEC_DRV_BUFFER_CONTROL_REF_EXT_POOL_DISP_INT_POOL = (1 << 11),
  55. /* /< Reference frame uses internal buffer and Display frame use external buffer */
  56. VDEC_DRV_BUFFER_CONTROL_REF_INT_DISP_EXT = (1 << 12),
  57. /* /< Reference frame uses internal buffer and Display frame uses internal buffer */
  58. VDEC_DRV_BUFFER_CONTROL_REF_INT_DISP_INT = (1 << 13),
  59. /* /< Reference frame uses internal buffer and Display frame uses external memory pool */
  60. VDEC_DRV_BUFFER_CONTROL_REF_INT_DISP_EXT_POOL = (1 << 14),
  61. /* /< Reference frame uses internal buffer and Display frame uses internal memory pool */
  62. VDEC_DRV_BUFFER_CONTROL_REF_INT_DISP_INT_POOL = (1 << 15),
  63. /* /< Reference frame uses internal memory pool and Display frame use external buffer */
  64. VDEC_DRV_BUFFER_CONTROL_REF_INT_POOL_DISP_EXT = (1 << 16),
  65. /* /< Reference frame uses internal memory pool and Display frame uses internal buffer */
  66. VDEC_DRV_BUFFER_CONTROL_REF_INT_POOL_DISP_INT = (1 << 17),
  67. /* /< Reference frame uses internal memory pool and Display frame uses external memory pool */
  68. VDEC_DRV_BUFFER_CONTROL_REF_INT_POOL_DISP_EXT_POOL = (1 << 18),
  69. /* /< Reference frame uses external memory pool and Display frame uses another internal memory pool */
  70. VDEC_DRV_BUFFER_CONTROL_REF_INT_POOL_DISP_INT_POOL = (1 << 19)
  71. } VDEC_DRV_BUFFER_CONTROL_T;
  72. /**
  73. * @par Structure
  74. * VDEC_DRV_DOWNSIZE_RATIO_T
  75. * @par Description
  76. * DownSize Ratio
  77. * - The aspect ratio of frame is kept after downsizing.
  78. */
  79. typedef enum {
  80. VDEC_DRV_DOWNSIZE_RATIO_UNKNOWN = 0, /* /< Unknown ratio */
  81. VDEC_DRV_DOWNSIZE_RATIO_1_1 = (1 << 0), /* /< Original ratio */
  82. VDEC_DRV_DOWNSIZE_RATIO_1_2 = (1 << 1), /* /< ratio = 1/2 */
  83. VDEC_DRV_DOWNSIZE_RATIO_1_3 = (1 << 2), /* /< ratio = 1/3 */
  84. VDEC_DRV_DOWNSIZE_RATIO_1_4 = (1 << 3), /* /< ratio = 1/4 */
  85. VDEC_DRV_DOWNSIZE_RATIO_1_5 = (1 << 4), /* /< ratio = 1/5 */
  86. VDEC_DRV_DOWNSIZE_RATIO_1_6 = (1 << 5), /* /< ratio = 1/6 */
  87. VDEC_DRV_DOWNSIZE_RATIO_1_7 = (1 << 6), /* /< ratio = 1/7 */
  88. VDEC_DRV_DOWNSIZE_RATIO_1_8 = (1 << 7) /* /< ratio = 1/8 */
  89. } VDEC_DRV_DOWNSIZE_RATIO_T;
  90. /**
  91. * @par Structure
  92. * VDEC_DRV_PIC_STRUCT_T
  93. * @par Description
  94. * [Unused]Picture Struct
  95. * - Consecutive Frame or filed
  96. * - Separated top/bottom field
  97. */
  98. typedef enum {
  99. VDEC_DRV_PIC_STRUCT_UNKNOWN = 0, /* /< Unknown */
  100. VDEC_DRV_PIC_STRUCT_CONSECUTIVE_FRAME, /* /< Consecutive Frame */
  101. VDEC_DRV_PIC_STRUCT_CONSECUTIVE_TOP_FIELD, /* /< Consecutive top field */
  102. VDEC_DRV_PIC_STRUCT_CONSECUTIVE_BOT_FIELD, /* /< Consecutive bottom field */
  103. VDEC_DRV_PIC_STRUCT_SEPARATED_TOP_FIELD, /* /< Separated top field */
  104. VDEC_DRV_PIC_STRUCT_SEPARATED_BOT_FIELD, /* /< Separated bottom field */
  105. VDEC_DRV_PIC_STRUCT_FIELD,
  106. } VDEC_DRV_PIC_STRUCT_T;
  107. /**
  108. * @par Structure
  109. * VDEC_DRV_FRAME_RATE_T
  110. * @par Description
  111. * Frame rate types
  112. */
  113. typedef enum {
  114. VDEC_DRV_FRAME_RATE_UNKNOWN = 0, /* /< Unknown fps */
  115. VDEC_DRV_FRAME_RATE_23_976, /* /< fps = 24000/1001 (23.976...) */
  116. VDEC_DRV_FRAME_RATE_24, /* /< fps = 24 */
  117. VDEC_DRV_FRAME_RATE_25, /* /< fps = 25 */
  118. VDEC_DRV_FRAME_RATE_29_97, /* /< fps = 30000/1001 (29.97...) */
  119. VDEC_DRV_FRAME_RATE_30, /* /< fps = 30 */
  120. VDEC_DRV_FRAME_RATE_50, /* /< fps = 50 */
  121. VDEC_DRV_FRAME_RATE_59_94, /* /< fps = 60000/1001 (59.94...) */
  122. VDEC_DRV_FRAME_RATE_60, /* /< fps = 60 */
  123. VDEC_DRV_FRAME_RATE_120, /* /< fps = 120 */
  124. VDEC_DRV_FRAME_RATE_1, /* /< fps = 1 */
  125. VDEC_DRV_FRAME_RATE_5, /* /< fps = 5 */
  126. VDEC_DRV_FRAME_RATE_8, /* /< fps = 8 */
  127. VDEC_DRV_FRAME_RATE_10, /* /< fps = 10 */
  128. VDEC_DRV_FRAME_RATE_12, /* /< fps = 12 */
  129. VDEC_DRV_FRAME_RATE_15, /* /< fps = 15 */
  130. VDEC_DRV_FRAME_RATE_16, /* /< fps = 16 */
  131. VDEC_DRV_FRAME_RATE_17, /* /< fps = 17 */
  132. VDEC_DRV_FRAME_RATE_18, /* /< fps = 18 */
  133. VDEC_DRV_FRAME_RATE_20, /* /< fps = 20 */
  134. VDEC_DRV_FRAME_RATE_2, /* /< fps = 2 */
  135. VDEC_DRV_FRAME_RATE_6, /* /< fps = 6 */
  136. VDEC_DRV_FRAME_RATE_48, /* /< fps = 48 */
  137. VDEC_DRV_FRAME_RATE_70, /* /< fps = 70 */
  138. VDEC_DRV_FRAME_RATE_VARIABLE /* /< fps = VBR */
  139. } VDEC_DRV_FRAME_RATE_T;
  140. /**
  141. * @par Structure
  142. * VDEC_DRV_POST_PROC_T
  143. * @par Description
  144. * input of type SET_POST_PROC (output is NULL, use return value)
  145. */
  146. typedef enum {
  147. VDEC_DRV_POST_PROC_UNKNOWN = 0, /* /< Unknown */
  148. VDEC_DRV_POST_PROC_DISABLE, /* /< Do not do post-processing */
  149. VDEC_DRV_POST_PROC_DOWNSIZE, /* /< Do downsize */
  150. VDEC_DRV_POST_PROC_RESIZE, /* /< Do resize */
  151. VDEC_DRV_POST_PROC_DEBLOCK, /* /< Do deblocking */
  152. VDEC_DRV_POST_PROC_DEINTERLACE /* /< Do deinterlace */
  153. } VDEC_DRV_POST_PROC_T;
  154. /**
  155. * @par Structure
  156. * VDEC_DRV_NALU_T
  157. * @par Description
  158. * Buffer Structure
  159. * - Store NALU buffer base address
  160. * - Store length of NALU buffer
  161. */
  162. typedef struct {
  163. VAL_UINT32_T u4AddrOfNALu; /* /< NALU buffer base address */
  164. VAL_UINT32_T u4LengthOfNALu; /* /< Length of NALU buffer */
  165. void *pReseved; /* /< reserved */
  166. } VDEC_DRV_NALU_T;
  167. /**
  168. * @par Structure
  169. * VDEC_DRV_STATISTIC_T
  170. * @par Description
  171. * VDecDrv Statistic information
  172. */
  173. typedef struct __VDEC_DRV_STATISTIC_T {
  174. VAL_UINT32_T u4DecTimeMax; /* /< [Out] Decode one frame period, Max. */
  175. VAL_UINT32_T u4DecTimeMin; /* /< [Out] Decode one frame period, Min. */
  176. VAL_UINT32_T u4DecTimeAvg; /* /< [Out] Decode one frame period, Average. */
  177. } VDEC_DRV_STATISTIC_T;
  178. /**
  179. * @par Structure
  180. * P_VDEC_DRV_STATISTIC_T
  181. * @par Description
  182. * Pointer of VDEC_DRV_STATISTIC_T
  183. */
  184. typedef VDEC_DRV_STATISTIC_T * P_VDEC_DRV_STATISTIC_T;
  185. /**
  186. * @par Structure
  187. * VDEC_DRV_FBTYPE_T
  188. * @par Description
  189. * Supported frame buffer type in driver layer
  190. */
  191. typedef struct {
  192. /* for speedy mode */
  193. VAL_UINT32_T nBufferStatus;
  194. VAL_INT64_T llLastVideoTime;
  195. VAL_INT64_T llCurrentPlayTime;
  196. } DRIVER_HANDLER_T;
  197. /**
  198. * @par Structure
  199. * VDEC_DRV_VIDEO_FBTYPE_T
  200. * @par Description
  201. * Both input and output of type QUERY_FBTYPE
  202. */
  203. typedef struct __VDEC_DRV_VIDEO_FBTYPE_T {
  204. VAL_UINT32_T u4FBType; /* /< VDEC_DRV_FBTYPE */
  205. } VDEC_DRV_VIDEO_FBTYPE_T;
  206. /**
  207. * @par Structure
  208. * P_VDEC_DRV_VIDEO_FBTYPE_T
  209. * @par Description
  210. * Pointer of VDEC_DRV_VIDEO_FBTYPE_T
  211. */
  212. typedef VDEC_DRV_VIDEO_FBTYPE_T * P_VDEC_DRV_VIDEO_FBTYPE_T;
  213. /**
  214. * @par Structure
  215. * VDEC_DRV_QUERY_BUFFER_MODE_T
  216. * @par Description
  217. * Both input and output of type QUERY_BUFFER_CONTROL
  218. */
  219. typedef struct __VDEC_DRV_QUERY_BUFFER_MODE_T {
  220. VAL_UINT32_T u4BufCtrl; /* /< VDEC_DRV_BUFFER_CONTROL */
  221. } VDEC_DRV_QUERY_BUFFER_MODE_T;
  222. /**
  223. * @par Structure
  224. * P_VDEC_DRV_QUERY_BUFFER_MODE_T
  225. * @par Description
  226. * Pointer of VDEC_DRV_QUERY_BUFFER_MODE_T
  227. */
  228. typedef VDEC_DRV_QUERY_BUFFER_MODE_T * P_VDEC_DRV_QUERY_BUFFER_MODE_T;
  229. /**
  230. * @par Structure
  231. * VDEC_DRV_QUERY_POOL_SIZE_T
  232. * @par Description
  233. * output of type QUERY_REF_POOL_SIZE and QUERY_DISP_POOL_SIZE (input is NULL)
  234. */
  235. typedef struct __VDEC_DRV_QUERY_POOL_SIZE_T {
  236. VAL_UINT32_T u4Size; /* /< buffer size of the memory pool */
  237. } VDEC_DRV_QUERY_POOL_SIZE_T;
  238. /**
  239. * @par Structure
  240. * P_VDEC_DRV_QUERY_POOL_SIZE_T
  241. * @par Description
  242. * Pointer of VDEC_DRV_QUERY_POOL_SIZE_T
  243. */
  244. typedef VDEC_DRV_QUERY_POOL_SIZE_T * P_VDEC_DRV_QUERY_POOL_SIZE_T;
  245. /* output of type DISP_FRAME_BUFFER and FREE_FRAME_BUFFER is P_VDEC_DRV_FRAMEBUF_T (input is NULL) */
  246. /* output of type GET_PICTURE_INFO is P_VDEC_DRV_PICINFO_T (input is NULL) */
  247. /* both input and output of type QUERY_REORDER_ABILITY are NULL (use return value) */
  248. /**
  249. * @par Structure
  250. * VDEC_DRV_QUERY_POOL_DOWNSIZE_T
  251. * @par Description
  252. * output of type QUERY_DOWNSIZE_ABILITY (input is NULL)
  253. */
  254. typedef struct __VDEC_DRV_QUERY_POOL_DOWNSIZE_T {
  255. VAL_UINT32_T u4Ratio; /* /< VDEC_DRV_DOWNSIZE_RATIO */
  256. } VDEC_DRV_QUERY_POOL_DOWNSIZE_T;
  257. /**
  258. * @par Structure
  259. * P_VDEC_DRV_QUERY_POOL_DOWNSIZE_T
  260. * @par Description
  261. * Pointer of VDEC_DRV_QUERY_POOL_DOWNSIZE_T
  262. */
  263. typedef VDEC_DRV_QUERY_POOL_DOWNSIZE_T * P_VDEC_DRV_QUERY_POOL_DOWNSIZE_T;
  264. /**
  265. * @par Structure
  266. * VDEC_DRV_QUERY_POOL_RESIZE_T
  267. * @par Description
  268. * input of type QUERY_RESIZE_ABILITY (output is NULL, use return value)
  269. */
  270. typedef struct __VDEC_DRV_QUERY_POOL_RESIZE_T {
  271. VAL_UINT32_T u4OutWidth; /* /<Width of buffer */
  272. VAL_UINT32_T u4OutHeight; /* /<Height of buffer */
  273. } VDEC_DRV_QUERY_POOL_RESIZE_T;
  274. /**
  275. * @par Structure
  276. * P_VDEC_DRV_QUERY_POOL_RESIZE_T
  277. * @par Description
  278. * Pointer of VDEC_DRV_QUERY_POOL_RESIZE_T
  279. */
  280. typedef VDEC_DRV_QUERY_POOL_RESIZE_T * P_VDEC_DRV_QUERY_POOL_RESIZE_T;
  281. /* both input and output of type QUERY_DEBLOCK_ABILITY are NULL (use return value) */
  282. /* both input and output of type QUERY_DERING_ABILITY are NULL (use return value) */
  283. /* both input and output of type QUERY_DEINTERLACE_ABILITY are NULL (use return value) */
  284. /* both input and output of type QUERY_DROPFRAME_ABILITY are NULL (use return value) */
  285. /**
  286. * @par Structure
  287. * VDEC_DRV_SET_BUFFER_MODE_T
  288. * @par Description
  289. * input of type VDEC_DRV_SET_BUFFER_MODE_T (output is NULL, use return value)
  290. */
  291. typedef struct __VDEC_DRV_SET_BUFFER_MODE_T {
  292. VAL_UINT32_T u4BufferMode; /* /< VDEC_DRV_BUFFER_CONTROL */
  293. } VDEC_DRV_SET_BUFFER_MODE_T;
  294. /* input of type SET_FRAME_BUFFER_TYPE is VDEC_DRV_VIDEO_FBTYPE_T (output is NULL, use return value) */
  295. /**
  296. * @par Structure
  297. * P_VDEC_DRV_SET_BUFFER_MODE_T
  298. * @par Description
  299. * Pointer of VDEC_DRV_SET_BUFFER_MODE_T
  300. */
  301. typedef VDEC_DRV_SET_BUFFER_MODE_T * P_VDEC_DRV_SET_BUFFER_MODE_T;
  302. /* input of type SET_FRAME_BUFFER_TYPE is VDEC_DRV_VIDEO_FBTYPE_T (output is NULL, use return value) */
  303. /**
  304. * @par Structure
  305. * VDEC_DRV_SET_BUFFER_ADDR_T
  306. * @par Description
  307. * input of type FREE_FRAME_BFFER (buffer_len=NULL, output is NULL, use return value)
  308. */
  309. typedef struct __VDEC_DRV_SET_BUFFER_ADDR_T {
  310. VAL_MEM_ADDR_T rBufferAddr; /* /< buffer memory base address */
  311. } VDEC_DRV_SET_BUFFER_ADDR_T;
  312. /**
  313. * @par Structure
  314. * P_VDEC_DRV_SET_BUFFER_ADDR_T
  315. * @par Description
  316. * Pointer of VDEC_DRV_SET_BUFFER_ADDR_T
  317. */
  318. typedef VDEC_DRV_SET_BUFFER_ADDR_T * P_VDEC_DRV_SET_BUFFER_ADDR_T;
  319. /* input of type SET_REF_EXT_POOL_ADDR and SET_DISP_EXT_POOL_ADDR is
  320. VDEC_DRV_SET_BUFFER_ADDR_T (output is NULL, use return value) */
  321. /**
  322. * @par Structure
  323. * VDEC_DRV_SET_POST_PROC_MODE_T
  324. * @par Description
  325. * Parameters of set post process mode
  326. */
  327. typedef struct __VDEC_DRV_SET_POST_PROC_MODE_T {
  328. VAL_UINT32_T u4PostProcMode; /* /< one of VDEC_DRV_POST_PROC */
  329. VAL_UINT32_T u4DownsizeRatio; /* /< if mode is POST_PROC_DOWNSIZE */
  330. VAL_UINT32_T u4ResizeWidth; /* /< if mode is POST_PROC_RESIZE */
  331. VAL_UINT32_T u4ResizeHeight; /* /< if mode is POST_PROC_RESIZE */
  332. } VDEC_DRV_SET_POST_PROC_MODE_T;
  333. /**
  334. * @par Structure
  335. * P_VDEC_DRV_SET_POST_PROC_MODE_T
  336. * @par Description
  337. * Pointer of VDEC_DRV_SET_POST_PROC_MODE_T
  338. */
  339. typedef VDEC_DRV_SET_POST_PROC_MODE_T * P_VDEC_DRV_SET_POST_PROC_MODE_T;
  340. typedef struct _VDEC_DRV_HW_REG_T {
  341. VAL_UINT32_T u4VdecHWBase;
  342. VAL_UINT32_T u4VdecHWSYS;
  343. VAL_UINT32_T u4VdecMISC;
  344. VAL_UINT32_T u4VdecVLD;
  345. VAL_UINT32_T u4VdecVLDTOP;
  346. VAL_UINT32_T u4VdecMC;
  347. VAL_UINT32_T u4VdecAVCVLD;
  348. VAL_UINT32_T u4VdecAVCMV;
  349. VAL_UINT32_T u4VdecPP;
  350. VAL_UINT32_T u4VdecSQT;
  351. VAL_UINT32_T u4VdecVP8VLD;
  352. VAL_UINT32_T u4VdecVP6VLD;
  353. VAL_UINT32_T u4VdecVP8VLD2;
  354. } VDEC_DRV_HW_REG_T;
  355. typedef VDEC_DRV_HW_REG_T * P_VDEC_DRV_HW_REG_T;
  356. #ifdef __cplusplus
  357. }
  358. #endif
  359. #endif /* #ifndef _VDEC_DRV_IF_PRIVATE_H_ */