blob: dbe118aae35ec2e8355fdb18d87dd55574e89a7e [file] [log] [blame]
Dima Zavin5c328262009-10-13 20:57:16 -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_VENC_H_
13#define _MSM_VENC_H_
Ben Cheng4b29af02012-03-07 16:14:53 -080014
Dima Zavin5c328262009-10-13 20:57:16 -070015#include <linux/types.h>
Ben Cheng4b29af02012-03-07 16:14:53 -080016
Gloria Wangf199d2d2010-03-03 16:26:26 -080017#define VENC_MAX_RECON_BUFFERS 2
Ben Cheng4b29af02012-03-07 16:14:53 -080018
Gloria Wangf199d2d2010-03-03 16:26:26 -080019#define VENC_FLAG_EOS 0x00000001
20#define VENC_FLAG_END_OF_FRAME 0x00000010
21#define VENC_FLAG_SYNC_FRAME 0x00000020
22#define VENC_FLAG_EXTRA_DATA 0x00000040
23#define VENC_FLAG_CODEC_CONFIG 0x00000080
Ben Cheng4b29af02012-03-07 16:14:53 -080024
Gloria Wangf199d2d2010-03-03 16:26:26 -080025enum venc_flush_type {
26 VENC_FLUSH_INPUT,
27 VENC_FLUSH_OUTPUT,
28 VENC_FLUSH_ALL
29};
Ben Cheng4b29af02012-03-07 16:14:53 -080030
Gloria Wangf199d2d2010-03-03 16:26:26 -080031enum venc_state_type {
32 VENC_STATE_PAUSE = 0x1,
33 VENC_STATE_START = 0x2,
34 VENC_STATE_STOP = 0x4
35};
Ben Cheng4b29af02012-03-07 16:14:53 -080036
Gloria Wangf199d2d2010-03-03 16:26:26 -080037enum venc_event_type_enum {
38 VENC_EVENT_START_STATUS,
39 VENC_EVENT_STOP_STATUS,
40 VENC_EVENT_SUSPEND_STATUS,
41 VENC_EVENT_RESUME_STATUS,
42 VENC_EVENT_FLUSH_STATUS,
43 VENC_EVENT_RELEASE_INPUT,
44 VENC_EVENT_DELIVER_OUTPUT,
45 VENC_EVENT_UNKNOWN_STATUS
46};
Ben Cheng4b29af02012-03-07 16:14:53 -080047
Gloria Wangf199d2d2010-03-03 16:26:26 -080048enum venc_status_code {
49 VENC_STATUS_SUCCESS,
50 VENC_STATUS_ERROR,
51 VENC_STATUS_INVALID_STATE,
52 VENC_STATUS_FLUSHING,
53 VENC_STATUS_INVALID_PARAM,
54 VENC_STATUS_CMD_QUEUE_FULL,
55 VENC_STATUS_CRITICAL,
56 VENC_STATUS_INSUFFICIENT_RESOURCES,
57 VENC_STATUS_TIMEOUT
58};
Ben Cheng4b29af02012-03-07 16:14:53 -080059
Gloria Wangf199d2d2010-03-03 16:26:26 -080060enum venc_msg_code {
61 VENC_MSG_INDICATION,
62 VENC_MSG_INPUT_BUFFER_DONE,
63 VENC_MSG_OUTPUT_BUFFER_DONE,
64 VENC_MSG_NEED_OUTPUT_BUFFER,
65 VENC_MSG_FLUSH,
66 VENC_MSG_START,
67 VENC_MSG_STOP,
68 VENC_MSG_PAUSE,
69 VENC_MSG_RESUME,
70 VENC_MSG_STOP_READING_MSG
71};
Ben Cheng4b29af02012-03-07 16:14:53 -080072
Gloria Wangf199d2d2010-03-03 16:26:26 -080073enum venc_error_code {
74 VENC_S_SUCCESS,
75 VENC_S_EFAIL,
76 VENC_S_EFATAL,
77 VENC_S_EBADPARAM,
78 VENC_S_EINVALSTATE,
79 VENC_S_ENOSWRES,
80 VENC_S_ENOHWRES,
81 VENC_S_EBUFFREQ,
82 VENC_S_EINVALCMD,
83 VENC_S_ETIMEOUT,
84 VENC_S_ENOREATMPT,
85 VENC_S_ENOPREREQ,
86 VENC_S_ECMDQFULL,
87 VENC_S_ENOTSUPP,
88 VENC_S_ENOTIMPL,
89 VENC_S_ENOTPMEM,
90 VENC_S_EFLUSHED,
91 VENC_S_EINSUFBUF,
92 VENC_S_ESAMESTATE,
93 VENC_S_EINVALTRANS
94};
Ben Cheng4b29af02012-03-07 16:14:53 -080095
Gloria Wangf199d2d2010-03-03 16:26:26 -080096enum venc_mem_region_enum {
97 VENC_PMEM_EBI1,
98 VENC_PMEM_SMI
99};
Ben Cheng4b29af02012-03-07 16:14:53 -0800100
Gloria Wangf199d2d2010-03-03 16:26:26 -0800101struct venc_buf_type {
102 unsigned int region;
103 unsigned int phys;
104 unsigned int size;
105 int offset;
106};
Ben Cheng4b29af02012-03-07 16:14:53 -0800107
Gloria Wangf199d2d2010-03-03 16:26:26 -0800108struct venc_qp_range {
109 unsigned int min_qp;
110 unsigned int max_qp;
111};
Ben Cheng4b29af02012-03-07 16:14:53 -0800112
Gloria Wangf199d2d2010-03-03 16:26:26 -0800113struct venc_frame_rate {
114 unsigned int frame_rate_num;
115 unsigned int frame_rate_den;
116};
Ben Cheng4b29af02012-03-07 16:14:53 -0800117
Gloria Wangf199d2d2010-03-03 16:26:26 -0800118struct venc_slice_info {
119 unsigned int slice_mode;
120 unsigned int units_per_slice;
121};
Ben Cheng4b29af02012-03-07 16:14:53 -0800122
Gloria Wangf199d2d2010-03-03 16:26:26 -0800123struct venc_extra_data {
124 unsigned int slice_extra_data_flag;
125 unsigned int slice_client_data1;
126 unsigned int slice_client_data2;
127 unsigned int slice_client_data3;
128 unsigned int none_extra_data_flag;
129 unsigned int none_client_data1;
130 unsigned int none_client_data2;
131 unsigned int none_client_data3;
132};
Ben Cheng4b29af02012-03-07 16:14:53 -0800133
Gloria Wangf199d2d2010-03-03 16:26:26 -0800134struct venc_common_config {
135 unsigned int standard;
136 unsigned int input_frame_height;
137 unsigned int input_frame_width;
138 unsigned int output_frame_height;
139 unsigned int output_frame_width;
140 unsigned int rotation_angle;
141 unsigned int intra_period;
142 unsigned int rate_control;
143 struct venc_frame_rate frame_rate;
144 unsigned int bitrate;
145 struct venc_qp_range qp_range;
146 unsigned int iframe_qp;
147 unsigned int pframe_qp;
148 struct venc_slice_info slice_config;
149 struct venc_extra_data extra_data;
150};
Ben Cheng4b29af02012-03-07 16:14:53 -0800151
Gloria Wangf199d2d2010-03-03 16:26:26 -0800152struct venc_nonio_buf_config {
153 struct venc_buf_type recon_buf1;
154 struct venc_buf_type recon_buf2;
155 struct venc_buf_type wb_buf;
156 struct venc_buf_type cmd_buf;
157 struct venc_buf_type vlc_buf;
158};
Ben Cheng4b29af02012-03-07 16:14:53 -0800159
Gloria Wangf199d2d2010-03-03 16:26:26 -0800160struct venc_mpeg4_config {
161 unsigned int profile;
162 unsigned int level;
163 unsigned int time_resolution;
164 unsigned int ac_prediction;
165 unsigned int hec_interval;
166 unsigned int data_partition;
167 unsigned int short_header;
168 unsigned int rvlc_enable;
169};
Ben Cheng4b29af02012-03-07 16:14:53 -0800170
Gloria Wangf199d2d2010-03-03 16:26:26 -0800171struct venc_h263_config {
172 unsigned int profile;
173 unsigned int level;
174};
Ben Cheng4b29af02012-03-07 16:14:53 -0800175
Gloria Wangf199d2d2010-03-03 16:26:26 -0800176struct venc_h264_config {
177 unsigned int profile;
178 unsigned int level;
179 unsigned int max_nal;
180 unsigned int idr_period;
181};
Ben Cheng4b29af02012-03-07 16:14:53 -0800182
Gloria Wangf199d2d2010-03-03 16:26:26 -0800183struct venc_pmem {
184 int src;
Dima Zavin5c328262009-10-13 20:57:16 -0700185 int fd;
Gloria Wangf199d2d2010-03-03 16:26:26 -0800186 unsigned int offset;
187 void *virt;
188 void *phys;
189 unsigned int size;
Dima Zavin5c328262009-10-13 20:57:16 -0700190};
Ben Cheng4b29af02012-03-07 16:14:53 -0800191
Gloria Wangf199d2d2010-03-03 16:26:26 -0800192struct venc_buffer {
193 unsigned char *ptr_buffer;
194 unsigned int size;
195 unsigned int len;
196 unsigned int offset;
197 long long time_stamp;
198 unsigned int flags;
199 unsigned int client_data;
Ben Cheng4b29af02012-03-07 16:14:53 -0800200
Dima Zavin5c328262009-10-13 20:57:16 -0700201};
Ben Cheng4b29af02012-03-07 16:14:53 -0800202
Gloria Wangf199d2d2010-03-03 16:26:26 -0800203struct venc_buffers {
204 struct venc_pmem recon_buf[VENC_MAX_RECON_BUFFERS];
205 struct venc_pmem wb_buf;
206 struct venc_pmem cmd_buf;
207 struct venc_pmem vlc_buf;
Dima Zavin5c328262009-10-13 20:57:16 -0700208};
Ben Cheng4b29af02012-03-07 16:14:53 -0800209
Gloria Wangf199d2d2010-03-03 16:26:26 -0800210struct venc_buffer_flush {
211 unsigned int flush_mode;
Dima Zavin5c328262009-10-13 20:57:16 -0700212};
Ben Cheng4b29af02012-03-07 16:14:53 -0800213
Gloria Wangf199d2d2010-03-03 16:26:26 -0800214union venc_msg_data {
215 struct venc_buffer buf;
216 struct venc_buffer_flush flush_ret;
Ben Cheng4b29af02012-03-07 16:14:53 -0800217
Dima Zavin5c328262009-10-13 20:57:16 -0700218};
Ben Cheng4b29af02012-03-07 16:14:53 -0800219
Gloria Wangf199d2d2010-03-03 16:26:26 -0800220struct venc_msg {
221 unsigned int status_code;
222 unsigned int msg_code;
223 union venc_msg_data msg_data;
224 unsigned int msg_data_size;
Dima Zavin5c328262009-10-13 20:57:16 -0700225};
Ben Cheng4b29af02012-03-07 16:14:53 -0800226
Gloria Wangf199d2d2010-03-03 16:26:26 -0800227union venc_codec_config {
228 struct venc_mpeg4_config mpeg4_params;
229 struct venc_h263_config h263_params;
230 struct venc_h264_config h264_params;
Dima Zavin5c328262009-10-13 20:57:16 -0700231};
Ben Cheng4b29af02012-03-07 16:14:53 -0800232
Gloria Wangf199d2d2010-03-03 16:26:26 -0800233struct venc_q6_config {
234 struct venc_common_config config_params;
235 union venc_codec_config codec_params;
236 struct venc_nonio_buf_config buf_params;
237 void *callback_event;
Dima Zavin5c328262009-10-13 20:57:16 -0700238};
Ben Cheng4b29af02012-03-07 16:14:53 -0800239
Gloria Wangf199d2d2010-03-03 16:26:26 -0800240struct venc_hdr_config {
241 struct venc_common_config config_params;
242 union venc_codec_config codec_params;
243};
Ben Cheng4b29af02012-03-07 16:14:53 -0800244
Gloria Wangf199d2d2010-03-03 16:26:26 -0800245struct venc_init_config {
246 struct venc_q6_config q6_config;
247 struct venc_buffers q6_bufs;
248};
Ben Cheng4b29af02012-03-07 16:14:53 -0800249
Gloria Wangf199d2d2010-03-03 16:26:26 -0800250struct venc_seq_config {
251 int size;
252 struct venc_pmem buf;
253 struct venc_q6_config q6_config;
Dima Zavin5c328262009-10-13 20:57:16 -0700254};
Ben Cheng4b29af02012-03-07 16:14:53 -0800255
Dima Zavin5c328262009-10-13 20:57:16 -0700256#define VENC_IOCTL_MAGIC 'V'
Ben Cheng4b29af02012-03-07 16:14:53 -0800257
Gloria Wangf199d2d2010-03-03 16:26:26 -0800258#define VENC_IOCTL_CMD_READ_NEXT_MSG _IOWR(VENC_IOCTL_MAGIC, 1, struct venc_msg)
Ben Cheng4b29af02012-03-07 16:14:53 -0800259
Gloria Wangf199d2d2010-03-03 16:26:26 -0800260#define VENC_IOCTL_CMD_STOP_READ_MSG _IO(VENC_IOCTL_MAGIC, 2)
Ben Cheng4b29af02012-03-07 16:14:53 -0800261
Gloria Wangf199d2d2010-03-03 16:26:26 -0800262#define VENC_IOCTL_SET_INPUT_BUFFER _IOW(VENC_IOCTL_MAGIC, 3, struct venc_pmem)
Ben Cheng4b29af02012-03-07 16:14:53 -0800263
Gloria Wangf199d2d2010-03-03 16:26:26 -0800264#define VENC_IOCTL_SET_OUTPUT_BUFFER _IOW(VENC_IOCTL_MAGIC, 4, struct venc_pmem)
Ben Cheng4b29af02012-03-07 16:14:53 -0800265
Gloria Wangf199d2d2010-03-03 16:26:26 -0800266#define VENC_IOCTL_CMD_START _IOW(VENC_IOCTL_MAGIC, 5, struct venc_init_config)
Ben Cheng4b29af02012-03-07 16:14:53 -0800267
Gloria Wangf199d2d2010-03-03 16:26:26 -0800268#define VENC_IOCTL_CMD_ENCODE_FRAME _IOW(VENC_IOCTL_MAGIC, 6, struct venc_buffer)
Ben Cheng4b29af02012-03-07 16:14:53 -0800269
Gloria Wangf199d2d2010-03-03 16:26:26 -0800270#define VENC_IOCTL_CMD_FILL_OUTPUT_BUFFER _IOW(VENC_IOCTL_MAGIC, 7, struct venc_buffer)
Ben Cheng4b29af02012-03-07 16:14:53 -0800271
Gloria Wangf199d2d2010-03-03 16:26:26 -0800272#define VENC_IOCTL_CMD_FLUSH _IOW(VENC_IOCTL_MAGIC, 8, struct venc_buffer_flush)
Ben Cheng4b29af02012-03-07 16:14:53 -0800273
Gloria Wangf199d2d2010-03-03 16:26:26 -0800274#define VENC_IOCTL_CMD_PAUSE _IO(VENC_IOCTL_MAGIC, 9)
Ben Cheng4b29af02012-03-07 16:14:53 -0800275
Gloria Wangf199d2d2010-03-03 16:26:26 -0800276#define VENC_IOCTL_CMD_RESUME _IO(VENC_IOCTL_MAGIC, 10)
Ben Cheng4b29af02012-03-07 16:14:53 -0800277
Gloria Wangf199d2d2010-03-03 16:26:26 -0800278#define VENC_IOCTL_CMD_STOP _IO(VENC_IOCTL_MAGIC, 11)
Ben Cheng4b29af02012-03-07 16:14:53 -0800279
Gloria Wangf199d2d2010-03-03 16:26:26 -0800280#define VENC_IOCTL_SET_INTRA_PERIOD _IOW(VENC_IOCTL_MAGIC, 12, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800281
Gloria Wangf199d2d2010-03-03 16:26:26 -0800282#define VENC_IOCTL_CMD_REQUEST_IFRAME _IO(VENC_IOCTL_MAGIC, 13)
Ben Cheng4b29af02012-03-07 16:14:53 -0800283
Gloria Wangf199d2d2010-03-03 16:26:26 -0800284#define VENC_IOCTL_GET_SEQUENCE_HDR _IOWR(VENC_IOCTL_MAGIC, 14, struct venc_seq_config)
Ben Cheng4b29af02012-03-07 16:14:53 -0800285
Gloria Wangf199d2d2010-03-03 16:26:26 -0800286#define VENC_IOCTL_SET_INTRA_REFRESH _IOW(VENC_IOCTL_MAGIC, 15, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800287
Gloria Wangf199d2d2010-03-03 16:26:26 -0800288#define VENC_IOCTL_SET_FRAME_RATE _IOW(VENC_IOCTL_MAGIC, 16, struct venc_frame_rate)
Ben Cheng4b29af02012-03-07 16:14:53 -0800289
Gloria Wangf199d2d2010-03-03 16:26:26 -0800290#define VENC_IOCTL_SET_TARGET_BITRATE _IOW(VENC_IOCTL_MAGIC, 17, int)
Ben Cheng4b29af02012-03-07 16:14:53 -0800291
Gloria Wangf199d2d2010-03-03 16:26:26 -0800292#define VENC_IOCTL_SET_QP_RANGE _IOW(VENC_IOCTL_MAGIC, 18, struct venc_qp_range)
Ben Cheng4b29af02012-03-07 16:14:53 -0800293
Dima Zavin5c328262009-10-13 20:57:16 -0700294#endif