vcodec_if_v2.h 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008
  1. #ifndef VCODEC_IF_V2_H
  2. #define VCODEC_IF_V2_H
  3. /***************************************************
  4. *
  5. * Chip definitions and Series definitions
  6. *
  7. ***************************************************/
  8. #ifndef TRUE
  9. #define TRUE 1
  10. #elif TRUE != 1
  11. #error TRUE is not equal to 1
  12. #endif
  13. #ifndef FALSE
  14. #define FALSE 0
  15. #elif FALSE != 0
  16. #error FALSE is not equal to 0
  17. #endif
  18. #define IN
  19. #define OUT
  20. #define INOUT
  21. typedef void *HANDLE;
  22. #ifdef WIN32
  23. typedef unsigned __int64 UINT64;
  24. #else
  25. typedef unsigned long long UINT64;
  26. #endif
  27. typedef enum {
  28. VCODEC_DECODER,
  29. VCODEC_ENCODER,
  30. NUM_OF_CODEC_TYPE
  31. } VCODEC_CODEC_TYPE_T;
  32. typedef struct {
  33. unsigned int u4YStride;
  34. unsigned int u4UVStride;
  35. } VCODEC_YUV_STRIDE_T;
  36. typedef enum {
  37. VCODEC_COLOR_FORMAT_YUV420,
  38. VCODEC_COLOR_FORMAT_YV12,
  39. VCODEC_COLOR_FORMAT_NV12,
  40. } VCODEC_COLOR_FORMAT_T;
  41. typedef struct {
  42. unsigned int MaxSupportWidth;
  43. unsigned int MaxSupportHeight;
  44. unsigned int eFlag; /* VCODEC_DEC_INPUT_FLAG_T */
  45. unsigned int ExternalMEMSize;
  46. int OutBufferNum; /* -1: .inf */
  47. VCODEC_YUV_STRIDE_T stride;
  48. VCODEC_COLOR_FORMAT_T eColorFormat;
  49. void *PrivateData[4];
  50. } VCODEC_OPEN_SETTING_T;
  51. typedef struct {
  52. unsigned int MaxSupportWidthForYUV420_BP;
  53. unsigned int MaxSupportHeightForYUV420_BP;
  54. unsigned int MaxSupportWidthForYUV420_MPHP;
  55. unsigned int MaxSupportHeightForYUV420_MPHP;
  56. unsigned int ExternalMEMSize;
  57. unsigned int DPBSize;
  58. } H264_DEC_CUSTOM_SETTING_T;
  59. typedef struct {
  60. unsigned int MaxSupportWidthForYUV420_MPHP;
  61. unsigned int MaxSupportHeightForYUV420_MPHP;
  62. unsigned int NormalMaxWidthForYUV420_MPHP;
  63. unsigned int NormalMaxHeightForYUV420_MPHP;
  64. unsigned int u4dpbSizes;
  65. void *reserved[4];
  66. } H264_DECODER_PRIVATE_PARAM_T;
  67. /*
  68. typedef struct
  69. {
  70. unsigned int MaxSupportWidthForYUV420_SP;
  71. unsigned int MaxSupportHeightForYUV420_SP;
  72. unsigned int MaxSupportWidthForYUV420_ASP;
  73. unsigned int MaxSupportHeightForYUV420_ASP;
  74. unsigned int ExternalMEMSize;
  75. } MPEG4_DEC_CUSTOM_SETTING_T;
  76. typedef struct
  77. {
  78. unsigned int MaxSupportWidthForYUV420;
  79. unsigned int MaxSupportHeightForYUV420;
  80. unsigned int eFlag; //VCODEC_DEC_INPUT_FLAG_T
  81. unsigned int ExternalMEMSize;
  82. void *PrivateData[4];
  83. } VC1_DEC_CUSTOM_SETTING_T;
  84. */
  85. typedef enum {
  86. VCODEC_FRAMETYPE_I,
  87. VCODEC_FRAMETYPE_NS_I, /* non-seek I, non-IDR frame */
  88. VCODEC_FRAMETYPE_P,
  89. VCODEC_FRAMETYPE_B,
  90. VCODEC_HEADER,
  91. VCODEC_FRM_DROPPED,
  92. VCODEC_UNKNOWN_TYPE,
  93. NUM_OF_FRAME_TYPE
  94. } VCODEC_FRAME_TYPE_T;
  95. typedef enum {
  96. VA_NON_CACHED = 0x0,
  97. VA_CACHED = 0x1,
  98. } VCODEC_BUFFER_ATTRIBUTE_T;
  99. typedef enum {
  100. VCODEC_BUFFER_CACHEABLE = 0,
  101. VCODEC_BUFFER_NON_CACHEABLE = 1,
  102. VCODEC_BUFFER_MCI_SHARABLE = 2
  103. } VCODEC_MEMORY_TYPE_T;
  104. typedef struct {
  105. unsigned int u4InternalSize;
  106. unsigned int u4ExternalSize;
  107. } VCODEC_MEMORY_SIZE_T;
  108. typedef struct {
  109. unsigned char *pu1Buffer_VA;
  110. unsigned char *pu1Buffer_PA;
  111. unsigned int eBufferStatus;/* VCODEC_BUFFER_ATTRIBUTE_T */
  112. } VCODEC_BUFFER_T;
  113. typedef enum {
  114. VCODEC_DEC_ERROR_NONE,
  115. VCODEC_DEC_ERROR_DECODE_ERROR,
  116. VCODEC_DEC_ERROR_ASSERT_FAIL,
  117. VCODEC_DEC_ERROR_FATAL_ERROR,
  118. VCODEC_DEC_ERROR_NOT_SUPPORT,
  119. VCODEC_DEC_ERROR_NOT_ENOUGH_MEM,
  120. VCODEC_DEC_ERROR_PAYLOAD_DATA_ERROR,
  121. VCODEC_DEC_ERROR_OAL_CHECK_VERSION_FAIL,
  122. VCODEC_DEC_ERROR_DIMENSION_CHANGE,
  123. NUM_OF_DEC_ERROR_TYPE
  124. } VCODEC_DEC_ERROR_T;
  125. typedef enum {
  126. CUSTOM_SETTING, /* custom setting */
  127. BEST_QUALITY, /* standard mode */
  128. FAVOR_QUALITY, /* adaptive control decode mode , quality first */
  129. FAVOR_FLUENCY, /* adaptive control decode mode , fluency first */
  130. BEST_FLUENCY, /* fast mode */
  131. NUM_OF_DECODE_MODE,
  132. } VCODEC_DEC_DECODE_MODE_T;
  133. typedef enum {
  134. VCODEC_DEC_PARAM_EOF,
  135. VCODEC_DEC_PARAM_QUERY_RESOLUTION_AHEAD,
  136. VCODEC_DEC_PARAM_QUERY_RESOLUTION,
  137. VCODEC_DEC_PARAM_QUERY_PREDICATION_TIME,
  138. VCODEC_DEC_PARAM_MEMORY_REQUIREMENT,
  139. VCODEC_DEC_PARAM_CAPABILITY,
  140. VCODEC_DEC_PARAM_NOT_BUFFERING,
  141. VCODEC_DEC_PARAM_BUFFERING,
  142. VCODEC_DEC_PARAM_BITRATE,
  143. VCODEC_DEC_PARAM_FRAMERATE,
  144. VCODEC_DEC_PARAM_EXCLUDE_BUF_NUM,
  145. VCODEC_DEC_PARAM_NO_OUTPUT_REORDERING,
  146. VCODEC_DEC_PARAM_FLUSH_BUFFER,
  147. VCODEC_DEC_PARAM_SET_DECRYPTION_MODE,
  148. VCODEC_DEC_PARAM_SET_DECODE_MODE,
  149. VCODEC_DEC_PARAM_GET_DECODE_MODE,
  150. VCODEC_DEC_PARAM_CTRL_VOS,
  151. VCODEC_DEC_PARAM_GET_SBSFLAG,
  152. VCODEC_DEC_PARAM_CONCEAL_LEVEL,
  153. VCODEC_DEC_PARAM_NUM_OF_HW_CTRL_THID,
  154. /*Get registered HW control thread id , output structure : VCODEC_REG_HW_CTRL_THID_T*/
  155. VCODEC_DEC_PARAM_GET_REG_HW_CTRL_THID,
  156. VCODEC_DEC_PARAM_SET_COLOR_FORMAT,
  157. /* VCODEC_DEC_PARAM_SET_STRIDE_ALIGNMENT, */
  158. VCODEC_DEC_PARAM_SET_AVAILABLE_CPU_NUM,
  159. VCODEC_DEC_PARAM_SET_MCI, /* enable or disable MCI mechanism */
  160. NUM_OF_DEC_PARAM_TYPE,
  161. } VCODEC_DEC_PARAM_TYPE_T;
  162. typedef enum {
  163. VCODEC_DEC_DISPLAY_CONCEALED_FRAME_DURING_PLAYBACK = 0x01,
  164. VCODEC_DEC_DISPLAY_CONCEALED_FRAME_BEFORE_FIRST_I = 0X02,
  165. VCODEC_DEC_DISPLAY_CONCEALED_FRAME_AFTER_FIRST_I = 0X04,
  166. NUM_OF_DEC_CONCEAL_LEVEL_TYPE,
  167. } VCODEC_DEC_CONCEAL_LEVEL_TYPE_T;
  168. typedef enum {
  169. /* VCODEC_DEC_QUERY_INFO_AVAILABLE_YUV, //Total available YUV buffer */
  170. /* VCODEC_DEC_QUERY_INFO_TOTAL_YUV, //Total number of YUV buffer */
  171. /* //Total available display frame(without frame repeat) */
  172. /* VCODEC_DEC_QUERY_INFO_AVAILABLE_DISPLAY_FRAME, */
  173. /* //Total real available display frame(including frame repeat) */
  174. /* VCODEC_DEC_QUERY_INFO_REAL_AVAILABLE_DISPLAY_FRAME, */
  175. VCODEC_DEC_QUERY_INFO_OAL_FUNCTION, /* Query OAL Function pointer */
  176. VCODEC_DEC_QUERY_INFO_CURRENT_TIME, /* Current play time */
  177. VCODEC_DEC_QUERY_INFO_LAST_VIDEO_TIME, /* Last delivered frame time */
  178. /* VCODEC_DEC_QUERY_INFO_OAL_FUNCTION_SMP, //Query OAL Function pointer */
  179. NUM_OF_QUERY_INFO_TYPE
  180. } VCODEC_DEC_QUERY_INFO_TYPE_T;
  181. typedef struct {
  182. VCODEC_COLOR_FORMAT_T eColorFormat;
  183. unsigned int u4MaxWidth;
  184. unsigned int u4MaxHeight;
  185. unsigned int MaxVideoCodingResolution;
  186. } VCODEC_ENC_GENERAL_SETTING_T;
  187. typedef struct {
  188. VCODEC_COLOR_FORMAT_T eColorFormat;
  189. unsigned int u4MaxWidth;
  190. unsigned int u4MaxHeight;
  191. unsigned int MaxVideoCodingResolution;
  192. unsigned int complexityIndex;
  193. } VCODEC_ENC_MPEG4_SETTING_T;
  194. typedef union {
  195. VCODEC_ENC_MPEG4_SETTING_T rMPEG4;
  196. VCODEC_ENC_GENERAL_SETTING_T rVT;
  197. VCODEC_ENC_GENERAL_SETTING_T rH264;
  198. VCODEC_ENC_GENERAL_SETTING_T rHEVC;
  199. VCODEC_ENC_GENERAL_SETTING_T rVP9;
  200. VCODEC_ENC_GENERAL_SETTING_T rVP8;
  201. } VCODEC_ENC_SETTING_T;
  202. typedef struct {
  203. unsigned char *pu1ParamStream;
  204. unsigned int u4ParamLength;
  205. unsigned int u4Width;
  206. unsigned int u4Height;
  207. } VCODEC_DEC_QUERY_FRAME_SIZE_TYPE_T;
  208. typedef enum {
  209. DISPLAY_CURRENT, /* Normal dispaly */
  210. REPEAT_LAST, /* Frame skipping , error handling */
  211. NOT_DISPLAY, /* for vp8, error handling */
  212. LAST_FRAME, /* EOF */
  213. NO_PIC, /* buffering */
  214. NOT_USED, /* H.264 multi-slice */
  215. DISPLAY_CURRENT_INTERLACE, /* interlace dispaly */
  216. NUM_OF_DISPLAY_FRAME_STATUS
  217. } VCODEC_DEC_DISPLAY_FRAME_STATUS;
  218. typedef struct {
  219. int i4AspectRatioWidth; /* width aspect ratio */
  220. int i4AspectRatioHeight; /* height aspect ratio */
  221. /* unsigned int u4IntraMBNum; */
  222. /* unsigned int u4InterFMBNum; */
  223. /* unsigned int u4InterBMBNum; */
  224. /* unsigned int u4SkipMBNum; */
  225. void *prExtra;
  226. } VCODEC_DEC_PRIVATE_OUTPUT_EXTRA_T;
  227. typedef struct {
  228. UINT64 u8TimeStamp;
  229. int fgUpdateTime; /* update time stamp */
  230. unsigned short u2FrameWidth; /* Full Frame Size */
  231. unsigned short u2FrameHeight; /* Full Frame Size */
  232. unsigned short u2ClipTop;
  233. unsigned short u2ClipBottom;
  234. unsigned short u2ClipLeft;
  235. unsigned short u2ClipRight;
  236. VCODEC_FRAME_TYPE_T eFrameType;
  237. VCODEC_BUFFER_T rYStartAddr; /*YUV buffer start address, include padding up and left*/
  238. VCODEC_BUFFER_T rUStartAddr;
  239. VCODEC_BUFFER_T rVStartAddr;
  240. VCODEC_DEC_DISPLAY_FRAME_STATUS eDisplayFrameStatus;
  241. void *prExtra;
  242. } VCODEC_DEC_PRIVATE_OUTPUT_T;
  243. typedef void VCODEC_DEC_INPUT_DATA_T;
  244. typedef enum {
  245. INPUT_FLAG_STREAM_DATA_TYPE = 0x01, /* Bit 0 = 1: Slice base data(non-frame base) ; 0: Frame base data*/
  246. INPUT_FLAG_STARTTIME = 0x02, /* seek start time at end of seek */
  247. INPUT_FLAG_DECODEONLY = 0x04, /* seek */
  248. /* H.264 for SPS,PPS issue, send first frame bitstream for set parameter*/
  249. INPUT_FLAG_PARAMETERSET = 0x08,
  250. INPUT_FLAG_CUSTOM_SETTING = 0x10, /* Get max external memory size(VE)*/
  251. INPUT_FLAG_DECODE_INTRA_ONLY = 0x20, /* Only Decode Intra Frame */
  252. INPUT_FLAG_OPENAPI = 0x40, /* OPENAPI */
  253. INPUT_FLAG_DECODE_MODE = 0x80, /* Decode Mode */
  254. INPUT_FLAG_LEGACY_MODE = 0x100, /* legacy Mode */
  255. INPUT_FLAG_MAX_DEC
  256. } VCODEC_DEC_INPUT_FLAG_T;
  257. typedef struct {
  258. UINT64 u8TimeStamp;
  259. unsigned int eFlags; /* VCODEC_DEC_INPUT_FLAG_T */
  260. VCODEC_DEC_INPUT_DATA_T *prInputData;
  261. VCODEC_BUFFER_T *prBuffer; /* Input data address */
  262. unsigned int u4BuffSize; /* Input buffer total size */
  263. void *prExtra;
  264. } VCODEC_DEC_INPUT_T;
  265. typedef struct {
  266. unsigned int u4Width; /* Full size 16 byte align */
  267. unsigned int u4Height; /* Full size 16 byte align */
  268. unsigned short u2ClipTop;
  269. unsigned short u2ClipBottom;
  270. unsigned short u2ClipLeft;
  271. unsigned short u2ClipRight;
  272. unsigned int u4Offset; /* Offset of YUV buffer start address */
  273. unsigned int u4ReduceLength; /* Padding size(End of YUV buffer pool) */
  274. unsigned char u1Alignment; /* YUV buffer address alignment */
  275. VCODEC_MEMORY_TYPE_T rYUVBUfferMemType; /* YUV buffer memory type */
  276. unsigned int u4MaxBufferNum;
  277. unsigned int u4ExtraBufferNum;
  278. void *prExtra;
  279. } VCODEC_DEC_OUTPUT_BUFFER_PARAM_T;
  280. typedef struct {
  281. VCODEC_MEMORY_TYPE_T rBitStreamBufferMemType; /* bitstream buffer memory type */
  282. unsigned int u4MaxBufferNum;
  283. void *PrivateData[4];
  284. } VCODEC_DEC_INPUT_BUFFER_PARAM_T;
  285. typedef struct {
  286. VCODEC_BUFFER_T rYBuffer;
  287. VCODEC_BUFFER_T rUBuffer;
  288. VCODEC_BUFFER_T rVBuffer;
  289. } VCODEC_DEC_INPUT_YUV_INFO_T;
  290. /* non-callback */
  291. #define MAX_BITSTREAM_BUFFER_INFO_NUM 10
  292. #define MAX_REF_FREE_YUV_BUFFER_NUM 18
  293. typedef struct {
  294. VCODEC_BUFFER_T *prRetBitsBuf; /* for mt6575, mt6577 */
  295. unsigned int u4ReturnInputCnt;
  296. VCODEC_BUFFER_T rReturnInput[MAX_BITSTREAM_BUFFER_INFO_NUM];
  297. unsigned int u4RefFreeYUVBufCnt;
  298. VCODEC_DEC_INPUT_YUV_INFO_T parRefFreeYUVBuf[MAX_REF_FREE_YUV_BUFFER_NUM];
  299. } VCODEC_DEC_OUTPUT_PARAM_T;
  300. /* ~non-callback */
  301. typedef struct {
  302. unsigned int u4SupportWidth;
  303. unsigned int u4SupportHeight;
  304. unsigned int u4SupportResolution;
  305. unsigned int u4SupportProfile;
  306. unsigned int u4SupportLevel;
  307. } VCODEC_DEC_CAPABILITY_T;
  308. typedef struct {
  309. void (*pfnMalloc)(IN HANDLE /* hDrv */,
  310. IN unsigned int /* u4Size */,
  311. IN unsigned int /*u4AlignSize*/,
  312. IN VCODEC_MEMORY_TYPE_T /* fgCacheable */,
  313. OUT VCODEC_BUFFER_T * /* prBuf */
  314. ); /* buffer address must cache line align */
  315. void (*pfnIntMalloc)(IN HANDLE /* hDrv */,
  316. IN unsigned int /* u4Size */,
  317. IN unsigned int /*u4AlignSize*/,
  318. OUT VCODEC_BUFFER_T * /* pBuffer_adr */
  319. );
  320. void (*pfnFree)(IN HANDLE /* hDrv */,
  321. IN VCODEC_BUFFER_T * /* prBuf */
  322. ); /* same memory type with malloc */
  323. void (*pfnIntFree)(IN HANDLE /* hDrv */,
  324. IN VCODEC_BUFFER_T * /* pBuffer_adr */
  325. );
  326. VCODEC_DEC_ERROR_T (*pfnSetYUVBuffer)(IN HANDLE /* hDrv */,
  327. IN VCODEC_DEC_OUTPUT_BUFFER_PARAM_T * /* prYUVParam */
  328. );
  329. VCODEC_DEC_ERROR_T (*pfnGetYUVBuffer)(IN HANDLE /* hDrv */,
  330. OUT VCODEC_DEC_INPUT_YUV_INFO_T * /* prYUVBuf */
  331. );
  332. void (*pfnRefFreeYUVBuffer)(IN HANDLE /* hDrv */,
  333. IN VCODEC_DEC_INPUT_YUV_INFO_T * /* prYUVBuf */
  334. );
  335. VCODEC_DEC_ERROR_T (*pfnQueryInfo)(IN HANDLE /* hDrv */,
  336. IN VCODEC_DEC_QUERY_INFO_TYPE_T /* query id*/,
  337. OUT void * /* pvParamData*/ /* */
  338. );
  339. void (*pfnReturnBitstream)(IN HANDLE /* hDrv */,
  340. IN VCODEC_BUFFER_T * /* prBuffer */ /* Input buffer address */,
  341. IN unsigned int /* u4BuffSize */ /* Input buffer total size */
  342. );
  343. } VCODEC_DEC_CALLBACK_T;
  344. /* non-callback */
  345. typedef struct {
  346. VCODEC_DEC_INPUT_T *prInputData;
  347. VCODEC_DEC_INPUT_YUV_INFO_T *prYUVBufAddr; /* prYUVBuf */
  348. } VIDEO_DECODER_INPUT_NC_T;
  349. typedef struct {
  350. VCODEC_DEC_ERROR_T (*pfnGetCodecRequired)(IN VCODEC_DEC_INPUT_T * /* prInput */ ,
  351. OUT VCODEC_MEMORY_SIZE_T * /* prMemSize */,
  352. OUT VCODEC_DEC_OUTPUT_BUFFER_PARAM_T * /* prBufferParameter*/,
  353. OUT VCODEC_DEC_INPUT_BUFFER_PARAM_T * /* prBitStreamParameter */,
  354. INOUT void * /* reserve */
  355. );
  356. /********************************************************
  357. * wrapped for smart phone
  358. ********************************************************/
  359. VCODEC_DEC_ERROR_T (*pfnOpen)(IN HANDLE, /* hDrv */
  360. IN VCODEC_DEC_CALLBACK_T *, /* pfnCallback */
  361. IN void *, /* open setting */
  362. OUT HANDLE * , /* hCodec */
  363. INOUT void * /* reserve */
  364. );
  365. VCODEC_DEC_ERROR_T (*pfnClose)(IN HANDLE , /* hCodec */
  366. INOUT void * /* reserve */
  367. );
  368. VCODEC_DEC_ERROR_T (*pfnInit)(IN HANDLE , /* hCodec */
  369. INOUT void * /* reserve */
  370. );
  371. /********************************************************
  372. * wrapped for smart phone
  373. ********************************************************/
  374. VCODEC_DEC_ERROR_T (*pfnDeInit)(
  375. IN HANDLE, /* hCodec */
  376. IN HANDLE, /* hWrap */
  377. OUT VCODEC_DEC_OUTPUT_PARAM_T * *, /* for smart phone */
  378. INOUT void * /* reserve */);
  379. VCODEC_DEC_ERROR_T (*pfnGetParameter)(IN HANDLE, /* hCodec */
  380. IN VCODEC_DEC_PARAM_TYPE_T,
  381. INOUT void * /* pvParamData */
  382. );
  383. /********************************************************
  384. * wrapped for smart phone
  385. ********************************************************/
  386. VCODEC_DEC_ERROR_T (*pfnSetParameter)(IN HANDLE, /* hCodec */
  387. IN HANDLE, /* hWrap */
  388. IN VCODEC_DEC_PARAM_TYPE_T, /* eParamType */
  389. IN void * , /* pvParamData */
  390. INOUT void * /* reserve */
  391. );
  392. /********************************************************
  393. * wrapped for smart phone
  394. ********************************************************/
  395. VCODEC_DEC_ERROR_T (*pfnDecodeOneUnit)(
  396. IN HANDLE, /* hCodec */
  397. IN HANDLE, /* hWrap */
  398. IN VIDEO_DECODER_INPUT_NC_T *, /* prInput */
  399. OUT VCODEC_DEC_OUTPUT_PARAM_T * *, /* for smart phone */
  400. INOUT void * /* reserve */
  401. );
  402. /********************************************************
  403. * wrapped for smart phone
  404. ********************************************************/
  405. VCODEC_DEC_ERROR_T (*pfnGetNextDisplay)(IN HANDLE, /* hCodec */
  406. IN HANDLE, /* hWrap */
  407. OUT VCODEC_DEC_PRIVATE_OUTPUT_T * , /* prPrivOutput */
  408. INOUT void * /* reserve */
  409. );
  410. } VIDEO_DEC_API_T;
  411. /* ~non-callback */
  412. typedef struct {
  413. VCODEC_DEC_ERROR_T (*pfnGetCodecRequired)(IN VCODEC_DEC_INPUT_T * /* prInput */ ,
  414. OUT VCODEC_MEMORY_SIZE_T * /* prMemSize */,
  415. /* prBufferParameter*/
  416. OUT VCODEC_DEC_OUTPUT_BUFFER_PARAM_T * ,
  417. /*prBitStreamParameter */
  418. OUT VCODEC_DEC_INPUT_BUFFER_PARAM_T * ,
  419. INOUT void * /* reserve */
  420. );
  421. VCODEC_DEC_ERROR_T (*pfnOpen)(IN HANDLE /* hDrv */,
  422. IN VCODEC_DEC_CALLBACK_T * /* pfnCallback */,
  423. IN void * /* prOpenSetting */,
  424. OUT HANDLE * /* hCodec */ ,
  425. INOUT void * /* reserve */
  426. );
  427. VCODEC_DEC_ERROR_T (*pfnClose)(IN HANDLE /* hCodec */,
  428. INOUT void * /* reserve */
  429. );
  430. VCODEC_DEC_ERROR_T (*pfnInit)(IN HANDLE /* hCodec */,
  431. INOUT void * /* reserve */
  432. );
  433. VCODEC_DEC_ERROR_T (*pfnDeInit)(IN HANDLE /* hCodec */,
  434. INOUT void * /* reserve */
  435. );
  436. VCODEC_DEC_ERROR_T (*pfnGetParameter)(IN HANDLE /* hCodec */,
  437. IN VCODEC_DEC_PARAM_TYPE_T /* eParamType */,
  438. INOUT void * /* pvParamData */,
  439. INOUT void * /* reserve */
  440. );
  441. VCODEC_DEC_ERROR_T (*pfnSetParameter)(IN HANDLE /* hCodec */,
  442. IN VCODEC_DEC_PARAM_TYPE_T /* eParamType */,
  443. IN void * /* pvParamData */,
  444. INOUT void * /* reserve */
  445. );
  446. VCODEC_DEC_ERROR_T (*pfnDecodeOneUnit)(IN HANDLE /* hCodec */,
  447. IN VCODEC_DEC_INPUT_T * /* prInput */,
  448. INOUT void * /* reserve */
  449. );
  450. VCODEC_DEC_ERROR_T (*pfnGetNextDisplay)(IN HANDLE /* hCodec */,
  451. OUT VCODEC_DEC_PRIVATE_OUTPUT_T * /* prPrivOutput */,
  452. INOUT void * /* reserve */
  453. );
  454. } VCODEC_DEC_API_T;
  455. typedef struct {
  456. VIDEO_DEC_API_T rVideoDecAPI;
  457. VCODEC_DEC_API_T *pfnVcodecDecAPI;
  458. VCODEC_DEC_INPUT_YUV_INFO_T rGetYUVBuf;
  459. VCODEC_BUFFER_T rRetBitsBuf;
  460. VCODEC_DEC_OUTPUT_PARAM_T rDecoderOutputParam;
  461. unsigned int fgTookYUVBuff;
  462. HANDLE hDriver;
  463. } VIDEO_WRAP_HANDLE_T;
  464. #define VCODEC_ENC_MAX_PKTS_IN_SET 99
  465. #define VCODEC_ENC_MAX_NALS_IN_SET 10
  466. typedef struct {
  467. void *u4Addr;
  468. unsigned int u4Size;
  469. } VCODEC_ENC_CODEC_PACKET_INFO_T;
  470. /* Note the first two items in the next structure must be (in order): */
  471. /* 1. number of Packets */
  472. /* 2. pointer to the packet info */
  473. typedef struct {
  474. unsigned int u4NumOfPkts;
  475. VCODEC_ENC_CODEC_PACKET_INFO_T arPktInfo[VCODEC_ENC_MAX_PKTS_IN_SET];
  476. } VCODEC_ENC_PACKET_SET_T;
  477. typedef struct {
  478. int u4NalUnitType;
  479. void *u4Addr; /* p_payload */
  480. unsigned int u4Size; /* i_payload */
  481. } VCODEC_ENC_CODEC_NAL_INFO_T;
  482. typedef struct {
  483. unsigned int u4NumOfNals;
  484. VCODEC_ENC_CODEC_NAL_INFO_T arNalInfo[VCODEC_ENC_MAX_NALS_IN_SET];
  485. } VCODEC_ENC_NAL_SET_T;
  486. typedef enum {
  487. MPEG4_RECODER,
  488. MPEG4_VT,
  489. H264_RECODER,
  490. H264_VT,
  491. NUM_OF_ENC_CODEC_TYPE
  492. } VCODEC_ENC_CODEC_TYPE_T;
  493. typedef struct {
  494. VCODEC_FRAME_TYPE_T eFrameType;
  495. /* added to merge remained individual parameters in the phototype */
  496. VCODEC_BUFFER_T rBitstreamAddr;
  497. unsigned int u4BitstreamLength;
  498. int fgEndOfFrame;
  499. void *prChassis;
  500. VCODEC_ENC_CODEC_TYPE_T eCodecType;
  501. UINT64 u8TimeStamp;
  502. void *reserved[4];
  503. } VCODEC_ENC_GENERAL_OUTPUT_T;
  504. typedef struct {
  505. VCODEC_BUFFER_T rStartAddr;
  506. VCODEC_BUFFER_T rEndAddr;
  507. VCODEC_BUFFER_T rWriteAddr;
  508. VCODEC_BUFFER_T rReadAddr;
  509. unsigned int u4BufferLength;
  510. } VCODEC_ENC_BUFFER_INFO_T;
  511. typedef enum {
  512. INPUT_FLAG_YUVBUFFER = 0x01,
  513. INPUT_FLAG_NO_INPUT = 0x02,
  514. INPUT_FLAG_NO_MORE_INPUT = 0x03,
  515. INPUT_FLAG_MAX_ENC
  516. } VCODEC_ENC_INPUT_FLAG_T;
  517. typedef struct {
  518. VCODEC_BUFFER_T rYUVBuffer;
  519. unsigned int u4Length;
  520. } VCODEC_ENC_INPUT_INFO_T;
  521. typedef struct {
  522. VCODEC_BUFFER_T rYBuffer;
  523. VCODEC_BUFFER_T rUBuffer;
  524. VCODEC_BUFFER_T rVBuffer;
  525. unsigned int u4Length;
  526. } VCODEC_ENC_INPUT_YUV_INFO_T;
  527. typedef struct {
  528. UINT64 u8TimeStamp;
  529. VCODEC_ENC_INPUT_FLAG_T eFlags;
  530. VCODEC_ENC_INPUT_INFO_T rInput;
  531. } VCODEC_ENC_INPUT_PARAM_T;
  532. typedef struct {
  533. UINT64 u8TimeStamp;
  534. VCODEC_ENC_INPUT_FLAG_T eFlags;
  535. VCODEC_ENC_INPUT_YUV_INFO_T rInput;
  536. void *prExtra;
  537. } VCODEC_ENC_INPUT_YUV_PARAM_T;
  538. typedef struct {
  539. VCODEC_BUFFER_T rWp;
  540. int fgSliceContained;
  541. } VCODEC_ENC_UPDATE_WP_INTO_T;
  542. typedef enum {
  543. VCODEC_ENC_ERROR_NONE,
  544. VCODEC_ENC_ERROR,
  545. VCODEC_ENC_ASSERT_FAIL,
  546. VCODEC_ENC_BS_BUFFER_NOT_ENOUGH,
  547. VCODEC_ENC_INPUT_REJECT,
  548. VCODEC_ENC_PARAM_NOT_SUPPORT,
  549. NUM_OF_ENC_ERROR_TYPE
  550. } VCODEC_ENC_ERROR_T;
  551. typedef enum {
  552. /* Query ext/int memory requirement for adaptation */
  553. VCODEC_ENC_PARAM_MEMORY_REQUIREMENT,
  554. /* Query the prefer memory type of bitstream buffer, return true means cacheable buffer is preferred */
  555. VCODEC_ENC_PARAM_BITSTREAM_IN_CACHE,
  556. /* Query the alignment needed on frame buffer for codec */
  557. VCODEC_ENC_PARAM_FRM_BUFFER_ALIGNMENT,
  558. VCODEC_ENC_PARAM_HOLD_RES_TILL_RELEASE_FRM,
  559. VCODEC_ENC_PARAM_IS_BLOCKBASED_YUV,
  560. VCODEC_ENC_PARAM_DECODER_CONFIGURATION_RECORD,
  561. VCODEC_ENC_PARAM_IF_ADAPTOR_MODIFY_TIMESTAMP,
  562. VCODEC_ENC_PARAM_WIDTH,
  563. VCODEC_ENC_PARAM_HEIGHT,
  564. VCODEC_ENC_PARAM_BITRATE,
  565. VCODEC_ENC_PARAM_FRAME_RATE,
  566. VCODEC_ENC_PARAM_FRAME_RATE_NUM,
  567. VCODEC_ENC_PARAM_FRAME_RATE_DEN,
  568. VCDOEC_ENC_PARAM_AUD,
  569. VCODEC_ENC_PARAM_REPEAD_HEADERS,
  570. VCODEC_ENC_PARAM_ANNEXB,
  571. VCODEC_ENC_PARAM_GEN_HEADER_FRM_RATE,
  572. VCODEC_ENC_PARAM_SHORT_HEADER,
  573. VCODEC_ENC_PARAM_SYNC_INTERVAL,
  574. VCODEC_ENC_PARAM_MAX_PKG_SIZE,
  575. VCODEC_ENC_PARAM_FORCE_ENCODE_I,
  576. VCODEC_ENC_PARAM_QUALITY,
  577. VCODEC_ENC_PARAM_SCENARIO,
  578. VCODEC_ENC_PARAM_CODEC_TYPE,
  579. VCODEC_ENC_PARAM_VT_RESTART,
  580. VCODEC_ENC_PARAM_ROTATE,
  581. VCODEC_ENC_PARAM_SET_CALLBACK,
  582. VCODEC_ENC_PARAM_SET_NO_MORE_INPUT,
  583. VCODEC_ENC_PARAM_NUM_OF_HW_CTRL_THID,
  584. /* Get registered HW control thread id , output structure : VCODEC_REG_HW_CTRL_THID_T */
  585. VCODEC_ENC_PARAM_GET_REG_HW_CTRL_THID,
  586. VCODEC_ENC_PARAM_SET_COLOR_FORMAT,
  587. VCODEC_ENC_PARAM_SET_YUV_STRIDE_ALIGNMENT,
  588. VCODEC_ENC_PARAM_SET_AVAILABLE_CPU_NUM,
  589. /* enable or disable MCI mechanism */
  590. VCODEC_ENC_PARAM_SET_MCI,
  591. VCODEC_ENC_PARAM_WPP,
  592. VCODEC_ENC_PARAM_CONSTQ,
  593. VCODEC_ENC_PARAM_RC_VERSION,
  594. VCODEC_ENC_PARAM_INIT_QP,
  595. VCODEC_ENC_PARAM_MAX_QP,
  596. VCODEC_ENC_PARAM_MIN_QP,
  597. VCODEC_ENC_PARAM_NUM_OF_SLICE,
  598. VCODEC_ENC_PARAM_PROFILE,
  599. VCODEC_ENC_PARAM_LEVEL,
  600. VCODEC_ENC_PARAM_THREADS,
  601. VCODEC_ENC_PARAM_VP8_TOKEN_PARTITIONS,
  602. VCODEC_ENC_PARAM_VP9_ENABLE_TILES,
  603. VCODEC_ENC_PARAM_VPX_ERR_RESILIENT,
  604. VCODEC_ENC_PARAM_VPX_NUMBER_OF_LAYERS,
  605. VCODEC_ENC_PARAM_VPX_MODE,
  606. VCODEC_ENC_PARAM_VPX_CPU_USED,
  607. VCODEC_ENC_PARAM_YUV_STRIDE,
  608. VCODEC_ENC_PARAM_SET_EC_MODE, /* set entropy coding mode, 0: CAVLC, 1: CABAC */
  609. VCODEC_ENC_PARAM_LCU_SIZE,
  610. VCODEC_ENC_PARAM_INTERLACE,
  611. VCODEC_ENC_PARAM_AUTO_KEY,
  612. VCODEC_ENC_PARAM_BITS_PER_SLICE,
  613. VCODEC_ENC_PARAM_COMPLEXITY,
  614. VCODEC_ENC_PARAM_COMPLEXITY_INTRA,
  615. VCODEC_ENC_PARAM_REF_DISTANCE,
  616. VCODEC_ENC_PARAM_QUALIFY,
  617. VCODEC_ENC_PARAM_ADAPTIVEDROP,
  618. VCODEC_ENC_PARAM_PREPEND_HEADER,
  619. NUM_OF_ENC_PARAM_TYPE
  620. } VCODEC_ENC_PARAM_TYPE_T;
  621. typedef enum {
  622. VCODEC_ENC_QUERY_INFO_TOTAL_FRAME_BUFFER, /* Total frame buffer size */
  623. VCODEC_ENC_QUERY_INFO_FRAMES_QUEUED, /* Number of frames waited to encoder */
  624. VCODEC_ENC_QUERY_INFO_VTBUFFER_FULLNESS_DENOM, /* Denominator of VT buffer fullness */
  625. VCODEC_ENC_QUERY_INFO_VTBUFFER_FULLNESS_NUM, /* Numerator of VT buffer fullness */
  626. VCODEC_ENC_QUERY_INFO_INIT_Q, /* Used by codec */
  627. VCODEC_ENC_QUERY_INFO_MIN_QP, /* Used by codec */
  628. VCODEC_ENC_QUERY_INFO_MAX_QP, /* Used by codec */
  629. VCODEC_ENC_QUERY_INFO_INTRA_VOP_RATE, /* Used by MED/codec */
  630. VCODEC_ENC_QUERY_INFO_ALGORITHM, /* Used by codec */
  631. VCODEC_ENC_QUERY_INFO_BIT_RATE, /* Used by MED/codec */
  632. VCODEC_ENC_QUERY_INFO_RATE_HARD_LIMIT, /* Used by codec */
  633. VCODEC_ENC_QUERY_INFO_RATE_BALANCE, /* Used by codec */
  634. VCODEC_ENC_QUERY_INFO_DYNAMIC_RANGE_REDUCTION,
  635. VCODEC_ENC_QUERY_INFO_IF_CUSTOMER_SET_TABLE,
  636. VCODEC_ENC_QUERY_INFO_DYNAMIC_RANGE_TABLE,
  637. VCODEC_ENC_QUERY_INFO_OAL_FUNCTION,
  638. VCODEC_ENC_QUERY_INFO_ENCODER_FRAME_RATE, /* Used by H.264 recoder */
  639. VCODEC_ENC_QUERY_INFO_TARGET_COMPLEXITY, /* Used by H.264 recoder */
  640. VCODEC_ENC_QUERY_INFO_THRESHOLD_AVG_LOW, /* Used by H.264 recoder */
  641. VCODEC_ENC_QUERY_INFO_THRESHOLD_AVG_HIGH, /* Used by H.264 recoder */
  642. VCODEC_ENC_QUERY_INFO_THRESHOLD_CUR_LOW, /* Used by H.264 recoder */
  643. VCODEC_ENC_QUERY_INFO_THRESHOLD_CUR_HIGH, /* Used by H.264 recoder */
  644. /* VCODEC_ENC_QUERY_INFO_OAL_FUNCTION_SMP, */
  645. VCODEC_ENC_QUERY_INFO_VPX_CPU_USED,
  646. VCODEC_ENC_QUERY_INFO_VPX_MODE,
  647. VCODEC_ENC_QUERY_INFO_FIXED_QP,
  648. VCODEC_ENC_QUERY_INFO_SCENARIO,
  649. NUM_OF_ENC_QUERY_INFO_TYPE
  650. } VCODEC_ENC_QUERY_INFO_TYPE_T;
  651. /**********************************************************************
  652. Encoder enumerations
  653. **********************************************************************/
  654. /* clock-wise */
  655. typedef enum {
  656. VCODEC_ENC_ROTATE_0 = 0,
  657. VCODEC_ENC_ROTATE_90 = 1,
  658. VCODEC_ENC_ROTATE_180 = 2,
  659. VCODEC_ENC_ROTATE_270 = 3
  660. } VCODEC_ENC_ROTATE_ANGLE_T;
  661. typedef enum {
  662. VCODEC_ENC_QUALITY_NONE,
  663. VCODEC_ENC_QUALITY_LOW,
  664. VCODEC_ENC_QUALITY_NORMAL,
  665. VCODEC_ENC_QUALITY_GOOD,
  666. VCODEC_ENC_QUALITY_FINE,
  667. VCODEC_ENC_QUALITY_CUSTOM
  668. } VCODEC_ENC_QUALITY_T;
  669. typedef enum {
  670. VCODEC_ENC_CODEC_TYPE_NONE,
  671. VCODEC_ENC_CODEC_TYPE_MPEG4,
  672. VCODEC_ENC_CODEC_TYPE_H263,
  673. VCODEC_ENC_CODEC_TYPE_H264
  674. } VCODEC_ENC_CODEC_T;
  675. typedef struct {
  676. void (*pfnMalloc)(IN HANDLE /* hDrv */,
  677. IN unsigned int /* u4Size */,
  678. IN unsigned int /*u4AlignSize*/,
  679. IN VCODEC_MEMORY_TYPE_T /* fgCacheable */,
  680. OUT VCODEC_BUFFER_T * /* prBuf */
  681. ); /*buffer address must cache line align */
  682. void (*pfnIntMalloc)(IN HANDLE /* hDrv */,
  683. IN unsigned int /* u4Size */,
  684. IN unsigned int /*u4AlignSize*/,
  685. OUT VCODEC_BUFFER_T * /* prBuffer_adr */
  686. );
  687. void (*pfnFree)(IN HANDLE /* hDrv */,
  688. IN VCODEC_BUFFER_T * /* prBuf */
  689. ); /* same memory type with malloc */
  690. void (*pfnIntFree)(IN HANDLE /* hDrv */,
  691. IN VCODEC_BUFFER_T * /* prBuffer_adr */
  692. );
  693. void (*pfnReleaseYUV)(IN HANDLE /* hDrv */,
  694. IN VCODEC_BUFFER_T * /* prYUVBuf */
  695. );
  696. void (*pfnPaused)(IN HANDLE /* hDrv */,
  697. IN VCODEC_BUFFER_T * /* prBitstreamBuf */
  698. );
  699. void (*pfnAllocateBitstreamBuffer)(IN HANDLE /* hDrv */,
  700. OUT VCODEC_ENC_BUFFER_INFO_T * /* prBitstreamBuf */
  701. );
  702. void (*pfnUpdateBitstreamWP)(IN HANDLE /* hDrv */,
  703. IN VCODEC_ENC_UPDATE_WP_INTO_T * /* prUpdateWritePointer */
  704. );
  705. VCODEC_ENC_ERROR_T(*pfnQueryInfo)(IN HANDLE /* hDrv */,
  706. IN VCODEC_ENC_QUERY_INFO_TYPE_T /* query id*/,
  707. OUT void * /* pvParamData*/
  708. );
  709. } VCODEC_ENC_CALLBACK_T;
  710. /* non-callback */
  711. typedef struct {
  712. UINT64 u8TimeStamp;
  713. VCODEC_ENC_INPUT_FLAG_T eFlags;
  714. VCODEC_ENC_INPUT_INFO_T rInput;
  715. VCODEC_ENC_BUFFER_INFO_T pBuffInfo;
  716. VCODEC_COLOR_FORMAT_T eVEncFormat;
  717. unsigned int u4Width;
  718. unsigned int u4Height;
  719. unsigned int u4YStride;
  720. unsigned int u4UVStride;
  721. unsigned int u4SliceHeight;
  722. void *reserved[4];
  723. } VIDEO_ENCODER_INPUT_PARAM_NC_T;
  724. /* non-callback */
  725. typedef struct {
  726. UINT64 u8TimeStamp;
  727. VCODEC_ENC_INPUT_FLAG_T eFlags;
  728. VCODEC_ENC_INPUT_YUV_INFO_T rInput;
  729. VCODEC_ENC_BUFFER_INFO_T pBuffInfo;
  730. VCODEC_COLOR_FORMAT_T eVEncFormat;
  731. unsigned int u4Width;
  732. unsigned int u4Height;
  733. unsigned int u4YStride;
  734. unsigned int u4UVStride;
  735. unsigned int u4SliceHeight;
  736. void *reserved[4];
  737. } VIDEO_ENCODER_INPUT_YUV_PARAM_NC_T;
  738. typedef struct {
  739. VCODEC_ENC_ERROR_T(*pfnGetMemoryRequired)(
  740. IN VCODEC_ENC_SETTING_T * rCodecFormat,
  741. OUT VCODEC_MEMORY_SIZE_T *prExternalSize
  742. );
  743. /********************************************************
  744. * wrapped for smart phone
  745. ********************************************************/
  746. VCODEC_ENC_ERROR_T(*pfnOpen)(IN HANDLE hDrv,
  747. IN HANDLE hWrapper,
  748. IN VCODEC_ENC_CALLBACK_T * ,
  749. OUT HANDLE *hCodec
  750. );
  751. VCODEC_ENC_ERROR_T(*pfnInit)(IN HANDLE hCodec
  752. );
  753. VCODEC_ENC_ERROR_T(*pfnGetParameter)(IN HANDLE hCodec,
  754. OUT VCODEC_ENC_PARAM_TYPE_T, /*VIDEO_ENC_MEMORY_T,*/
  755. void *
  756. );
  757. VCODEC_ENC_ERROR_T(*pfnSetParameter)(IN HANDLE hCodec,
  758. /*VIDEO_ENCODER_QUALITY_T,
  759. VIDEO_ENCODER_CODEC_T,
  760. VIDEO_CODEC_ROTATE_ANGLE_T,*/
  761. IN VCODEC_ENC_PARAM_TYPE_T,
  762. void *
  763. );
  764. /********************************************************
  765. * wrapped for smart phone
  766. ********************************************************/
  767. VCODEC_ENC_ERROR_T(*pfnGenerateHeader)(IN HANDLE hCodec,
  768. IN HANDLE hWrapper,
  769. IN VCODEC_ENC_BUFFER_INFO_T *prBufferInfo /* for smart phone */
  770. );
  771. /********************************************************
  772. * wrapped for smart phone
  773. ********************************************************/
  774. VCODEC_ENC_ERROR_T(*pfnEncodeOneUnit)(IN HANDLE hCodec,
  775. IN HANDLE hWrapper,
  776. IN VIDEO_ENCODER_INPUT_YUV_PARAM_NC_T * prEncoderInputParamNC);
  777. VCODEC_ENC_ERROR_T(*pfnDeInit)(IN HANDLE hCodec
  778. );
  779. VCODEC_ENC_ERROR_T(*pfnClose)(IN HANDLE hCodec
  780. );
  781. VCODEC_ENC_ERROR_T(*pfnGetNextBitstream)(IN HANDLE hCodec,
  782. OUT VCODEC_ENC_GENERAL_OUTPUT_T *
  783. );
  784. } VIDEO_ENC_API_T;
  785. /* ~non-callback */
  786. typedef struct {
  787. VCODEC_ENC_ERROR_T(*pfnGetMemoryRequired)(IN VCODEC_ENC_SETTING_T *, /*prInput*/
  788. OUT VCODEC_MEMORY_SIZE_T * /*prExternalSize*/
  789. );
  790. VCODEC_ENC_ERROR_T(*pfnOpen)(IN HANDLE /* hDrv */,
  791. IN VCODEC_ENC_CALLBACK_T * /* pfnCallback */,
  792. OUT HANDLE * /* hCodec */
  793. );
  794. VCODEC_ENC_ERROR_T(*pfnInit)(IN HANDLE /* hCodec */
  795. );
  796. VCODEC_ENC_ERROR_T(*pfnGetParameter)(IN HANDLE /* hCodec */,
  797. IN VCODEC_ENC_PARAM_TYPE_T /*VIDEO_ENC_MEMORY_T,*/,
  798. OUT void * /* pvParamData */
  799. );
  800. VCODEC_ENC_ERROR_T(*pfnSetParameter)(IN HANDLE /* hCodec */,
  801. /*VCODEC_ENC_QUALITY_T,VCODEC_ENC_CODEC_T,VIDEO_CODEC_ROTATE_ANGLE_T,*/
  802. IN VCODEC_ENC_PARAM_TYPE_T /* rEncodeParam*/,
  803. IN void * /* pvParamData */
  804. );
  805. VCODEC_ENC_ERROR_T(*pfnGenerateHeader)(IN HANDLE /* hCodec */
  806. );
  807. VCODEC_ENC_ERROR_T(*pfnEncodeOneUnit)(IN HANDLE /* hCodec */,
  808. /*prInput*/ /*VCODEC_ENC_INPUT_YUV_INFO_T , VCODEC_ENC_INPUT_INFO_T*/
  809. IN void *
  810. );
  811. VCODEC_ENC_ERROR_T(*pfnDeInit)(IN HANDLE /* hCodec */
  812. );
  813. VCODEC_ENC_ERROR_T(*pfnClose)(IN HANDLE /* hCodec */
  814. );
  815. VCODEC_ENC_ERROR_T(*pfnGetNextBitstream)(IN HANDLE /* hCodec */,
  816. OUT VCODEC_ENC_GENERAL_OUTPUT_T * /* prPrivOutput*/
  817. );
  818. } VCODEC_ENC_API_T;
  819. typedef struct {
  820. VIDEO_ENC_API_T rVideoEncAPI;
  821. VCODEC_ENC_API_T *pfnVcodecEncAPI;
  822. HANDLE hDriver;
  823. VCODEC_BUFFER_T rReleaseYUV;
  824. VCODEC_ENC_BUFFER_INFO_T rEncoderBuffInfoNC;
  825. } VIDEO_ENC_WRAP_HANDLE_T;
  826. typedef struct {
  827. unsigned int u4TimeIncrResolution;
  828. unsigned int u4BufferSize;
  829. VCODEC_BUFFER_T *prBuffer;
  830. } MPEG4_VT_ENCODER_GEN_VT_HEADER_INPUT_T;
  831. VCODEC_ENC_ERROR_T MPEG4EncoderGenerateVTHeader(
  832. IN MPEG4_VT_ENCODER_GEN_VT_HEADER_INPUT_T * prInput,
  833. OUT unsigned int *pu4EncodedSize
  834. );
  835. #endif /* VCODEC_IF_H */