9 * Video Abstraction Layer Type Definitions for external use
12 * Jackal Chen (mtk02532)
14 * @par $Revision: #1 $
20 #ifndef _VAL_TYPES_PUBLIC_H_
21 #define _VAL_TYPES_PUBLIC_H_
23 //#include <sys/types.h>
24 //#include <linux/ion.h>
30 #define IRQ_STATUS_MAX_NUM 16 ///< support max 16 return register values when HW done
32 #define VCODEC_THREAD_MAX_NUM 16 ///< support max 16 multiple thread currently
34 /*=============================================================================
36 *===========================================================================*/
38 typedef void VAL_VOID_T
; ///< void type definition
39 typedef char VAL_BOOL_T
; ///< char type definition
40 typedef char VAL_CHAR_T
; ///< char type definition
41 typedef signed char VAL_INT8_T
; ///< signed char type definition
42 typedef signed short VAL_INT16_T
; ///< signed short type definition
43 typedef signed int VAL_INT32_T
; ///< signed int type definition
44 typedef unsigned char VAL_UCHAR_T
; ///< unsigned char type definition
45 typedef unsigned char VAL_UINT8_T
; ///< unsigned char type definition
46 typedef unsigned short VAL_UINT16_T
; ///< unsigned short definition
47 typedef unsigned int VAL_UINT32_T
; ///< unsigned int type definition
48 typedef unsigned long long VAL_UINT64_T
; ///< unsigned long long type definition
49 typedef long long VAL_INT64_T
; ///< long long type definition
50 typedef unsigned long VAL_HANDLE_T
; ///< unsigned int (handle) type definition
51 typedef signed long VAL_LONG_T
; ///
52 typedef unsigned long VAL_ULONG_T
; ///
54 #define VAL_NULL (0) ///< VAL_NULL = 0
55 #define VAL_TRUE (1) ///< VAL_TRUE = 1
56 #define VAL_FALSE (0) ///< VAL_FALSE = 0
58 #define VAL_RESOLUTION_CHANGED (2) ///< VAL_RESOLUTION_CHANGED = 2, used to video resolution changed during playback
65 * This is the item used to memory usage for video encoder or video decoder
67 typedef enum _VAL_MEM_CODEC_T
69 VAL_MEM_CODEC_FOR_VENC
= 0, ///< Memory for Video Encoder
70 VAL_MEM_CODEC_FOR_VDEC
, ///< Memory for Video Decoder
71 VAL_MEM_CODEC_MAX
= 0xFFFFFFFF ///< Max Value
79 * This is the item for query chip name for HAL interface
81 typedef enum _VAL_CHIP_NAME_T
83 VAL_CHIP_NAME_MT6516
= 0, ///< MT6516
84 VAL_CHIP_NAME_MT6571
, ///< MT6571
85 VAL_CHIP_NAME_MT6572
, ///< MT6572
86 VAL_CHIP_NAME_MT6573
, ///< MT6573
87 VAL_CHIP_NAME_MT6575
, ///< MT6575
88 VAL_CHIP_NAME_MT6577
, ///< MT6577
89 VAL_CHIP_NAME_MT6589
, ///< MT6589
90 VAL_CHIP_NAME_MT6582
, ///< MT6582
91 VAL_CHIP_NAME_MT8135
, ///< MT8135
92 VAL_CHIP_NAME_ROME
, ///< ROME
93 VAL_CHIP_NAME_MT6592
, ///< MT6592
94 VAL_CHIP_NAME_MT8127
, ///< MT8127
95 VAL_CHIP_NAME_MT6752
, ///<MT6752
96 VAL_CHIP_NAME_MAX
= 0xFFFFFFFF ///< Max Value
103 * This is the item for query chip variant for HAL interface
105 typedef enum _VAL_CHIP_VARIANT_T
107 VAL_CHIP_VARIANT_MT6571L
= 0, ///< MT6571L
108 VAL_CHIP_VARIANT_MAX
= 0xFFFFFFFF ///< Max Value
109 } VAL_CHIP_VARIANT_T
;
115 * This is the item for driver type
117 typedef enum _VAL_DRIVER_TYPE_T
119 VAL_DRIVER_TYPE_NONE
= 0, ///< None
120 VAL_DRIVER_TYPE_MP4_ENC
, ///< MP4 encoder
121 VAL_DRIVER_TYPE_MP4_DEC
, ///< MP4 decoder
122 VAL_DRIVER_TYPE_H263_ENC
, ///< H.263 encoder
123 VAL_DRIVER_TYPE_H263_DEC
, ///< H.263 decoder
124 VAL_DRIVER_TYPE_H264_ENC
, ///< H.264 encoder
125 VAL_DRIVER_TYPE_H264_DEC
, ///< H.264 decoder
126 VAL_DRIVER_TYPE_SORENSON_SPARK_DEC
, ///< Sorenson Spark decoder
127 VAL_DRIVER_TYPE_VC1_SP_DEC
, ///< VC-1 simple profile decoder
128 VAL_DRIVER_TYPE_RV9_DEC
, ///< RV9 decoder
129 VAL_DRIVER_TYPE_MP1_MP2_DEC
, ///< MPEG1/2 decoder
130 VAL_DRIVER_TYPE_XVID_DEC
, ///< Xvid decoder
131 VAL_DRIVER_TYPE_DIVX4_DIVX5_DEC
, ///< Divx4/5 decoder
132 VAL_DRIVER_TYPE_VC1_MP_WMV9_DEC
, ///< VC-1 main profile (WMV9) decoder
133 VAL_DRIVER_TYPE_RV8_DEC
, ///< RV8 decoder
134 VAL_DRIVER_TYPE_WMV7_DEC
, ///< WMV7 decoder
135 VAL_DRIVER_TYPE_WMV8_DEC
, ///< WMV8 decoder
136 VAL_DRIVER_TYPE_AVS_DEC
, ///< AVS decoder
137 VAL_DRIVER_TYPE_DIVX_3_11_DEC
, ///< Divx3.11 decoder
138 VAL_DRIVER_TYPE_H264_DEC_MAIN
, ///< H.264 main profile decoder (due to different packet) == 20
139 VAL_DRIVER_TYPE_H264_DEC_MAIN_CABAC
, ///< H.264 main profile decoder for CABAC type but packet is the same, just for reload.
140 VAL_DRIVER_TYPE_VP8_DEC
, ///< VP8 decoder
141 VAL_DRIVER_TYPE_MP2_DEC
, ///< MPEG2 decoder
142 VAL_DRIVER_TYPE_VP9_DEC
, ///< VP9 decoder
143 VAL_DRIVER_TYPE_VP8_ENC
, ///< VP8 encoder
144 VAL_DRIVER_TYPE_VC1_ADV_DEC
, ///< VC1 advance decoder
145 VAL_DRIVER_TYPE_VC1_DEC
, ///< VC1 simple/main/advance decoder
146 VAL_DRIVER_TYPE_JPEG_ENC
, ///< JPEG encoder
147 VAL_DRIVER_TYPE_HEVC_ENC
, ///< HEVC encoder
148 VAL_DRIVER_TYPE_HEVC_DEC
, ///< HEVC decoder
149 VAL_DRIVER_TYPE_H264_ENC_LIVEPHOTO
, // LivePhoto type
150 VAL_DRIVER_TYPE_MAX
= 0xFFFFFFFF ///< Max driver type
158 * This is the return status of each OSAL function
160 typedef enum _VAL_RESULT_T
162 VAL_RESULT_NO_ERROR
= 0, ///< The function work successfully
163 VAL_RESULT_INVALID_DRIVER
, ///< Error due to invalid driver
164 VAL_RESULT_INVALID_PARAMETER
, ///< Error due to invalid parameter
165 VAL_RESULT_INVALID_MEMORY
, ///< Error due to invalid memory
166 VAL_RESULT_INVALID_ISR
, ///< Error due to invalid isr request
167 VAL_RESULT_ISR_TIMEOUT
, ///< Error due to invalid isr request
168 VAL_RESULT_UNKNOWN_ERROR
, ///< Unknown error
169 VAL_RESULT_RESTARTSYS
, ///< Restart sys
170 VAL_RESULT_MAX
= 0xFFFFFFFF ///< Max result
178 * This is the item for allocation memory byte alignment
180 typedef enum _VAL_MEM_ALIGN_T
182 VAL_MEM_ALIGN_1
= 1, ///< 1 byte alignment
183 VAL_MEM_ALIGN_2
= (1 << 1), ///< 2 byte alignment
184 VAL_MEM_ALIGN_4
= (1 << 2), ///< 4 byte alignment
185 VAL_MEM_ALIGN_8
= (1 << 3), ///< 8 byte alignment
186 VAL_MEM_ALIGN_16
= (1 << 4), ///< 16 byte alignment
187 VAL_MEM_ALIGN_32
= (1 << 5), ///< 32 byte alignment
188 VAL_MEM_ALIGN_64
= (1 << 6), ///< 64 byte alignment
189 VAL_MEM_ALIGN_128
= (1 << 7), ///< 128 byte alignment
190 VAL_MEM_ALIGN_256
= (1 << 8), ///< 256 byte alignment
191 VAL_MEM_ALIGN_512
= (1 << 9), ///< 512 byte alignment
192 VAL_MEM_ALIGN_1K
= (1 << 10), ///< 1K byte alignment
193 VAL_MEM_ALIGN_2K
= (1 << 11), ///< 2K byte alignment
194 VAL_MEM_ALIGN_4K
= (1 << 12), ///< 4K byte alignment
195 VAL_MEM_ALIGN_8K
= (1 << 13), ///< 8K byte alignment
196 VAL_MEM_ALIGN_MAX
= 0xFFFFFFFF ///< Max memory byte alignment
204 * This is the item for allocation memory type
206 typedef enum _VAL_MEM_TYPE_T
208 VAL_MEM_TYPE_FOR_SW
= 0, ///< External memory foe SW
209 VAL_MEM_TYPE_FOR_HW_CACHEABLE
, ///< External memory for HW Cacheable
210 VAL_MEM_TYPE_FOR_HW_CACHEABLE_MCI
, ///< External memory for HW Cacheable, with MCI port config
211 VAL_MEM_TYPE_FOR_HW_NONCACHEABLE
, ///< External memory for HW Non-Cacheable
212 VAL_MEM_TYPE_MAX
= 0xFFFFFFFF ///< Max memory type
220 * This is a structure for memory address
222 typedef struct _VAL_MEM_ADDR_T
224 VAL_ULONG_T u4VA
; ///< [IN/OUT] virtual address
225 VAL_ULONG_T u4PA
; ///< [IN/OUT] physical address
226 VAL_ULONG_T u4Size
; ///< [IN/OUT] size
232 * VAL_VCODEC_THREAD_ID_T
234 * This is a structure for thread info
236 typedef struct _VAL_VCODEC_THREAD_ID_T
238 VAL_UINT32_T u4tid1
; ///< [IN/OUT] thread id for single core
239 VAL_UINT32_T u4tid2
; ///< [IN/OUT] thread id for single core
240 VAL_UINT32_T u4VCodecThreadNum
; ///< [IN/OUT] thread num
241 VAL_UINT32_T u4VCodecThreadID
[VCODEC_THREAD_MAX_NUM
]; ///< [IN/OUT] thread id for each thread
242 } VAL_VCODEC_THREAD_ID_T
;
247 * VAL_VCODEC_CPU_LOADING_INFO_T
249 * This is a structure for CPU loading info
251 typedef struct _VAL_VCODEC_CPU_LOADING_INFO_T
253 unsigned long long _cpu_idle_time
; ///< [OUT] cpu idle time
254 unsigned long long _thread_cpu_time
; ///< [OUT] thread cpu time
255 unsigned long long _sched_clock
; ///< [OUT] sched clock
256 unsigned int _inst_count
; ///< [OUT] inst count
257 } VAL_VCODEC_CPU_LOADING_INFO_T
;
262 * VAL_VCODEC_CPU_OPP_LIMIT_T
264 * This is a structure for CPU opp limit info
266 typedef struct _VAL_VCODEC_CPU_OPP_LIMIT_T
268 int limited_freq
; ///< [IN] limited freq
269 int limited_cpu
; ///< [IN] limited cpu
270 int enable
; ///< [IN] enable
271 } VAL_VCODEC_CPU_OPP_LIMIT_T
;
276 * VAL_VCODEC_M4U_BUFFER_CONFIG_T
278 * This is a structure for m4u buffer config
280 typedef struct _VAL_VCODEC_M4U_BUFFER_CONFIG_T
282 VAL_MEM_CODEC_T eMemCodec
; ///< [IN] memory usage for encoder or decoder
283 VAL_UINT32_T cache_coherent
; ///< [IN] cache coherent or not
284 VAL_UINT32_T security
; ///< [IN] security or not
285 } VAL_VCODEC_M4U_BUFFER_CONFIG_T
;
292 * This is a parameter for memory usaged function
294 typedef struct _VAL_MEMORY_T
296 VAL_MEM_TYPE_T eMemType
; ///< [IN] The allocation memory type
297 VAL_ULONG_T u4MemSize
; ///< [IN] The size of memory allocation
298 VAL_VOID_T
*pvMemVa
; ///< [IN/OUT] The memory virtual address
299 VAL_VOID_T
*pvMemPa
; ///< [IN/OUT] The memory physical address
300 VAL_MEM_ALIGN_T eAlignment
; ///< [IN] The memory byte alignment setting
301 VAL_VOID_T
*pvAlignMemVa
; ///< [IN/OUT] The align memory virtual address
302 VAL_VOID_T
*pvAlignMemPa
; ///< [IN/OUT] The align memory physical address
303 VAL_MEM_CODEC_T eMemCodec
; ///< [IN] The memory codec for VENC or VDEC
304 VAL_UINT32_T i4IonShareFd
;
305 struct ion_handle
*pIonBufhandle
;
306 VAL_VOID_T
*pvReserved
; ///< [IN/OUT] The reserved parameter
307 VAL_ULONG_T u4ReservedSize
; ///< [IN] The size of reserved parameter structure
308 #ifdef __EARLY_PORTING__
309 VAL_VOID_T
*pvReservedPmem
; ///< [IN/OUT] The reserved parameter
317 * This is a parameter for setting record size to EMI controller
319 typedef struct __VAL_RECORD_SIZE_T
321 VAL_UINT32_T u4FrmWidth
; ///< [IN] Frame Width, (may not 16 byte-align)
322 VAL_UINT32_T u4FrmHeight
; ///< [IN] Frame Height, (may not 16 byte-align)
323 VAL_UINT32_T u4BufWidth
; ///< [IN] Buffer Width, (must 16 byte-align)
324 VAL_UINT32_T u4BufHeight
; ///< [IN] Buffer Height, (must 16 byte-align)
332 * This is a parameter for eVideoAtoi()
334 typedef struct _VAL_ATOI_T
336 VAL_VOID_T
*pvStr
; ///< [IN] Null-terminated String to be converted
337 VAL_INT32_T i4Result
; ///< [Out] returns the int value produced by interpreting the input characters as a number.
338 VAL_VOID_T
*pvReserved
; ///< [IN/OUT] The reserved parameter
339 VAL_UINT32_T u4ReservedSize
; ///< [IN] The size of reserved parameter structure
347 * This is a parameter for eVideoStrStr()
349 typedef struct _VAL_STRSTR_T
351 VAL_VOID_T
*pvStr
; ///< [IN] Null-terminated string to search.
352 VAL_VOID_T
*pvStrSearch
; ///< [IN] Null-terminated string to search for
353 VAL_VOID_T
*pvStrResult
; ///< [Out] Returns a pointer to the first occurrence of strSearch in str, or NULL if strSearch does not appear in str.
354 VAL_VOID_T
*pvReserved
; ///< [IN/OUT] The reserved parameter
355 VAL_UINT32_T u4ReservedSize
; ///< [IN] The size of reserved parameter structure
363 * This is a parameter for ISR related function
365 typedef struct _VAL_ISR_T
367 VAL_VOID_T
*pvHandle
; ///< [IN] The video codec driver handle
368 VAL_UINT32_T u4HandleSize
; ///< [IN] The size of video codec driver handle
369 VAL_DRIVER_TYPE_T eDriverType
; ///< [IN] The driver type
370 VAL_VOID_T
*pvIsrFunction
; ///< [IN] The isr function
371 VAL_VOID_T
*pvReserved
; ///< [IN/OUT] The reserved parameter
372 VAL_UINT32_T u4ReservedSize
; ///< [IN] The size of reserved parameter structure
373 VAL_UINT32_T u4TimeoutMs
; ///< [IN] The timeout in ms
374 VAL_UINT32_T u4IrqStatusNum
; ///< [IN] The num of return registers when HW done
375 VAL_UINT32_T u4IrqStatus
[IRQ_STATUS_MAX_NUM
]; ///< [IN/OUT] The value of return registers when HW done
383 * This is a parameter for HW Lock/UnLock related function
385 typedef struct _VAL_HW_LOCK_T
387 VAL_VOID_T
*pvHandle
; ///< [IN] The video codec driver handle
388 VAL_UINT32_T u4HandleSize
; ///< [IN] The size of video codec driver handle
389 VAL_VOID_T
*pvLock
; ///< [IN/OUT] The Lock discriptor
390 VAL_UINT32_T u4TimeoutMs
; ///< [IN] The timeout ms
391 VAL_VOID_T
*pvReserved
; ///< [IN/OUT] The reserved parameter
392 VAL_UINT32_T u4ReservedSize
; ///< [IN] The size of reserved parameter structure
393 VAL_DRIVER_TYPE_T eDriverType
; ///< [IN] The driver type
394 VAL_BOOL_T bSecureInst
; ///< [IN] True if this is a secure instance // MTK_SEC_VIDEO_PATH_SUPPORT
402 * This is a structure for system time.
404 typedef struct _VAL_TIME_T
406 VAL_UINT32_T u4Sec
; ///< [IN/OUT] second
407 VAL_UINT32_T u4uSec
; ///< [IN/OUT] micro second
415 * This is the item for setting val parameter
417 typedef enum _VAL_SET_TYPE_T
419 VAL_SET_TYPE_CURRENT_SCENARIO
, ///< Set current scenario
420 VAL_SET_TYPE_MCI_PORT_CONFIG
, ///< Set MCI port config
421 VAL_SET_TYPE_M4U_PORT_CONFIG
///< Set M4U port config
428 * This is the item for getting val parameter
430 typedef enum _VAL_GET_TYPE_T
432 VAL_GET_TYPE_CURRENT_SCENARIO_CNT
, ///< Get current scenario reference count
433 VAL_GET_TYPE_LCM_INFO
, ///< Get LCM info
438 * VAL_VCODEC_SCENARIO
440 * This is the item for get/setting current vcodec scenario
442 typedef enum _VAL_VCODEC_SCENARIO_T
444 VAL_VCODEC_SCENARIO_VENC_1080P
= 0x1, ///< Camera recording 1080P
445 VAL_VCODEC_SCENARIO_VDEC_1080P
= 0x2, ///< Playback 1080P
446 VAL_VCODEC_SCENARIO_VENC_WFD
= 0x4, ///< Wifi-display encoding
447 } VAL_VCODEC_SCENARIO_T
;
451 * VAL_CURRENT_SCENARIO_T
453 * This is a structure for set/get current scenario
455 typedef struct _VAL_CURRENT_SCENARIO_T
457 VAL_UINT32_T u4Scenario
; ///< [IN/OUT] set/get current scenario
458 VAL_UINT32_T u4OnOff
; ///< [IN] set on/off (increment/decrement) 1 = inc, 0 = dec
459 } VAL_CURRENT_SCENARIO_T
;
463 * VAL_CURRENT_SCENARIO_CNT_T
465 * This is a structure for set/get current scenario reference count
467 typedef struct _VAL_CURRENT_SCENARIO_CNT_T
469 VAL_UINT32_T u4Scenario
; ///< [IN] current scenario type
470 VAL_UINT32_T u4ScenarioRefCount
; ///< [OUT] current scenario reference count
471 } VAL_CURRENT_SCENARIO_CNT_T
;
476 * VAL_MCI_PORT_CONFIG_T
478 * This is a structure for set/get MCI port config
480 typedef struct _VAL_MCI_PORT_CONFIG_T
482 VAL_MEM_CODEC_T eMemCodecType
; ///< [IN] memory type - decoder/encoder
483 VAL_UINT32_T u4Config
; ///< [IN] set port config
484 } VAL_MCI_PORT_CONFIG_T
;
490 * This is a structure for get LCM info
492 typedef struct _VAL_LCM_INFO_T
494 VAL_UINT32_T u4Width
; ///< [OUT] width
495 VAL_UINT32_T u4Height
; ///< [OUT] height
498 #define VAL_M4U_PORT_ALL (-1) ///< VAL_M4UPORT_DEFAULT_ALL = 1, config all M4U port for VENC or VDEC
502 * VAL_M4U_MPORT_CONFIG_T
504 * This is a parameter for eVideoSetParam() input structure
506 typedef struct _VAL_M4U_MPORT_CONFIG_T
508 VAL_MEM_CODEC_T eMemCodec
; ///< [IN] The memory codec for VENC or VDEC
509 VAL_UINT32_T i4M4UPortID
; ///< [IN] config port ID (VAL_M4U_PORT_ALL[-1] = config all VENC or VDEC)
510 VAL_BOOL_T bSecurity
; ///< [IN] config port security
511 VAL_BOOL_T bVirtuality
; ///< [IN] config port virtuality
512 } VAL_M4U_MPORT_CONFIG_T
;
515 /* for DirectLink Meta Mode + */
516 #define META_HANDLE_LIST_MAX 50
518 typedef struct _VAL_MetaBufInfo
523 VAL_UINT32_T u4BuffSize
;
526 struct ion_handle
*pIonBufhandle
;
529 typedef struct _VAL_MetaHandleList
532 VAL_MetaBufInfo rMetaBufInfo
[META_HANDLE_LIST_MAX
];
533 VAL_BOOL_T fgSeqHdrEncoded
;
534 } VAL_MetaHandleList
;
536 typedef struct _VAL_BufInfo
538 VAL_UINT8_T fgIsConfigData
;
540 VAL_UINT8_T fgBSStatus
;
541 VAL_UINT8_T fgIsKeyFrame
;
542 VAL_UINT32_T u4BSSize
;
544 /* for DirectLink Meta Mode - */
551 #endif // #ifndef _VAL_TYPES_PUBLIC_H_