Blame view

include/media/videobuf2-v4l2.h 9.76 KB
c139990e8   Junghak Sung   [media] media: vi...
1
2
3
4
5
6
7
8
9
10
11
12
13
  /*
   * videobuf2-v4l2.h - V4L2 driver helper framework
   *
   * Copyright (C) 2010 Samsung Electronics
   *
   * Author: Pawel Osciak <pawel@osciak.com>
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License as published by
   * the Free Software Foundation.
   */
  #ifndef _MEDIA_VIDEOBUF2_V4L2_H
  #define _MEDIA_VIDEOBUF2_V4L2_H
2d7007153   Junghak Sung   [media] media: vi...
14
  #include <linux/videodev2.h>
c139990e8   Junghak Sung   [media] media: vi...
15
  #include <media/videobuf2-core.h>
bed04f934   Junghak Sung   [media] media: vi...
16
17
18
19
20
21
22
  #if VB2_MAX_FRAME != VIDEO_MAX_FRAME
  #error VB2_MAX_FRAME != VIDEO_MAX_FRAME
  #endif
  
  #if VB2_MAX_PLANES != VIDEO_MAX_PLANES
  #error VB2_MAX_PLANES != VIDEO_MAX_PLANES
  #endif
2d7007153   Junghak Sung   [media] media: vi...
23
24
  /**
   * struct vb2_v4l2_buffer - video buffer information for v4l2
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
25
   *
2d7007153   Junghak Sung   [media] media: vi...
26
27
28
   * @vb2_buf:	video buffer 2
   * @flags:	buffer informational flags
   * @field:	enum v4l2_field; field order of the image in the buffer
2d7007153   Junghak Sung   [media] media: vi...
29
30
   * @timecode:	frame timecode
   * @sequence:	sequence count of this frame
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
31
   *
2d7007153   Junghak Sung   [media] media: vi...
32
33
34
35
36
37
38
39
   * Should contain enough information to be able to cover all the fields
   * of struct v4l2_buffer at videodev2.h
   */
  struct vb2_v4l2_buffer {
  	struct vb2_buffer	vb2_buf;
  
  	__u32			flags;
  	__u32			field;
2d7007153   Junghak Sung   [media] media: vi...
40
41
42
  	struct v4l2_timecode	timecode;
  	__u32			sequence;
  };
d383b5791   Mauro Carvalho Chehab   [media] DocBook: ...
43
  /*
2d7007153   Junghak Sung   [media] media: vi...
44
45
46
   * to_vb2_v4l2_buffer() - cast struct vb2_buffer * to struct vb2_v4l2_buffer *
   */
  #define to_vb2_v4l2_buffer(vb) \
d383b5791   Mauro Carvalho Chehab   [media] DocBook: ...
47
  	container_of(vb, struct vb2_v4l2_buffer, vb2_buf)
2d7007153   Junghak Sung   [media] media: vi...
48

3c5be988e   Junghak Sung   [media] media: vi...
49
  int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
50
51
52
53
  
  /**
   * vb2_reqbufs() - Wrapper for vb2_core_reqbufs() that also verifies
   * the memory and type values.
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
54
   *
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
55
56
57
58
   * @q:		videobuf2 queue
   * @req:	struct passed from userspace to vidioc_reqbufs handler
   *		in driver
   */
3c5be988e   Junghak Sung   [media] media: vi...
59
  int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
60
61
62
  /**
   * vb2_create_bufs() - Wrapper for vb2_core_create_bufs() that also verifies
   * the memory and type values.
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
63
   *
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
64
65
66
67
   * @q:		videobuf2 queue
   * @create:	creation parameters, passed from userspace to vidioc_create_bufs
   *		handler in driver
   */
3c5be988e   Junghak Sung   [media] media: vi...
68
  int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
69
70
71
  
  /**
   * vb2_prepare_buf() - Pass ownership of a buffer from userspace to the kernel
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
72
   *
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
73
74
75
76
77
78
   * @q:		videobuf2 queue
   * @b:		buffer structure passed from userspace to vidioc_prepare_buf
   *		handler in driver
   *
   * Should be called from vidioc_prepare_buf ioctl handler of a driver.
   * This function:
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
79
80
81
82
   *
   * #) verifies the passed buffer,
   * #) calls buf_prepare callback in the driver (if provided), in which
   *    driver-specific buffer initialization can be performed.
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
83
84
85
86
   *
   * The return values from this function are intended to be directly returned
   * from vidioc_prepare_buf handler in driver.
   */
3c5be988e   Junghak Sung   [media] media: vi...
87
  int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
