9 * Video Encoder Driver Interface for external use
12 * Jackal Chen (mtk02532)
14 * @par $Revision: #1 $
20 #ifndef _VENC_DRV_IF_PUBLIC_H_
21 #define _VENC_DRV_IF_PUBLIC_H_
27 #include "val_types_public.h"
32 * VENC_DRV_QUERY_TYPE_T
34 * This is the item used for query driver
36 typedef enum __VENC_DRV_QUERY_TYPE_T
38 VENC_DRV_QUERY_TYPE_NONE
, ///< Default value (not used)
39 VENC_DRV_QUERY_TYPE_VIDEO_FORMAT
, ///< Query the driver capability
40 VENC_DRV_QUERY_TYPE_VIDEO_PROPERTY
, ///< Query the video property
41 VENC_DRV_QUERY_TYPE_VIDEO_PROPERTY_LIST
, ///< Query the video property list
42 VENC_DRV_QUERY_TYPE_PROPERTY
, ///< Get the driver property
43 VENC_DRV_QUERY_TYPE_MCI_SUPPORTED
, ///< Query if the codec support MCI
44 VENC_DRV_QUERY_TYPE_CHIP_NAME
, ///< Query chip name
45 VENC_DRV_QUERY_TYPE_INPUT_BUF_LIMIT
, ///< Query input buffer stride and sliceheight
46 VENC_DRV_QUERY_TYPE_NORMAL_PRIO
, ///< Query if recorder scenario adjust to normal priority, for 6571.
47 VENC_DRV_QUERY_TYPE_VIDEO_CAMCORDER_CAP
, ///< Query spec. for MediaProfile
48 VENC_DRV_QUERY_TYPE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_QUERY_TYPE_T value
50 VENC_DRV_QUERY_TYPE_T
;
55 * VENC_DRV_YUV_FORMAT_T
57 * This is the item used for input YUV buffer format
59 typedef enum __VENC_DRV_YUV_FORMAT_T
61 VENC_DRV_YUV_FORMAT_NONE
, ///< Default value (not used)
62 VENC_DRV_YUV_FORMAT_GRAY
, ///< GRAY YUV format
63 VENC_DRV_YUV_FORMAT_422
, ///< 422 YUV format
64 VENC_DRV_YUV_FORMAT_420
, ///< 420 YUV format
65 VENC_DRV_YUV_FORMAT_411
, ///< 411 YUV format
66 VENC_DRV_YUV_FORMAT_YV12
, ///< Android YV12 (16/16/16) YUV format
67 VENC_DRV_YUV_FORMAT_NV12
, ///< NV12 YUV format
68 VENC_DRV_YUV_FORMAT_NV21
, ///< NV21 YUV format
69 VENC_DRV_YUV_FORMAT_BLK16X32
, ///< Block 16x32 YUV format
70 VENC_DRV_YUV_FORMAT_BLK64X32
, ///< Block 64x32 YUV format
71 VENC_DRV_YUV_FORMAT_YV12_1688
, ///< YV12 YUV format
72 VENC_DRV_YUV_FORMAT_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_YUV_FORMAT_T value
73 } VENC_DRV_YUV_FORMAT_T
;
78 * VENC_DRV_VIDEO_FORMAT_T
80 * This is the item used for encode video format
82 typedef enum __VENC_DRV_VIDEO_FORMAT_T
84 VENC_DRV_VIDEO_FORMAT_NONE
, ///< Default value (not used)
85 VENC_DRV_VIDEO_FORMAT_MPEG4
, ///< MPEG4 video format
86 VENC_DRV_VIDEO_FORMAT_MPEG4_1080P
, ///< MPEG4 video format for 1080p
87 VENC_DRV_VIDEO_FORMAT_MPEG4_SHORT
, ///< MPEG4_SHORT (H.263 baseline profile) video format
88 VENC_DRV_VIDEO_FORMAT_H263
, ///< H.263 video format
89 VENC_DRV_VIDEO_FORMAT_H264
, ///< H.264 video format
90 VENC_DRV_VIDEO_FORMAT_H264_VGA
, ///< H.264 video format for VGA
91 VENC_DRV_VIDEO_FORMAT_WMV9
, ///< WMV9 video format
92 VENC_DRV_VIDEO_FORMAT_VC1
, ///< VC1 video format
93 VENC_DRV_VIDEO_FORMAT_VP8
, ///< VP8 video format
94 VENC_DRV_VIDEO_FORMAT_JPEG
, ///< JPEG picture format
95 VENC_DRV_VIDEO_FORMAT_HEVC
, ///< HEVC video format
96 VENC_DRV_VIDEO_FORMAT_H264SEC
, ///<: Secure H.264
97 VENC_DRV_VIDEO_FORMAT_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_VIDEO_FORMAT_T value
98 } VENC_DRV_VIDEO_FORMAT_T
;
103 * VENC_DRV_FRAME_RATE_T
105 * This is the item used for encode frame rate
107 typedef enum __VENC_DRV_FRAME_RATE_T
109 VENC_DRV_FRAME_RATE_NONE
= 0, ///< Default value (not used)
110 VENC_DRV_FRAME_RATE_7_5
= 75, ///< 7.5
111 VENC_DRV_FRAME_RATE_10
= 10, ///< 10
112 VENC_DRV_FRAME_RATE_15
= 15, ///< 15
113 VENC_DRV_FRAME_RATE_20
= 20, ///< 20
114 VENC_DRV_FRAME_RATE_24
= 24, ///< 24
115 VENC_DRV_FRAME_RATE_25
= 25, ///< 25
116 VENC_DRV_FRAME_RATE_29_97
= 2997, ///< 29.97
117 VENC_DRV_FRAME_RATE_30
= 30, ///< 30
118 VENC_DRV_FRAME_RATE_60
= 60, ///< 60
119 VENC_DRV_FRAME_RATE_120
= 120, ///< 120
120 VENC_DRV_FRAME_RATE_180
= 180, ///< 180
121 VENC_DRV_FRAME_RATE_240
= 240, ///< 240
122 VENC_DRV_FRAME_RATE_480
= 480, ///< 480
123 VENC_DRV_FRAME_RATE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_FRAME_RATE_T value
124 } VENC_DRV_FRAME_RATE_T
;
129 * VENC_DRV_START_OPT_T
131 * This is the item used for encode frame type
133 typedef enum __VENC_DRV_START_OPT_T
135 VENC_DRV_START_OPT_NONE
, ///< Default value (not used)
136 VENC_DRV_START_OPT_ENCODE_SEQUENCE_HEADER
, ///< Encode a Sequence header
137 VENC_DRV_START_OPT_ENCODE_SEQUENCE_HEADER_H264_SPS
, ///< Encode a Sequence header H264 SPS
138 VENC_DRV_START_OPT_ENCODE_SEQUENCE_HEADER_H264_PPS
, ///< Encode a Sequence header H264 PPS
139 VENC_DRV_START_OPT_ENCODE_FRAME
, ///< Encode a frame
140 VENC_DRV_START_OPT_ENCODE_KEY_FRAME
, ///< Encode a key frame
141 VENC_DRV_START_OPT_ENCODE_FINAL
, ///< Final encode (Only use to encode final frame)
142 VENC_DRV_START_OPT_ENCODE_DUMMY_NAL
, ///< Encode a dummy NAL for WFD
143 VENC_DRV_START_OPT_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_START_OPT_T value
144 } VENC_DRV_START_OPT_T
;
151 * This is the item used for encode frame status
153 typedef enum __VENC_DRV_MESSAGE_T
155 VENC_DRV_MESSAGE_NONE
, ///< Default value (not used)
156 VENC_DRV_MESSAGE_OK
, ///< Encode ok
157 VENC_DRV_MESSAGE_ERR
, ///< Encode error
158 VENC_DRV_MESSAGE_TIMEOUT
, ///< Encode timeout
159 VENC_DRV_MESSAGE_PARTIAL
, ///< Encode partial frame (ok means EOF)
160 VENC_DRV_MESSAGE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_MESSAGE_T value
161 } VENC_DRV_MESSAGE_T
;
166 * VENC_DRV_H264_VIDEO_PROFILE_T
168 * This is the item used for h.264 encoder profile capability
170 typedef enum __VENC_DRV_H264_VIDEO_PROFILE_T
172 VENC_DRV_H264_VIDEO_PROFILE_UNKNOWN
= 0, ///< Default value (not used)
173 VENC_DRV_H264_VIDEO_PROFILE_BASELINE
= (1 << 0), ///< Baseline
174 VENC_DRV_H264_VIDEO_PROFILE_CONSTRAINED_BASELINE
= (1 << 1), ///< Constrained Baseline
175 VENC_DRV_H264_VIDEO_PROFILE_MAIN
= (1 << 2), ///< Main
176 VENC_DRV_H264_VIDEO_PROFILE_EXTENDED
= (1 << 3), ///< Extended
177 VENC_DRV_H264_VIDEO_PROFILE_HIGH
= (1 << 4), ///< High
178 VENC_DRV_H264_VIDEO_PROFILE_HIGH_10
= (1 << 5), ///< High 10
179 VENC_DRV_H264_VIDEO_PROFILE_HIGH422
= (1 << 6), ///< High 422
180 VENC_DRV_H264_VIDEO_PROFILE_HIGH444
= (1 << 7), ///< High 444
181 VENC_DRV_H264_VIDEO_PROFILE_HIGH_10_INTRA
= (1 << 8), ///< High 10 Intra (Amendment 2)
182 VENC_DRV_H264_VIDEO_PROFILE_HIGH422_INTRA
= (1 << 9), ///< High 422 Intra (Amendment 2)
183 VENC_DRV_H264_VIDEO_PROFILE_HIGH444_INTRA
= (1 << 10), ///< High 444 Intra (Amendment 2)
184 VENC_DRV_H264_VIDEO_PROFILE_CAVLC444_INTRA
= (1 << 11), ///< CAVLC 444 Intra (Amendment 2)
185 VENC_DRV_H264_VIDEO_PROFILE_HIGH444_PREDICTIVE
= (1 << 12), ///< High 444 Predictive (Amendment 2)
186 VENC_DRV_H264_VIDEO_PROFILE_SCALABLE_BASELINE
= (1 << 13), ///< Scalable Baseline (Amendment 3)
187 VENC_DRV_H264_VIDEO_PROFILE_SCALABLE_HIGH
= (1 << 14), ///< Scalable High (Amendment 3)
188 VENC_DRV_H264_VIDEO_PROFILE_SCALABLE_HIGH_INTRA
= (1 << 15), ///< Scalable High Intra (Amendment 3)
189 VENC_DRV_H264_VIDEO_PROFILE_MULTIVIEW_HIGH
= (1 << 16), ///< Multiview High (Corrigendum 1 (2009))
190 VENC_DRV_H264_VIDEO_PROFILE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_H264_VIDEO_PROFILE_T value
191 } VENC_DRV_H264_VIDEO_PROFILE_T
;
196 * VENC_DRV_HEVC_VIDEO_PROFILE_T
198 * This is the item used for hevc encoder profile capability
200 typedef enum __VENC_DRV_HEVC_VIDEO_PROFILE_T
202 VENC_DRV_HEVC_VIDEO_PROFILE_UNKNOWN
= 0, ///< Default value (not used)
203 VENC_DRV_HEVC_VIDEO_PROFILE_BASELINE
= (1 << 0), ///< Baseline
204 VENC_DRV_HEVC_VIDEO_PROFILE_CONSTRAINED_BASELINE
= (1 << 1), ///< Constrained Baseline
205 VENC_DRV_HEVC_VIDEO_PROFILE_MAIN
= (1 << 2), ///< Main
206 VENC_DRV_HEVC_VIDEO_PROFILE_EXTENDED
= (1 << 3), ///< Extended
207 VENC_DRV_HEVC_VIDEO_PROFILE_HIGH
= (1 << 4), ///< High
208 VENC_DRV_HEVC_VIDEO_PROFILE_HIGH_10
= (1 << 5), ///< High 10
209 VENC_DRV_HEVC_VIDEO_PROFILE_HIGH422
= (1 << 6), ///< High 422
210 VENC_DRV_HEVC_VIDEO_PROFILE_HIGH444
= (1 << 7), ///< High 444
211 VENC_DRV_HEVC_VIDEO_PROFILE_HIGH_10_INTRA
= (1 << 8), ///< High 10 Intra (Amendment 2)
212 VENC_DRV_HEVC_VIDEO_PROFILE_HIGH422_INTRA
= (1 << 9), ///< High 422 Intra (Amendment 2)
213 VENC_DRV_HEVC_VIDEO_PROFILE_HIGH444_INTRA
= (1 << 10), ///< High 444 Intra (Amendment 2)
214 VENC_DRV_HEVC_VIDEO_PROFILE_CAVLC444_INTRA
= (1 << 11), ///< CAVLC 444 Intra (Amendment 2)
215 VENC_DRV_HEVC_VIDEO_PROFILE_HIGH444_PREDICTIVE
= (1 << 12), ///< High 444 Predictive (Amendment 2)
216 VENC_DRV_HEVC_VIDEO_PROFILE_SCALABLE_BASELINE
= (1 << 13), ///< Scalable Baseline (Amendment 3)
217 VENC_DRV_HEVC_VIDEO_PROFILE_SCALABLE_HIGH
= (1 << 14), ///< Scalable High (Amendment 3)
218 VENC_DRV_HEVC_VIDEO_PROFILE_SCALABLE_HIGH_INTRA
= (1 << 15), ///< Scalable High Intra (Amendment 3)
219 VENC_DRV_HEVC_VIDEO_PROFILE_MULTIVIEW_HIGH
= (1 << 16), ///< Multiview High (Corrigendum 1 (2009))
220 VENC_DRV_HEVC_VIDEO_PROFILE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_HEVC_VIDEO_PROFILE_T value
221 } VENC_DRV_HEVC_VIDEO_PROFILE_T
;
226 * VENC_DRV_MPEG_VIDEO_PROFILE_T
228 * This is the item used for h.263, mpeg2, mpeg4 encoder profile capability
230 typedef enum __VENC_DRV_MPEG_VIDEO_PROFILE_T
232 VENC_DRV_MPEG_VIDEO_PROFILE_UNKNOWN
= 0, ///< Default value (not used)
233 VENC_DRV_MPEG_VIDEO_PROFILE_H263_0
= (1 << 0), ///< H.263 0
234 VENC_DRV_MPEG_VIDEO_PROFILE_H263_1
= (1 << 1), ///< H.263 1
235 VENC_DRV_MPEG_VIDEO_PROFILE_H263_2
= (1 << 2), ///< H.263 2
236 VENC_DRV_MPEG_VIDEO_PROFILE_H263_3
= (1 << 3), ///< H.263 3
237 VENC_DRV_MPEG_VIDEO_PROFILE_H263_4
= (1 << 4), ///< H.263 4
238 VENC_DRV_MPEG_VIDEO_PROFILE_H263_5
= (1 << 5), ///< H.263 5
239 VENC_DRV_MPEG_VIDEO_PROFILE_H263_6
= (1 << 6), ///< H.263 6
240 VENC_DRV_MPEG_VIDEO_PROFILE_H263_7
= (1 << 7), ///< H.263 7
241 VENC_DRV_MPEG_VIDEO_PROFILE_H263_8
= (1 << 8), ///< H.263 8
242 VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SIMPLE
= (1 << 9), ///< MPEG2 Simple
243 VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_MAIN
= (1 << 10), ///< MPEG2 Main
244 VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SNR
= (1 << 11), ///< MPEG2 SNR
245 VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_SPATIAL
= (1 << 12), ///< MPEG2 Spatial
246 VENC_DRV_MPEG_VIDEO_PROFILE_MPEG2_HIGH
= (1 << 13), ///< MPEG2 High
247 VENC_DRV_MPEG_VIDEO_PROFILE_MPEG4_SIMPLE
= (1 << 14), ///< MPEG4 Simple
248 VENC_DRV_MPEG_VIDEO_PROFILE_MPEG4_ADVANCED_SIMPLE
= (1 << 15), ///< MPEG4 Advanced Simple
249 VENC_DRV_MPEG_VIDEO_PROFILE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_MPEG_VIDEO_PROFILE_T value
250 } VENC_DRV_MPEG_VIDEO_PROFILE_T
;
255 * VENC_DRV_MS_VIDEO_PROFILE_T
257 * This is the item used for MS encoder profile capability
259 typedef enum __VENC_DRV_MS_VIDEO_PROFILE_T
261 VENC_DRV_MS_VIDEO_PROFILE_UNKNOWN
= 0, ///< Default value (not used)
262 VENC_DRV_MS_VIDEO_PROFILE_VC1_SIMPLE
= (1 << 0), ///< VC1 Simple
263 VENC_DRV_MS_VIDEO_PROFILE_VC1_MAIN
= (1 << 1), ///< VC1 Main
264 VENC_DRV_MS_VIDEO_PROFILE_VC1_ADVANCED
= (1 << 2), ///< VC1 Advanced
265 VENC_DRV_MS_VIDEO_PROFILE_WMV9_SIMPLE
= (1 << 3), ///< WMV9 Simple
266 VENC_DRV_MS_VIDEO_PROFILE_WMV9_MAIN
= (1 << 4), ///< WMV9 Main
267 VENC_DRV_MS_VIDEO_PROFILE_WMV9_COMPLEX
= (1 << 5), ///< WMV9 Complex
268 VENC_DRV_MS_VIDEO_PROFILE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_MS_VIDEO_PROFILE_T value
269 } VENC_DRV_MS_VIDEO_PROFILE_T
;
274 * VENC_DRV_VIDEO_LEVEL_T
276 * This is the item used for encoder level capability
278 typedef enum __VENC_DRV_VIDEO_LEVEL_T
280 VENC_DRV_VIDEO_LEVEL_UNKNOWN
= 0, ///< Default value (not used)
281 VENC_DRV_VIDEO_LEVEL_0
, ///< VC1
282 VENC_DRV_VIDEO_LEVEL_1
, ///< H264, HEVC, VC1, MPEG4
283 VENC_DRV_VIDEO_LEVEL_1b
, ///< H264, HEVC
284 VENC_DRV_VIDEO_LEVEL_1_1
, ///< H264, HEVC
285 VENC_DRV_VIDEO_LEVEL_1_2
, ///< H264, HEVC
286 VENC_DRV_VIDEO_LEVEL_1_3
, ///< H264, HEVC
287 VENC_DRV_VIDEO_LEVEL_2
, ///< H264, HEVC, VC1, MPEG4
288 VENC_DRV_VIDEO_LEVEL_2_1
, ///< H264, HEVC
289 VENC_DRV_VIDEO_LEVEL_2_2
, ///< H264, HEVC
290 VENC_DRV_VIDEO_LEVEL_3
, ///< H264, HEVC, VC1, MPEG4
291 VENC_DRV_VIDEO_LEVEL_3_1
, ///< H264, HEVC
292 VENC_DRV_VIDEO_LEVEL_3_2
, ///< H264, HEVC
293 VENC_DRV_VIDEO_LEVEL_4
, ///< H264, HEVC, VC1
294 VENC_DRV_VIDEO_LEVEL_4_1
, ///< H264, HEVC
295 VENC_DRV_VIDEO_LEVEL_4_2
, ///< H264, HEVC
296 VENC_DRV_VIDEO_LEVEL_5
, ///< H264, HEVC, HEVC
297 VENC_DRV_VIDEO_LEVEL_5_1
, ///< H264, HEVC
298 VENC_DRV_VIDEO_LEVEL_LOW
, ///< VC1, MPEG2
299 VENC_DRV_VIDEO_LEVEL_MEDIUM
, ///< VC1, MPEG2
300 VENC_DRV_VIDEO_LEVEL_HIGH1440
, ///< MPEG2
301 VENC_DRV_VIDEO_LEVEL_HIGH
, ///< VC1, MPEG2
302 VENC_DRV_VIDEO_LEVEL_6
, ///< H263
303 VENC_DRV_VIDEO_LEVEL_7
, ///< H263
304 VENC_DRV_VIDEO_LEVEL_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_VIDEO_LEVEL_T value
305 } VENC_DRV_VIDEO_LEVEL_T
;
310 * VENC_DRV_RESOLUTION_T
312 * This is the item used for encoder resolution capability
314 typedef enum __VENC_DRV_RESOLUTION_T
316 VENC_DRV_RESOLUTION_UNKNOWN
= 0, ///< Default value (not used)
317 VENC_DRV_RESOLUTION_SUPPORT_QCIF
, ///< CIF
318 VENC_DRV_RESOLUTION_SUPPORT_QVGA
, ///< QVGA
319 VENC_DRV_RESOLUTION_SUPPORT_CIF
, ///< QCIF
320 VENC_DRV_RESOLUTION_SUPPORT_HVGA
, ///< HVGA: 480x320
321 VENC_DRV_RESOLUTION_SUPPORT_VGA
, ///< VGA: 640x480
322 VENC_DRV_RESOLUTION_SUPPORT_480I
, ///< 480I
323 VENC_DRV_RESOLUTION_SUPPORT_480P
, ///< 480P
324 VENC_DRV_RESOLUTION_SUPPORT_576I
, ///< 576I
325 VENC_DRV_RESOLUTION_SUPPORT_576P
, ///< 480P
326 VENC_DRV_RESOLUTION_SUPPORT_FWVGA
, ///< FWVGA: 864x480
327 VENC_DRV_RESOLUTION_SUPPORT_720I
, ///< 720I
328 VENC_DRV_RESOLUTION_SUPPORT_720P
, ///< 720P
329 VENC_DRV_RESOLUTION_SUPPORT_1080I
, ///< 1080I
330 VENC_DRV_RESOLUTION_SUPPORT_1080P
, ///< 1080P
331 VENC_DRV_RESOLUTION_SUPPORT_2160P
, ///< 2160P
332 VENC_DRV_RESOLUTION_SUPPORT_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_RESOLUTION_T value
333 } VENC_DRV_RESOLUTION_T
;
338 * VENC_DRV_SET_TYPE_T
340 * This is the input parameter for eVEncDrvSetParam()
342 typedef enum __VENC_DRV_SET_TYPE_T
344 VENC_DRV_SET_TYPE_UNKONW
= 0, ///< Default value (not used)
345 VENC_DRV_SET_TYPE_RST
, ///< Set reset
346 VENC_DRV_SET_TYPE_CB
, ///< Set callback function
347 VENC_DRV_SET_TYPE_PARAM_RC
, ///< Set rate control parameter
348 VENC_DRV_SET_TYPE_PARAM_ME
, ///< Set motion estimation parameter
349 VENC_DRV_SET_TYPE_PARAM_EIS
, ///< Set EIS parameter
350 VENC_DRV_SET_TYPE_PARAM_ENC
, ///< Set encoder parameters such as I-frame period, etc.
351 VENC_DRV_SET_TYPE_STATISTIC_ON
, ///< Enable statistic function
352 VENC_DRV_SET_TYPE_STATISTIC_OFF
, ///< Disable statistic function
353 VENC_DRV_SET_TYPE_SET_OMX_TIDS
, ///< Set OMX thread IDs
354 VENC_DRV_SET_TYPE_MPEG4_SHORT
, ///< Set MPEG4 short header mode
355 VENC_DRV_SET_TYPE_FORCE_INTRA_ON
, ///< Set Force Intra Frame on
356 VENC_DRV_SET_TYPE_FORCE_INTRA_OFF
, ///< Set Force Intra Frame off
357 VENC_DRV_SET_TYPE_TIME_LAPSE
, ///< Set time lapse
358 VENC_DRV_SET_TYPE_ALLOC_WORK_BUF
, ///< Set to alloc working buffer
359 VENC_DRV_SET_TYPE_DUMP_WORK_BUF
, ///< Set to dump working buffer
360 VENC_DRV_SET_TYPE_FREE_WORK_BUF
, ///< Set to free working buffer
361 VENC_DRV_SET_TYPE_ADJUST_BITRATE
, ///< Set to adjust bitrate
362 VENC_DRV_SET_TYPE_I_FRAME_INTERVAL
, ///< Set I Frame interval
363 VENC_DRV_SET_TYPE_WFD_MODE
, ///< Set Wifi-Display Mode
364 VENC_DRV_SET_TYPE_RECORD_SIZE
, ///< Ser record size
365 VENC_DRV_SET_TYPE_USE_MCI_BUF
, ///< Set to use MCI buffer
366 VENC_DRV_SET_TYPE_ADJUST_FRAMERATE
, ///< Set frame rate
367 VENC_DRV_SET_TYPE_INIT_QP
, ///< Set init QP
368 VENC_DRV_SET_TYPE_SKIP_FRAME
, ///< Set skip one frame
369 VENC_DRV_SET_TYPE_SCENARIO
, ///< Set VENC Scenario
370 VENC_DRV_SET_TYPE_PREPEND_HEADER
, ///< Set prepend SPS/PPS before IDR
371 VENC_DRV_SET_TYPE_SLOW_MOTION_ENCODE
, ///< Set to Slow Motion Video Recording for header or frame
372 VENC_DRV_SET_TYPE_SLOW_MOTION_POST_PROC
, ///< Set to Slow Motion Video Recording for encoded bs with post processing
373 VENC_DRV_SET_TYPE_SLOW_MOTION_LOCK_HW
, ///< Set to Slow Motion Video Recording for Lock HW
374 VENC_DRV_SET_TYPE_SLOW_MOTION_UNLOCK_HW
, ///< Set to Slow Motion Video Recording for UnLock HW
375 VENC_DRV_SET_TYPE_NONREFP
, ///< Set Enable/Disable Non reference P frame
376 VENC_DRV_SET_TYPE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_SET_TYPE_T value
377 } VENC_DRV_SET_TYPE_T
;
382 * VENC_DRV_GET_TYPE_T
384 * This is the input parameter for eVEncDrvGetParam()
386 typedef enum __VENC_DRV_GET_TYPE_T
388 VENC_DRV_GET_TYPE_UNKONW
= 0, ///< Default value (not used)
389 VENC_DRV_GET_TYPE_PARAM_RC
, ///< Get rate control parameter
390 VENC_DRV_GET_TYPE_PARAM_ME
, ///< Get motion estimation parameter
391 VENC_DRV_GET_TYPE_PARAM_EIS
, ///< Get EIS parameter
392 VENC_DRV_GET_TYPE_PARAM_ENC
, ///< Get encoder parameters such as I-frame period, etc.
393 VENC_DRV_GET_TYPE_STATISTIC
, ///< Get statistic.
394 VENC_DRV_GET_TYPE_GET_CPU_LOADING_INFO
, ///< query the cpu loading info from kernel driver
395 VENC_DRV_GET_TYPE_GET_YUV_FORMAT
, ///< Get YUV format
396 VENC_DRV_GET_TYPE_GET_CODEC_TIDS
,
397 /* for DirectLink Meta Mode + */
398 VENC_DRV_GET_TYPE_ALLOC_META_HANDLE_LIST
, ///< Alloc a handle to store meta handle list
399 VENC_DRV_GET_TYPE_GET_BUF_INFO_FROM_META_HANDLE
, ///< Get buffer virtual address from meta buffer handle
400 VENC_DRV_GET_TYPE_FREE_META_HANDLE_LIST
, ///< free a handle allocated from VENC_DRV_GET_TYPE_ALLOC_META_HANDLE_LIST
401 /* for DirectLink Meta Mode - */
402 VENC_DRV_GET_TYPE_MAX
= 0xFFFFFFFF ///< Max VENC_DRV_GET_TYPE_MAX value
403 } VENC_DRV_GET_TYPE_T
;
410 * This is the return value for eVEncDrvXXX()
412 typedef enum __VENC_DRV_MRESULT_T
414 VENC_DRV_MRESULT_OK
= 0, ///< Return Success
415 VENC_DRV_MRESULT_FAIL
, ///< Return Fail
416 VENC_DRV_MRESULT_MAX
= 0x0FFFFFFF ///< Max VENC_DRV_MRESULT_T value
417 } VENC_DRV_MRESULT_T
;
422 * VENC_DRV_SCENARIO_T
424 * This is the scenario for VENC scenario
426 typedef enum __VENC_DRV_SCENARIO_T
428 VENC_DRV_SCENARIO_CAMERA_REC
= 1, ///< Camera recording
429 VENC_DRV_SCENARIO_LIVEPHOTO_CAPTURE
= (1 << 1), ///< LivePhoto recording
430 VENC_DRV_SCENARIO_LIVEPHOTO_EFFECT
= (1 << 2), ///< LivePhoto effect transcoding
431 VENC_DRV_SCENARIO_CAMERA_REC_SLOW_MOTION
= (1 << 3), ///< Camera recording with slow motion
432 VENC_DRV_SCENARIO_SCREEN_REC
= (1 << 4), ///< Screen recording
433 } VENC_DRV_SCENARIO_T
;
438 * VENC_DRV_QUERY_VIDEO_FORMAT_T
440 * This is a input parameter for eVEncDrvQueryCapability()
442 typedef struct __VENC_DRV_QUERY_VIDEO_FORMAT_T
444 VENC_DRV_VIDEO_FORMAT_T eVideoFormat
; ///< [OUT] video format capability
445 VAL_UINT32_T u4Profile
; ///< [OUT] video profile capability (VENC_DRV_H264_VIDEO_PROFILE_T, VENC_DRV_MPEG_VIDEO_PROFILE_T, VENC_DRV_MS_VIDEO_PROFILE_T)
446 VENC_DRV_VIDEO_LEVEL_T eLevel
; ///< [OUT] video level capability
447 VENC_DRV_RESOLUTION_T eResolution
; ///< [OUT] video resolution capability
448 VAL_UINT32_T u4Width
; ///< [OUT] video width capability
449 VAL_UINT32_T u4Height
; ///< [OUT] video height capability
450 VAL_UINT32_T u4Bitrate
; ///< [OUT] video bitrate capability
451 VAL_UINT32_T u4FrameRate
; ///< [OUT] video FrameRate capability, 15, 30,...
452 } VENC_DRV_QUERY_VIDEO_FORMAT_T
;
456 * P_VENC_DRV_QUERY_VIDEO_FORMAT_T
458 * This is the pointer of VENC_DRV_QUERY_VIDEO_FORMAT_T
460 typedef VENC_DRV_QUERY_VIDEO_FORMAT_T
*P_VENC_DRV_QUERY_VIDEO_FORMAT_T
;
465 * VENC_DRV_QUERY_INPUT_BUF_LIMIT
467 * This is a input parameter for eVEncDrvQueryCapability()
469 typedef struct __VENC_DRV_QUERY_INPUT_BUF_LIMIT
471 VENC_DRV_VIDEO_FORMAT_T eVideoFormat
; ///< [IN] video format
472 VAL_UINT32_T u4Width
; ///< [IN] video width
473 VAL_UINT32_T u4Height
; ///< [IN] video height
474 VAL_UINT32_T u4Stride
; ///< [OUT] video stride
475 VAL_UINT32_T u4SliceHeight
; ///< [OUT] video sliceheight
476 VENC_DRV_SCENARIO_T eScenario
; ///< [IN] venc scenario
477 } VENC_DRV_QUERY_INPUT_BUF_LIMIT
;
482 * VENC_DRV_PARAM_ENC_T
484 * This is the encoder settings and used as input or output parameter for eVEncDrvSetParam() or eVEncDrvGetParam()
486 typedef struct __VENC_DRV_PARAM_ENC_T
488 VENC_DRV_YUV_FORMAT_T eVEncFormat
; ///< [IN/OUT] YUV format
489 VAL_UINT32_T u4Profile
; ///< [IN/OUT] Profile
490 VAL_UINT32_T u4Level
; ///< [IN/OUT] Level
491 VAL_UINT32_T u4Width
; ///< [IN/OUT] Image Width
492 VAL_UINT32_T u4Height
; ///< [IN/OUT] Image Height
493 VAL_UINT32_T u4BufWidth
; ///< [IN/OUT] Buffer Width
494 VAL_UINT32_T u4BufHeight
; ///< [IN/OUT] Buffer Heigh
495 VAL_UINT32_T u4NumPFrm
; ///< [IN/OUT] The number of P frame between two I frame.
496 VAL_UINT32_T u4NumBFrm
; ///< [IN/OUT] The number of B frame between two reference frame.
497 VENC_DRV_FRAME_RATE_T eFrameRate
; ///< [IN/OUT] Frame rate
498 VAL_BOOL_T fgInterlace
; ///< [IN/OUT] Interlace coding.
499 VAL_VOID_T
*pvExtraEnc
; ///< [IN/OUT] For VENC_DRV_PARAM_ENC_H264_T or ...
500 VAL_MEMORY_T rExtraEncMem
; ///< [IN/OUT] Extra Encoder Memory Info
501 VAL_BOOL_T fgUseMCI
; ///< [IN/OUT] Use MCI
502 VAL_BOOL_T fgMultiSlice
; ///< [IN/OUT] Is multi-slice bitstream ?
503 } VENC_DRV_PARAM_ENC_T
;
507 * P_VENC_DRV_PARAM_ENC_T
509 * This is the pointer of VENC_DRV_PARAM_ENC_T
511 typedef VENC_DRV_PARAM_ENC_T
*P_VENC_DRV_PARAM_ENC_T
;
516 * VENC_DRV_PARAM_ENC_EXTRA_T
518 * This is the encoder settings and used as input or output parameter for eVEncDrvSetParam() or eVEncDrvGetParam()
520 typedef struct __VENC_DRV_PARAM_ENC_EXTRA_T
522 VAL_UINT32_T u4IntraFrameRate
; ///< [IN/OUT] Intra frame rate
523 VAL_UINT32_T u4BitRate
; ///< [IN/OUT] BitRate kbps
524 VAL_UINT32_T u4FrameRateQ16
; ///< [IN/OUT] Frame rate in Q16 format
525 VAL_UINT32_T u4UseMBAFF
; ///< [IN/OUT] Use MBAFF
526 } VENC_DRV_PARAM_ENC_EXTRA_T
;
530 * P_VENC_DRV_PARAM_ENC_EXTRA_T
532 * This is the pointer of VENC_DRV_PARAM_ENC_EXTRA_T
534 typedef VENC_DRV_PARAM_ENC_EXTRA_T
*pVENC_DRV_PARAM_ENC_EXTRA_T
;
537 #define VENC_DRV_VDO_PROP_LIST_MAX (64)
541 * VENC_DRV_VIDEO_PROPERTY_T
543 * This is used to get the "target bitrate" according to "resolution and frame rate"
545 typedef struct __VENC_DRV_VIDEO_PROPERTY_T
547 VENC_DRV_VIDEO_FORMAT_T eVideoFormat
;
548 VAL_UINT32_T u4Width
;
549 VAL_UINT32_T u4Height
;
550 VAL_UINT32_T u4FrameRate
;
551 VAL_UINT32_T u4BitRate
; // used for query table
552 VAL_BOOL_T fgPropIsValid
;
553 } VENC_DRV_VIDEO_PROPERTY_T
;
557 * P_VENC_DRV_VIDEO_PROPERTY_T
559 * This is the pointer of VENC_DRV_VIDEO_PROPERTY_T
561 typedef VENC_DRV_VIDEO_PROPERTY_T
*P_VENC_DRV_VIDEO_PROPERTY_T
;
566 * VENC_DRV_TIMESTAMP_T
568 * This is timestamp information and used as items for VENC_DRV_PARAM_FRM_BUF_T and VENC_DRV_PARAM_BS_BUF_T
570 typedef struct __VENC_DRV_TIMESTAMP_T
572 VAL_UINT32_T u4TimeStamp
[2]; ///< [IN] Timestamp information
573 } VENC_DRV_TIMESTAMP_T
;
577 * P_VENC_DRV_TIMESTAMP_T
579 * This is the pointer of VENC_DRV_TIMESTAMP_T
581 typedef VENC_DRV_TIMESTAMP_T
*P_VENC_DRV_TIMESTAMP_T
;
586 * VENC_DRV_EIS_INPUT_T
588 * This is EIS information and used as items for VENC_DRV_PARAM_FRM_BUF_T
590 typedef struct __VENC_DRV_EIS_INPUT_T
592 VAL_UINT32_T u4X
; ///< [IN] Start coordination X
593 VAL_UINT32_T u4Y
; ///< [IN] Start coordination Y
594 } VENC_DRV_EIS_INPUT_T
;
598 * P_VENC_DRV_EIS_INPUT_T
600 * This is the pointer of VENC_DRV_EIS_INPUT_T
602 typedef VENC_DRV_EIS_INPUT_T
*P_VENC_DRV_EIS_INPUT_T
;
607 * VENC_DRV_PARAM_FRM_BUF_T
609 * This is frame buffer information and used as input parameter for eVEncDrvEncode()
611 typedef struct __VENC_DRV_PARAM_FRM_BUF_T
613 VAL_MEM_ADDR_T rFrmBufAddr
; ///< [IN] Frame buffer address
614 VAL_MEM_ADDR_T rCoarseAddr
; ///< [IN] Coarse address
615 VENC_DRV_TIMESTAMP_T rTimeStamp
; ///< [IN] Timestamp information
616 VENC_DRV_EIS_INPUT_T rEISInput
; ///< [IN] EIS information
617 VAL_UINT32_T rSecMemHandle
; ///< [IN/OUT] security memory handle for SVP
618 } VENC_DRV_PARAM_FRM_BUF_T
;
622 * P_VENC_DRV_PARAM_FRM_BUF_T
624 * This is the pointer of VENC_DRV_PARAM_FRM_BUF_T
626 typedef VENC_DRV_PARAM_FRM_BUF_T
*P_VENC_DRV_PARAM_FRM_BUF_T
;
631 * VENC_DRV_PARAM_BS_BUF_T
633 * This is bitstream buffer information and used as input parameter for\n
636 typedef struct __VENC_DRV_PARAM_BS_BUF_T
638 VAL_MEM_ADDR_T rBSAddr
; ///< [IN] Bitstream buffer address
639 VAL_ULONG_T u4BSStartVA
; ///< [IN] Bitstream fill start address
640 VAL_ULONG_T u4BSSize
; ///< [IN] Bitstream size (filled bitstream in bytes)
641 VENC_DRV_TIMESTAMP_T rTimeStamp
; ///< [IN] Time stamp information
642 VAL_UINT32_T rSecMemHandle
; ///< [IN/OUT] security memory handle for SVP
643 } VENC_DRV_PARAM_BS_BUF_T
;
647 * P_VENC_DRV_PARAM_BS_BUF_T
649 * This is the pointer of VENC_DRV_PARAM_BS_BUF_T
651 typedef VENC_DRV_PARAM_BS_BUF_T
*P_VENC_DRV_PARAM_BS_BUF_T
;
656 * VENC_DRV_DONE_RESULT_T
658 * This is callback and return information and used as output parameter for eVEncDrvEncode()
660 typedef struct __VENC_DRV_DONE_RESULT_T
662 VENC_DRV_MESSAGE_T eMessage
; ///< [OUT] Message, such as success or error code
663 P_VENC_DRV_PARAM_BS_BUF_T prBSBuf
; ///< [OUT] Bitstream information
664 P_VENC_DRV_PARAM_FRM_BUF_T prFrmBuf
; ///< [OUT] Input frame buffer information. if address is null, don't use this buffer, else reuse
665 VAL_BOOL_T fgIsKeyFrm
; ///< [OUT] output is key frame or not
666 VAL_UINT32_T u4HWEncodeTime
; ///< [OUT] HW encode Time
667 } VENC_DRV_DONE_RESULT_T
;
671 * P_VENC_DRV_DONE_RESULT_T
673 * This is the pointer of VENC_DRV_DONE_RESULT_T
675 typedef VENC_DRV_DONE_RESULT_T
*P_VENC_DRV_DONE_RESULT_T
;
680 * VENC_DRV_PROPERTY_T
682 * This is property information and used as output parameter for eVEncDrvQueryCapability()
684 typedef struct __VENC_DRV_PROPERTY_T
686 VAL_UINT32_T u4BufAlign
; ///< [OUT] Buffer alignment requirement
687 VAL_UINT32_T u4BufUnitSize
; ///< [OUT] Buffer unit size is N bytes (e.g., 8, 16, or 64 bytes per unit.)
688 VAL_UINT32_T u4ExtraBufSize
; ///< [OUT] Extra buffer size in initial stage
689 VAL_BOOL_T fgOutputRingBuf
; ///< [OUT] Output is ring buffer
690 VAL_BOOL_T fgCoarseMESupport
; ///< [OUT] Support ME coarse search
691 VAL_BOOL_T fgEISSupport
; ///< [OUT] Support EIS
692 } VENC_DRV_PROPERTY_T
;
696 * P_VENC_DRV_PROPERTY_T
698 * This is the pointer of VENC_DRV_PROPERTY_T
700 typedef VENC_DRV_PROPERTY_T
*P_VENC_DRV_PROPERTY_T
;
705 * eVEncDrvQueryCapability
707 * Query the driver capability
709 * a_eType [IN/OUT] The VENC_DRV_QUERY_TYPE_T structure
711 * a_pvInParam [IN] The input parameter
713 * a_pvOutParam [OUT] The output parameter
715 * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
717 VENC_DRV_MRESULT_T
eVEncDrvQueryCapability(
718 VENC_DRV_QUERY_TYPE_T a_eType
,
719 VAL_VOID_T
*a_pvInParam
,
720 VAL_VOID_T
*a_pvOutParam
728 * Create the driver handle
730 * a_phHandle [OUT] The driver handle
732 * a_eVideoFormat [IN] The VENC_DRV_VIDEO_FORMAT_T structure
734 * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
736 VENC_DRV_MRESULT_T
eVEncDrvCreate(
737 VAL_HANDLE_T
*a_phHandle
,
738 VENC_DRV_VIDEO_FORMAT_T a_eVideoFormat
746 * Release the driver handle
748 * a_hHandle [IN] The driver handle
750 * a_eVideoFormat [IN] The VENC_DRV_VIDEO_FORMAT_T structure
752 * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
754 VENC_DRV_MRESULT_T
eVEncDrvRelease(
755 VAL_HANDLE_T a_hHandle
,
756 VENC_DRV_VIDEO_FORMAT_T a_eVideoFormat
764 * Init the driver setting, alloc working memory ... etc.
766 * a_hHandle [IN] The driver handle
768 * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
770 VENC_DRV_MRESULT_T
eVEncDrvInit(
771 VAL_HANDLE_T a_hHandle
778 * DeInit the driver setting, free working memory ... etc.
780 * a_hHandle [IN] The driver handle
782 * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
784 VENC_DRV_MRESULT_T
eVEncDrvDeInit(
785 VAL_HANDLE_T a_hHandle
793 * Set parameter to driver
795 * a_hHandle [IN] The driver handle
797 * a_eType [IN] The VENC_DRV_SET_TYPE_T structure
799 * a_pvInParam [IN] The input parameter
801 * a_pvOutParam [OUT] The output parameter
803 * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
805 VENC_DRV_MRESULT_T
eVEncDrvSetParam(
806 VAL_HANDLE_T a_hHandle
,
807 VENC_DRV_SET_TYPE_T a_eType
,
808 VAL_VOID_T
*a_pvInParam
,
809 VAL_VOID_T
*a_pvOutParam
817 * Get parameter from driver
819 * a_hHandle [IN] The driver handle
821 * a_eType [IN] The VENC_DRV_SET_TYPE_T structure
823 * a_pvInParam [IN] The input parameter
825 * a_pvOutParam [OUT] The output parameter
827 * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
829 VENC_DRV_MRESULT_T
eVEncDrvGetParam(
830 VAL_HANDLE_T a_hHandle
,
831 VENC_DRV_GET_TYPE_T a_eType
,
832 VAL_VOID_T
*a_pvInParam
,
833 VAL_VOID_T
*a_pvOutParam
843 * a_hHandle [IN] The driver handle
845 * a_eOpt [IN] The VENC_DRV_START_OPT_T structure
847 * a_prFrmBuf [IN] The input frame buffer with VENC_DRV_PARAM_FRM_BUF_T structure
849 * a_prBSBuf [IN] The input bitstream buffer with VENC_DRV_PARAM_BS_BUF_T structure
851 * a_prResult [OUT] The output result with VENC_DRV_DONE_RESULT_T structure
853 * VENC_DRV_MRESULT_T [OUT] VENC_DRV_MRESULT_OK for success, VENC_DRV_MRESULT_FAIL for fail
855 VENC_DRV_MRESULT_T
eVEncDrvEncode(
856 VAL_HANDLE_T a_hHandle
,
857 VENC_DRV_START_OPT_T a_eOpt
,
858 VENC_DRV_PARAM_FRM_BUF_T
*a_prFrmBuf
,
859 VENC_DRV_PARAM_BS_BUF_T
*a_prBSBuf
,
860 VENC_DRV_DONE_RESULT_T
*a_prResult
868 #endif // #ifndef _VENC_DRV_IF_PUBLIC_H_