vdec_drv_if_public.h 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876
  1. #ifndef _VDEC_DRV_IF_PUBLIC_H_
  2. #define _VDEC_DRV_IF_PUBLIC_H_
  3. #ifdef __cplusplus
  4. extern "C" {
  5. #endif
  6. #include "val_types_public.h"
  7. /**
  8. * @par Enumeration
  9. * VDEC_DRV_FBSTSTUS
  10. * @par Description
  11. * This is the item for frame buffer status
  12. */
  13. typedef enum _VDEC_DRV_FBSTSTUS {
  14. VDEC_DRV_FBSTSTUS_NORMAL = 0, /* /< normal type */
  15. VDEC_DRV_FBSTSTUS_REPEAT_LAST = (1 << 0), /* /< repeat last frame */
  16. VDEC_DRV_FBSTSTUS_NOT_DISPLAY = (1 << 1), /* /< not displayed */
  17. VDEC_DRV_FBSTSTUS_NOT_USED = (1 << 2), /* /< not used */
  18. }
  19. VDEC_DRV_FBSTSTUS;
  20. /**
  21. * @par Enumeration
  22. * VDEC_DRV_VIDEO_FORMAT_T
  23. * @par Description
  24. * video_format of VDecDrvCreate()
  25. */
  26. typedef enum _VDEC_DRV_VIDEO_FORMAT_T {
  27. VDEC_DRV_VIDEO_FORMAT_UNKNOWN_VIDEO_FORMAT = 0, /* /< Unknown video format */
  28. VDEC_DRV_VIDEO_FORMAT_DIVX311 = (1 << 0), /* /< Divix 3.11 */
  29. VDEC_DRV_VIDEO_FORMAT_DIVX4 = (1 << 1), /* /< Divix 4 */
  30. VDEC_DRV_VIDEO_FORMAT_DIVX5 = (1 << 2), /* /< Divix 5 */
  31. VDEC_DRV_VIDEO_FORMAT_XVID = (1 << 3), /* /< Xvid */
  32. VDEC_DRV_VIDEO_FORMAT_MPEG1 = (1 << 4), /* /< MPEG-1 */
  33. VDEC_DRV_VIDEO_FORMAT_MPEG2 = (1 << 5), /* /< MPEG-2 */
  34. VDEC_DRV_VIDEO_FORMAT_MPEG4 = (1 << 6), /* /< MPEG-4 */
  35. VDEC_DRV_VIDEO_FORMAT_H263 = (1 << 7), /* /< H263 */
  36. VDEC_DRV_VIDEO_FORMAT_H264 = (1 << 8), /* /< H264 */
  37. VDEC_DRV_VIDEO_FORMAT_H265 = (1 << 9), /* /< H265 */
  38. VDEC_DRV_VIDEO_FORMAT_WMV7 = (1 << 10), /* /< WMV7 */
  39. VDEC_DRV_VIDEO_FORMAT_WMV8 = (1 << 11), /* /< WMV8 */
  40. VDEC_DRV_VIDEO_FORMAT_WMV9 = (1 << 12), /* /< WMV9 */
  41. VDEC_DRV_VIDEO_FORMAT_VC1 = (1 << 13), /* /< VC1 */
  42. VDEC_DRV_VIDEO_FORMAT_REALVIDEO8 = (1 << 14), /* /< RV8 */
  43. VDEC_DRV_VIDEO_FORMAT_REALVIDEO9 = (1 << 15), /* /< RV9 */
  44. VDEC_DRV_VIDEO_FORMAT_VP6 = (1 << 16), /* /< VP6 */
  45. VDEC_DRV_VIDEO_FORMAT_VP7 = (1 << 17), /* /< VP7 */
  46. VDEC_DRV_VIDEO_FORMAT_VP8 = (1 << 18), /* /< VP8 */
  47. VDEC_DRV_VIDEO_FORMAT_VP8_WEBP_PICTURE_MODE = (1 << 19), /* /< VP8 WEBP PICTURE MODE */
  48. VDEC_DRV_VIDEO_FORMAT_VP8_WEBP_MB_ROW_MODE = (1 << 20), /* /< VP8 WEBP ROW MODE */
  49. VDEC_DRV_VIDEO_FORMAT_VP9 = (1 << 21), /* /< VP9 */
  50. VDEC_DRV_VIDEO_FORMAT_VP9_WEBP_PICTURE_MODE = (1 << 22), /* /< VP9 WEBP PICTURE MODE */
  51. VDEC_DRV_VIDEO_FORMAT_VP9_WEBP_MB_ROW_MODE = (1 << 23), /* /< VP9 WEBP ROW MODE */
  52. VDEC_DRV_VIDEO_FORMAT_AVS = (1 << 24), /* /< AVS */
  53. VDEC_DRV_VIDEO_FORMAT_MJPEG = (1 << 25), /* /< Motion JPEG */
  54. VDEC_DRV_VIDEO_FORMAT_S263 = (1 << 26), /* /< Sorenson Spark */
  55. VDEC_DRV_VIDEO_FORMAT_H264HP = (1 << 27),
  56. VDEC_DRV_VIDEO_FORMAT_H264SEC = (1 << 28),
  57. VDEC_DRV_VIDEO_FORMAT_H265SEC = (1 << 29)
  58. } VDEC_DRV_VIDEO_FORMAT_T;
  59. /**
  60. * @par Enumeration
  61. * VDEC_DRV_H265_VIDEO_PROFILE_T
  62. * @par Description
  63. * video profile for H.265
  64. */
  65. typedef enum _VDEC_DRV_H265_VIDEO_PROFILE_T {
  66. VDEC_DRV_H265_VIDEO_PROFILE_UNKNOWN = 0, /* /< Unknown video profile */
  67. VDEC_DRV_H265_VIDEO_PROFILE_H265_MAIN = (1 << 0), /* /< H265 main profile */
  68. VDEC_DRV_H265_VIDEO_PROFILE_H265_MAIN_10 = (1 << 1), /* /< H265 main 10 profile */
  69. VDEC_DRV_H265_VIDEO_PROFILE_H265_STILL_IMAGE = (1 << 2) /* /< H265 still image profile */
  70. } VDEC_DRV_H265_VIDEO_PROFILE_T;
  71. /**
  72. * @par Enumeration
  73. * VDEC_DRV_H264_VIDEO_PROFILE_T
  74. * @par Description
  75. * video profile for H.264
  76. */
  77. typedef enum _VDEC_DRV_H264_VIDEO_PROFILE_T {
  78. VDEC_DRV_H264_VIDEO_PROFILE_UNKNOWN = 0, /* /< Unknown video profile */
  79. VDEC_DRV_H264_VIDEO_PROFILE_H264_BASELINE = (1 << 0), /* /< H264 baseline profile */
  80. VDEC_DRV_H264_VIDEO_PROFILE_H264_CONSTRAINED_BASELINE = (1 << 1), /* /< H264 constrained baseline profile */
  81. VDEC_DRV_H264_VIDEO_PROFILE_H264_MAIN = (1 << 2), /* /< H264 main profile */
  82. VDEC_DRV_H264_VIDEO_PROFILE_H264_EXTENDED = (1 << 3), /* /< H264 extended profile */
  83. VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH = (1 << 4), /* /< H264 high profile */
  84. VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH_10 = (1 << 5), /* /< H264 high 10 profile */
  85. VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH422 = (1 << 6), /* /< H264 high 422 profile */
  86. VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH444 = (1 << 7), /* /< H264 high 444 profile */
  87. /* /< H264 high 10 intra profile in Amendment 2 */
  88. VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH_10_INTRA = (1 << 8),
  89. /* /< H264 high 422 intra profile in Amendment 2 */
  90. VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH422_INTRA = (1 << 9),
  91. /* /< H264 high 444 intra profile in Amendment 2 */
  92. VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH444_INTRA = (1 << 10),
  93. /* /< H264 CAVLC 444 intra profile in Amendment 2 */
  94. VDEC_DRV_H264_VIDEO_PROFILE_H264_CAVLC444_INTRA = (1 << 11),
  95. /* /< H264 high 444 predictive profile in Amendment 2 */
  96. VDEC_DRV_H264_VIDEO_PROFILE_H264_HIGH444_PREDICTIVE = (1 << 12),
  97. /* /< H264 scalable baseline profile in Amendment 3 */
  98. VDEC_DRV_H264_VIDEO_PROFILE_H264_SCALABLE_BASELINE = (1 << 13),
  99. /* /< H264 scalable high profile in Amendment 3 */
  100. VDEC_DRV_H264_VIDEO_PROFILE_H264_SCALABLE_HIGH = (1 << 14),
  101. /* /< H264 scalable high intra profile in Amendment 3 */
  102. VDEC_DRV_H264_VIDEO_PROFILE_H264_SCALABLE_HIGH_INTRA = (1 << 15),
  103. /* /< Corrigendum 1 (2009) */
  104. VDEC_DRV_H264_VIDEO_PROFILE_H264_MULTIVIEW_HIGH = (1 << 16)
  105. } VDEC_DRV_H264_VIDEO_PROFILE_T;
  106. /**
  107. * @par Enumeration
  108. * VDEC_DRV_MPEG_VIDEO_PROFILE_T
  109. * @par Description
  110. * video profile for H263, MPEG2, MPEG4
  111. */
  112. typedef enum _VDEC_DRV_MPEG_VIDEO_PROFILE_T {
  113. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_0 = (1 << 0), /* /< H263 Profile 0 */
  114. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_1 = (1 << 1), /* /< H263 Profile 1 */
  115. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_2 = (1 << 2), /* /< H263 Profile 2 */
  116. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_3 = (1 << 3), /* /< H263 Profile 3 */
  117. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_4 = (1 << 4), /* /< H263 Profile 4 */
  118. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_5 = (1 << 5), /* /< H263 Profile 5 */
  119. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_6 = (1 << 6), /* /< H263 Profile 6 */
  120. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_7 = (1 << 7), /* /< H263 Profile 7 */
  121. VDEC_DRV_MPEG_VIDEO_PROFILE_H263_8 = (1 << 8), /* /< H263 Profile 8 */
  122. VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SIMPLE = (1 << 9), /* /< MPEG2 Simple Profile */
  123. VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_MAIN = (1 << 10), /* /< MPEG2 Main Profile */
  124. VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SNR = (1 << 11), /* /< MPEG2 SNR Profile */
  125. VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SPATIAL = (1 << 12), /* /< MPEG2 Spatial Profile */
  126. VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG2_HIGH = (1 << 13), /* /< MPEG2 High Profile */
  127. VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG4_SIMPLE = (1 << 14), /* /< MPEG4 Simple Profile */
  128. VDEC_DRV_MPEG_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE = (1 << 15) /* /< MPEG4 Advanced Simple Profile */
  129. } VDEC_DRV_MPEG_VIDEO_PROFILE_T;
  130. /**
  131. * @par Enumeration
  132. * VDEC_DRV_MS_VIDEO_PROFILE_T
  133. * @par Description
  134. * video profile for VC1, WMV9
  135. */
  136. typedef enum _VDEC_DRV_MS_VIDEO_PROFILE_T {
  137. VDEC_DRV_MS_VIDEO_PROFILE_VC1_SIMPLE = (1 << 0), /* /< VC-1 Simple Profile */
  138. VDEC_DRV_MS_VIDEO_PROFILE_VC1_MAIN = (1 << 1), /* /< VC-1 Main Profile */
  139. VDEC_DRV_MS_VIDEO_PROFILE_VC1_ADVANCED = (1 << 2), /* /< VC-1 Advanced Profile */
  140. VDEC_DRV_MS_VIDEO_PROFILE_WMV9_SIMPLE = (1 << 3), /* /< WMV9 Simple Profile */
  141. VDEC_DRV_MS_VIDEO_PROFILE_WMV9_MAIN = (1 << 4), /* /< WMV9 Main Profile */
  142. VDEC_DRV_MS_VIDEO_PROFILE_WMV9_COMPLEX = (1 << 5) /* /< WMV9 Complex Profile */
  143. } VDEC_DRV_MS_VIDEO_PROFILE_T;
  144. /**
  145. * @par Enumeration
  146. * VDEC_DRV_VIDEO_LEVEL_T
  147. * @par Description
  148. * video level
  149. */
  150. typedef enum _VDEC_DRV_VIDEO_LEVEL_T {
  151. VDEC_DRV_VIDEO_LEVEL_UNKNOWN = 0, /* /< Unknown level */
  152. VDEC_DRV_VIDEO_LEVEL_0, /* /< Specified by VC1 */
  153. VDEC_DRV_VIDEO_LEVEL_1, /* /< Specified by H264, VC1, MPEG4, HEVC */
  154. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_1, /* /< Specified by HEVC */
  155. VDEC_DRV_VIDEO_LEVEL_1b, /* /< Specified by H264 */
  156. VDEC_DRV_VIDEO_LEVEL_1_1, /* /< Specified by H264 */
  157. VDEC_DRV_VIDEO_LEVEL_1_2, /* /< Specified by H264 */
  158. VDEC_DRV_VIDEO_LEVEL_1_3, /* /< Specified by H264 */
  159. VDEC_DRV_VIDEO_LEVEL_2, /* /< Specified by H264, VC1, MPEG4, HEVC */
  160. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_2, /* /< Specified by HEVC */
  161. VDEC_DRV_VIDEO_LEVEL_2_1, /* /< Specified by H264, HEVC */
  162. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_2_1, /* /< Specified by HEVC */
  163. VDEC_DRV_VIDEO_LEVEL_2_2, /* /< Specified by H264 */
  164. VDEC_DRV_VIDEO_LEVEL_3, /* /< Specified by H264, VC1, MPEG4, HEVC */
  165. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_3, /* /< Specified by HEVC */
  166. VDEC_DRV_VIDEO_LEVEL_3_1, /* /< Specified by H264, HEVC */
  167. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_3_1, /* /< Specified by HEVC */
  168. VDEC_DRV_VIDEO_LEVEL_3_2, /* /< Specified by H264 */
  169. VDEC_DRV_VIDEO_LEVEL_4, /* /< Specified by H264, VC1, HEVC */
  170. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_4, /* /< Specified by HEVC */
  171. VDEC_DRV_VIDEO_LEVEL_4_1, /* /< Specified by H264, HEVC */
  172. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_4_1, /* /< Specified by HEVC */
  173. VDEC_DRV_VIDEO_LEVEL_4_2, /* /< Specified by H264 */
  174. VDEC_DRV_VIDEO_LEVEL_5, /* /< Specified by H264, HEVC */
  175. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_5, /* /< Specified by HEVC */
  176. VDEC_DRV_VIDEO_LEVEL_5_1, /* /< Specified by H264, HEVC */
  177. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_5_1, /* /< Specified by HEVC */
  178. VDEC_DRV_VIDEO_LEVEL_5_2, /* /< Specified by HEVC */
  179. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_5_2, /* /< Specified by HEVC */
  180. VDEC_DRV_VIDEO_LEVEL_6, /* /< Specified by HEVC */
  181. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_6, /* /< Specified by HEVC */
  182. VDEC_DRV_VIDEO_LEVEL_6_1, /* /< Specified by HEVC */
  183. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_6_1, /* /< Specified by HEVC */
  184. VDEC_DRV_VIDEO_LEVEL_6_2, /* /< Specified by HEVC */
  185. VDEC_DRV_VIDEO_HIGH_TIER_LEVEL_6_2, /* /< Specified by HEVC */
  186. VDEC_DRV_VIDEO_LEVEL_LOW, /* /< Specified by MPEG2, VC1 */
  187. VDEC_DRV_VIDEO_LEVEL_MEDIUM, /* /< Specified by MPEG2, VC1 */
  188. VDEC_DRV_VIDEO_LEVEL_HIGH1440, /* /< Specified by MPEG2 */
  189. VDEC_DRV_VIDEO_LEVEL_HIGH /* /< Specified by MPEG2, VC1 */
  190. } VDEC_DRV_VIDEO_LEVEL_T;
  191. /**
  192. * @par Enumeration
  193. * VDEC_DRV_RESOLUTION_T
  194. * @par Description
  195. * video resolution support
  196. */
  197. typedef enum _VDEC_DRV_RESOLUTION_T {
  198. VDEC_DRV_RESOLUTION_UNKNOWN = 0, /* /< Unknown resolution */
  199. VDEC_DRV_RESOLUTION_SUPPORT_QCIF, /* /< QCIF */
  200. VDEC_DRV_RESOLUTION_SUPPORT_QVGA, /* /< QVGA */
  201. VDEC_DRV_RESOLUTION_SUPPORT_CIF, /* /< CIF */
  202. VDEC_DRV_RESOLUTION_SUPPORT_480I, /* /< 720x480 interlace */
  203. VDEC_DRV_RESOLUTION_SUPPORT_480P, /* /< 720x480 progressive */
  204. VDEC_DRV_RESOLUTION_SUPPORT_576I, /* /< 720x576 interlace */
  205. VDEC_DRV_RESOLUTION_SUPPORT_576P, /* /< 720x576 progressive */
  206. VDEC_DRV_RESOLUTION_SUPPORT_720P, /* /< 1280x720 progressive */
  207. VDEC_DRV_RESOLUTION_SUPPORT_1080I, /* /< 1920x1080 interlace */
  208. VDEC_DRV_RESOLUTION_SUPPORT_1080P, /* /< 1920x1080 progressive */
  209. VDEC_DRV_RESOLUTION_SUPPORT_2160P /* /< 4096x2160 progressive */
  210. } VDEC_DRV_RESOLUTION_T;
  211. /**
  212. * @par Enumeration
  213. * VDEC_DRV_QUERY_TYPE_T
  214. * @par Description
  215. * video driver used to query different info
  216. */
  217. typedef enum _VDEC_DRV_QUERY_TYPE_T {
  218. VDEC_DRV_QUERY_TYPE_FBTYPE, /* /< Query VDEC_DRV_QUERY_TYPE_FBTYPE */
  219. VDEC_DRV_QUERY_TYPE_VIDEO_FORMAT, /* /< Query VDEC_DRV_QUERY_TYPE_VIDEO_FORMAT */
  220. VDEC_DRV_QUERY_TYPE_PROPERTY, /* /< Query VDEC_DRV_PROPERTY_T */
  221. VDEC_DRV_QUERY_TYPE_CHIP_NAME, /* /< Query VDEC_DRV_QUERY_TYPE_CHIP_NAME */
  222. VDEC_DRV_QUERY_TYPE_BUFFER_CONTROL, /* /< Query VDEC_DRV_QUERY_TYPE_BUFFER_CONTROL */
  223. VDEC_DRV_QUERY_TYPE_FEATURE_SUPPORTED, /* /< Query VDEC_DRV_QUERY_TYPE_FEATURE_SUPPORTED */
  224. VDEC_DRV_QUERY_TYPE_CPUCORE_FREQUENCY, /* /< Query VDEC_DRV_QUERY_TYPE_CPUCORE_FREQUENCY */
  225. } VDEC_DRV_QUERY_TYPE_T;
  226. /**
  227. * @par Enumeration
  228. * VDEC_DRV_QUERY_TYPE_T
  229. * @par Description
  230. * video driver used to queue multiple input buffers
  231. */
  232. typedef enum _VDEC_DRV_FEATURE_TYPE_T {
  233. VDEC_DRV_FEATURE_TYPE_NONE = 0, /* /< Empty */
  234. VDEC_DRV_FEATURE_TYPE_QUEUE_INPUT_BUFFER = (1 << 0), /* /< Driver will queue multiple input buffers */
  235. } VDEC_DRV_FEATURE_TYPE_T;
  236. /**
  237. * @par Enumeration
  238. * VDEC_DRV_GET_TYPE_T
  239. * @par Description
  240. * video driver used to get/query different info
  241. */
  242. typedef enum _VDEC_DRV_GET_TYPE_T {
  243. /* /< how many buffer size of the reference pool needs in driver */
  244. VDEC_DRV_GET_TYPE_QUERY_REF_POOL_SIZE,
  245. /* /< how many buffer size of the display pool needs in driver */
  246. VDEC_DRV_GET_TYPE_QUERY_DISP_POOL_SIZE,
  247. /* /< return a P_VDEC_DRV_FRAMEBUF_T address (especially in display order != decode order) */
  248. VDEC_DRV_GET_TYPE_DISP_FRAME_BUFFER,
  249. /*
  250. /< return a frame didn't be a reference more
  251. (when buffer_mode = REF_IS_DISP_EXT, REF_INT_DISP_EXT or REF_INT_POOL_DISP_EXT)
  252. */
  253. VDEC_DRV_GET_TYPE_FREE_FRAME_BUFFER,
  254. VDEC_DRV_GET_TYPE_GET_PICTURE_INFO, /* /< return a pointer address point to P_VDEC_DRV_PICINFO_T */
  255. VDEC_DRV_GET_TYPE_GET_STATISTIC_INFO, /* /< return statistic information. */
  256. VDEC_DRV_GET_TYPE_GET_FRAME_MODE, /* /< return frame mode parameter. */
  257. VDEC_DRV_GET_TYPE_GET_FRAME_CROP_INFO, /* /< return frame crop information. */
  258. /* /< query if driver can re-order the decode order to display order */
  259. VDEC_DRV_GET_TYPE_QUERY_REORDER_ABILITY,
  260. VDEC_DRV_GET_TYPE_QUERY_DOWNSIZE_ABILITY, /* /< query if driver can downsize decoded frame */
  261. VDEC_DRV_GET_TYPE_QUERY_RESIZE_ABILITY, /* /< query if driver can resize decoded frame */
  262. VDEC_DRV_GET_TYPE_QUERY_DEBLOCK_ABILITY, /* /< query if driver can do deblocking */
  263. VDEC_DRV_GET_TYPE_QUERY_DEINTERLACE_ABILITY, /* /< query if driver can do deinterlace */
  264. VDEC_DRV_GET_TYPE_QUERY_DROPFRAME_ABILITY, /* /< query if driver can drop frame */
  265. /* /< query if driver finish decode one frame but no output (main profile with B frame case.) */
  266. VDEC_DRV_GET_TYPE_GET_DECODE_STATUS_INFO,
  267. VDEC_DRV_GET_TYPE_GET_PIXEL_FORMAT, /* /< query the driver output pixel format */
  268. VDEC_DRV_GET_TYPE_GET_CPU_LOADING_INFO, /* /< query the cpu loading info from kernel driver */
  269. VDEC_DRV_GET_TYPE_GET_HW_CRC, /* /< query the hw CRC */
  270. VDEC_DRV_GET_TYPE_GET_CODEC_TIDS, /* /< query the thread ids from the codec lib */
  271. VDEC_DRV_GET_TYPE_GET_FRAME_INTERVAL, /* /< query frame interval from the codec lib */
  272. VDEC_DRV_GET_TYPE_FREE_INPUT_BUFFER, /* /< free input buffer */
  273. VDEC_DRV_GET_TYPE_QUERY_VIDEO_INTERLACING, /* /< query video interlace information */
  274. VDEC_DRV_GET_TYPE_QUERY_VIDEO_DPB_SIZE /* /< query video DPB size */
  275. } VDEC_DRV_GET_TYPE_T;
  276. /**
  277. * @par Enumeration
  278. * VDEC_DRV_PIXEL_FORMAT_T
  279. * @par Description
  280. * pixel format
  281. */
  282. typedef enum _VDEC_DRV_PIXEL_FORMAT_T {
  283. VDEC_DRV_PIXEL_FORMAT_NONE = 0, /* /< None */
  284. VDEC_DRV_PIXEL_FORMAT_YUV_420_PLANER, /* /< YUV 420 planer */
  285. VDEC_DRV_PIXEL_FORMAT_YUV_420_PLANER_MTK, /* /< YUV 420 planer MTK mode */
  286. VDEC_DRV_PIXEL_FORMAT_YUV_420_PLANER_UFO, /* /< YUV 420 planer MTK UFO mode */
  287. VDEC_DRV_PIXEL_FORMAT_YUV_YV12 /* /< YUV YV12 */
  288. } VDEC_DRV_PIXEL_FORMAT_T;
  289. /**
  290. * @par Enumeration
  291. * VDEC_DRV_DECODER_TYPE_T
  292. * @par Description
  293. * decoder type
  294. */
  295. typedef enum _VDEC_DRV_DECODER_TYPE_T {
  296. VDEC_DRV_DECODER_MTK_HARDWARE = 0, /* /< MTK software */
  297. VDEC_DRV_DECODER_MTK_SOFTWARE, /* /< MTK hardware */
  298. VDEC_DRV_DECODER_GOOGLE_SOFTWARE /* /< google software (default) */
  299. } VDEC_DRV_DECODER_TYPE_T;
  300. /**
  301. * @par Enumeration
  302. * VDEC_DRV_SET_TYPE_T
  303. * @par Description
  304. * video driver used to set different info
  305. */
  306. typedef enum _VDEC_DRV_SET_TYPE_T {
  307. /* /< =1, use timestamp in sVDEC_DRV_FRAMEBUF_T for the picture */
  308. VDEC_DRV_SET_TYPE_USE_EXT_TIMESTAMP,
  309. VDEC_DRV_SET_TYPE_SET_BUFFER_MODE, /* /< value is one of VDEC_DRV_BUFFER_MODE */
  310. /* /< one of VDEC_DRV_FBTYPE, if output type is the same as decode type, buffer mode can be REF_IS_DISP */
  311. VDEC_DRV_SET_TYPE_SET_FRAME_BUFFER_TYPE,
  312. VDEC_DRV_SET_TYPE_FREE_FRAME_BFFER, /* /< release buffer if DISP BUFFER is allocated from driver */
  313. VDEC_DRV_SET_TYPE_SET_REF_EXT_POOL_ADDR, /* /< if use REF_EXT_POOL in SET_BUFFER_MODE */
  314. VDEC_DRV_SET_TYPE_SET_DISP_EXT_POOL_ADDR, /* /< if use DISP_EXT_POOL in SET_BUFFER_MODE */
  315. VDEC_DRV_SET_TYPE_SET_DECODE_MODE, /* /< set if drop frame */
  316. /* /< buffer mode cannot set to REF_IS_DISP when using post-processing */
  317. VDEC_DRV_SET_TYPE_SET_POST_PROC,
  318. VDEC_DRV_SET_TYPE_SET_STATISTIC_ON, /* /< enable statistic function. */
  319. VDEC_DRV_SET_TYPE_SET_STATISTIC_OFF, /* /< disable statistic function. */
  320. VDEC_DRV_SET_TYPE_SET_FRAME_MODE, /* /< set frame mode */
  321. VDEC_DRV_SET_TYPE_SET_BUF_STATUS_FOR_SPEEDY, /* /< set buffer status for speedy mode */
  322. VDEC_DRV_SET_TYPE_SET_LAST_DISPLAY_TIME, /* /< set the last display time */
  323. VDEC_DRV_SET_TYPE_SET_CURRENT_PLAY_TIME, /* /< set the current play time */
  324. VDEC_DRV_SET_TYPE_SET_CONCEAL_LEVEL, /* /< error conceal level for decoder */
  325. VDEC_DRV_SET_TYPE_SET_OMX_TIDS, /* /< set omx thread ids */
  326. VDEC_DRV_SET_TYPE_SET_SWITCH_TVOUT, /* /< set ot switch to TV OUT */
  327. VDEC_DRV_SET_TYPE_SET_CODEC_COLOR_FORAMT, /* /< set codec color format */
  328. VDEC_DRV_SET_TYPE_SET_CODEC_YUV_STRIDE, /* /< set codec yuv stride */
  329. VDEC_DRV_SET_TYPE_SET_FRAMESIZE, /* /< set frame size from caller for MPEG4 decoder */
  330. /* /< use the max suppoerted size as output buffer size. for smooth */
  331. VDEC_DRV_SET_TYPE_SET_FIXEDMAXOUTPUTBUFFER,
  332. VDEC_DRV_SET_TYPE_SET_UFO_DECODE,
  333. VDEC_DRV_SET_TYPE_SET_WAIT_KEYFRAME, /* /< 0 = no, 1 = start, 2 = seek, 3 = always */
  334. VDEC_DRV_SET_TYPE_SET_FULL_SPEED,
  335. VDEC_DRV_SET_TYPE_SET_KERNEL_LOG_COUNT,
  336. } VDEC_DRV_SET_TYPE_T;
  337. /**
  338. * @par Enumeration
  339. * VDEC_DRV_DECODE_MODE_T
  340. * @par Description
  341. * video driver decode mode
  342. */
  343. typedef enum _VDEC_DRV_DECODE_MODE_T {
  344. VDEC_DRV_DECODE_MODE_UNKNOWN = 0, /* /< Unknown */
  345. VDEC_DRV_DECODE_MODE_NORMAL, /* /< decode all frames (no drop) */
  346. VDEC_DRV_DECODE_MODE_I_ONLY, /* /< skip P and B frame */
  347. VDEC_DRV_DECODE_MODE_B_SKIP, /* /< skip B frame */
  348. VDEC_DRV_DECODE_MODE_DROPFRAME, /* /< display param1 frames & drop param2 frames */
  349. VDEC_DRV_DECODE_MODE_NO_REORDER, /* /< output display ASAP without reroder */
  350. VDEC_DRV_DECODE_MODE_THUMBNAIL, /* /< thumbnail mode */
  351. /* /< skip reference check mode - force decode and display from first frame */
  352. VDEC_DRV_DECODE_MODE_SKIP_REFERENCE_CHECK,
  353. /* /< decode immediately no check. (parser should make sure the completed frame) */
  354. VDEC_DRV_DECODE_MODE_LOW_LATENCY_DECODE,
  355. } VDEC_DRV_DECODE_MODE_T;
  356. /**
  357. * @par Enumeration
  358. * VDEC_DRV_MRESULT_T
  359. * @par Description
  360. * Driver return type
  361. */
  362. typedef enum __VDEC_DRV_MRESULT_T {
  363. VDEC_DRV_MRESULT_OK = 0, /* /< OK */
  364. VDEC_DRV_MRESULT_FAIL, /* /< Fail */
  365. VDEC_DRV_MRESULT_FATAL, /* /< Fatal error to stop. */
  366. VDEC_DRV_MRESULT_RESOLUTION_CHANGED, /* /< Represent resoluion changed */
  367. VDEC_DRV_MRESULT_NEED_MORE_OUTPUT_BUFFER, /* /< Represent need more output buffer */
  368. VDEC_DRV_MRESULT_MAX = 0x0FFFFFFF /* /< Max Value */
  369. } VDEC_DRV_MRESULT_T;
  370. /**
  371. * @par Structure
  372. * VDEC_DRV_RINGBUF_T
  373. * @par Description
  374. * Ring Buffer Structure
  375. * - Store buffer base address
  376. * - Store read/write pointer address
  377. */
  378. typedef struct __VDEC_DRV_RINGBUF_T { /* union extend 64bits for TEE*/
  379. VAL_MEM_ADDR_T rBase; /* /< [IN] Base address of ring buffer */
  380. union {
  381. VAL_ULONG_T u4Read; /* /< [IN/OUT] Virtual address of read pointer */
  382. VAL_UINT64_T u4Read_ext64;
  383. };
  384. union {
  385. VAL_ULONG_T u4Write; /* /< [IN] Virtual address of write pointer */
  386. VAL_UINT64_T u4Write_ext64;
  387. };
  388. VAL_UINT32_T u4Timestamp; /* /< [IN/OUT] store timestamp */
  389. VAL_UINT32_T rSecMemHandle; /* /< [IN/OUT] security memory handle // MTK_SEC_VIDEO_PATH_SUPPORT */
  390. VAL_UINT32_T u4InputFlag; /*/ < [IN] the property of input buffer */
  391. } VDEC_DRV_RINGBUF_T;
  392. /**
  393. * @par Structure
  394. * P_VDEC_DRV_RINGBUF_T
  395. * @par Description
  396. * Pointer of VDEC_DRV_RINGBUF_T
  397. */
  398. typedef VDEC_DRV_RINGBUF_T *P_VDEC_DRV_RINGBUF_T;
  399. /**
  400. * @par Structure
  401. * VDEC_DRV_FRAMEBUF_T
  402. * @par Description
  403. * Frame buffer information
  404. */
  405. typedef struct __VDEC_DRV_FRAMEBUF_T {
  406. VAL_MEM_ADDR_T rBaseAddr; /* /< [IN/OUT] Base address */
  407. VAL_MEM_ADDR_T rPostProcAddr; /* /< [IN/OUT] Post process address */
  408. VAL_UINT32_T u4BufWidth; /* /< [IN/OUT] Buffer width */
  409. VAL_UINT32_T u4BufHeight; /* /< [IN/OUT] Buffer height */
  410. VAL_UINT32_T u4DispWidth; /* /< [OUT] Display width */
  411. VAL_UINT32_T u4DispHeight; /* /< [OUT] Display width */
  412. VAL_UINT32_T u4DispPitch; /* /< [OUT] Display pitch */
  413. VAL_UINT32_T u4Timestamp; /* /< [IN/OUT] Timestamp for last decode picture */
  414. VAL_UINT32_T u4AspectRatioW; /* /< [OUT] The horizontal size of the sample aspect ratio. */
  415. VAL_UINT32_T u4AspectRatioH; /* /< [OUT] The vertical size of the sample aspect ratio. */
  416. VAL_UINT32_T u4FrameBufferType; /* /< [OUT] One of VDEC_DRV_FBTYPE */
  417. VAL_UINT32_T u4PictureStructure; /* /< [OUT] One of VDEC_DRV_PIC_STRUCT */
  418. VAL_UINT32_T u4FrameBufferStatus; /* /< [OUT] One of VDEC_DRV_FBSTSTUS */
  419. VAL_UINT32_T u4IsUFOEncoded; /* /< [OUT] FB Is UFO Encoded */
  420. VAL_UINT32_T u4Reserved1; /* /< [IN/OUT] Reserved */
  421. VAL_UINT32_T u4Reserved2; /* /< [IN/OUT] Reserved */
  422. VAL_UINT32_T u4Reserved3; /* /< [IN/OUT] Reserved */
  423. /* /< [IN/OUT] security memory handle // MTK_SEC_VIDEO_PATH_SUPPORT */
  424. VAL_UINT32_T rSecMemHandle;
  425. VAL_UINT32_T u4ReeVA; /* /< [IN/OUT] Ree Va // MTK_SEC_VIDEO_PATH_SUPPORT */
  426. /* /< [IN/OUT] share handle of rBaseAddr.u4VA (for UT only) // MTK_SEC_VIDEO_PATH_SUPPORT */
  427. VAL_UINT32_T rFrameBufVaShareHandle;
  428. } VDEC_DRV_FRAMEBUF_T;
  429. /**
  430. * @par Structure
  431. * P_VDEC_DRV_FRAMEBUF_T
  432. * @par Description
  433. * Pointer of VDEC_DRV_FRAMEBUF_T
  434. */
  435. typedef VDEC_DRV_FRAMEBUF_T *P_VDEC_DRV_FRAMEBUF_T;
  436. /**
  437. * @par Structure
  438. * VDEC_DRV_CROPINFO_T
  439. * @par Description
  440. * Frame cropping information
  441. */
  442. typedef struct __VDEC_DRV_CROPINFO_T {
  443. VAL_UINT32_T u4CropLeft; /* /< Frame cropping left index */
  444. VAL_UINT32_T u4CropRight; /* /< Frame cropping right index */
  445. VAL_UINT32_T u4CropTop; /* /< Frame cropping top index */
  446. VAL_UINT32_T u4CropBottom; /* /< Frame cropping bottom index */
  447. } VDEC_DRV_CROPINFO_T;
  448. /**
  449. * @par Structure
  450. * P_VDEC_DRV_CROPINFO_T
  451. * @par Description
  452. * Pointer of VDEC_DRV_CROPINFO_T
  453. */
  454. typedef VDEC_DRV_CROPINFO_T * P_VDEC_DRV_CROPINFO_T;
  455. /**
  456. * @par Structure
  457. * VDEC_DRV_PICINFO_T
  458. * @par Description
  459. * Picture information
  460. */
  461. typedef struct __VDEC_DRV_PICINFO_T {
  462. VAL_UINT32_T u4Width; /* /< [OUT] Frame width */
  463. VAL_UINT32_T u4Height; /* /< [OUT] Frame height */
  464. VAL_UINT32_T u4RealWidth; /* /< [OUT] Frame real width (allocate buffer size) */
  465. VAL_UINT32_T u4RealHeight; /* /< [OUT] Frame real height (allocate buffer size) */
  466. VAL_UINT32_T u4Timestamp; /* /< [OUT] Timestamp for last decode picture */
  467. VAL_UINT32_T u4AspectRatioW; /* /< [OUT] The horizontal size of the sample aspect ratio */
  468. VAL_UINT32_T u4AspectRatioH; /* /< [OUT] The vertical size of the sample aspect ratio */
  469. VAL_UINT32_T u4FrameRate; /* /< [OUT] One of VDEC_DRV_FRAME_RATE */
  470. VAL_UINT32_T u4PictureStructure; /* /< [OUT] One of VDEC_DRV_PIC_STRUCT */
  471. VAL_UINT32_T u4IsProgressiveOnly; /* /< [OUT] 1: Progressive only. 0: Not progressive only. */
  472. VAL_INT32_T u4BitDepthLuma; /* /< [OUT] Sequence luma bitdepth */
  473. VAL_INT32_T u4BitDepthChroma; /* /< [OUT] Sequence chroma bitdepth */
  474. VAL_BOOL_T bIsHorizontalScaninLSB; /* /< [OUT] Scan direction in 10bit LSB 2 bit */
  475. } VDEC_DRV_PICINFO_T;
  476. /**
  477. * @par Structure
  478. * P_VDEC_DRV_PICINFO_T
  479. * @par Description
  480. * Pointer of VDEC_DRV_PICINFO_T
  481. */
  482. typedef VDEC_DRV_PICINFO_T * P_VDEC_DRV_PICINFO_T;
  483. /**
  484. * @par Structure
  485. * VDEC_DRV_SEQINFO_T
  486. * @par Description
  487. * Sequence information.
  488. * - Including Width/Height
  489. */
  490. typedef struct __VDEC_DRV_SEQINFO_T {
  491. VAL_UINT32_T u4Width; /* /< [OUT] Sequence buffer width */
  492. VAL_UINT32_T u4Height; /* /< [OUT] Sequence buffer height */
  493. VAL_UINT32_T u4PicWidth; /* /< [OUT] Sequence display width */
  494. VAL_UINT32_T u4PicHeight; /* /< [OUT] Sequence display height */
  495. VAL_INT32_T i4AspectRatioWidth; /* /< [OUT] Sequence aspect ratio width */
  496. VAL_INT32_T i4AspectRatioHeight; /* /< [OUT] Sequence aspect ratio height */
  497. VAL_BOOL_T bIsThumbnail; /* /< [OUT] check thumbnail */
  498. VAL_INT32_T u4BitDepthLuma; /* /< [OUT] Sequence luma bitdepth */
  499. VAL_INT32_T u4BitDepthChroma; /* /< [OUT] Sequence chroma bitdepth */
  500. VAL_BOOL_T bIsHorizontalScaninLSB; /* /< [OUT] Scan direction in 10bit LSB 2 bit */
  501. } VDEC_DRV_SEQINFO_T;
  502. /**
  503. * @par Structure
  504. * P_VDEC_DRV_SEQINFO_T
  505. * @par Description
  506. * Pointer of VDEC_DRV_SEQINFO_T
  507. */
  508. typedef VDEC_DRV_SEQINFO_T * P_VDEC_DRV_SEQINFO_T;
  509. /**
  510. * @par Structure
  511. * VDEC_DRV_YUV_STRIDE_T
  512. * @par Description
  513. * Y/UV Stride information
  514. */
  515. typedef struct __VDEC_DRV_YUV_STRIDE_T {
  516. unsigned int u4YStride; /* /< [IN] Y Stride */
  517. unsigned int u4UVStride; /* /< [IN] UV Stride */
  518. } VDEC_DRV_YUV_STRIDE_T;
  519. /**
  520. * @par Structure
  521. * P_VDEC_DRV_YUV_STRIDE_T
  522. * @par Description
  523. * Pointer of VDEC_DRV_YUV_STRIDE_T
  524. */
  525. typedef VDEC_DRV_YUV_STRIDE_T * P_VDEC_DRV_YUV_STRIDE_T;
  526. #define VDEC_DRV_CONCURRENCE_LIMIT_WFD 0x00000001
  527. #define VDEC_DRV_CONCURRENCE_LIMIT_MHL 0x00000002
  528. #define VDEC_DRV_CONCURRENCE_LIMIT_BLUETOOTH 0x00000004
  529. #define VDEC_DRV_CONCURRENCE_LIMIT_MASK 0x00000007
  530. /**
  531. * @par Structure
  532. * VDEC_DRV_QUERY_VIDEO_FORMAT_T
  533. * @par Description
  534. * Both input and output of type QUERY_VIDEO_FORMAT
  535. */
  536. typedef struct __VDEC_DRV_QUERY_VIDEO_FORMAT_T {
  537. VAL_UINT32_T u4VideoFormat; /* /< [OUT] VDEC_DRV_VIDEO_FORMAT */
  538. VAL_UINT32_T u4Profile; /* /< [OUT] VDEC_DRV_VIDEO_PROFILE */
  539. VAL_UINT32_T u4Level; /* /< [OUT] VDEC_DRV_VIDEO_LEVEL */
  540. VAL_UINT32_T u4Resolution; /* /< [OUT] VDEC_DRV_RESOLUTION */
  541. VAL_UINT32_T u4Width; /* /< [OUT] Frame Width */
  542. VAL_UINT32_T u4Height; /* /< [OUT] Frame Height */
  543. VAL_UINT32_T u4StrideAlign; /* /< [OUT] Frame Stride Alignment */
  544. VAL_UINT32_T u4SliceHeightAlign; /* /< [OUT] Frame Slice Height Alignment */
  545. VDEC_DRV_PIXEL_FORMAT_T ePixelFormat; /* /< [OUT] Frame Format */
  546. VDEC_DRV_DECODER_TYPE_T eDecodeType; /* /< [OUT] Decoder type */
  547. VAL_UINT32_T u4CompatibleFlag; /* /< [OUT] CompatibleFlag */
  548. } VDEC_DRV_QUERY_VIDEO_FORMAT_T;
  549. /**
  550. * @par Structure
  551. * P_VDEC_DRV_QUERY_VIDEO_FORMAT_T
  552. * @par Description
  553. * Pointer of VDEC_DRV_QUERY_VIDEO_FORMAT_T
  554. */
  555. typedef VDEC_DRV_QUERY_VIDEO_FORMAT_T * P_VDEC_DRV_QUERY_VIDEO_FORMAT_T;
  556. /**
  557. * @par Structure
  558. * VDEC_DRV_SET_DECODE_MODE_T
  559. * @par Description
  560. * [Unused]Set Decode Mode
  561. */
  562. typedef struct __VDEC_DRV_SET_DECODE_MODE_T {
  563. VDEC_DRV_DECODE_MODE_T eDecodeMode; /* /< [IN/OUT] one of VDEC_DRV_DECODE_MODE */
  564. VAL_UINT32_T u4DisplayFrameNum; /* /< [IN/OUT] 0 8 7 6 5 4 3 2 1 1 1 1 1 1 1 1 */
  565. VAL_UINT32_T u4DropFrameNum; /* /< [IN/OUT] 0 1 1 1 1 1 1 1 1 2 3 4 5 6 7 8 */
  566. } VDEC_DRV_SET_DECODE_MODE_T;
  567. /**
  568. * @par Structure
  569. * P_VDEC_DRV_SET_DECODE_MODE_T
  570. * @par Description
  571. * Pointer of VDEC_DRV_SET_DECODE_MODE_T
  572. */
  573. typedef VDEC_DRV_SET_DECODE_MODE_T *P_VDEC_DRV_SET_DECODE_MODE_T;
  574. /**
  575. * @par Structure
  576. * VDEC_DRV_PROPERTY_T
  577. * @par Description
  578. * VDecDrv property information
  579. */
  580. typedef struct __VDEC_DRV_PROPERTY_T {
  581. /* /< [OUT] buffer alignment requirement. */
  582. VAL_UINT32_T u4BufAlign;
  583. /* /< [OUT] buffer unit size is N bytes . (e.g., 8, 16, or 64 bytes per unit.) */
  584. VAL_UINT32_T u4BufUnitSize;
  585. /* /< [OUT] support post-process. */
  586. VAL_BOOL_T fgPostprocessSupport;
  587. /* /< [IN/OUT] Post process property */
  588. struct {
  589. VAL_UINT32_T fgOverlay:1;
  590. VAL_UINT32_T fgRotate:1;
  591. VAL_UINT32_T fgResize:1;
  592. VAL_UINT32_T fgCrop:1;
  593. } PostProcCapability;
  594. } VDEC_DRV_PROPERTY_T;
  595. /**
  596. * @par Structure
  597. * P_VDEC_DRV_PROPERTY_T
  598. * @par Description
  599. * Pointer of VDEC_DRV_PROPERTY_T
  600. */
  601. typedef VDEC_DRV_PROPERTY_T * P_VDEC_DRV_PROPERTY_T;
  602. /**
  603. * @par Function:
  604. * eVDecDrvQueryCapability
  605. * @par Description:
  606. * - Query Decode Driver Capability
  607. * - Input argument will be compare with driver's capability to check if the query is successful or not.
  608. * @param
  609. * a_eType [IN] Driver query type, such as FBType, Video Format, etc.
  610. * @param
  611. * a_pvInParam [IN] Input parameter for each type of query.
  612. * @param
  613. * a_pvOutParam [OUT] Store query result, such as FBType, Video Format, etc.
  614. * @par Returns:
  615. * - VDEC_DRV_MRESULT_OK: Query Success
  616. * - VDEC_DRV_MRESULT_FAIL: Query Fail
  617. */
  618. VDEC_DRV_MRESULT_T eVDecDrvQueryCapability(
  619. VDEC_DRV_QUERY_TYPE_T a_eType,
  620. VAL_VOID_T *a_pvInParam,
  621. VAL_VOID_T *a_pvOutParam
  622. );
  623. /**
  624. * @par Function:
  625. * eVDecDrvCreate
  626. * @par Description:
  627. * - Create handle
  628. * - Allocate extra data for each driver
  629. * - According to the input parameter, "a_eVideoFormat."
  630. * @param
  631. * a_phHandle [IN/OUT] Driver handle
  632. * @param
  633. * a_eVideoFormat [IN] Video format, such as MPEG4, H264, etc.
  634. * @par Returns:
  635. * Reason for return value. Show the default returned value at which condition.
  636. * - VDEC_DRV_MRESULT_OK: Create handle successfully
  637. * - VDEC_DRV_MRESULT_FAIL: Failed to create handle
  638. */
  639. VDEC_DRV_MRESULT_T eVDecDrvCreate(VAL_HANDLE_T *a_phHandle, VDEC_DRV_VIDEO_FORMAT_T a_eVideoFormat);
  640. /**
  641. * @par Function:
  642. * eVDecDrvRelease
  643. * @par Description:
  644. * - Release Decode Driver
  645. * - Need to perform driver deinit before driver release.
  646. * - Procedure of release
  647. * - Release extra data
  648. * - Release handle
  649. * @param
  650. * a_hHandle [IN] Handle needed to be released.
  651. * @par Returns:
  652. * - VDEC_DRV_MRESULT_OK: Release handle successfully.
  653. * - VDEC_DRV_MRESULT_FAIL: Failed to release handle.
  654. */
  655. VDEC_DRV_MRESULT_T eVDecDrvRelease(VAL_HANDLE_T a_hHandle);
  656. /**
  657. * @par Function:
  658. * eVDecDrvInit
  659. * @par Description:
  660. * - Initialize Decode Driver
  661. * - Get width and height of bitstream
  662. * @param
  663. * a_hHandle [IN] Driver handle
  664. * @param
  665. * a_prBitstream [IN] Input bitstream for driver initialization
  666. * @param
  667. * a_prSeqinfo [OUT] Return width and height of bitstream
  668. * @par Returns:
  669. * - VDEC_DRV_MRESULT_OK: Init driver successfully.
  670. * - VDEC_DRV_MRESULT_FAIL: Failed to init driver.
  671. */
  672. VDEC_DRV_MRESULT_T eVDecDrvInit(
  673. VAL_HANDLE_T a_hHandle,
  674. VDEC_DRV_RINGBUF_T *a_prBitstream,
  675. VDEC_DRV_SEQINFO_T * a_prSeqinfo
  676. );
  677. /**
  678. * @par Function:
  679. * eVDecDrvDeInit
  680. * @par Description:
  681. * - Deinitialize driver
  682. * - Have to deinit driver before release driver
  683. * @param
  684. * a_hHandle [IN] Driver handle
  685. * @par Returns:
  686. * - VDEC_DRV_MRESULT_OK: Deinit driver successfully.
  687. * - VDEC_DRV_MRESULT_FAIL: Failed to deinit driver.
  688. */
  689. VDEC_DRV_MRESULT_T eVDecDrvDeInit(VAL_HANDLE_T a_hHandle);
  690. /**
  691. * @par Function:
  692. * eVDecDrvGetParam
  693. * @par Description:
  694. * - Get driver's parameter
  695. * - Type of parameter can be referred to VDEC_DRV_GET_TYPE_T.
  696. * @param
  697. * a_hHandle [IN] Driver handle
  698. * @param
  699. * a_eType [IN] Parameter type
  700. * @param
  701. * a_pvInParam [OUT] Input argument for query parameter.
  702. * @param
  703. * a_pvOutParam [OUT] Store output parameter
  704. * @par Returns:
  705. * - VDEC_DRV_MRESULT_OK: Get parameter successfully.
  706. * - VDEC_DRV_MRESULT_FAIL: Failed to get parameter.
  707. * - Fail reason might be
  708. * - wrong or unsupported parameter type
  709. * - fail to get reference memory pool size.
  710. */
  711. VDEC_DRV_MRESULT_T eVDecDrvGetParam(
  712. VAL_HANDLE_T a_hHandle,
  713. VDEC_DRV_GET_TYPE_T a_eType,
  714. VAL_VOID_T *a_pvInParam,
  715. VAL_VOID_T *a_pvOutParam
  716. );
  717. /**
  718. * @par Function:
  719. * eVDecDrvSetParam
  720. * @par Description:
  721. * - Set driver's parameters
  722. * @param
  723. * a_hHandle [IN] driver handle
  724. * @param
  725. * a_eType [IN] parameter type
  726. * @param
  727. * a_pvInParam [IN] input parameter
  728. * @param
  729. * a_pvOutParam [OUT] output parameter
  730. * @par Returns:
  731. * - VDEC_DRV_MRESULT_OK: Get parameter successfully.
  732. * - VDEC_DRV_MRESULT_FAIL: Failed to get parameter.
  733. * - Fail reason might be
  734. * - wrong or unsupported parameter type
  735. * - fail to set parameter
  736. */
  737. VDEC_DRV_MRESULT_T eVDecDrvSetParam(
  738. VAL_HANDLE_T a_hHandle,
  739. VDEC_DRV_SET_TYPE_T a_eType,
  740. VAL_VOID_T *a_pvInParam,
  741. VAL_VOID_T *a_pvOutParam
  742. );
  743. /**
  744. * @par Function:
  745. * eVDecDrvDecode
  746. * @par Description:
  747. * - Trigger Decode
  748. * - Need to Provide frame buffer to store unused buffer
  749. * - The procedure of decode including:
  750. * - Header parsing
  751. * - trigger hw decode
  752. * - While we want to decode the last frame,
  753. * we need to set input bitstream as VAL_NULL and still give free frame buffer.
  754. * @param
  755. * a_hHandle [IN] driver handle
  756. * @param
  757. * a_prBitstream [IN] input bitstream
  758. * @param
  759. * a_prFramebuf [IN] free frame buffer
  760. * @par Returns:
  761. * - VDEC_DRV_MRESULT_OK: Decode successfully.
  762. * - VDEC_DRV_MRESULT_FAIL: Failed to decode.
  763. */
  764. VDEC_DRV_MRESULT_T eVDecDrvDecode(
  765. VAL_HANDLE_T a_hHandle,
  766. VDEC_DRV_RINGBUF_T *a_prBitstream,
  767. VDEC_DRV_FRAMEBUF_T *a_prFramebuf
  768. );
  769. #ifdef __cplusplus
  770. }
  771. #endif
  772. #endif /* #ifndef _VDEC_DRV_IF_PUBLIC_H_ */