88
89
90
  /**
   * vb2_qbuf() - Queue a buffer from userspace
   * @q:		videobuf2 queue
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
91
   * @b:		buffer structure passed from userspace to VIDIOC_QBUF() handler
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
92
93
   *		in driver
   *
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
94
95
   * Should be called from VIDIOC_QBUF() ioctl handler of a driver.
   *
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
96
   * This function:
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
97
98
99
   *
   * #) verifies the passed buffer,
   * #) if necessary, calls buf_prepare callback in the driver (if provided), in
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
100
   *    which driver-specific buffer initialization can be performed,
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
101
   * #) if streaming is on, queues the buffer in driver by the means of buf_queue
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
102
103
104
   *    callback for processing.
   *
   * The return values from this function are intended to be directly returned
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
105
   * from VIDIOC_QBUF() handler in driver.
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
106
   */
3c5be988e   Junghak Sung   [media] media: vi...
107
  int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
108
109
110
111
  
  /**
   * vb2_expbuf() - Export a buffer as a file descriptor
   * @q:		videobuf2 queue
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
112
   * @eb:		export buffer structure passed from userspace to VIDIOC_EXPBUF()
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
113
114
115
   *		handler in driver
   *
   * The return values from this function are intended to be directly returned
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
116
   * from VIDIOC_EXPBUF() handler in driver.
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
117
   */
3c5be988e   Junghak Sung   [media] media: vi...
118
  int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
119
120
121
122
  
  /**
   * vb2_dqbuf() - Dequeue a buffer to the userspace
   * @q:		videobuf2 queue
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
123
   * @b:		buffer structure passed from userspace to VIDIOC_DQBUF() handler
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
124
125
126
127
128
   *		in driver
   * @nonblocking: if true, this call will not sleep waiting for a buffer if no
   *		 buffers ready for dequeuing are present. Normally the driver
   *		 would be passing (file->f_flags & O_NONBLOCK) here
   *
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
129
130
   * Should be called from VIDIOC_DQBUF() ioctl handler of a driver.
   *
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
131
   * This function:
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
132
133
134
   *
   * #) verifies the passed buffer,
   * #) calls buf_finish callback in the driver (if provided), in which
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
135
136
   *    driver can perform any additional operations that may be required before
   *    returning the buffer to userspace, such as cache sync,
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
137
   * #) the buffer struct members are filled with relevant information for
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
138
139
140
   *    the userspace.
   *
   * The return values from this function are intended to be directly returned
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
141
   * from VIDIOC_DQBUF() handler in driver.
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
142
   */
3c5be988e   Junghak Sung   [media] media: vi...
143
  int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
144
145
146
147
148
149
  /**
   * vb2_streamon - start streaming
   * @q:		videobuf2 queue
   * @type:	type argument passed from userspace to vidioc_streamon handler
   *
   * Should be called from vidioc_streamon handler of a driver.
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
150
   *
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
151
   * This function:
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
152
   *
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
153
154
155
156
157
158
   * 1) verifies current state
   * 2) passes any previously queued buffers to the driver and starts streaming
   *
   * The return values from this function are intended to be directly returned
   * from vidioc_streamon handler in the driver.
   */
3c5be988e   Junghak Sung   [media] media: vi...
159
  int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
160
161
162
163
164
165
166
  
  /**
   * vb2_streamoff - stop streaming
   * @q:		videobuf2 queue
   * @type:	type argument passed from userspace to vidioc_streamoff handler
   *
   * Should be called from vidioc_streamoff handler of a driver.
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
167
   *
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
168
   * This function:
bf4404b48   Mauro Carvalho Chehab   [media] videobuf2...
169
170
171
   *
   * #) verifies current state,
   * #) stop streaming and dequeues any queued buffers, including those previously
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
172
173
174
175
176
177
   *    passed to the driver (after waiting for the driver to finish).
   *
   * This call can be used for pausing playback.
   * The return values from this function are intended to be directly returned
   * from vidioc_streamoff handler in the driver
   */
3c5be988e   Junghak Sung   [media] media: vi...
178
  int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
179
180
181
182
183
184
185
186
187
188
189
  /**
   * vb2_queue_init() - initialize a videobuf2 queue
   * @q:		videobuf2 queue; this structure should be allocated in driver
   *
   * The vb2_queue structure should be allocated by the driver. The driver is
   * responsible of clearing it's content and setting initial values for some
   * required entries before calling this function.
   * q->ops, q->mem_ops, q->type and q->io_modes are mandatory. Please refer
   * to the struct vb2_queue description in include/media/videobuf2-core.h
   * for more information.
   */
3c5be988e   Junghak Sung   [media] media: vi...
190
  int __must_check vb2_queue_init(struct vb2_queue *q);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
