blob: 0182bfbf710cb4fee728c1d351b99b7658d1d78e [file] [log] [blame]
Dima Zavin2e5bd8f2009-08-30 19:17:26 -07001/****************************************************************************
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 ****************************************************************************
11 ****************************************************************************/
12#ifndef _MSM_VDEC_H_
13#define _MSM_VDEC_H_
Ben Cheng4b29af02012-03-07 16:14:53 -080014
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070015#include <linux/types.h>
Ben Cheng4b29af02012-03-07 16:14:53 -080016
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070017#define VDEC_IOCTL_MAGIC 'v'
Ben Cheng4b29af02012-03-07 16:14:53 -080018
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070019#define VDEC_IOCTL_INITIALIZE _IOWR(VDEC_IOCTL_MAGIC, 1, struct vdec_init)
20#define VDEC_IOCTL_SETBUFFERS _IOW(VDEC_IOCTL_MAGIC, 2, struct vdec_buffer)
21#define VDEC_IOCTL_QUEUE _IOWR(VDEC_IOCTL_MAGIC, 3, struct vdec_input_buf)
22#define VDEC_IOCTL_REUSEFRAMEBUFFER _IOW(VDEC_IOCTL_MAGIC, 4, unsigned int)
23#define VDEC_IOCTL_FLUSH _IOW(VDEC_IOCTL_MAGIC, 5, unsigned int)
24#define VDEC_IOCTL_EOS _IO(VDEC_IOCTL_MAGIC, 6)
25#define VDEC_IOCTL_GETMSG _IOR(VDEC_IOCTL_MAGIC, 7, struct vdec_msg)
26#define VDEC_IOCTL_CLOSE _IO(VDEC_IOCTL_MAGIC, 8)
27#define VDEC_IOCTL_FREEBUFFERS _IOW(VDEC_IOCTL_MAGIC, 9, struct vdec_buf_info)
28#define VDEC_IOCTL_GETDECATTRIBUTES _IOR(VDEC_IOCTL_MAGIC, 10, struct vdec_dec_attributes)
Ben Cheng4b29af02012-03-07 16:14:53 -080029
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070030enum {
31 VDEC_FRAME_DECODE_OK,
32 VDEC_FRAME_DECODE_ERR,
33 VDEC_FATAL_ERR,
34 VDEC_FLUSH_FINISH,
35 VDEC_EOS,
36 VDEC_FRAME_FLUSH,
37 VDEC_STREAM_SWITCH,
38 VDEC_SUSPEND_FINISH,
39 VDEC_BUFFER_CONSUMED
40};
Ben Cheng4b29af02012-03-07 16:14:53 -080041
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070042enum {
43 VDEC_FLUSH_INPUT,
44 VDEC_FLUSH_OUTPUT,
45 VDEC_FLUSH_ALL
46};
Ben Cheng4b29af02012-03-07 16:14:53 -080047
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070048enum {
49 VDEC_BUFFER_TYPE_INPUT,
50 VDEC_BUFFER_TYPE_OUTPUT,
51 VDEC_BUFFER_TYPE_INTERNAL1,
52 VDEC_BUFFER_TYPE_INTERNAL2,
53};
Ben Cheng4b29af02012-03-07 16:14:53 -080054
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070055enum {
56 VDEC_QUEUE_SUCCESS,
57 VDEC_QUEUE_FAILED,
58 VDEC_QUEUE_BADSTATE,
59};
Ben Cheng4b29af02012-03-07 16:14:53 -080060
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070061struct vdec_input_buf_info {
62 u32 offset;
63 u32 data;
64 u32 size;
65 int timestamp_lo;
66 int timestamp_hi;
67 int avsync_state;
68 u32 flags;
69};
Ben Cheng4b29af02012-03-07 16:14:53 -080070
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070071struct vdec_buf_desc {
72 u32 bufsize;
73 u32 num_min_buffers;
74 u32 num_max_buffers;
75};
Ben Cheng4b29af02012-03-07 16:14:53 -080076
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070077struct vdec_buf_req {
78 u32 max_input_queue_size;
79 struct vdec_buf_desc input;
80 struct vdec_buf_desc output;
81 struct vdec_buf_desc dec_req1;
82 struct vdec_buf_desc dec_req2;
83};
Ben Cheng4b29af02012-03-07 16:14:53 -080084
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070085struct vdec_region_info {
86 u32 src_id;
87 u32 offset;
88 u32 size;
89};
Ben Cheng4b29af02012-03-07 16:14:53 -080090
Dima Zavin2e5bd8f2009-08-30 19:17:26 -070091struct vdec_config {
92 u32 fourcc;
93 u32 width;
94 u32 height;
95 u32 order;
96 u32 notify_enable;
97 u32 vc1_rowbase;
98 u32 h264_startcode_detect;
99 u32 h264_nal_len_size;
100 u32 postproc_flag;
101 u32 fruc_enable;
102 u32 reserved;
103};
Ben Cheng4b29af02012-03-07 16:14:53 -0800104
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700105struct vdec_vc1_panscan_regions {
106 int num;
107 int width[4];
108 int height[4];
109 int xoffset[4];
110 int yoffset[4];
111};
Ben Cheng4b29af02012-03-07 16:14:53 -0800112
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700113struct vdec_cropping_window {
114 u32 x1;
115 u32 y1;
116 u32 x2;
117 u32 y2;
118};
Ben Cheng4b29af02012-03-07 16:14:53 -0800119
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700120struct vdec_frame_info {
121 u32 status;
122 u32 offset;
123 u32 data1;
124 u32 data2;
125 int timestamp_lo;
126 int timestamp_hi;
127 int cal_timestamp_lo;
128 int cal_timestamp_hi;
129 u32 dec_width;
130 u32 dec_height;
131 struct vdec_cropping_window cwin;
132 u32 picture_type[2];
133 u32 picture_format;
134 u32 vc1_rangeY;
135 u32 vc1_rangeUV;
136 u32 picture_resolution;
137 u32 frame_disp_repeat;
138 u32 repeat_first_field;
139 u32 top_field_first;
140 u32 interframe_interp;
141 struct vdec_vc1_panscan_regions panscan;
142 u32 concealed_macblk_num;
143 u32 flags;
144 u32 performance_stats;
145 u32 data3;
146};
Ben Cheng4b29af02012-03-07 16:14:53 -0800147
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700148struct vdec_buf_info {
149 u32 buf_type;
150 struct vdec_region_info region;
151 u32 num_buf;
152 u32 islast;
153};
Ben Cheng4b29af02012-03-07 16:14:53 -0800154
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700155struct vdec_buffer {
156 u32 pmem_id;
157 struct vdec_buf_info buf;
158};
Ben Cheng4b29af02012-03-07 16:14:53 -0800159
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700160struct vdec_sequence {
161 u8 *header;
162 u32 len;
163};
Ben Cheng4b29af02012-03-07 16:14:53 -0800164
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700165struct vdec_config_sps {
166 struct vdec_config cfg;
167 struct vdec_sequence seq;
168};
Ben Cheng4b29af02012-03-07 16:14:53 -0800169
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700170#define VDEC_MSG_REUSEINPUTBUFFER 1
171#define VDEC_MSG_FRAMEDONE 2
Ben Cheng4b29af02012-03-07 16:14:53 -0800172
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700173struct vdec_msg {
174 u32 id;
Ben Cheng4b29af02012-03-07 16:14:53 -0800175
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700176 union {
Ben Cheng4b29af02012-03-07 16:14:53 -0800177
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700178 u32 buf_id;
Ben Cheng4b29af02012-03-07 16:14:53 -0800179
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700180 struct vdec_frame_info vfr_info;
181 };
182};
Ben Cheng4b29af02012-03-07 16:14:53 -0800183
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700184struct vdec_init {
185 struct vdec_config_sps sps_cfg;
186 struct vdec_buf_req *buf_req;
187};
Ben Cheng4b29af02012-03-07 16:14:53 -0800188
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700189struct vdec_input_buf {
190 u32 pmem_id;
191 struct vdec_input_buf_info buffer;
192 struct vdec_queue_status *queue_status;
193};
Ben Cheng4b29af02012-03-07 16:14:53 -0800194
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700195struct vdec_queue_status {
196 u32 status;
197};
Ben Cheng4b29af02012-03-07 16:14:53 -0800198
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700199struct vdec_dec_attributes {
200 u32 fourcc;
201 u32 profile;
202 u32 level;
203 u32 dec_pic_width;
204 u32 dec_pic_height;
205 struct vdec_buf_desc input;
206 struct vdec_buf_desc output;
207 struct vdec_buf_desc dec_req1;
208 struct vdec_buf_desc dec_req2;
209};
Ben Cheng4b29af02012-03-07 16:14:53 -0800210
Dima Zavin2e5bd8f2009-08-30 19:17:26 -0700211#endif
Ben Cheng4b29af02012-03-07 16:14:53 -0800212