blob: c6bf20c7b1bc82a59f4510ba916f660b860b206f [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001#ifndef _MSM_VENC_H_
2#define _MSM_VENC_H_
3
4#include <linux/types.h>
5
6#define VENC_MAX_RECON_BUFFERS 2
7
8#define VENC_FLAG_EOS 0x00000001
9#define VENC_FLAG_END_OF_FRAME 0x00000010
10#define VENC_FLAG_SYNC_FRAME 0x00000020
11#define VENC_FLAG_EXTRA_DATA 0x00000040
12#define VENC_FLAG_CODEC_CONFIG 0x00000080
13
14enum venc_flush_type {
15 VENC_FLUSH_INPUT,
16 VENC_FLUSH_OUTPUT,
17 VENC_FLUSH_ALL
18};
19
20enum venc_state_type {
21 VENC_STATE_PAUSE = 0x1,
22 VENC_STATE_START = 0x2,
23 VENC_STATE_STOP = 0x4
24};
25
26enum venc_event_type_enum {
27 VENC_EVENT_START_STATUS,
28 VENC_EVENT_STOP_STATUS,
29 VENC_EVENT_SUSPEND_STATUS,
30 VENC_EVENT_RESUME_STATUS,
31 VENC_EVENT_FLUSH_STATUS,
32 VENC_EVENT_RELEASE_INPUT,
33 VENC_EVENT_DELIVER_OUTPUT,
34 VENC_EVENT_UNKNOWN_STATUS
35};
36
37enum venc_status_code {
38 VENC_STATUS_SUCCESS,
39 VENC_STATUS_ERROR,
40 VENC_STATUS_INVALID_STATE,
41 VENC_STATUS_FLUSHING,
42 VENC_STATUS_INVALID_PARAM,
43 VENC_STATUS_CMD_QUEUE_FULL,
44 VENC_STATUS_CRITICAL,
45 VENC_STATUS_INSUFFICIENT_RESOURCES,
46 VENC_STATUS_TIMEOUT
47};
48
49enum venc_msg_code {
50 VENC_MSG_INDICATION,
51 VENC_MSG_INPUT_BUFFER_DONE,
52 VENC_MSG_OUTPUT_BUFFER_DONE,
53 VENC_MSG_NEED_OUTPUT_BUFFER,
54 VENC_MSG_FLUSH,
55 VENC_MSG_START,
56 VENC_MSG_STOP,
57 VENC_MSG_PAUSE,
58 VENC_MSG_RESUME,
59 VENC_MSG_STOP_READING_MSG
60};
61
62enum venc_error_code {
63 VENC_S_SUCCESS,
64 VENC_S_EFAIL,
65 VENC_S_EFATAL,
66 VENC_S_EBADPARAM,
67 VENC_S_EINVALSTATE,
68 VENC_S_ENOSWRES,
69 VENC_S_ENOHWRES,
70 VENC_S_EBUFFREQ,
71 VENC_S_EINVALCMD,
72 VENC_S_ETIMEOUT,
73 VENC_S_ENOREATMPT,
74 VENC_S_ENOPREREQ,
75 VENC_S_ECMDQFULL,
76 VENC_S_ENOTSUPP,
77 VENC_S_ENOTIMPL,
78 VENC_S_ENOTPMEM,
79 VENC_S_EFLUSHED,
80 VENC_S_EINSUFBUF,
81 VENC_S_ESAMESTATE,
82 VENC_S_EINVALTRANS
83};
84
85enum venc_mem_region_enum {
86 VENC_PMEM_EBI1,
87 VENC_PMEM_SMI
88};
89
90struct venc_buf_type {
91 u32 region;
92 u32 phys;
93 u32 size;
94 int offset;
95};
96
97struct venc_qp_range {
98 u32 min_qp;
99 u32 max_qp;
100};
101
102struct venc_frame_rate {
103 u32 frame_rate_num;
104 u32 frame_rate_den;
105};
106
107struct venc_slice_info {
108 u32 slice_mode;
109 u32 units_per_slice;
110};
111
112struct venc_extra_data {
113 u32 slice_extra_data_flag;
114 u32 slice_client_data1;
115 u32 slice_client_data2;
116 u32 slice_client_data3;
117 u32 none_extra_data_flag;
118 u32 none_client_data1;
119 u32 none_client_data2;
120 u32 none_client_data3;
121};
122
123struct venc_common_config {
124 u32 standard;
125 u32 input_frame_height;
126 u32 input_frame_width;
127 u32 output_frame_height;
128 u32 output_frame_width;
129 u32 rotation_angle;
130 u32 intra_period;
131 u32 rate_control;
132 struct venc_frame_rate frame_rate;
133 u32 bitrate;
134 struct venc_qp_range qp_range;
135 u32 iframe_qp;
136 u32 pframe_qp;
137 struct venc_slice_info slice_config;
138 struct venc_extra_data extra_data;
139};
140
141struct venc_nonio_buf_config {
142 struct venc_buf_type recon_buf1;
143 struct venc_buf_type recon_buf2;
144 struct venc_buf_type wb_buf;
145 struct venc_buf_type cmd_buf;
146 struct venc_buf_type vlc_buf;
147};
148
149struct venc_mpeg4_config {
150 u32 profile;
151 u32 level;
152 u32 time_resolution;
153 u32 ac_prediction;
154 u32 hec_interval;
155 u32 data_partition;
156 u32 short_header;
157 u32 rvlc_enable;
158};
159
160struct venc_h263_config {
161 u32 profile;
162 u32 level;
163};
164
165struct venc_h264_config {
166 u32 profile;
167 u32 level;
168 u32 max_nal;
169 u32 idr_period;
170};
171
172struct venc_pmem {
173 int src;
174 int fd;
175 u32 offset;
176 void *virt;
177 void *phys;
178 u32 size;
179};
180
181struct venc_buffer {
182 unsigned char *ptr_buffer;
183 u32 size;
184 u32 len;
185 u32 offset;
186 long long time_stamp;
187 u32 flags;
188 u32 client_data;
189
190};
191
192struct venc_buffers {
193 struct venc_pmem recon_buf[VENC_MAX_RECON_BUFFERS];
194 struct venc_pmem wb_buf;
195 struct venc_pmem cmd_buf;
196 struct venc_pmem vlc_buf;
197};
198
199struct venc_buffer_flush {
200 u32 flush_mode;
201};
202
203union venc_msg_data {
204 struct venc_buffer buf;
205 struct venc_buffer_flush flush_ret;
206
207};
208
209struct venc_msg {
210 u32 status_code;
211 u32 msg_code;
212 u32 msg_data_size;
213 union venc_msg_data msg_data;
214};
215
216union venc_codec_config {
217 struct venc_mpeg4_config mpeg4_params;
218 struct venc_h263_config h263_params;
219 struct venc_h264_config h264_params;
220};
221
222struct venc_q6_config {
223 struct venc_common_config config_params;
224 union venc_codec_config codec_params;
225 struct venc_nonio_buf_config buf_params;
226 void *callback_event;
227};
228
229struct venc_hdr_config {
230 struct venc_common_config config_params;
231 union venc_codec_config codec_params;
232};
233
234struct venc_init_config {
235 struct venc_q6_config q6_config;
236 struct venc_buffers q6_bufs;
237};
238
239struct venc_seq_config {
240 int size;
241 struct venc_pmem buf;
242 struct venc_q6_config q6_config;
243};
244
245struct venc_version {
246 u32 major;
247 u32 minor;
248};
249
250#define VENC_IOCTL_MAGIC 'V'
251
252#define VENC_IOCTL_CMD_READ_NEXT_MSG \
253 _IOWR(VENC_IOCTL_MAGIC, 1, struct venc_msg)
254
255#define VENC_IOCTL_CMD_STOP_READ_MSG _IO(VENC_IOCTL_MAGIC, 2)
256
257#define VENC_IOCTL_SET_INPUT_BUFFER \
258 _IOW(VENC_IOCTL_MAGIC, 3, struct venc_pmem)
259
260#define VENC_IOCTL_SET_OUTPUT_BUFFER \
261 _IOW(VENC_IOCTL_MAGIC, 4, struct venc_pmem)
262
263#define VENC_IOCTL_CMD_START _IOW(VENC_IOCTL_MAGIC, 5, struct venc_init_config)
264
265#define VENC_IOCTL_CMD_ENCODE_FRAME \
266 _IOW(VENC_IOCTL_MAGIC, 6, struct venc_buffer)
267
268#define VENC_IOCTL_CMD_FILL_OUTPUT_BUFFER \
269 _IOW(VENC_IOCTL_MAGIC, 7, struct venc_buffer)
270
271#define VENC_IOCTL_CMD_FLUSH \
272 _IOW(VENC_IOCTL_MAGIC, 8, struct venc_buffer_flush)
273
274#define VENC_IOCTL_CMD_PAUSE _IO(VENC_IOCTL_MAGIC, 9)
275
276#define VENC_IOCTL_CMD_RESUME _IO(VENC_IOCTL_MAGIC, 10)
277
278#define VENC_IOCTL_CMD_STOP _IO(VENC_IOCTL_MAGIC, 11)
279
280#define VENC_IOCTL_SET_INTRA_PERIOD \
281 _IOW(VENC_IOCTL_MAGIC, 12, int)
282
283#define VENC_IOCTL_CMD_REQUEST_IFRAME _IO(VENC_IOCTL_MAGIC, 13)
284
285#define VENC_IOCTL_GET_SEQUENCE_HDR \
286 _IOWR(VENC_IOCTL_MAGIC, 14, struct venc_seq_config)
287
288#define VENC_IOCTL_SET_INTRA_REFRESH \
289 _IOW(VENC_IOCTL_MAGIC, 15, int)
290
291#define VENC_IOCTL_SET_FRAME_RATE \
292 _IOW(VENC_IOCTL_MAGIC, 16, struct venc_frame_rate)
293
294#define VENC_IOCTL_SET_TARGET_BITRATE \
295 _IOW(VENC_IOCTL_MAGIC, 17, int)
296
297#define VENC_IOCTL_SET_QP_RANGE \
298 _IOW(VENC_IOCTL_MAGIC, 18, struct venc_qp_range)
299
300#define VENC_IOCTL_GET_VERSION \
301 _IOR(VENC_IOCTL_MAGIC, 19, struct venc_version)
302
303#endif