blob: 47b8163fe01a8b25df933a2a4a4f4490cf2fac93 [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001#ifndef _MSM_VDEC_H_
2#define _MSM_VDEC_H_
3
4#include <linux/types.h>
5
6#define VDEC_IOCTL_MAGIC 'v'
7
8#define VDEC_IOCTL_INITIALIZE _IOWR(VDEC_IOCTL_MAGIC, 1, struct vdec_init)
9#define VDEC_IOCTL_SETBUFFERS _IOW(VDEC_IOCTL_MAGIC, 2, struct vdec_buffer)
10#define VDEC_IOCTL_QUEUE _IOWR(VDEC_IOCTL_MAGIC, 3, \
11 struct vdec_input_buf)
12#define VDEC_IOCTL_REUSEFRAMEBUFFER _IOW(VDEC_IOCTL_MAGIC, 4, unsigned int)
13#define VDEC_IOCTL_FLUSH _IOW(VDEC_IOCTL_MAGIC, 5, unsigned int)
14#define VDEC_IOCTL_EOS _IO(VDEC_IOCTL_MAGIC, 6)
15#define VDEC_IOCTL_GETMSG _IOR(VDEC_IOCTL_MAGIC, 7, struct vdec_msg)
16#define VDEC_IOCTL_CLOSE _IO(VDEC_IOCTL_MAGIC, 8)
17#define VDEC_IOCTL_FREEBUFFERS _IOW(VDEC_IOCTL_MAGIC, 9, struct vdec_buf_info)
18#define VDEC_IOCTL_GETDECATTRIBUTES _IOR(VDEC_IOCTL_MAGIC, 10, \
19 struct vdec_dec_attributes)
20#define VDEC_IOCTL_GETVERSION _IOR(VDEC_IOCTL_MAGIC, 11, struct vdec_version)
21#define VDEC_IOCTL_SETPROPERTY _IOW \
22 (VDEC_IOCTL_MAGIC, 12, struct vdec_property_info)
23#define VDEC_IOCTL_GETPROPERTY _IOR \
24 (VDEC_IOCTL_MAGIC, 13, struct vdec_property_info)
25#define VDEC_IOCTL_PERFORMANCE_CHANGE_REQ _IOW(VDEC_IOCTL_MAGIC, 14, \
26 unsigned int)
27
28enum {
29 VDEC_FRAME_DECODE_OK,
30 VDEC_FRAME_DECODE_ERR,
31 VDEC_FATAL_ERR,
32 VDEC_FLUSH_FINISH,
33 VDEC_EOS,
34 VDEC_FRAME_FLUSH,
35 VDEC_STREAM_SWITCH,
36 VDEC_SUSPEND_FINISH,
37 VDEC_BUFFER_CONSUMED
38};
39
40enum {
41 VDEC_FLUSH_INPUT,
42 VDEC_FLUSH_OUTPUT,
43 VDEC_FLUSH_ALL
44};
45
46enum {
47 VDEC_BUFFER_TYPE_INPUT,
48 VDEC_BUFFER_TYPE_OUTPUT,
49 VDEC_BUFFER_TYPE_INTERNAL1,
50 VDEC_BUFFER_TYPE_INTERNAL2,
51};
52
53enum {
54 VDEC_QUEUE_SUCCESS,
55 VDEC_QUEUE_FAILED,
56 VDEC_QUEUE_BADSTATE,
57};
58
59enum {
60 VDEC_COLOR_FORMAT_NV21 = 0x01,
61 VDEC_COLOR_FORMAT_NV21_YAMOTO = 0x02
62 };
63
64enum vdec_property_id {
65 VDEC_FOURCC,
66 VDEC_PROFILE,
67 VDEC_LEVEL,
68 VDEC_DIMENSIONS,
69 VDEC_CWIN,
70 VDEC_INPUT_BUF_REQ,
71 VDEC_OUTPUT_BUF_REQ,
72 VDEC_LUMA_CHROMA_STRIDE,
73 VDEC_NUM_DAL_PORTS,
74 VDEC_PRIORITY,
75 VDEC_FRAME_ALIGNMENT
76};
77
78enum {
79 PERF_REQUEST_SET_MIN = 0,
80 PERF_REQUEST_LOWER,
81 PERF_REQUEST_RAISE,
82 PERF_REQUEST_SET_MAX
83};
84
85struct vdec_input_buf_info {
86 u32 offset;
87 u32 data;
88 u32 size;
89 int timestamp_lo;
90 int timestamp_hi;
91 int avsync_state;
92 u32 flags;
93};
94
95struct vdec_buf_desc {
96 u32 bufsize;
97 u32 num_min_buffers;
98 u32 num_max_buffers;
99};
100
101struct vdec_buf_req {
102 u32 max_input_queue_size;
103 struct vdec_buf_desc input;
104 struct vdec_buf_desc output;
105 struct vdec_buf_desc dec_req1;
106 struct vdec_buf_desc dec_req2;
107};
108
109struct vdec_region_info {
110 u32 src_id;
111 u32 offset;
112 u32 size;
113};
114
115struct vdec_config {
116 u32 fourcc; /* video format */
117 u32 width; /* source width */
118 u32 height; /* source height */
119 u32 order; /* render decoder order */
120 u32 notify_enable; /* enable notify input buffer done event */
121 u32 vc1_rowbase;
122 u32 h264_startcode_detect;
123 u32 h264_nal_len_size;
124 u32 postproc_flag;
125 u32 fruc_enable;
126 u32 color_format; /* used to set YUV color format */
127};
128
129struct vdec_vc1_panscan_regions {
130 int num;
131 int width[4];
132 int height[4];
133 int xoffset[4];
134 int yoffset[4];
135};
136
137struct vdec_cropping_window {
138 u32 x1;
139 u32 y1;
140 u32 x2;
141 u32 y2;
142};
143
144struct vdec_frame_info {
145 u32 status; /* video decode status */
146 u32 offset; /* buffer offset */
147 u32 data1; /* user data field 1 */
148 u32 data2; /* user data field 2 */
149 int timestamp_lo; /* lower 32 bits timestamp, in msec */
150 int timestamp_hi; /* higher 32 bits timestamp, in msec */
151 int cal_timestamp_lo; /* lower 32 bits cal timestamp, in msec */
152 int cal_timestamp_hi; /* higher 32 bits cal timestamp, in msec */
153 u32 dec_width; /* frame roi width */
154 u32 dec_height; /* frame roi height */
155 struct vdec_cropping_window cwin; /* The frame cropping window */
156 u32 picture_type[2]; /* picture coding type */
157 u32 picture_format; /* picture coding format */
158 u32 vc1_rangeY; /* luma range mapping */
159 u32 vc1_rangeUV; /* chroma range mapping */
160 u32 picture_resolution; /* scaling factor */
161 u32 frame_disp_repeat; /* how often repeated by disp */
162 u32 repeat_first_field; /* repeat 1st field after 2nd */
163 u32 top_field_first; /* top field displayed first */
164 u32 interframe_interp; /* not for inter-frame interp */
165 struct vdec_vc1_panscan_regions panscan; /* pan region */
166 u32 concealed_macblk_num; /* number of concealed macro blk */
167 u32 flags; /* input flags */
168 u32 performance_stats; /* performance statistics returned by decoder */
169 u32 data3; /* user data field 3 */
170};
171
172struct vdec_buf_info {
173 u32 buf_type;
174 struct vdec_region_info region;
175 u32 num_buf;
176 u32 islast;
177};
178
179struct vdec_buffer {
180 u32 pmem_id;
181 struct vdec_buf_info buf;
182};
183
184struct vdec_sequence {
185 u8 *header;
186 u32 len;
187};
188
189struct vdec_config_sps {
190 struct vdec_config cfg;
191 struct vdec_sequence seq;
192};
193
194#define VDEC_MSG_REUSEINPUTBUFFER 1
195#define VDEC_MSG_FRAMEDONE 2
196
197struct vdec_msg {
198 u32 id;
199
200 union {
201 /* id = VDEC_MSG_REUSEINPUTBUFFER */
202 u32 buf_id;
203 /* id = VDEC_MSG_FRAMEDONE */
204 struct vdec_frame_info vfr_info;
205 };
206};
207
208struct vdec_init {
209 struct vdec_config_sps sps_cfg;
210 struct vdec_buf_req *buf_req;
211};
212
213struct vdec_input_buf {
214 u32 pmem_id;
215 struct vdec_input_buf_info buffer;
216 struct vdec_queue_status *queue_status;
217};
218
219struct vdec_queue_status {
220 u32 status;
221};
222
223struct vdec_dec_attributes {
224 u32 fourcc;
225 u32 profile;
226 u32 level;
227 u32 dec_pic_width;
228 u32 dec_pic_height;
229 struct vdec_buf_desc input;
230 struct vdec_buf_desc output;
231 struct vdec_buf_desc dec_req1;
232 struct vdec_buf_desc dec_req2;
233};
234
235struct vdec_version {
236 u32 major;
237 u32 minor;
238};
239
240struct dal_vdec_rectangle {
241 u32 width;
242 u32 height;
243};
244
245struct stride_type {
246 u32 luma;
247 u32 chroma;
248};
249
250struct frame_alignment_type {
251 u32 luma_width;
252 u32 luma_height;
253 u32 chroma_width;
254 u32 chroma_height;
255 u32 chroma_offset;
256};
257
258union vdec_property {
259 u32 fourcc;
260 u32 profile;
261 u32 level;
262 struct dal_vdec_rectangle dim;
263 struct vdec_cropping_window cw;
264 struct vdec_buf_desc input_req;
265 struct vdec_buf_desc output_req;
266 struct stride_type stride;
267 u32 num_dal_ports;
268 u32 priority;
269 struct frame_alignment_type frame_alignment;
270 u32 def_type;
271};
272
273struct vdec_property_info {
274 enum vdec_property_id id;
275 union vdec_property property;
276};
277#endif /* _MSM_VDEC_H_ */