• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  ****************************************************************************
11  ****************************************************************************/
12 #ifndef _MSM_VENC_H_
13 #define _MSM_VENC_H_
14 
15 #include <linux/types.h>
16 
17 #define VENC_MAX_RECON_BUFFERS 2
18 
19 #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
24 
25 enum venc_flush_type {
26  VENC_FLUSH_INPUT,
27  VENC_FLUSH_OUTPUT,
28  VENC_FLUSH_ALL
29 };
30 
31 enum venc_state_type {
32  VENC_STATE_PAUSE = 0x1,
33  VENC_STATE_START = 0x2,
34  VENC_STATE_STOP = 0x4
35 };
36 
37 enum 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 };
47 
48 enum 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 };
59 
60 enum 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 };
72 
73 enum 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 };
95 
96 enum venc_mem_region_enum {
97  VENC_PMEM_EBI1,
98  VENC_PMEM_SMI
99 };
100 
101 struct venc_buf_type {
102  unsigned int region;
103  unsigned int phys;
104  unsigned int size;
105  int offset;
106 };
107 
108 struct venc_qp_range {
109  unsigned int min_qp;
110  unsigned int max_qp;
111 };
112 
113 struct venc_frame_rate {
114  unsigned int frame_rate_num;
115  unsigned int frame_rate_den;
116 };
117 
118 struct venc_slice_info {
119  unsigned int slice_mode;
120  unsigned int units_per_slice;
121 };
122 
123 struct 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 };
133 
134 struct 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 };
151 
152 struct 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 };
159 
160 struct 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 };
170 
171 struct venc_h263_config {
172  unsigned int profile;
173  unsigned int level;
174 };
175 
176 struct venc_h264_config {
177  unsigned int profile;
178  unsigned int level;
179  unsigned int max_nal;
180  unsigned int idr_period;
181 };
182 
183 struct venc_pmem {
184  int src;
185  int fd;
186  unsigned int offset;
187  void *virt;
188  void *phys;
189  unsigned int size;
190 };
191 
192 struct 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;
200 
201 };
202 
203 struct 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;
208 };
209 
210 struct venc_buffer_flush {
211  unsigned int flush_mode;
212 };
213 
214 union venc_msg_data {
215  struct venc_buffer buf;
216  struct venc_buffer_flush flush_ret;
217 
218 };
219 
220 struct 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;
225 };
226 
227 union venc_codec_config {
228  struct venc_mpeg4_config mpeg4_params;
229  struct venc_h263_config h263_params;
230  struct venc_h264_config h264_params;
231 };
232 
233 struct 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;
238 };
239 
240 struct venc_hdr_config {
241  struct venc_common_config config_params;
242  union venc_codec_config codec_params;
243 };
244 
245 struct venc_init_config {
246  struct venc_q6_config q6_config;
247  struct venc_buffers q6_bufs;
248 };
249 
250 struct venc_seq_config {
251  int size;
252  struct venc_pmem buf;
253  struct venc_q6_config q6_config;
254 };
255 
256 #define VENC_IOCTL_MAGIC 'V'
257 
258 #define VENC_IOCTL_CMD_READ_NEXT_MSG   _IOWR(VENC_IOCTL_MAGIC, 1, struct venc_msg)
259 
260 #define VENC_IOCTL_CMD_STOP_READ_MSG _IO(VENC_IOCTL_MAGIC, 2)
261 
262 #define VENC_IOCTL_SET_INPUT_BUFFER   _IOW(VENC_IOCTL_MAGIC, 3, struct venc_pmem)
263 
264 #define VENC_IOCTL_SET_OUTPUT_BUFFER   _IOW(VENC_IOCTL_MAGIC, 4, struct venc_pmem)
265 
266 #define VENC_IOCTL_CMD_START _IOW(VENC_IOCTL_MAGIC, 5, struct venc_init_config)
267 
268 #define VENC_IOCTL_CMD_ENCODE_FRAME   _IOW(VENC_IOCTL_MAGIC, 6, struct venc_buffer)
269 
270 #define VENC_IOCTL_CMD_FILL_OUTPUT_BUFFER   _IOW(VENC_IOCTL_MAGIC, 7, struct venc_buffer)
271 
272 #define VENC_IOCTL_CMD_FLUSH   _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   _IOW(VENC_IOCTL_MAGIC, 12, int)
281 
282 #define VENC_IOCTL_CMD_REQUEST_IFRAME _IO(VENC_IOCTL_MAGIC, 13)
283 
284 #define VENC_IOCTL_GET_SEQUENCE_HDR   _IOWR(VENC_IOCTL_MAGIC, 14, struct venc_seq_config)
285 
286 #define VENC_IOCTL_SET_INTRA_REFRESH   _IOW(VENC_IOCTL_MAGIC, 15, int)
287 
288 #define VENC_IOCTL_SET_FRAME_RATE   _IOW(VENC_IOCTL_MAGIC, 16, struct venc_frame_rate)
289 
290 #define VENC_IOCTL_SET_TARGET_BITRATE   _IOW(VENC_IOCTL_MAGIC, 17, int)
291 
292 #define VENC_IOCTL_SET_QP_RANGE   _IOW(VENC_IOCTL_MAGIC, 18, struct venc_qp_range)
293 
294 #endif
295