blob: d60a0d10805dac5b6ac33e58bee1f707aa75c613 [file] [log] [blame]
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 */
13
14#ifndef __VIDC_HFI_API_H__
15#define __VIDC_HFI_API_H__
16
17#include <linux/log2.h>
18#include <linux/platform_device.h>
19#include <linux/types.h>
20#include <media/msm_vidc.h>
21#include "msm_vidc_resources.h"
22
23#define CONTAINS(__a, __sz, __t) ({\
24 int __rc = __t >= __a && \
25 __t < __a + __sz; \
26 __rc; \
27})
28
29#define OVERLAPS(__t, __tsz, __a, __asz) ({\
30 int __rc = __t <= __a && \
31 __t + __tsz >= __a + __asz; \
32 __rc; \
33})
34
35#define HAL_BUFFERFLAG_EOS 0x00000001
36#define HAL_BUFFERFLAG_STARTTIME 0x00000002
37#define HAL_BUFFERFLAG_DECODEONLY 0x00000004
38#define HAL_BUFFERFLAG_DATACORRUPT 0x00000008
39#define HAL_BUFFERFLAG_ENDOFFRAME 0x00000010
40#define HAL_BUFFERFLAG_SYNCFRAME 0x00000020
41#define HAL_BUFFERFLAG_EXTRADATA 0x00000040
42#define HAL_BUFFERFLAG_CODECCONFIG 0x00000080
43#define HAL_BUFFERFLAG_TIMESTAMPINVALID 0x00000100
44#define HAL_BUFFERFLAG_READONLY 0x00000200
45#define HAL_BUFFERFLAG_ENDOFSUBFRAME 0x00000400
46#define HAL_BUFFERFLAG_EOSEQ 0x00200000
47#define HAL_BUFFERFLAG_MBAFF 0x08000000
48#define HAL_BUFFERFLAG_YUV_601_709_CSC_CLAMP 0x10000000
49#define HAL_BUFFERFLAG_DROP_FRAME 0x20000000
50#define HAL_BUFFERFLAG_TS_DISCONTINUITY 0x40000000
51#define HAL_BUFFERFLAG_TS_ERROR 0x80000000
52
53
54
55#define HAL_DEBUG_MSG_LOW 0x00000001
56#define HAL_DEBUG_MSG_MEDIUM 0x00000002
57#define HAL_DEBUG_MSG_HIGH 0x00000004
58#define HAL_DEBUG_MSG_ERROR 0x00000008
59#define HAL_DEBUG_MSG_FATAL 0x00000010
60#define MAX_PROFILE_COUNT 16
61
62#define HAL_MAX_MATRIX_COEFFS 9
63#define HAL_MAX_BIAS_COEFFS 3
64#define HAL_MAX_LIMIT_COEFFS 6
65#define VENUS_VERSION_LENGTH 128
66
67/* 16 encoder and 16 decoder sessions */
68#define VIDC_MAX_SESSIONS 32
69
70enum vidc_status {
71 VIDC_ERR_NONE = 0x0,
72 VIDC_ERR_FAIL = 0x80000000,
73 VIDC_ERR_ALLOC_FAIL,
74 VIDC_ERR_ILLEGAL_OP,
75 VIDC_ERR_BAD_PARAM,
76 VIDC_ERR_BAD_HANDLE,
77 VIDC_ERR_NOT_SUPPORTED,
78 VIDC_ERR_BAD_STATE,
79 VIDC_ERR_MAX_CLIENTS,
80 VIDC_ERR_IFRAME_EXPECTED,
81 VIDC_ERR_HW_FATAL,
82 VIDC_ERR_BITSTREAM_ERR,
83 VIDC_ERR_INDEX_NOMORE,
84 VIDC_ERR_SEQHDR_PARSE_FAIL,
85 VIDC_ERR_INSUFFICIENT_BUFFER,
86 VIDC_ERR_BAD_POWER_STATE,
87 VIDC_ERR_NO_VALID_SESSION,
88 VIDC_ERR_TIMEOUT,
89 VIDC_ERR_CMDQFULL,
90 VIDC_ERR_START_CODE_NOT_FOUND,
91 VIDC_ERR_CLIENT_PRESENT = 0x90000001,
92 VIDC_ERR_CLIENT_FATAL,
93 VIDC_ERR_CMD_QUEUE_FULL,
94 VIDC_ERR_UNUSED = 0x10000000
95};
96
97enum hal_extradata_id {
98 HAL_EXTRADATA_NONE,
99 HAL_EXTRADATA_MB_QUANTIZATION,
100 HAL_EXTRADATA_INTERLACE_VIDEO,
101 HAL_EXTRADATA_VC1_FRAMEDISP,
102 HAL_EXTRADATA_VC1_SEQDISP,
103 HAL_EXTRADATA_TIMESTAMP,
104 HAL_EXTRADATA_S3D_FRAME_PACKING,
105 HAL_EXTRADATA_FRAME_RATE,
106 HAL_EXTRADATA_PANSCAN_WINDOW,
107 HAL_EXTRADATA_RECOVERY_POINT_SEI,
108 HAL_EXTRADATA_MULTISLICE_INFO,
109 HAL_EXTRADATA_INDEX,
110 HAL_EXTRADATA_NUM_CONCEALED_MB,
111 HAL_EXTRADATA_METADATA_FILLER,
112 HAL_EXTRADATA_ASPECT_RATIO,
113 HAL_EXTRADATA_MPEG2_SEQDISP,
114 HAL_EXTRADATA_STREAM_USERDATA,
115 HAL_EXTRADATA_FRAME_QP,
116 HAL_EXTRADATA_FRAME_BITS_INFO,
117 HAL_EXTRADATA_INPUT_CROP,
118 HAL_EXTRADATA_DIGITAL_ZOOM,
119 HAL_EXTRADATA_LTR_INFO,
120 HAL_EXTRADATA_METADATA_MBI,
121 HAL_EXTRADATA_VQZIP_SEI,
122 HAL_EXTRADATA_YUV_STATS,
123 HAL_EXTRADATA_ROI_QP,
124 HAL_EXTRADATA_OUTPUT_CROP,
125 HAL_EXTRADATA_MASTERING_DISPLAY_COLOUR_SEI,
126 HAL_EXTRADATA_CONTENT_LIGHT_LEVEL_SEI,
127 HAL_EXTRADATA_PQ_INFO,
128 HAL_EXTRADATA_VUI_DISPLAY_INFO,
129 HAL_EXTRADATA_VPX_COLORSPACE,
130};
131
132enum hal_property {
133 HAL_CONFIG_FRAME_RATE = 0x04000001,
134 HAL_PARAM_UNCOMPRESSED_FORMAT_SELECT,
135 HAL_PARAM_UNCOMPRESSED_PLANE_ACTUAL_CONSTRAINTS_INFO,
136 HAL_PARAM_UNCOMPRESSED_PLANE_ACTUAL_INFO,
137 HAL_PARAM_EXTRA_DATA_HEADER_CONFIG,
138 HAL_PARAM_INDEX_EXTRADATA,
139 HAL_PARAM_FRAME_SIZE,
140 HAL_CONFIG_REALTIME,
141 HAL_PARAM_BUFFER_COUNT_ACTUAL,
142 HAL_PARAM_BUFFER_SIZE_MINIMUM,
143 HAL_PARAM_NAL_STREAM_FORMAT_SELECT,
144 HAL_PARAM_VDEC_OUTPUT_ORDER,
145 HAL_PARAM_VDEC_PICTURE_TYPE_DECODE,
146 HAL_PARAM_VDEC_OUTPUT2_KEEP_ASPECT_RATIO,
147 HAL_CONFIG_VDEC_POST_LOOP_DEBLOCKER,
148 HAL_PARAM_VDEC_MULTI_STREAM,
149 HAL_PARAM_VDEC_DISPLAY_PICTURE_BUFFER_COUNT,
150 HAL_PARAM_DIVX_FORMAT,
151 HAL_CONFIG_VDEC_MB_ERROR_MAP_REPORTING,
152 HAL_PARAM_VDEC_CONTINUE_DATA_TRANSFER,
153 HAL_CONFIG_VDEC_MB_ERROR_MAP,
154 HAL_CONFIG_VENC_REQUEST_IFRAME,
155 HAL_PARAM_VENC_MPEG4_SHORT_HEADER,
156 HAL_PARAM_VENC_MPEG4_AC_PREDICTION,
157 HAL_CONFIG_VENC_TARGET_BITRATE,
158 HAL_PARAM_PROFILE_LEVEL_CURRENT,
159 HAL_PARAM_VENC_H264_ENTROPY_CONTROL,
160 HAL_PARAM_VENC_RATE_CONTROL,
161 HAL_PARAM_VENC_MPEG4_TIME_RESOLUTION,
162 HAL_PARAM_VENC_MPEG4_HEADER_EXTENSION,
163 HAL_PARAM_VENC_H264_DEBLOCK_CONTROL,
164 HAL_PARAM_VENC_TEMPORAL_SPATIAL_TRADEOFF,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800165 HAL_PARAM_VENC_SESSION_QP_RANGE,
166 HAL_CONFIG_VENC_INTRA_PERIOD,
167 HAL_CONFIG_VENC_IDR_PERIOD,
168 HAL_CONFIG_VPE_OPERATIONS,
169 HAL_PARAM_VENC_INTRA_REFRESH,
170 HAL_PARAM_VENC_MULTI_SLICE_CONTROL,
171 HAL_CONFIG_VPE_DEINTERLACE,
172 HAL_SYS_DEBUG_CONFIG,
173 HAL_CONFIG_BUFFER_REQUIREMENTS,
174 HAL_CONFIG_PRIORITY,
175 HAL_CONFIG_BATCH_INFO,
176 HAL_PARAM_METADATA_PASS_THROUGH,
177 HAL_SYS_IDLE_INDICATOR,
178 HAL_PARAM_UNCOMPRESSED_FORMAT_SUPPORTED,
179 HAL_PARAM_INTERLACE_FORMAT_SUPPORTED,
180 HAL_PARAM_CHROMA_SITE,
181 HAL_PARAM_PROPERTIES_SUPPORTED,
182 HAL_PARAM_PROFILE_LEVEL_SUPPORTED,
183 HAL_PARAM_CAPABILITY_SUPPORTED,
184 HAL_PARAM_NAL_STREAM_FORMAT_SUPPORTED,
185 HAL_PARAM_MULTI_VIEW_FORMAT,
186 HAL_PARAM_MAX_SEQUENCE_HEADER_SIZE,
187 HAL_PARAM_CODEC_SUPPORTED,
188 HAL_PARAM_VDEC_MULTI_VIEW_SELECT,
189 HAL_PARAM_VDEC_MB_QUANTIZATION,
190 HAL_PARAM_VDEC_NUM_CONCEALED_MB,
191 HAL_PARAM_VDEC_H264_ENTROPY_SWITCHING,
192 HAL_PARAM_VENC_SLICE_DELIVERY_MODE,
193 HAL_PARAM_VENC_MPEG4_DATA_PARTITIONING,
194 HAL_CONFIG_BUFFER_COUNT_ACTUAL,
195 HAL_CONFIG_VDEC_MULTI_STREAM,
196 HAL_PARAM_VENC_MULTI_SLICE_INFO,
197 HAL_CONFIG_VENC_TIMESTAMP_SCALE,
198 HAL_PARAM_VENC_SYNC_FRAME_SEQUENCE_HEADER,
199 HAL_PARAM_VDEC_SYNC_FRAME_DECODE,
200 HAL_PARAM_VENC_H264_ENTROPY_CABAC_MODEL,
201 HAL_CONFIG_VENC_MAX_BITRATE,
202 HAL_PARAM_VENC_H264_VUI_TIMING_INFO,
Umesh Pandey7fce7ee2017-03-13 17:59:48 -0700203 HAL_PARAM_VENC_GENERATE_AUDNAL,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800204 HAL_PARAM_VENC_MAX_NUM_B_FRAMES,
205 HAL_PARAM_BUFFER_ALLOC_MODE,
206 HAL_PARAM_VDEC_FRAME_ASSEMBLY,
207 HAL_PARAM_VENC_H264_VUI_BITSTREAM_RESTRC,
208 HAL_PARAM_VENC_PRESERVE_TEXT_QUALITY,
209 HAL_PARAM_VDEC_CONCEAL_COLOR,
210 HAL_PARAM_VDEC_SCS_THRESHOLD,
211 HAL_PARAM_GET_BUFFER_REQUIREMENTS,
212 HAL_PARAM_MVC_BUFFER_LAYOUT,
213 HAL_PARAM_VENC_LTRMODE,
214 HAL_CONFIG_VENC_MARKLTRFRAME,
215 HAL_CONFIG_VENC_USELTRFRAME,
216 HAL_CONFIG_VENC_LTRPERIOD,
217 HAL_CONFIG_VENC_HIER_P_NUM_FRAMES,
218 HAL_PARAM_VENC_HIER_P_MAX_ENH_LAYERS,
219 HAL_PARAM_VENC_DISABLE_RC_TIMESTAMP,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800220 HAL_PARAM_VENC_SEARCH_RANGE,
221 HAL_PARAM_VPE_COLOR_SPACE_CONVERSION,
222 HAL_PARAM_VENC_VPX_ERROR_RESILIENCE_MODE,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800223 HAL_CONFIG_VENC_PERF_MODE,
224 HAL_PARAM_VENC_HIER_B_MAX_ENH_LAYERS,
225 HAL_PARAM_VDEC_NON_SECURE_OUTPUT2,
226 HAL_PARAM_VENC_HIER_P_HYBRID_MODE,
227 HAL_PARAM_VENC_MBI_STATISTICS_MODE,
228 HAL_PARAM_SYNC_BASED_INTERRUPT,
229 HAL_CONFIG_VENC_FRAME_QP,
230 HAL_CONFIG_VENC_BASELAYER_PRIORITYID,
231 HAL_PARAM_VENC_VQZIP_SEI,
232 HAL_PROPERTY_PARAM_VENC_ASPECT_RATIO,
233 HAL_CONFIG_VDEC_ENTROPY,
234 HAL_PARAM_VENC_BITRATE_TYPE,
235 HAL_PARAM_VENC_H264_PIC_ORDER_CNT,
236 HAL_PARAM_VENC_LOW_LATENCY,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800237 HAL_CONFIG_VENC_BLUR_RESOLUTION,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800238 HAL_PARAM_VENC_H264_TRANSFORM_8x8,
239 HAL_PARAM_VENC_VIDEO_SIGNAL_INFO,
240 HAL_PARAM_VENC_IFRAMESIZE_TYPE,
241};
242
243enum hal_domain {
244 HAL_VIDEO_DOMAIN_VPE,
245 HAL_VIDEO_DOMAIN_ENCODER,
246 HAL_VIDEO_DOMAIN_DECODER,
247 HAL_UNUSED_DOMAIN = 0x10000000,
248};
249
250enum multi_stream {
251 HAL_VIDEO_DECODER_NONE = 0x00000000,
252 HAL_VIDEO_DECODER_PRIMARY = 0x00000001,
253 HAL_VIDEO_DECODER_SECONDARY = 0x00000002,
254 HAL_VIDEO_DECODER_BOTH_OUTPUTS = 0x00000004,
255 HAL_VIDEO_UNUSED_OUTPUTS = 0x10000000,
256};
257
258enum hal_core_capabilities {
259 HAL_VIDEO_ENCODER_ROTATION_CAPABILITY = 0x00000001,
260 HAL_VIDEO_ENCODER_SCALING_CAPABILITY = 0x00000002,
261 HAL_VIDEO_ENCODER_DEINTERLACE_CAPABILITY = 0x00000004,
262 HAL_VIDEO_DECODER_MULTI_STREAM_CAPABILITY = 0x00000008,
263 HAL_VIDEO_UNUSED_CAPABILITY = 0x10000000,
264};
265
266enum hal_default_properties {
267 HAL_VIDEO_DYNAMIC_BUF_MODE = 0x00000001,
268 HAL_VIDEO_CONTINUE_DATA_TRANSFER = 0x00000002,
269};
270
271enum hal_video_codec {
272 HAL_VIDEO_CODEC_UNKNOWN = 0x00000000,
273 HAL_VIDEO_CODEC_MVC = 0x00000001,
274 HAL_VIDEO_CODEC_H264 = 0x00000002,
275 HAL_VIDEO_CODEC_H263 = 0x00000004,
276 HAL_VIDEO_CODEC_MPEG1 = 0x00000008,
277 HAL_VIDEO_CODEC_MPEG2 = 0x00000010,
278 HAL_VIDEO_CODEC_MPEG4 = 0x00000020,
279 HAL_VIDEO_CODEC_DIVX_311 = 0x00000040,
280 HAL_VIDEO_CODEC_DIVX = 0x00000080,
281 HAL_VIDEO_CODEC_VC1 = 0x00000100,
282 HAL_VIDEO_CODEC_SPARK = 0x00000200,
283 HAL_VIDEO_CODEC_VP6 = 0x00000400,
284 HAL_VIDEO_CODEC_VP7 = 0x00000800,
285 HAL_VIDEO_CODEC_VP8 = 0x00001000,
286 HAL_VIDEO_CODEC_HEVC = 0x00002000,
287 HAL_VIDEO_CODEC_VP9 = 0x00004000,
288 HAL_VIDEO_CODEC_HEVC_HYBRID = 0x80000000,
289 HAL_UNUSED_CODEC = 0x10000000,
290};
291
292enum hal_h263_profile {
293 HAL_H263_PROFILE_BASELINE = 0x00000001,
294 HAL_H263_PROFILE_H320CODING = 0x00000002,
295 HAL_H263_PROFILE_BACKWARDCOMPATIBLE = 0x00000004,
296 HAL_H263_PROFILE_ISWV2 = 0x00000008,
297 HAL_H263_PROFILE_ISWV3 = 0x00000010,
298 HAL_H263_PROFILE_HIGHCOMPRESSION = 0x00000020,
299 HAL_H263_PROFILE_INTERNET = 0x00000040,
300 HAL_H263_PROFILE_INTERLACE = 0x00000080,
301 HAL_H263_PROFILE_HIGHLATENCY = 0x00000100,
302 HAL_UNUSED_H263_PROFILE = 0x10000000,
303};
304
305enum hal_h263_level {
306 HAL_H263_LEVEL_10 = 0x00000001,
307 HAL_H263_LEVEL_20 = 0x00000002,
308 HAL_H263_LEVEL_30 = 0x00000004,
309 HAL_H263_LEVEL_40 = 0x00000008,
310 HAL_H263_LEVEL_45 = 0x00000010,
311 HAL_H263_LEVEL_50 = 0x00000020,
312 HAL_H263_LEVEL_60 = 0x00000040,
313 HAL_H263_LEVEL_70 = 0x00000080,
314 HAL_UNUSED_H263_LEVEL = 0x10000000,
315};
316
317enum hal_mpeg2_profile {
318 HAL_MPEG2_PROFILE_SIMPLE = 0x00000001,
319 HAL_MPEG2_PROFILE_MAIN = 0x00000002,
320 HAL_MPEG2_PROFILE_422 = 0x00000004,
321 HAL_MPEG2_PROFILE_SNR = 0x00000008,
322 HAL_MPEG2_PROFILE_SPATIAL = 0x00000010,
323 HAL_MPEG2_PROFILE_HIGH = 0x00000020,
324 HAL_UNUSED_MPEG2_PROFILE = 0x10000000,
325};
326
327enum hal_mpeg2_level {
328 HAL_MPEG2_LEVEL_LL = 0x00000001,
329 HAL_MPEG2_LEVEL_ML = 0x00000002,
330 HAL_MPEG2_LEVEL_H14 = 0x00000004,
331 HAL_MPEG2_LEVEL_HL = 0x00000008,
332 HAL_UNUSED_MEPG2_LEVEL = 0x10000000,
333};
334
335enum hal_mpeg4_profile {
336 HAL_MPEG4_PROFILE_SIMPLE = 0x00000001,
337 HAL_MPEG4_PROFILE_ADVANCEDSIMPLE = 0x00000002,
338 HAL_MPEG4_PROFILE_CORE = 0x00000004,
339 HAL_MPEG4_PROFILE_MAIN = 0x00000008,
340 HAL_MPEG4_PROFILE_NBIT = 0x00000010,
341 HAL_MPEG4_PROFILE_SCALABLETEXTURE = 0x00000020,
342 HAL_MPEG4_PROFILE_SIMPLEFACE = 0x00000040,
343 HAL_MPEG4_PROFILE_SIMPLEFBA = 0x00000080,
344 HAL_MPEG4_PROFILE_BASICANIMATED = 0x00000100,
345 HAL_MPEG4_PROFILE_HYBRID = 0x00000200,
346 HAL_MPEG4_PROFILE_ADVANCEDREALTIME = 0x00000400,
347 HAL_MPEG4_PROFILE_CORESCALABLE = 0x00000800,
348 HAL_MPEG4_PROFILE_ADVANCEDCODING = 0x00001000,
349 HAL_MPEG4_PROFILE_ADVANCEDCORE = 0x00002000,
350 HAL_MPEG4_PROFILE_ADVANCEDSCALABLE = 0x00004000,
351 HAL_MPEG4_PROFILE_SIMPLESCALABLE = 0x00008000,
352 HAL_UNUSED_MPEG4_PROFILE = 0x10000000,
353};
354
355enum hal_mpeg4_level {
356 HAL_MPEG4_LEVEL_0 = 0x00000001,
357 HAL_MPEG4_LEVEL_0b = 0x00000002,
358 HAL_MPEG4_LEVEL_1 = 0x00000004,
359 HAL_MPEG4_LEVEL_2 = 0x00000008,
360 HAL_MPEG4_LEVEL_3 = 0x00000010,
361 HAL_MPEG4_LEVEL_4 = 0x00000020,
362 HAL_MPEG4_LEVEL_4a = 0x00000040,
363 HAL_MPEG4_LEVEL_5 = 0x00000080,
364 HAL_MPEG4_LEVEL_VENDOR_START_UNUSED = 0x7F000000,
365 HAL_MPEG4_LEVEL_6 = 0x7F000001,
366 HAL_MPEG4_LEVEL_7 = 0x7F000002,
367 HAL_MPEG4_LEVEL_8 = 0x7F000003,
368 HAL_MPEG4_LEVEL_9 = 0x7F000004,
369 HAL_MPEG4_LEVEL_3b = 0x7F000005,
370 HAL_UNUSED_MPEG4_LEVEL = 0x10000000,
371};
372
373enum hal_h264_profile {
374 HAL_H264_PROFILE_BASELINE = 0x00000001,
375 HAL_H264_PROFILE_MAIN = 0x00000002,
376 HAL_H264_PROFILE_HIGH = 0x00000004,
377 HAL_H264_PROFILE_EXTENDED = 0x00000008,
378 HAL_H264_PROFILE_HIGH10 = 0x00000010,
379 HAL_H264_PROFILE_HIGH422 = 0x00000020,
380 HAL_H264_PROFILE_HIGH444 = 0x00000040,
381 HAL_H264_PROFILE_CONSTRAINED_BASE = 0x00000080,
382 HAL_H264_PROFILE_CONSTRAINED_HIGH = 0x00000100,
383 HAL_UNUSED_H264_PROFILE = 0x10000000,
384};
385
386enum hal_h264_level {
Vaibhav Deshu Venkatesh234b4dc2017-03-21 16:54:28 -0700387 HAL_H264_LEVEL_UNKNOWN = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800388 HAL_H264_LEVEL_1 = 0x00000001,
389 HAL_H264_LEVEL_1b = 0x00000002,
390 HAL_H264_LEVEL_11 = 0x00000004,
391 HAL_H264_LEVEL_12 = 0x00000008,
392 HAL_H264_LEVEL_13 = 0x00000010,
393 HAL_H264_LEVEL_2 = 0x00000020,
394 HAL_H264_LEVEL_21 = 0x00000040,
395 HAL_H264_LEVEL_22 = 0x00000080,
396 HAL_H264_LEVEL_3 = 0x00000100,
397 HAL_H264_LEVEL_31 = 0x00000200,
398 HAL_H264_LEVEL_32 = 0x00000400,
399 HAL_H264_LEVEL_4 = 0x00000800,
400 HAL_H264_LEVEL_41 = 0x00001000,
401 HAL_H264_LEVEL_42 = 0x00002000,
402 HAL_H264_LEVEL_5 = 0x00004000,
403 HAL_H264_LEVEL_51 = 0x00008000,
404 HAL_H264_LEVEL_52 = 0x00010000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800405};
406
407enum hal_hevc_profile {
408 HAL_HEVC_PROFILE_MAIN = 0x00000001,
409 HAL_HEVC_PROFILE_MAIN10 = 0x00000002,
410 HAL_HEVC_PROFILE_MAIN_STILL_PIC = 0x00000004,
411 HAL_UNUSED_HEVC_PROFILE = 0x10000000,
412};
413
414enum hal_hevc_level {
Vaibhav Deshu Venkatesh234b4dc2017-03-21 16:54:28 -0700415 HAL_HEVC_TIER_LEVEL_UNKNOWN = 0x00000000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800416 HAL_HEVC_MAIN_TIER_LEVEL_1 = 0x10000001,
417 HAL_HEVC_MAIN_TIER_LEVEL_2 = 0x10000002,
418 HAL_HEVC_MAIN_TIER_LEVEL_2_1 = 0x10000004,
419 HAL_HEVC_MAIN_TIER_LEVEL_3 = 0x10000008,
420 HAL_HEVC_MAIN_TIER_LEVEL_3_1 = 0x10000010,
421 HAL_HEVC_MAIN_TIER_LEVEL_4 = 0x10000020,
422 HAL_HEVC_MAIN_TIER_LEVEL_4_1 = 0x10000040,
423 HAL_HEVC_MAIN_TIER_LEVEL_5 = 0x10000080,
424 HAL_HEVC_MAIN_TIER_LEVEL_5_1 = 0x10000100,
425 HAL_HEVC_MAIN_TIER_LEVEL_5_2 = 0x10000200,
426 HAL_HEVC_MAIN_TIER_LEVEL_6 = 0x10000400,
427 HAL_HEVC_MAIN_TIER_LEVEL_6_1 = 0x10000800,
428 HAL_HEVC_MAIN_TIER_LEVEL_6_2 = 0x10001000,
429 HAL_HEVC_HIGH_TIER_LEVEL_1 = 0x20000001,
430 HAL_HEVC_HIGH_TIER_LEVEL_2 = 0x20000002,
431 HAL_HEVC_HIGH_TIER_LEVEL_2_1 = 0x20000004,
432 HAL_HEVC_HIGH_TIER_LEVEL_3 = 0x20000008,
433 HAL_HEVC_HIGH_TIER_LEVEL_3_1 = 0x20000010,
434 HAL_HEVC_HIGH_TIER_LEVEL_4 = 0x20000020,
435 HAL_HEVC_HIGH_TIER_LEVEL_4_1 = 0x20000040,
436 HAL_HEVC_HIGH_TIER_LEVEL_5 = 0x20000080,
437 HAL_HEVC_HIGH_TIER_LEVEL_5_1 = 0x20000100,
438 HAL_HEVC_HIGH_TIER_LEVEL_5_2 = 0x20000200,
439 HAL_HEVC_HIGH_TIER_LEVEL_6 = 0x20000400,
440 HAL_HEVC_HIGH_TIER_LEVEL_6_1 = 0x20000800,
441 HAL_HEVC_HIGH_TIER_LEVEL_6_2 = 0x20001000,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800442};
443
444enum hal_hevc_tier {
445 HAL_HEVC_TIER_MAIN = 0x00000001,
446 HAL_HEVC_TIER_HIGH = 0x00000002,
447 HAL_UNUSED_HEVC_TIER = 0x10000000,
448};
449
450enum hal_vpx_profile {
451 HAL_VPX_PROFILE_SIMPLE = 0x00000001,
452 HAL_VPX_PROFILE_ADVANCED = 0x00000002,
453 HAL_VPX_PROFILE_VERSION_0 = 0x00000004,
454 HAL_VPX_PROFILE_VERSION_1 = 0x00000008,
455 HAL_VPX_PROFILE_VERSION_2 = 0x00000010,
456 HAL_VPX_PROFILE_VERSION_3 = 0x00000020,
457 HAL_VPX_PROFILE_UNUSED = 0x10000000,
458};
459
460enum hal_vc1_profile {
461 HAL_VC1_PROFILE_SIMPLE = 0x00000001,
462 HAL_VC1_PROFILE_MAIN = 0x00000002,
463 HAL_VC1_PROFILE_ADVANCED = 0x00000004,
464 HAL_UNUSED_VC1_PROFILE = 0x10000000,
465};
466
467enum hal_vc1_level {
468 HAL_VC1_LEVEL_LOW = 0x00000001,
469 HAL_VC1_LEVEL_MEDIUM = 0x00000002,
470 HAL_VC1_LEVEL_HIGH = 0x00000004,
471 HAL_VC1_LEVEL_0 = 0x00000008,
472 HAL_VC1_LEVEL_1 = 0x00000010,
473 HAL_VC1_LEVEL_2 = 0x00000020,
474 HAL_VC1_LEVEL_3 = 0x00000040,
475 HAL_VC1_LEVEL_4 = 0x00000080,
476 HAL_UNUSED_VC1_LEVEL = 0x10000000,
477};
478
479enum hal_divx_format {
480 HAL_DIVX_FORMAT_4,
481 HAL_DIVX_FORMAT_5,
482 HAL_DIVX_FORMAT_6,
483 HAL_UNUSED_DIVX_FORMAT = 0x10000000,
484};
485
486enum hal_divx_profile {
487 HAL_DIVX_PROFILE_QMOBILE = 0x00000001,
488 HAL_DIVX_PROFILE_MOBILE = 0x00000002,
489 HAL_DIVX_PROFILE_MT = 0x00000004,
490 HAL_DIVX_PROFILE_HT = 0x00000008,
491 HAL_DIVX_PROFILE_HD = 0x00000010,
492 HAL_UNUSED_DIVX_PROFILE = 0x10000000,
493};
494
495enum hal_mvc_profile {
496 HAL_MVC_PROFILE_STEREO_HIGH = 0x00001000,
497 HAL_UNUSED_MVC_PROFILE = 0x10000000,
498};
499
500enum hal_mvc_level {
501 HAL_MVC_LEVEL_1 = 0x00000001,
502 HAL_MVC_LEVEL_1b = 0x00000002,
503 HAL_MVC_LEVEL_11 = 0x00000004,
504 HAL_MVC_LEVEL_12 = 0x00000008,
505 HAL_MVC_LEVEL_13 = 0x00000010,
506 HAL_MVC_LEVEL_2 = 0x00000020,
507 HAL_MVC_LEVEL_21 = 0x00000040,
508 HAL_MVC_LEVEL_22 = 0x00000080,
509 HAL_MVC_LEVEL_3 = 0x00000100,
510 HAL_MVC_LEVEL_31 = 0x00000200,
511 HAL_MVC_LEVEL_32 = 0x00000400,
512 HAL_MVC_LEVEL_4 = 0x00000800,
513 HAL_MVC_LEVEL_41 = 0x00001000,
514 HAL_MVC_LEVEL_42 = 0x00002000,
515 HAL_MVC_LEVEL_5 = 0x00004000,
516 HAL_MVC_LEVEL_51 = 0x00008000,
517 HAL_UNUSED_MVC_LEVEL = 0x10000000,
518};
519
520struct hal_frame_rate {
521 enum hal_buffer buffer_type;
522 u32 frame_rate;
523};
524
525enum hal_uncompressed_format {
526 HAL_COLOR_FORMAT_MONOCHROME = 0x00000001,
527 HAL_COLOR_FORMAT_NV12 = 0x00000002,
528 HAL_COLOR_FORMAT_NV21 = 0x00000004,
529 HAL_COLOR_FORMAT_NV12_4x4TILE = 0x00000008,
530 HAL_COLOR_FORMAT_NV21_4x4TILE = 0x00000010,
531 HAL_COLOR_FORMAT_YUYV = 0x00000020,
532 HAL_COLOR_FORMAT_YVYU = 0x00000040,
533 HAL_COLOR_FORMAT_UYVY = 0x00000080,
534 HAL_COLOR_FORMAT_VYUY = 0x00000100,
535 HAL_COLOR_FORMAT_RGB565 = 0x00000200,
536 HAL_COLOR_FORMAT_BGR565 = 0x00000400,
537 HAL_COLOR_FORMAT_RGB888 = 0x00000800,
538 HAL_COLOR_FORMAT_BGR888 = 0x00001000,
539 HAL_COLOR_FORMAT_NV12_UBWC = 0x00002000,
540 HAL_COLOR_FORMAT_NV12_TP10_UBWC = 0x00004000,
541 HAL_COLOR_FORMAT_RGBA8888 = 0x00008000,
542 HAL_COLOR_FORMAT_RGBA8888_UBWC = 0x00010000,
543 HAL_UNUSED_COLOR = 0x10000000,
544};
545
546enum hal_statistics_mode_type {
547 HAL_STATISTICS_MODE_DEFAULT = 0x00000001,
548 HAL_STATISTICS_MODE_1 = 0x00000002,
549 HAL_STATISTICS_MODE_2 = 0x00000004,
550 HAL_STATISTICS_MODE_3 = 0x00000008,
551};
552
553enum hal_ssr_trigger_type {
554 SSR_ERR_FATAL = 1,
555 SSR_SW_DIV_BY_ZERO,
556 SSR_HW_WDOG_IRQ,
557};
558
559struct hal_uncompressed_format_select {
560 enum hal_buffer buffer_type;
561 enum hal_uncompressed_format format;
562};
563
564struct hal_uncompressed_plane_actual {
565 int actual_stride;
566 u32 actual_plane_buffer_height;
567};
568
569struct hal_uncompressed_plane_actual_info {
570 enum hal_buffer buffer_type;
571 u32 num_planes;
572 struct hal_uncompressed_plane_actual rg_plane_format[1];
573};
574
575struct hal_uncompressed_plane_constraints {
576 u32 stride_multiples;
577 u32 max_stride;
578 u32 min_plane_buffer_height_multiple;
579 u32 buffer_alignment;
580};
581
582struct hal_uncompressed_plane_actual_constraints_info {
583 enum hal_buffer buffer_type;
584 u32 num_planes;
585 struct hal_uncompressed_plane_constraints rg_plane_format[1];
586};
587
588struct hal_extra_data_header_config {
589 u32 type;
590 enum hal_buffer buffer_type;
591 u32 version;
592 u32 port_index;
593 u32 client_extradata_id;
594};
595
596struct hal_frame_size {
597 enum hal_buffer buffer_type;
598 u32 width;
599 u32 height;
600};
601
602struct hal_enable {
603 bool enable;
604};
605
606struct hal_buffer_count_actual {
607 enum hal_buffer buffer_type;
608 u32 buffer_count_actual;
Praneeth Paladugudefea4e2017-02-09 23:44:08 -0800609 u32 buffer_count_min_host;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800610};
611
612struct hal_buffer_size_minimum {
613 enum hal_buffer buffer_type;
614 u32 buffer_size;
615};
616
617struct hal_buffer_display_hold_count_actual {
618 enum hal_buffer buffer_type;
619 u32 hold_count;
620};
621
622enum hal_nal_stream_format {
623 HAL_NAL_FORMAT_STARTCODES = 0x00000001,
624 HAL_NAL_FORMAT_ONE_NAL_PER_BUFFER = 0x00000002,
625 HAL_NAL_FORMAT_ONE_BYTE_LENGTH = 0x00000004,
626 HAL_NAL_FORMAT_TWO_BYTE_LENGTH = 0x00000008,
627 HAL_NAL_FORMAT_FOUR_BYTE_LENGTH = 0x00000010,
628};
629
630enum hal_output_order {
631 HAL_OUTPUT_ORDER_DISPLAY,
632 HAL_OUTPUT_ORDER_DECODE,
633 HAL_UNUSED_OUTPUT = 0x10000000,
634};
635
636enum hal_picture {
637 HAL_PICTURE_I = 0x01,
638 HAL_PICTURE_P = 0x02,
639 HAL_PICTURE_B = 0x04,
640 HAL_PICTURE_IDR = 0x08,
641 HAL_PICTURE_CRA = 0x10,
642 HAL_FRAME_NOTCODED = 0x7F002000,
643 HAL_FRAME_YUV = 0x7F004000,
644 HAL_UNUSED_PICT = 0x10000000,
645};
646
647struct hal_extradata_enable {
648 u32 enable;
649 enum hal_extradata_id index;
650};
651
652struct hal_enable_picture {
653 u32 picture_type;
654};
655
656struct hal_multi_stream {
657 enum hal_buffer buffer_type;
658 u32 enable;
659 u32 width;
660 u32 height;
661};
662
663struct hal_display_picture_buffer_count {
664 u32 enable;
665 u32 count;
666};
667
668struct hal_mb_error_map {
669 u32 error_map_size;
670 u8 rg_error_map[1];
671};
672
673struct hal_request_iframe {
674 u32 enable;
675};
676
677struct hal_bitrate {
678 u32 bit_rate;
679 u32 layer_id;
680};
681
682struct hal_profile_level {
683 u32 profile;
684 u32 level;
685};
686
687struct hal_profile_level_supported {
688 u32 profile_count;
689 struct hal_profile_level profile_level[MAX_PROFILE_COUNT];
690};
691
692enum hal_h264_entropy {
693 HAL_H264_ENTROPY_CAVLC = 1,
694 HAL_H264_ENTROPY_CABAC = 2,
695 HAL_UNUSED_ENTROPY = 0x10000000,
696};
697
698enum hal_h264_cabac_model {
699 HAL_H264_CABAC_MODEL_0 = 1,
700 HAL_H264_CABAC_MODEL_1 = 2,
701 HAL_H264_CABAC_MODEL_2 = 4,
702 HAL_UNUSED_CABAC = 0x10000000,
703};
704
705struct hal_h264_entropy_control {
706 enum hal_h264_entropy entropy_mode;
707 enum hal_h264_cabac_model cabac_model;
708};
709
710enum hal_rate_control {
711 HAL_RATE_CONTROL_OFF,
712 HAL_RATE_CONTROL_VBR_VFR,
713 HAL_RATE_CONTROL_VBR_CFR,
714 HAL_RATE_CONTROL_CBR_VFR,
715 HAL_RATE_CONTROL_CBR_CFR,
716 HAL_RATE_CONTROL_MBR_CFR,
717 HAL_RATE_CONTROL_MBR_VFR,
718 HAL_UNUSED_RC = 0x10000000,
719};
720
721struct hal_mpeg4_time_resolution {
722 u32 time_increment_resolution;
723};
724
725struct hal_mpeg4_header_extension {
726 u32 header_extension;
727};
728
729enum hal_h264_db_mode {
730 HAL_H264_DB_MODE_DISABLE,
731 HAL_H264_DB_MODE_SKIP_SLICE_BOUNDARY,
732 HAL_H264_DB_MODE_ALL_BOUNDARY,
733 HAL_UNUSED_H264_DB = 0x10000000,
734};
735
736struct hal_h264_db_control {
737 enum hal_h264_db_mode mode;
738 int slice_alpha_offset;
739 int slice_beta_offset;
740};
741
742struct hal_temporal_spatial_tradeoff {
743 u32 ts_factor;
744};
745
746struct hal_quantization {
747 u32 qpi;
748 u32 qpp;
749 u32 qpb;
750 u32 layer_id;
751};
752
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800753struct hal_quantization_range {
Praneeth Paladugu7fbd2792017-01-27 13:39:03 -0800754 u32 qpi_min;
755 u32 qpp_min;
756 u32 qpb_min;
757 u32 qpi_max;
758 u32 qpp_max;
759 u32 qpb_max;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800760 u32 layer_id;
761};
762
763struct hal_intra_period {
764 u32 pframes;
765 u32 bframes;
766};
767
768struct hal_idr_period {
769 u32 idr_period;
770};
771
772enum hal_rotate {
773 HAL_ROTATE_NONE,
774 HAL_ROTATE_90,
775 HAL_ROTATE_180,
776 HAL_ROTATE_270,
777 HAL_UNUSED_ROTATE = 0x10000000,
778};
779
780enum hal_flip {
781 HAL_FLIP_NONE,
782 HAL_FLIP_HORIZONTAL,
783 HAL_FLIP_VERTICAL,
784 HAL_UNUSED_FLIP = 0x10000000,
785};
786
787struct hal_operations {
788 enum hal_rotate rotate;
789 enum hal_flip flip;
790};
791
792enum hal_intra_refresh_mode {
793 HAL_INTRA_REFRESH_NONE,
794 HAL_INTRA_REFRESH_CYCLIC,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800795 HAL_INTRA_REFRESH_RANDOM,
796 HAL_UNUSED_INTRA = 0x10000000,
797};
798
799struct hal_intra_refresh {
800 enum hal_intra_refresh_mode mode;
Saurabh Kothawadeabed16c2017-03-22 17:06:40 -0700801 u32 ir_mbs;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800802};
803
804enum hal_multi_slice {
805 HAL_MULTI_SLICE_OFF,
806 HAL_MULTI_SLICE_BY_MB_COUNT,
807 HAL_MULTI_SLICE_BY_BYTE_COUNT,
808 HAL_MULTI_SLICE_GOB,
809 HAL_UNUSED_SLICE = 0x10000000,
810};
811
812struct hal_multi_slice_control {
813 enum hal_multi_slice multi_slice;
814 u32 slice_size;
815};
816
817struct hal_debug_config {
818 u32 debug_config;
819};
820
821struct hal_buffer_requirements {
822 enum hal_buffer buffer_type;
823 u32 buffer_size;
824 u32 buffer_region_size;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800825 u32 buffer_count_min;
Praneeth Paladugudefea4e2017-02-09 23:44:08 -0800826 u32 buffer_count_min_host;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800827 u32 buffer_count_actual;
828 u32 contiguous;
829 u32 buffer_alignment;
830};
831
832enum hal_priority {/* Priority increases with number */
833 HAL_PRIORITY_LOW = 10,
834 HAL_PRIOIRTY_MEDIUM = 20,
835 HAL_PRIORITY_HIGH = 30,
836 HAL_UNUSED_PRIORITY = 0x10000000,
837};
838
839struct hal_batch_info {
840 u32 input_batch_count;
841 u32 output_batch_count;
842};
843
844struct hal_metadata_pass_through {
845 u32 enable;
846 u32 size;
847};
848
849struct hal_uncompressed_format_supported {
850 enum hal_buffer buffer_type;
851 u32 format_entries;
852 u32 rg_format_info[1];
853};
854
855enum hal_interlace_format {
856 HAL_INTERLACE_FRAME_PROGRESSIVE = 0x01,
857 HAL_INTERLACE_INTERLEAVE_FRAME_TOPFIELDFIRST = 0x02,
858 HAL_INTERLACE_INTERLEAVE_FRAME_BOTTOMFIELDFIRST = 0x04,
859 HAL_INTERLACE_FRAME_TOPFIELDFIRST = 0x08,
860 HAL_INTERLACE_FRAME_BOTTOMFIELDFIRST = 0x10,
861 HAL_UNUSED_INTERLACE = 0x10000000,
862};
863
864struct hal_interlace_format_supported {
865 enum hal_buffer buffer_type;
866 enum hal_interlace_format format;
867};
868
869enum hal_chroma_site {
870 HAL_CHROMA_SITE_0,
871 HAL_CHROMA_SITE_1,
872 HAL_UNUSED_CHROMA = 0x10000000,
873};
874
875struct hal_properties_supported {
876 u32 num_properties;
877 u32 rg_properties[1];
878};
879
880enum hal_capability {
881 HAL_CAPABILITY_FRAME_WIDTH = 0x1,
882 HAL_CAPABILITY_FRAME_HEIGHT,
883 HAL_CAPABILITY_MBS_PER_FRAME,
884 HAL_CAPABILITY_MBS_PER_SECOND,
885 HAL_CAPABILITY_FRAMERATE,
886 HAL_CAPABILITY_SCALE_X,
887 HAL_CAPABILITY_SCALE_Y,
888 HAL_CAPABILITY_BITRATE,
889 HAL_CAPABILITY_BFRAME,
890 HAL_CAPABILITY_PEAKBITRATE,
891 HAL_CAPABILITY_HIER_P_NUM_ENH_LAYERS,
892 HAL_CAPABILITY_ENC_LTR_COUNT,
893 HAL_CAPABILITY_SECURE_OUTPUT2_THRESHOLD,
894 HAL_CAPABILITY_HIER_B_NUM_ENH_LAYERS,
895 HAL_CAPABILITY_LCU_SIZE,
896 HAL_CAPABILITY_HIER_P_HYBRID_NUM_ENH_LAYERS,
897 HAL_CAPABILITY_MBS_PER_SECOND_POWER_SAVE,
Praneeth Paladugu520c7592017-01-26 13:53:14 -0800898 HAL_CAPABILITY_EXTRADATA,
899 HAL_CAPABILITY_PROFILE,
900 HAL_CAPABILITY_LEVEL,
901 HAL_CAPABILITY_I_FRAME_QP,
902 HAL_CAPABILITY_P_FRAME_QP,
903 HAL_CAPABILITY_B_FRAME_QP,
904 HAL_CAPABILITY_RATE_CONTROL_MODES,
905 HAL_CAPABILITY_BLUR_WIDTH,
906 HAL_CAPABILITY_BLUR_HEIGHT,
907 HAL_CAPABILITY_SLICE_DELIVERY_MODES,
908 HAL_CAPABILITY_SLICE_BYTE,
909 HAL_CAPABILITY_SLICE_MB,
910 HAL_CAPABILITY_SECURE,
911 HAL_CAPABILITY_MAX_NUM_B_FRAMES,
912 HAL_CAPABILITY_MAX_VIDEOCORES,
913 HAL_CAPABILITY_MAX_WORKMODES,
914 HAL_CAPABILITY_UBWC_CR_STATS,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800915 HAL_UNUSED_CAPABILITY = 0x10000000,
916};
917
918struct hal_capability_supported {
919 enum hal_capability capability_type;
920 u32 min;
921 u32 max;
922 u32 step_size;
923};
924
925struct hal_capability_supported_info {
926 u32 num_capabilities;
927 struct hal_capability_supported rg_data[1];
928};
929
930struct hal_nal_stream_format_supported {
931 u32 nal_stream_format_supported;
932};
933
934struct hal_nal_stream_format_select {
935 u32 nal_stream_format_select;
936};
937
938struct hal_multi_view_format {
939 u32 views;
940 u32 rg_view_order[1];
941};
942
943enum hal_buffer_layout_type {
944 HAL_BUFFER_LAYOUT_TOP_BOTTOM,
945 HAL_BUFFER_LAYOUT_SEQ,
946 HAL_UNUSED_BUFFER_LAYOUT = 0x10000000,
947};
948
949struct hal_mvc_buffer_layout {
950 enum hal_buffer_layout_type layout_type;
951 u32 bright_view_first;
952 u32 ngap;
953};
954
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -0800955struct hal_aspect_ratio {
956 u32 aspect_width;
957 u32 aspect_height;
958};
959
960struct hal_codec_supported {
961 u32 decoder_codec_supported;
962 u32 encoder_codec_supported;
963};
964
965struct hal_multi_view_select {
966 u32 view_index;
967};
968
969struct hal_timestamp_scale {
970 u32 time_stamp_scale;
971};
972
973
974struct hal_h264_vui_timing_info {
975 u32 enable;
976 u32 fixed_frame_rate;
977 u32 time_scale;
978};
979
980struct hal_h264_vui_bitstream_restrc {
981 u32 enable;
982};
983
984struct hal_preserve_text_quality {
985 u32 enable;
986};
987
988struct hal_vc1e_perf_cfg_type {
989 struct {
990 u32 x_subsampled;
991 u32 y_subsampled;
992 } i_frame, p_frame, b_frame;
993};
994
995struct hal_vpe_color_space_conversion {
996 u32 csc_matrix[HAL_MAX_MATRIX_COEFFS];
997 u32 csc_bias[HAL_MAX_BIAS_COEFFS];
998 u32 csc_limit[HAL_MAX_LIMIT_COEFFS];
999};
1000
1001struct hal_video_signal_info {
1002 u32 color_space;
1003 u32 transfer_chars;
1004 u32 matrix_coeffs;
1005 bool full_range;
1006};
1007
1008enum hal_iframesize_type {
1009 HAL_IFRAMESIZE_TYPE_DEFAULT,
1010 HAL_IFRAMESIZE_TYPE_MEDIUM,
1011 HAL_IFRAMESIZE_TYPE_HUGE,
1012 HAL_IFRAMESIZE_TYPE_UNLIMITED,
1013};
1014
1015enum vidc_resource_id {
1016 VIDC_RESOURCE_NONE,
1017 VIDC_RESOURCE_OCMEM,
1018 VIDC_RESOURCE_VMEM,
1019 VIDC_UNUSED_RESOURCE = 0x10000000,
1020};
1021
1022struct vidc_resource_hdr {
1023 enum vidc_resource_id resource_id;
1024 void *resource_handle;
1025 u32 size;
1026};
1027
1028struct vidc_buffer_addr_info {
1029 enum hal_buffer buffer_type;
1030 u32 buffer_size;
1031 u32 num_buffers;
1032 ion_phys_addr_t align_device_addr;
1033 ion_phys_addr_t extradata_addr;
1034 u32 extradata_size;
1035 u32 response_required;
1036};
1037
1038/* Needs to be exactly the same as hfi_buffer_info */
1039struct hal_buffer_info {
1040 u32 buffer_addr;
1041 u32 extra_data_addr;
1042};
1043
1044struct vidc_frame_plane_config {
1045 u32 left;
1046 u32 top;
1047 u32 width;
1048 u32 height;
1049 u32 stride;
1050 u32 scan_lines;
1051};
1052
1053struct vidc_uncompressed_frame_config {
1054 struct vidc_frame_plane_config luma_plane;
1055 struct vidc_frame_plane_config chroma_plane;
1056};
1057
1058struct vidc_frame_data {
1059 enum hal_buffer buffer_type;
1060 ion_phys_addr_t device_addr;
1061 ion_phys_addr_t extradata_addr;
1062 int64_t timestamp;
1063 u32 flags;
1064 u32 offset;
1065 u32 alloc_len;
1066 u32 filled_len;
1067 u32 mark_target;
1068 u32 mark_data;
1069 u32 clnt_data;
1070 u32 extradata_size;
1071};
1072
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001073struct hal_fw_info {
1074 char version[VENUS_VERSION_LENGTH];
1075 phys_addr_t base_addr;
1076 int register_base;
1077 int register_size;
1078 int irq;
1079};
1080
1081enum hal_flush {
1082 HAL_FLUSH_INPUT,
1083 HAL_FLUSH_OUTPUT,
1084 HAL_FLUSH_ALL,
1085 HAL_UNUSED_FLUSH = 0x10000000,
1086};
1087
1088enum hal_event_type {
1089 HAL_EVENT_SEQ_CHANGED_SUFFICIENT_RESOURCES,
1090 HAL_EVENT_SEQ_CHANGED_INSUFFICIENT_RESOURCES,
1091 HAL_EVENT_RELEASE_BUFFER_REFERENCE,
1092 HAL_UNUSED_SEQCHG = 0x10000000,
1093};
1094
1095enum buffer_mode_type {
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001096 HAL_BUFFER_MODE_DYNAMIC = 0x100,
Chinmay Sawarkar2de3f772017-02-07 12:03:44 -08001097 HAL_BUFFER_MODE_STATIC = 0x001,
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001098};
1099
1100struct hal_buffer_alloc_mode {
1101 enum hal_buffer buffer_type;
1102 enum buffer_mode_type buffer_mode;
1103};
1104
1105enum ltr_mode {
1106 HAL_LTR_MODE_DISABLE,
1107 HAL_LTR_MODE_MANUAL,
1108 HAL_LTR_MODE_PERIODIC,
1109};
1110
1111struct hal_ltr_mode {
1112 enum ltr_mode mode;
1113 u32 count;
1114 u32 trust_mode;
1115};
1116
1117struct hal_ltr_use {
1118 u32 ref_ltr;
1119 u32 use_constraint;
1120 u32 frames;
1121};
1122
1123struct hal_ltr_mark {
1124 u32 mark_frame;
1125};
1126
1127enum hal_perf_mode {
1128 HAL_PERF_MODE_POWER_SAVE,
1129 HAL_PERF_MODE_POWER_MAX_QUALITY,
1130};
1131
1132struct hal_hybrid_hierp {
1133 u32 layers;
1134};
1135
1136struct hal_scs_threshold {
1137 u32 threshold_value;
1138};
1139
1140struct buffer_requirements {
1141 struct hal_buffer_requirements buffer[HAL_BUFFER_MAX];
1142};
1143
1144union hal_get_property {
1145 struct hal_frame_rate frame_rate;
1146 struct hal_uncompressed_format_select format_select;
1147 struct hal_uncompressed_plane_actual plane_actual;
1148 struct hal_uncompressed_plane_actual_info plane_actual_info;
1149 struct hal_uncompressed_plane_constraints plane_constraints;
1150 struct hal_uncompressed_plane_actual_constraints_info
1151 plane_constraints_info;
1152 struct hal_extra_data_header_config extra_data_header_config;
1153 struct hal_frame_size frame_size;
1154 struct hal_enable enable;
1155 struct hal_buffer_count_actual buffer_count_actual;
1156 struct hal_extradata_enable extradata_enable;
1157 struct hal_enable_picture enable_picture;
1158 struct hal_multi_stream multi_stream;
1159 struct hal_display_picture_buffer_count display_picture_buffer_count;
1160 struct hal_mb_error_map mb_error_map;
1161 struct hal_request_iframe request_iframe;
1162 struct hal_bitrate bitrate;
1163 struct hal_profile_level profile_level;
1164 struct hal_profile_level_supported profile_level_supported;
1165 struct hal_mpeg4_time_resolution mpeg4_time_resolution;
1166 struct hal_mpeg4_header_extension mpeg4_header_extension;
1167 struct hal_h264_db_control h264_db_control;
1168 struct hal_temporal_spatial_tradeoff temporal_spatial_tradeoff;
1169 struct hal_quantization quantization;
1170 struct hal_quantization_range quantization_range;
1171 struct hal_intra_period intra_period;
1172 struct hal_idr_period idr_period;
1173 struct hal_operations operations;
1174 struct hal_intra_refresh intra_refresh;
1175 struct hal_multi_slice_control multi_slice_control;
1176 struct hal_debug_config debug_config;
1177 struct hal_batch_info batch_info;
1178 struct hal_metadata_pass_through metadata_pass_through;
1179 struct hal_uncompressed_format_supported uncompressed_format_supported;
1180 struct hal_interlace_format_supported interlace_format_supported;
1181 struct hal_properties_supported properties_supported;
1182 struct hal_capability_supported capability_supported;
1183 struct hal_capability_supported_info capability_supported_info;
1184 struct hal_nal_stream_format_supported nal_stream_format_supported;
1185 struct hal_nal_stream_format_select nal_stream_format_select;
1186 struct hal_multi_view_format multi_view_format;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001187 struct hal_codec_supported codec_supported;
1188 struct hal_multi_view_select multi_view_select;
1189 struct hal_timestamp_scale timestamp_scale;
1190 struct hal_h264_vui_timing_info h264_vui_timing_info;
1191 struct hal_h264_vui_bitstream_restrc h264_vui_bitstream_restrc;
1192 struct hal_preserve_text_quality preserve_text_quality;
1193 struct hal_buffer_info buffer_info;
1194 struct hal_buffer_alloc_mode buffer_alloc_mode;
1195 struct buffer_requirements buf_req;
1196 enum hal_h264_entropy h264_entropy;
1197};
1198
1199/* HAL Response */
1200#define IS_HAL_SYS_CMD(cmd) ((cmd) >= HAL_SYS_INIT_DONE && \
1201 (cmd) <= HAL_SYS_ERROR)
1202#define IS_HAL_SESSION_CMD(cmd) ((cmd) >= HAL_SESSION_EVENT_CHANGE && \
1203 (cmd) <= HAL_SESSION_ERROR)
1204enum hal_command_response {
1205 /* SYSTEM COMMANDS_DONE*/
1206 HAL_SYS_INIT_DONE,
1207 HAL_SYS_SET_RESOURCE_DONE,
1208 HAL_SYS_RELEASE_RESOURCE_DONE,
1209 HAL_SYS_PING_ACK_DONE,
1210 HAL_SYS_PC_PREP_DONE,
1211 HAL_SYS_IDLE,
1212 HAL_SYS_DEBUG,
1213 HAL_SYS_WATCHDOG_TIMEOUT,
1214 HAL_SYS_ERROR,
1215 /* SESSION COMMANDS_DONE */
1216 HAL_SESSION_EVENT_CHANGE,
1217 HAL_SESSION_LOAD_RESOURCE_DONE,
1218 HAL_SESSION_INIT_DONE,
1219 HAL_SESSION_END_DONE,
1220 HAL_SESSION_ABORT_DONE,
1221 HAL_SESSION_START_DONE,
1222 HAL_SESSION_STOP_DONE,
1223 HAL_SESSION_ETB_DONE,
1224 HAL_SESSION_FTB_DONE,
1225 HAL_SESSION_FLUSH_DONE,
1226 HAL_SESSION_SUSPEND_DONE,
1227 HAL_SESSION_RESUME_DONE,
1228 HAL_SESSION_SET_PROP_DONE,
1229 HAL_SESSION_GET_PROP_DONE,
1230 HAL_SESSION_PARSE_SEQ_HDR_DONE,
1231 HAL_SESSION_GET_SEQ_HDR_DONE,
1232 HAL_SESSION_RELEASE_BUFFER_DONE,
1233 HAL_SESSION_RELEASE_RESOURCE_DONE,
1234 HAL_SESSION_PROPERTY_INFO,
1235 HAL_SESSION_ERROR,
1236 HAL_RESPONSE_UNUSED = 0x10000000,
1237};
1238
1239struct vidc_hal_ebd {
1240 u32 timestamp_hi;
1241 u32 timestamp_lo;
1242 u32 flags;
1243 enum vidc_status status;
1244 u32 mark_target;
1245 u32 mark_data;
1246 u32 stats;
1247 u32 offset;
1248 u32 alloc_len;
1249 u32 filled_len;
1250 enum hal_picture picture_type;
1251 ion_phys_addr_t packet_buffer;
1252 ion_phys_addr_t extra_data_buffer;
1253};
1254
1255struct vidc_hal_fbd {
1256 u32 stream_id;
1257 u32 view_id;
1258 u32 timestamp_hi;
1259 u32 timestamp_lo;
1260 u32 flags1;
1261 u32 mark_target;
1262 u32 mark_data;
1263 u32 stats;
1264 u32 alloc_len1;
1265 u32 filled_len1;
1266 u32 offset1;
1267 u32 frame_width;
1268 u32 frame_height;
1269 u32 start_x_coord;
1270 u32 start_y_coord;
1271 u32 input_tag;
1272 u32 input_tag1;
1273 enum hal_picture picture_type;
1274 ion_phys_addr_t packet_buffer1;
1275 ion_phys_addr_t extra_data_buffer;
1276 u32 flags2;
1277 u32 alloc_len2;
1278 u32 filled_len2;
1279 u32 offset2;
1280 ion_phys_addr_t packet_buffer2;
1281 u32 flags3;
1282 u32 alloc_len3;
1283 u32 filled_len3;
1284 u32 offset3;
1285 ion_phys_addr_t packet_buffer3;
1286 enum hal_buffer buffer_type;
1287};
1288
1289struct msm_vidc_capability {
1290 enum hal_domain domain;
1291 enum hal_video_codec codec;
1292 struct hal_capability_supported width;
1293 struct hal_capability_supported height;
1294 struct hal_capability_supported mbs_per_frame;
1295 struct hal_capability_supported mbs_per_sec;
1296 struct hal_capability_supported frame_rate;
1297 struct hal_capability_supported scale_x;
1298 struct hal_capability_supported scale_y;
1299 struct hal_capability_supported bitrate;
1300 struct hal_capability_supported bframe;
1301 struct hal_capability_supported peakbitrate;
1302 struct hal_capability_supported hier_p;
1303 struct hal_capability_supported ltr_count;
1304 struct hal_capability_supported secure_output2_threshold;
1305 struct hal_capability_supported hier_b;
1306 struct hal_capability_supported lcu_size;
1307 struct hal_capability_supported hier_p_hybrid;
1308 struct hal_capability_supported mbs_per_sec_power_save;
Praneeth Paladugu520c7592017-01-26 13:53:14 -08001309 struct hal_capability_supported extradata;
1310 struct hal_capability_supported profile;
1311 struct hal_capability_supported level;
1312 struct hal_capability_supported i_qp;
1313 struct hal_capability_supported p_qp;
1314 struct hal_capability_supported b_qp;
1315 struct hal_capability_supported rc_modes;
1316 struct hal_capability_supported blur_width;
1317 struct hal_capability_supported blur_height;
1318 struct hal_capability_supported slice_delivery_mode;
1319 struct hal_capability_supported slice_bytes;
1320 struct hal_capability_supported slice_mbs;
1321 struct hal_capability_supported secure;
1322 struct hal_capability_supported max_num_b_frames;
1323 struct hal_capability_supported max_video_cores;
1324 struct hal_capability_supported max_work_modes;
1325 struct hal_capability_supported ubwc_cr_stats;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001326 struct hal_profile_level_supported profile_level;
1327 struct hal_uncompressed_format_supported uncomp_format;
1328 struct hal_interlace_format_supported HAL_format;
1329 struct hal_nal_stream_format_supported nal_stream_format;
1330 struct hal_intra_refresh intra_refresh;
1331 enum buffer_mode_type alloc_mode_out;
1332 enum buffer_mode_type alloc_mode_in;
1333 u32 pixelprocess_capabilities;
1334};
1335
1336struct vidc_hal_sys_init_done {
1337 u32 dec_codec_supported;
1338 u32 enc_codec_supported;
1339 u32 codec_count;
1340 struct msm_vidc_capability *capabilities;
1341 u32 max_sessions_supported;
1342};
1343
1344struct vidc_hal_session_init_done {
1345 struct msm_vidc_capability capability;
1346};
1347
1348struct msm_vidc_cb_cmd_done {
1349 u32 device_id;
1350 void *session_id;
1351 enum vidc_status status;
1352 u32 size;
1353 union {
1354 struct vidc_resource_hdr resource_hdr;
1355 struct vidc_buffer_addr_info buffer_addr_info;
1356 struct vidc_frame_plane_config frame_plane_config;
1357 struct vidc_uncompressed_frame_config uncompressed_frame_config;
1358 struct vidc_frame_data frame_data;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001359 struct vidc_hal_ebd ebd;
1360 struct vidc_hal_fbd fbd;
1361 struct vidc_hal_sys_init_done sys_init_done;
1362 struct vidc_hal_session_init_done session_init_done;
1363 struct hal_buffer_info buffer_info;
1364 union hal_get_property property;
1365 enum hal_flush flush_type;
1366 } data;
1367};
1368
1369struct msm_vidc_cb_event {
1370 u32 device_id;
1371 void *session_id;
1372 enum vidc_status status;
1373 u32 height;
1374 u32 width;
1375 enum msm_vidc_pixel_depth bit_depth;
1376 u32 hal_event_type;
1377 ion_phys_addr_t packet_buffer;
1378 ion_phys_addr_t extra_data_buffer;
1379 u32 pic_struct;
1380 u32 colour_space;
Chinmay Sawarkarb3c6ccb2017-02-23 18:01:32 -08001381 u32 profile;
1382 u32 level;
1383 u32 entropy_mode;
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001384};
1385
1386struct msm_vidc_cb_data_done {
1387 u32 device_id;
1388 void *session_id;
1389 enum vidc_status status;
1390 u32 size;
1391 u32 clnt_data;
1392 union {
1393 struct vidc_hal_ebd input_done;
1394 struct vidc_hal_fbd output_done;
1395 };
1396};
1397
1398struct msm_vidc_cb_info {
1399 enum hal_command_response response_type;
1400 union {
1401 struct msm_vidc_cb_cmd_done cmd;
1402 struct msm_vidc_cb_event event;
1403 struct msm_vidc_cb_data_done data;
1404 } response;
1405};
1406
1407enum msm_vidc_hfi_type {
1408 VIDC_HFI_VENUS,
1409};
1410
1411enum msm_vidc_thermal_level {
1412 VIDC_THERMAL_NORMAL = 0,
1413 VIDC_THERMAL_LOW,
1414 VIDC_THERMAL_HIGH,
1415 VIDC_THERMAL_CRITICAL
1416};
1417
1418enum vidc_vote_data_session {
1419 VIDC_BUS_VOTE_DATA_SESSION_INVALID = 0,
1420 /*
1421 * No declarations exist. Values generated by VIDC_VOTE_DATA_SESSION_VAL
1422 * describe the enumerations e.g.:
1423 *
1424 * enum vidc_bus_vote_data_session_type h264_decoder_session =
1425 * VIDC_VOTE_DATA_SESSION_VAL(HAL_VIDEO_CODEC_H264,
1426 * HAL_VIDEO_DOMAIN_DECODER);
1427 */
1428};
1429
1430/*
1431 * Careful modifying VIDC_VOTE_DATA_SESSION_VAL().
1432 *
1433 * This macro assigns two bits to each codec: the lower bit denoting the codec
1434 * type, and the higher bit denoting session type.
1435 */
1436static inline enum vidc_vote_data_session VIDC_VOTE_DATA_SESSION_VAL(
1437 enum hal_video_codec c, enum hal_domain d) {
1438 if (d != HAL_VIDEO_DOMAIN_ENCODER && d != HAL_VIDEO_DOMAIN_DECODER)
1439 return VIDC_BUS_VOTE_DATA_SESSION_INVALID;
1440
1441 return (1 << ilog2(c) * 2) | ((d - 1) << (ilog2(c) * 2 + 1));
1442}
1443
1444struct msm_vidc_gov_data {
1445 struct vidc_bus_vote_data *data;
1446 u32 data_count;
1447 int imem_size;
1448};
1449
1450enum msm_vidc_power_mode {
1451 VIDC_POWER_NORMAL = 0,
1452 VIDC_POWER_LOW,
1453 VIDC_POWER_TURBO
1454};
1455
1456struct vidc_bus_vote_data {
1457 enum hal_domain domain;
1458 enum hal_video_codec codec;
1459 enum hal_uncompressed_format color_formats[2];
1460 int num_formats; /* 1 = DPB-OPB unified; 2 = split */
1461 int height, width, fps;
1462 enum msm_vidc_power_mode power_mode;
1463 struct imem_ab_table *imem_ab_tbl;
1464 u32 imem_ab_tbl_size;
1465 unsigned long core_freq;
1466};
1467
1468struct vidc_clk_scale_data {
1469 enum vidc_vote_data_session session[VIDC_MAX_SESSIONS];
1470 enum msm_vidc_power_mode power_mode[VIDC_MAX_SESSIONS];
1471 u32 load[VIDC_MAX_SESSIONS];
1472 int num_sessions;
1473};
1474
1475struct hal_index_extradata_input_crop_payload {
1476 u32 size;
1477 u32 version;
1478 u32 port_index;
1479 u32 left;
1480 u32 top;
1481 u32 width;
1482 u32 height;
1483};
1484
1485struct hal_cmd_sys_get_property_packet {
1486 u32 size;
1487 u32 packet_type;
1488 u32 num_properties;
1489 u32 rg_property_data[1];
1490};
1491
1492#define call_hfi_op(q, op, args...) \
1493 (((q) && (q)->op) ? ((q)->op(args)) : 0)
1494
1495struct hfi_device {
1496 void *hfi_device_data;
1497
1498 /*Add function pointers for all the hfi functions below*/
1499 int (*core_init)(void *device);
1500 int (*core_release)(void *device);
1501 int (*core_ping)(void *device);
1502 int (*core_trigger_ssr)(void *device, enum hal_ssr_trigger_type);
1503 int (*session_init)(void *device, void *session_id,
1504 enum hal_domain session_type, enum hal_video_codec codec_type,
1505 void **new_session);
1506 int (*session_end)(void *session);
1507 int (*session_abort)(void *session);
1508 int (*session_set_buffers)(void *sess,
1509 struct vidc_buffer_addr_info *buffer_info);
1510 int (*session_release_buffers)(void *sess,
1511 struct vidc_buffer_addr_info *buffer_info);
1512 int (*session_load_res)(void *sess);
1513 int (*session_release_res)(void *sess);
1514 int (*session_start)(void *sess);
1515 int (*session_continue)(void *sess);
1516 int (*session_stop)(void *sess);
1517 int (*session_etb)(void *sess, struct vidc_frame_data *input_frame);
1518 int (*session_ftb)(void *sess, struct vidc_frame_data *output_frame);
1519 int (*session_process_batch)(void *sess,
1520 int num_etbs, struct vidc_frame_data etbs[],
1521 int num_ftbs, struct vidc_frame_data ftbs[]);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001522 int (*session_get_buf_req)(void *sess);
1523 int (*session_flush)(void *sess, enum hal_flush flush_mode);
1524 int (*session_set_property)(void *sess, enum hal_property ptype,
1525 void *pdata);
1526 int (*session_get_property)(void *sess, enum hal_property ptype);
Praneeth Paladugub71968b2015-08-19 20:47:57 -07001527 int (*scale_clocks)(void *dev, u32 freq);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001528 int (*vote_bus)(void *dev, struct vidc_bus_vote_data *data,
1529 int num_data);
1530 int (*get_fw_info)(void *dev, struct hal_fw_info *fw_info);
1531 int (*session_clean)(void *sess);
1532 int (*get_core_capabilities)(void *dev);
1533 int (*suspend)(void *dev);
1534 int (*flush_debug_queue)(void *dev);
Praneeth Paladugu6e6fbdb2017-01-16 15:43:01 -08001535 enum hal_default_properties (*get_default_properties)(void *dev);
1536};
1537
1538typedef void (*hfi_cmd_response_callback) (enum hal_command_response cmd,
1539 void *data);
1540typedef void (*msm_vidc_callback) (u32 response, void *callback);
1541
1542struct hfi_device *vidc_hfi_initialize(enum msm_vidc_hfi_type hfi_type,
1543 u32 device_id, struct msm_vidc_platform_resources *res,
1544 hfi_cmd_response_callback callback);
1545void vidc_hfi_deinitialize(enum msm_vidc_hfi_type hfi_type,
1546 struct hfi_device *hdev);
1547u32 vidc_get_hfi_domain(enum hal_domain hal_domain);
1548u32 vidc_get_hfi_codec(enum hal_video_codec hal_codec);
1549enum hal_domain vidc_get_hal_domain(u32 hfi_domain);
1550enum hal_video_codec vidc_get_hal_codec(u32 hfi_codec);
1551
1552#endif /*__VIDC_HFI_API_H__ */