191
192
193
194
195
196
197
198
199
  
  /**
   * vb2_queue_release() - stop streaming, release the queue and free memory
   * @q:		videobuf2 queue
   *
   * This function stops streaming and performs necessary clean ups, including
   * freeing video buffer memory. The driver is responsible for freeing
   * the vb2_queue structure itself.
   */
3c5be988e   Junghak Sung   [media] media: vi...
200
  void vb2_queue_release(struct vb2_queue *q);
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
  
  /**
   * vb2_poll() - implements poll userspace operation
   * @q:		videobuf2 queue
   * @file:	file argument passed to the poll file operation handler
   * @wait:	wait argument passed to the poll file operation handler
   *
   * This function implements poll file operation handler for a driver.
   * For CAPTURE queues, if a buffer is ready to be dequeued, the userspace will
   * be informed that the file descriptor of a video device is available for
   * reading.
   * For OUTPUT queues, if a buffer is ready to be dequeued, the file descriptor
   * will be reported as available for writing.
   *
   * If the driver uses struct v4l2_fh, then vb2_poll() will also check for any
   * pending events.
   *
   * The return values from this function are intended to be directly returned
   * from poll handler in driver.
   */
af3bac1a7   Junghak Sung   [media] media: vi...
221
  unsigned int vb2_poll(struct vb2_queue *q, struct file *file,
24ade5b6d   Mauro Carvalho Chehab   [media] videobuf2...
222
  		      poll_table *wait);
3c5be988e   Junghak Sung   [media] media: vi...
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
  
  /*
   * The following functions are not part of the vb2 core API, but are simple
   * helper functions that you can use in your struct v4l2_file_operations,
   * struct v4l2_ioctl_ops and struct vb2_ops. They will serialize if vb2_queue->lock
   * or video_device->lock is set, and they will set and test vb2_queue->owner
   * to check if the calling filehandle is permitted to do the queuing operation.
   */
  
  /* struct v4l2_ioctl_ops helpers */
  
  int vb2_ioctl_reqbufs(struct file *file, void *priv,
  			  struct v4l2_requestbuffers *p);
  int vb2_ioctl_create_bufs(struct file *file, void *priv,
  			  struct v4l2_create_buffers *p);
  int vb2_ioctl_prepare_buf(struct file *file, void *priv,
  			  struct v4l2_buffer *p);
  int vb2_ioctl_querybuf(struct file *file, void *priv, struct v4l2_buffer *p);
  int vb2_ioctl_qbuf(struct file *file, void *priv, struct v4l2_buffer *p);
  int vb2_ioctl_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p);
  int vb2_ioctl_streamon(struct file *file, void *priv, enum v4l2_buf_type i);
  int vb2_ioctl_streamoff(struct file *file, void *priv, enum v4l2_buf_type i);
  int vb2_ioctl_expbuf(struct file *file, void *priv,
  	struct v4l2_exportbuffer *p);
  
  /* struct v4l2_file_operations helpers */
  
  int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma);
  int vb2_fop_release(struct file *file);
  int _vb2_fop_release(struct file *file, struct mutex *lock);
  ssize_t vb2_fop_write(struct file *file, const char __user *buf,
  		size_t count, loff_t *ppos);
  ssize_t vb2_fop_read(struct file *file, char __user *buf,
  		size_t count, loff_t *ppos);
  unsigned int vb2_fop_poll(struct file *file, poll_table *wait);
  #ifndef CONFIG_MMU
  unsigned long vb2_fop_get_unmapped_area(struct file *file, unsigned long addr,
  		unsigned long len, unsigned long pgoff, unsigned long flags);
  #endif
dba2d12ae   Mauro Carvalho Chehab   [media] videobuf2...
262
263
264
265
266
267
268
  /**
   * vb2_ops_wait_prepare - helper function to lock a struct &vb2_queue
   *
   * @vq: pointer to struct vb2_queue
   *
   * ..note:: only use if vq->lock is non-NULL.
   */
3c5be988e   Junghak Sung   [media] media: vi...
269
  void vb2_ops_wait_prepare(struct vb2_queue *vq);
dba2d12ae   Mauro Carvalho Chehab   [media] videobuf2...
270
271
272
273
274
275
276
277
  
  /**
   * vb2_ops_wait_finish - helper function to unlock a struct &vb2_queue
   *
   * @vq: pointer to struct vb2_queue
   *
   * ..note:: only use if vq->lock is non-NULL.
   */
3c5be988e   Junghak Sung   [media] media: vi...
278
  void vb2_ops_wait_finish(struct vb2_queue *vq);
c139990e8   Junghak Sung   [media] media: vi...
279
  #endif /* _MEDIA_VIDEOBUF2_V4L2_H */