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