1 /****************************************************************************
2  ****************************************************************************
3  ***
4  ***   This header was automatically generated from a Linux kernel header
5  ***   of the same name, to make information necessary for userspace to
6  ***   call into the kernel available to libc.  It contains only constants,
7  ***   structures, and macros generated from the original header, and thus,
8  ***   contains no copyrightable information.
9  ***
10  ***   To edit the content of this header, modify the corresponding
11  ***   source file (e.g. under external/kernel-headers/original/) then
12  ***   run bionic/libc/kernel/tools/update_all.py
13  ***
14  ***   Any manual change here will be lost the next time this script will
15  ***   be run. You've been warned!
16  ***
17  ****************************************************************************
18  ****************************************************************************/
19 #ifndef _MSM_VIDC_DEC_H_
20 #define _MSM_VIDC_DEC_H_
21 #include <linux/types.h>
22 #include <linux/ioctl.h>
23 #define VDEC_S_BASE 0x40000000
24 #define VDEC_S_SUCCESS (VDEC_S_BASE)
25 #define VDEC_S_EFAIL (VDEC_S_BASE + 1)
26 #define VDEC_S_EFATAL (VDEC_S_BASE + 2)
27 #define VDEC_S_EBADPARAM (VDEC_S_BASE + 3)
28 #define VDEC_S_EINVALSTATE (VDEC_S_BASE + 4)
29 #define VDEC_S_ENOSWRES (VDEC_S_BASE + 5)
30 #define VDEC_S_ENOHWRES (VDEC_S_BASE + 6)
31 #define VDEC_S_EINVALCMD (VDEC_S_BASE + 7)
32 #define VDEC_S_ETIMEOUT (VDEC_S_BASE + 8)
33 #define VDEC_S_ENOPREREQ (VDEC_S_BASE + 9)
34 #define VDEC_S_ECMDQFULL (VDEC_S_BASE + 10)
35 #define VDEC_S_ENOTSUPP (VDEC_S_BASE + 11)
36 #define VDEC_S_ENOTIMPL (VDEC_S_BASE + 12)
37 #define VDEC_S_BUSY (VDEC_S_BASE + 13)
38 #define VDEC_S_INPUT_BITSTREAM_ERR (VDEC_S_BASE + 14)
39 #define VDEC_INTF_VER 1
40 #define VDEC_MSG_BASE 0x0000000
41 #define VDEC_MSG_INVALID (VDEC_MSG_BASE + 0)
42 #define VDEC_MSG_RESP_INPUT_BUFFER_DONE (VDEC_MSG_BASE + 1)
43 #define VDEC_MSG_RESP_OUTPUT_BUFFER_DONE (VDEC_MSG_BASE + 2)
44 #define VDEC_MSG_RESP_INPUT_FLUSHED (VDEC_MSG_BASE + 3)
45 #define VDEC_MSG_RESP_OUTPUT_FLUSHED (VDEC_MSG_BASE + 4)
46 #define VDEC_MSG_RESP_FLUSH_INPUT_DONE (VDEC_MSG_BASE + 5)
47 #define VDEC_MSG_RESP_FLUSH_OUTPUT_DONE (VDEC_MSG_BASE + 6)
48 #define VDEC_MSG_RESP_START_DONE (VDEC_MSG_BASE + 7)
49 #define VDEC_MSG_RESP_STOP_DONE (VDEC_MSG_BASE + 8)
50 #define VDEC_MSG_RESP_PAUSE_DONE (VDEC_MSG_BASE + 9)
51 #define VDEC_MSG_RESP_RESUME_DONE (VDEC_MSG_BASE + 10)
52 #define VDEC_MSG_RESP_RESOURCE_LOADED (VDEC_MSG_BASE + 11)
53 #define VDEC_EVT_RESOURCES_LOST (VDEC_MSG_BASE + 12)
54 #define VDEC_MSG_EVT_CONFIG_CHANGED (VDEC_MSG_BASE + 13)
55 #define VDEC_MSG_EVT_HW_ERROR (VDEC_MSG_BASE + 14)
56 #define VDEC_MSG_EVT_INFO_CONFIG_CHANGED (VDEC_MSG_BASE + 15)
57 #define VDEC_MSG_EVT_INFO_FIELD_DROPPED (VDEC_MSG_BASE + 16)
58 #define VDEC_MSG_EVT_HW_OVERLOAD (VDEC_MSG_BASE + 17)
59 #define VDEC_MSG_EVT_MAX_CLIENTS (VDEC_MSG_BASE + 18)
60 #define VDEC_MSG_EVT_HW_UNSUPPORTED (VDEC_MSG_BASE + 19)
61 #define VDEC_BUFFERFLAG_EOS 0x00000001
62 #define VDEC_BUFFERFLAG_DECODEONLY 0x00000004
63 #define VDEC_BUFFERFLAG_DATACORRUPT 0x00000008
64 #define VDEC_BUFFERFLAG_ENDOFFRAME 0x00000010
65 #define VDEC_BUFFERFLAG_SYNCFRAME 0x00000020
66 #define VDEC_BUFFERFLAG_EXTRADATA 0x00000040
67 #define VDEC_BUFFERFLAG_CODECCONFIG 0x00000080
68 #define VDEC_EXTRADATA_NONE 0x001
69 #define VDEC_EXTRADATA_QP 0x004
70 #define VDEC_EXTRADATA_MB_ERROR_MAP 0x008
71 #define VDEC_EXTRADATA_SEI 0x010
72 #define VDEC_EXTRADATA_VUI 0x020
73 #define VDEC_EXTRADATA_VC1 0x040
74 #define VDEC_EXTRADATA_EXT_DATA 0x0800
75 #define VDEC_EXTRADATA_USER_DATA 0x1000
76 #define VDEC_EXTRADATA_EXT_BUFFER 0x2000
77 #define VDEC_CMDBASE 0x800
78 #define VDEC_CMD_SET_INTF_VERSION (VDEC_CMDBASE)
79 #define VDEC_IOCTL_MAGIC 'v'
80 struct vdec_ioctl_msg {
81   void * in;
82   void * out;
83 };
84 #define VDEC_IOCTL_GET_PROFILE_LEVEL_SUPPORTED _IOWR(VDEC_IOCTL_MAGIC, 0, struct vdec_ioctl_msg)
85 #define VDEC_IOCTL_GET_INTERLACE_FORMAT _IOR(VDEC_IOCTL_MAGIC, 1, struct vdec_ioctl_msg)
86 #define VDEC_IOCTL_GET_CURRENT_PROFILE_LEVEL _IOWR(VDEC_IOCTL_MAGIC, 2, struct vdec_ioctl_msg)
87 #define VDEC_IOCTL_SET_OUTPUT_FORMAT _IOWR(VDEC_IOCTL_MAGIC, 3, struct vdec_ioctl_msg)
88 #define VDEC_IOCTL_GET_OUTPUT_FORMAT _IOWR(VDEC_IOCTL_MAGIC, 4, struct vdec_ioctl_msg)
89 #define VDEC_IOCTL_SET_CODEC _IOW(VDEC_IOCTL_MAGIC, 5, struct vdec_ioctl_msg)
90 #define VDEC_IOCTL_GET_CODEC _IOR(VDEC_IOCTL_MAGIC, 6, struct vdec_ioctl_msg)
91 #define VDEC_IOCTL_SET_PICRES _IOW(VDEC_IOCTL_MAGIC, 7, struct vdec_ioctl_msg)
92 #define VDEC_IOCTL_GET_PICRES _IOR(VDEC_IOCTL_MAGIC, 8, struct vdec_ioctl_msg)
93 #define VDEC_IOCTL_SET_EXTRADATA _IOW(VDEC_IOCTL_MAGIC, 9, struct vdec_ioctl_msg)
94 #define VDEC_IOCTL_GET_EXTRADATA _IOR(VDEC_IOCTL_MAGIC, 10, struct vdec_ioctl_msg)
95 #define VDEC_IOCTL_SET_SEQUENCE_HEADER _IOW(VDEC_IOCTL_MAGIC, 11, struct vdec_ioctl_msg)
96 #define VDEC_IOCTL_SET_BUFFER_REQ _IOW(VDEC_IOCTL_MAGIC, 12, struct vdec_ioctl_msg)
97 #define VDEC_IOCTL_GET_BUFFER_REQ _IOR(VDEC_IOCTL_MAGIC, 13, struct vdec_ioctl_msg)
98 #define VDEC_IOCTL_ALLOCATE_BUFFER _IOWR(VDEC_IOCTL_MAGIC, 14, struct vdec_ioctl_msg)
99 #define VDEC_IOCTL_FREE_BUFFER _IOW(VDEC_IOCTL_MAGIC, 15, struct vdec_ioctl_msg)
100 #define VDEC_IOCTL_SET_BUFFER _IOW(VDEC_IOCTL_MAGIC, 16, struct vdec_ioctl_msg)
101 #define VDEC_IOCTL_FILL_OUTPUT_BUFFER _IOW(VDEC_IOCTL_MAGIC, 17, struct vdec_ioctl_msg)
102 #define VDEC_IOCTL_DECODE_FRAME _IOW(VDEC_IOCTL_MAGIC, 18, struct vdec_ioctl_msg)
103 #define VDEC_IOCTL_LOAD_RESOURCES _IO(VDEC_IOCTL_MAGIC, 19)
104 #define VDEC_IOCTL_CMD_START _IO(VDEC_IOCTL_MAGIC, 20)
105 #define VDEC_IOCTL_CMD_STOP _IO(VDEC_IOCTL_MAGIC, 21)
106 #define VDEC_IOCTL_CMD_PAUSE _IO(VDEC_IOCTL_MAGIC, 22)
107 #define VDEC_IOCTL_CMD_RESUME _IO(VDEC_IOCTL_MAGIC, 23)
108 #define VDEC_IOCTL_CMD_FLUSH _IOW(VDEC_IOCTL_MAGIC, 24, struct vdec_ioctl_msg)
109 #define VDEC_IOCTL_GET_NEXT_MSG _IOR(VDEC_IOCTL_MAGIC, 25, struct vdec_ioctl_msg)
110 #define VDEC_IOCTL_STOP_NEXT_MSG _IO(VDEC_IOCTL_MAGIC, 26)
111 #define VDEC_IOCTL_GET_NUMBER_INSTANCES _IOR(VDEC_IOCTL_MAGIC, 27, struct vdec_ioctl_msg)
112 #define VDEC_IOCTL_SET_PICTURE_ORDER _IOW(VDEC_IOCTL_MAGIC, 28, struct vdec_ioctl_msg)
113 #define VDEC_IOCTL_SET_FRAME_RATE _IOW(VDEC_IOCTL_MAGIC, 29, struct vdec_ioctl_msg)
114 #define VDEC_IOCTL_SET_H264_MV_BUFFER _IOW(VDEC_IOCTL_MAGIC, 30, struct vdec_ioctl_msg)
115 #define VDEC_IOCTL_FREE_H264_MV_BUFFER _IOW(VDEC_IOCTL_MAGIC, 31, struct vdec_ioctl_msg)
116 #define VDEC_IOCTL_GET_MV_BUFFER_SIZE _IOR(VDEC_IOCTL_MAGIC, 32, struct vdec_ioctl_msg)
117 #define VDEC_IOCTL_SET_IDR_ONLY_DECODING _IO(VDEC_IOCTL_MAGIC, 33)
118 #define VDEC_IOCTL_SET_CONT_ON_RECONFIG _IO(VDEC_IOCTL_MAGIC, 34)
119 #define VDEC_IOCTL_SET_DISABLE_DMX _IOW(VDEC_IOCTL_MAGIC, 35, struct vdec_ioctl_msg)
120 #define VDEC_IOCTL_GET_DISABLE_DMX _IOR(VDEC_IOCTL_MAGIC, 36, struct vdec_ioctl_msg)
121 #define VDEC_IOCTL_GET_DISABLE_DMX_SUPPORT _IOR(VDEC_IOCTL_MAGIC, 37, struct vdec_ioctl_msg)
122 #define VDEC_IOCTL_SET_PERF_CLK _IOR(VDEC_IOCTL_MAGIC, 38, struct vdec_ioctl_msg)
123 #define VDEC_IOCTL_SET_META_BUFFERS _IOW(VDEC_IOCTL_MAGIC, 39, struct vdec_ioctl_msg)
124 #define VDEC_IOCTL_FREE_META_BUFFERS _IO(VDEC_IOCTL_MAGIC, 40)
125 enum vdec_picture {
126   PICTURE_TYPE_I,
127   PICTURE_TYPE_P,
128   PICTURE_TYPE_B,
129   PICTURE_TYPE_BI,
130   PICTURE_TYPE_SKIP,
131   PICTURE_TYPE_IDR,
132   PICTURE_TYPE_UNKNOWN
133 };
134 enum vdec_buffer {
135   VDEC_BUFFER_TYPE_INPUT,
136   VDEC_BUFFER_TYPE_OUTPUT
137 };
138 struct vdec_allocatorproperty {
139   enum vdec_buffer buffer_type;
140   uint32_t mincount;
141   uint32_t maxcount;
142   uint32_t actualcount;
143   size_t buffer_size;
144   uint32_t alignment;
145   uint32_t buf_poolid;
146   size_t meta_buffer_size;
147 };
148 struct vdec_bufferpayload {
149   void * bufferaddr;
150   size_t buffer_len;
151   int pmem_fd;
152   size_t offset;
153   size_t mmaped_size;
154 };
155 struct vdec_setbuffer_cmd {
156   enum vdec_buffer buffer_type;
157   struct vdec_bufferpayload buffer;
158 };
159 struct vdec_fillbuffer_cmd {
160   struct vdec_bufferpayload buffer;
161   void * client_data;
162 };
163 enum vdec_bufferflush {
164   VDEC_FLUSH_TYPE_INPUT,
165   VDEC_FLUSH_TYPE_OUTPUT,
166   VDEC_FLUSH_TYPE_ALL
167 };
168 enum vdec_codec {
169   VDEC_CODECTYPE_H264 = 0x1,
170   VDEC_CODECTYPE_H263 = 0x2,
171   VDEC_CODECTYPE_MPEG4 = 0x3,
172   VDEC_CODECTYPE_DIVX_3 = 0x4,
173   VDEC_CODECTYPE_DIVX_4 = 0x5,
174   VDEC_CODECTYPE_DIVX_5 = 0x6,
175   VDEC_CODECTYPE_DIVX_6 = 0x7,
176   VDEC_CODECTYPE_XVID = 0x8,
177   VDEC_CODECTYPE_MPEG1 = 0x9,
178   VDEC_CODECTYPE_MPEG2 = 0xa,
179   VDEC_CODECTYPE_VC1 = 0xb,
180   VDEC_CODECTYPE_VC1_RCV = 0xc,
181   VDEC_CODECTYPE_HEVC = 0xd,
182   VDEC_CODECTYPE_MVC = 0xe,
183   VDEC_CODECTYPE_VP8 = 0xf,
184   VDEC_CODECTYPE_VP9 = 0x10,
185 };
186 enum vdec_mpeg2_profile {
187   VDEC_MPEG2ProfileSimple = 0x1,
188   VDEC_MPEG2ProfileMain = 0x2,
189   VDEC_MPEG2Profile422 = 0x4,
190   VDEC_MPEG2ProfileSNR = 0x8,
191   VDEC_MPEG2ProfileSpatial = 0x10,
192   VDEC_MPEG2ProfileHigh = 0x20,
193   VDEC_MPEG2ProfileKhronosExtensions = 0x6F000000,
194   VDEC_MPEG2ProfileVendorStartUnused = 0x7F000000,
195   VDEC_MPEG2ProfileMax = 0x7FFFFFFF
196 };
197 enum vdec_mpeg2_level {
198   VDEC_MPEG2LevelLL = 0x1,
199   VDEC_MPEG2LevelML = 0x2,
200   VDEC_MPEG2LevelH14 = 0x4,
201   VDEC_MPEG2LevelHL = 0x8,
202   VDEC_MPEG2LevelKhronosExtensions = 0x6F000000,
203   VDEC_MPEG2LevelVendorStartUnused = 0x7F000000,
204   VDEC_MPEG2LevelMax = 0x7FFFFFFF
205 };
206 enum vdec_mpeg4_profile {
207   VDEC_MPEG4ProfileSimple = 0x01,
208   VDEC_MPEG4ProfileSimpleScalable = 0x02,
209   VDEC_MPEG4ProfileCore = 0x04,
210   VDEC_MPEG4ProfileMain = 0x08,
211   VDEC_MPEG4ProfileNbit = 0x10,
212   VDEC_MPEG4ProfileScalableTexture = 0x20,
213   VDEC_MPEG4ProfileSimpleFace = 0x40,
214   VDEC_MPEG4ProfileSimpleFBA = 0x80,
215   VDEC_MPEG4ProfileBasicAnimated = 0x100,
216   VDEC_MPEG4ProfileHybrid = 0x200,
217   VDEC_MPEG4ProfileAdvancedRealTime = 0x400,
218   VDEC_MPEG4ProfileCoreScalable = 0x800,
219   VDEC_MPEG4ProfileAdvancedCoding = 0x1000,
220   VDEC_MPEG4ProfileAdvancedCore = 0x2000,
221   VDEC_MPEG4ProfileAdvancedScalable = 0x4000,
222   VDEC_MPEG4ProfileAdvancedSimple = 0x8000,
223   VDEC_MPEG4ProfileKhronosExtensions = 0x6F000000,
224   VDEC_MPEG4ProfileVendorStartUnused = 0x7F000000,
225   VDEC_MPEG4ProfileMax = 0x7FFFFFFF
226 };
227 enum vdec_mpeg4_level {
228   VDEC_MPEG4Level0 = 0x01,
229   VDEC_MPEG4Level0b = 0x02,
230   VDEC_MPEG4Level1 = 0x04,
231   VDEC_MPEG4Level2 = 0x08,
232   VDEC_MPEG4Level3 = 0x10,
233   VDEC_MPEG4Level4 = 0x20,
234   VDEC_MPEG4Level4a = 0x40,
235   VDEC_MPEG4Level5 = 0x80,
236   VDEC_MPEG4LevelKhronosExtensions = 0x6F000000,
237   VDEC_MPEG4LevelVendorStartUnused = 0x7F000000,
238   VDEC_MPEG4LevelMax = 0x7FFFFFFF
239 };
240 enum vdec_avc_profile {
241   VDEC_AVCProfileBaseline = 0x01,
242   VDEC_AVCProfileMain = 0x02,
243   VDEC_AVCProfileExtended = 0x04,
244   VDEC_AVCProfileHigh = 0x08,
245   VDEC_AVCProfileHigh10 = 0x10,
246   VDEC_AVCProfileHigh422 = 0x20,
247   VDEC_AVCProfileHigh444 = 0x40,
248   VDEC_AVCProfileKhronosExtensions = 0x6F000000,
249   VDEC_AVCProfileVendorStartUnused = 0x7F000000,
250   VDEC_AVCProfileMax = 0x7FFFFFFF
251 };
252 enum vdec_avc_level {
253   VDEC_AVCLevel1 = 0x01,
254   VDEC_AVCLevel1b = 0x02,
255   VDEC_AVCLevel11 = 0x04,
256   VDEC_AVCLevel12 = 0x08,
257   VDEC_AVCLevel13 = 0x10,
258   VDEC_AVCLevel2 = 0x20,
259   VDEC_AVCLevel21 = 0x40,
260   VDEC_AVCLevel22 = 0x80,
261   VDEC_AVCLevel3 = 0x100,
262   VDEC_AVCLevel31 = 0x200,
263   VDEC_AVCLevel32 = 0x400,
264   VDEC_AVCLevel4 = 0x800,
265   VDEC_AVCLevel41 = 0x1000,
266   VDEC_AVCLevel42 = 0x2000,
267   VDEC_AVCLevel5 = 0x4000,
268   VDEC_AVCLevel51 = 0x8000,
269   VDEC_AVCLevelKhronosExtensions = 0x6F000000,
270   VDEC_AVCLevelVendorStartUnused = 0x7F000000,
271   VDEC_AVCLevelMax = 0x7FFFFFFF
272 };
273 enum vdec_divx_profile {
274   VDEC_DIVXProfile_qMobile = 0x01,
275   VDEC_DIVXProfile_Mobile = 0x02,
276   VDEC_DIVXProfile_HD = 0x04,
277   VDEC_DIVXProfile_Handheld = 0x08,
278   VDEC_DIVXProfile_Portable = 0x10,
279   VDEC_DIVXProfile_HomeTheater = 0x20
280 };
281 enum vdec_xvid_profile {
282   VDEC_XVIDProfile_Simple = 0x1,
283   VDEC_XVIDProfile_Advanced_Realtime_Simple = 0x2,
284   VDEC_XVIDProfile_Advanced_Simple = 0x4
285 };
286 enum vdec_xvid_level {
287   VDEC_XVID_LEVEL_S_L0 = 0x1,
288   VDEC_XVID_LEVEL_S_L1 = 0x2,
289   VDEC_XVID_LEVEL_S_L2 = 0x4,
290   VDEC_XVID_LEVEL_S_L3 = 0x8,
291   VDEC_XVID_LEVEL_ARTS_L1 = 0x10,
292   VDEC_XVID_LEVEL_ARTS_L2 = 0x20,
293   VDEC_XVID_LEVEL_ARTS_L3 = 0x40,
294   VDEC_XVID_LEVEL_ARTS_L4 = 0x80,
295   VDEC_XVID_LEVEL_AS_L0 = 0x100,
296   VDEC_XVID_LEVEL_AS_L1 = 0x200,
297   VDEC_XVID_LEVEL_AS_L2 = 0x400,
298   VDEC_XVID_LEVEL_AS_L3 = 0x800,
299   VDEC_XVID_LEVEL_AS_L4 = 0x1000
300 };
301 enum vdec_h263profile {
302   VDEC_H263ProfileBaseline = 0x01,
303   VDEC_H263ProfileH320Coding = 0x02,
304   VDEC_H263ProfileBackwardCompatible = 0x04,
305   VDEC_H263ProfileISWV2 = 0x08,
306   VDEC_H263ProfileISWV3 = 0x10,
307   VDEC_H263ProfileHighCompression = 0x20,
308   VDEC_H263ProfileInternet = 0x40,
309   VDEC_H263ProfileInterlace = 0x80,
310   VDEC_H263ProfileHighLatency = 0x100,
311   VDEC_H263ProfileKhronosExtensions = 0x6F000000,
312   VDEC_H263ProfileVendorStartUnused = 0x7F000000,
313   VDEC_H263ProfileMax = 0x7FFFFFFF
314 };
315 enum vdec_h263level {
316   VDEC_H263Level10 = 0x01,
317   VDEC_H263Level20 = 0x02,
318   VDEC_H263Level30 = 0x04,
319   VDEC_H263Level40 = 0x08,
320   VDEC_H263Level45 = 0x10,
321   VDEC_H263Level50 = 0x20,
322   VDEC_H263Level60 = 0x40,
323   VDEC_H263Level70 = 0x80,
324   VDEC_H263LevelKhronosExtensions = 0x6F000000,
325   VDEC_H263LevelVendorStartUnused = 0x7F000000,
326   VDEC_H263LevelMax = 0x7FFFFFFF
327 };
328 enum vdec_wmv_format {
329   VDEC_WMVFormatUnused = 0x01,
330   VDEC_WMVFormat7 = 0x02,
331   VDEC_WMVFormat8 = 0x04,
332   VDEC_WMVFormat9 = 0x08,
333   VDEC_WMFFormatKhronosExtensions = 0x6F000000,
334   VDEC_WMFFormatVendorStartUnused = 0x7F000000,
335   VDEC_WMVFormatMax = 0x7FFFFFFF
336 };
337 enum vdec_vc1_profile {
338   VDEC_VC1ProfileSimple = 0x1,
339   VDEC_VC1ProfileMain = 0x2,
340   VDEC_VC1ProfileAdvanced = 0x4
341 };
342 enum vdec_vc1_level {
343   VDEC_VC1_LEVEL_S_Low = 0x1,
344   VDEC_VC1_LEVEL_S_Medium = 0x2,
345   VDEC_VC1_LEVEL_M_Low = 0x4,
346   VDEC_VC1_LEVEL_M_Medium = 0x8,
347   VDEC_VC1_LEVEL_M_High = 0x10,
348   VDEC_VC1_LEVEL_A_L0 = 0x20,
349   VDEC_VC1_LEVEL_A_L1 = 0x40,
350   VDEC_VC1_LEVEL_A_L2 = 0x80,
351   VDEC_VC1_LEVEL_A_L3 = 0x100,
352   VDEC_VC1_LEVEL_A_L4 = 0x200
353 };
354 struct vdec_profile_level {
355   uint32_t profiles;
356   uint32_t levels;
357 };
358 enum vdec_interlaced_format {
359   VDEC_InterlaceFrameProgressive = 0x1,
360   VDEC_InterlaceInterleaveFrameTopFieldFirst = 0x2,
361   VDEC_InterlaceInterleaveFrameBottomFieldFirst = 0x4
362 };
363 #define VDEC_YUV_FORMAT_NV12_TP10_UBWC VDEC_YUV_FORMAT_NV12_TP10_UBWC
364 enum vdec_output_fromat {
365   VDEC_YUV_FORMAT_NV12 = 0x1,
366   VDEC_YUV_FORMAT_TILE_4x2 = 0x2,
367   VDEC_YUV_FORMAT_NV12_UBWC = 0x3,
368   VDEC_YUV_FORMAT_NV12_TP10_UBWC = 0x4
369 };
370 enum vdec_output_order {
371   VDEC_ORDER_DISPLAY = 0x1,
372   VDEC_ORDER_DECODE = 0x2
373 };
374 struct vdec_picsize {
375   uint32_t frame_width;
376   uint32_t frame_height;
377   uint32_t stride;
378   uint32_t scan_lines;
379 };
380 struct vdec_seqheader {
381   void * ptr_seqheader;
382   size_t seq_header_len;
383   int pmem_fd;
384   size_t pmem_offset;
385 };
386 struct vdec_mberror {
387   void * ptr_errormap;
388   size_t err_mapsize;
389 };
390 struct vdec_input_frameinfo {
391   void * bufferaddr;
392   size_t offset;
393   size_t datalen;
394   uint32_t flags;
395   int64_t timestamp;
396   void * client_data;
397   int pmem_fd;
398   size_t pmem_offset;
399   void * desc_addr;
400   uint32_t desc_size;
401 };
402 struct vdec_framesize {
403   uint32_t left;
404   uint32_t top;
405   uint32_t right;
406   uint32_t bottom;
407 };
408 struct vdec_aspectratioinfo {
409   uint32_t aspect_ratio;
410   uint32_t par_width;
411   uint32_t par_height;
412 };
413 struct vdec_sep_metadatainfo {
414   void * metabufaddr;
415   uint32_t size;
416   int fd;
417   int offset;
418   uint32_t buffer_size;
419 };
420 struct vdec_output_frameinfo {
421   void * bufferaddr;
422   size_t offset;
423   size_t len;
424   uint32_t flags;
425   int64_t time_stamp;
426   enum vdec_picture pic_type;
427   void * client_data;
428   void * input_frame_clientdata;
429   struct vdec_picsize picsize;
430   struct vdec_framesize framesize;
431   enum vdec_interlaced_format interlaced_format;
432   struct vdec_aspectratioinfo aspect_ratio_info;
433   struct vdec_sep_metadatainfo metadata_info;
434 };
435 union vdec_msgdata {
436   struct vdec_output_frameinfo output_frame;
437   void * input_frame_clientdata;
438 };
439 struct vdec_msginfo {
440   uint32_t status_code;
441   uint32_t msgcode;
442   union vdec_msgdata msgdata;
443   size_t msgdatasize;
444 };
445 struct vdec_framerate {
446   unsigned long fps_denominator;
447   unsigned long fps_numerator;
448 };
449 struct vdec_h264_mv {
450   size_t size;
451   int count;
452   int pmem_fd;
453   int offset;
454 };
455 struct vdec_mv_buff_size {
456   int width;
457   int height;
458   int size;
459   int alignment;
460 };
461 struct vdec_meta_buffers {
462   size_t size;
463   int count;
464   int pmem_fd;
465   int pmem_fd_iommu;
466   int offset;
467 };
468 #endif
469 
470