linux/include/media/videobuf2-v4l2.h
<<
>>
Prefs
   1/*
   2 * videobuf2-v4l2.h - V4L2 driver helper framework
   3 *
   4 * Copyright (C) 2010 Samsung Electronics
   5 *
   6 * Author: Pawel Osciak <pawel@osciak.com>
   7 *
   8 * This program is free software; you can redistribute it and/or modify
   9 * it under the terms of the GNU General Public License as published by
  10 * the Free Software Foundation.
  11 */
  12#ifndef _MEDIA_VIDEOBUF2_V4L2_H
  13#define _MEDIA_VIDEOBUF2_V4L2_H
  14
  15#include <linux/videodev2.h>
  16#include <media/videobuf2-core.h>
  17
  18#if VB2_MAX_FRAME != VIDEO_MAX_FRAME
  19#error VB2_MAX_FRAME != VIDEO_MAX_FRAME
  20#endif
  21
  22#if VB2_MAX_PLANES != VIDEO_MAX_PLANES
  23#error VB2_MAX_PLANES != VIDEO_MAX_PLANES
  24#endif
  25
  26/**
  27 * struct vb2_v4l2_buffer - video buffer information for v4l2.
  28 *
  29 * @vb2_buf:    embedded struct &vb2_buffer.
  30 * @flags:      buffer informational flags.
  31 * @field:      field order of the image in the buffer, as defined by
  32 *              &enum v4l2_field.
  33 * @timecode:   frame timecode.
  34 * @sequence:   sequence count of this frame.
  35 * @request_fd: the request_fd associated with this buffer
  36 * @is_held:    if true, then this capture buffer was held
  37 * @planes:     plane information (userptr/fd, length, bytesused, data_offset).
  38 *
  39 * Should contain enough information to be able to cover all the fields
  40 * of &struct v4l2_buffer at ``videodev2.h``.
  41 */
  42struct vb2_v4l2_buffer {
  43        struct vb2_buffer       vb2_buf;
  44
  45        __u32                   flags;
  46        __u32                   field;
  47        struct v4l2_timecode    timecode;
  48        __u32                   sequence;
  49        __s32                   request_fd;
  50        bool                    is_held;
  51        struct vb2_plane        planes[VB2_MAX_PLANES];
  52};
  53
  54/* VB2 V4L2 flags as set in vb2_queue.subsystem_flags */
  55#define VB2_V4L2_FL_SUPPORTS_M2M_HOLD_CAPTURE_BUF (1 << 0)
  56
  57/*
  58 * to_vb2_v4l2_buffer() - cast struct vb2_buffer * to struct vb2_v4l2_buffer *
  59 */
  60#define to_vb2_v4l2_buffer(vb) \
  61        container_of(vb, struct vb2_v4l2_buffer, vb2_buf)
  62
  63/**
  64 * vb2_find_timestamp() - Find buffer with given timestamp in the queue
  65 *
  66 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
  67 * @timestamp:  the timestamp to find.
  68 * @start_idx:  the start index (usually 0) in the buffer array to start
  69 *              searching from. Note that there may be multiple buffers
  70 *              with the same timestamp value, so you can restart the search
  71 *              by setting @start_idx to the previously found index + 1.
  72 *
  73 * Returns the buffer index of the buffer with the given @timestamp, or
  74 * -1 if no buffer with @timestamp was found.
  75 */
  76int vb2_find_timestamp(const struct vb2_queue *q, u64 timestamp,
  77                       unsigned int start_idx);
  78
  79int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b);
  80
  81/**
  82 * vb2_reqbufs() - Wrapper for vb2_core_reqbufs() that also verifies
  83 * the memory and type values.
  84 *
  85 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
  86 * @req:        &struct v4l2_requestbuffers passed from userspace to
  87 *              &v4l2_ioctl_ops->vidioc_reqbufs handler in driver.
  88 */
  89int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req);
  90
  91/**
  92 * vb2_create_bufs() - Wrapper for vb2_core_create_bufs() that also verifies
  93 * the memory and type values.
  94 *
  95 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
  96 * @create:     creation parameters, passed from userspace to
  97 *              &v4l2_ioctl_ops->vidioc_create_bufs handler in driver
  98 */
  99int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create);
 100
 101/**
 102 * vb2_prepare_buf() - Pass ownership of a buffer from userspace to the kernel
 103 *
 104 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 105 * @mdev:       pointer to &struct media_device, may be NULL.
 106 * @b:          buffer structure passed from userspace to
 107 *              &v4l2_ioctl_ops->vidioc_prepare_buf handler in driver
 108 *
 109 * Should be called from &v4l2_ioctl_ops->vidioc_prepare_buf ioctl handler
 110 * of a driver.
 111 *
 112 * This function:
 113 *
 114 * #) verifies the passed buffer,
 115 * #) calls &vb2_ops->buf_prepare callback in the driver (if provided),
 116 *    in which driver-specific buffer initialization can be performed.
 117 * #) if @b->request_fd is non-zero and @mdev->ops->req_queue is set,
 118 *    then bind the prepared buffer to the request.
 119 *
 120 * The return values from this function are intended to be directly returned
 121 * from &v4l2_ioctl_ops->vidioc_prepare_buf handler in driver.
 122 */
 123int vb2_prepare_buf(struct vb2_queue *q, struct media_device *mdev,
 124                    struct v4l2_buffer *b);
 125
 126/**
 127 * vb2_qbuf() - Queue a buffer from userspace
 128 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 129 * @mdev:       pointer to &struct media_device, may be NULL.
 130 * @b:          buffer structure passed from userspace to
 131 *              &v4l2_ioctl_ops->vidioc_qbuf handler in driver
 132 *
 133 * Should be called from &v4l2_ioctl_ops->vidioc_qbuf handler of a driver.
 134 *
 135 * This function:
 136 *
 137 * #) verifies the passed buffer;
 138 * #) if @b->request_fd is non-zero and @mdev->ops->req_queue is set,
 139 *    then bind the buffer to the request.
 140 * #) if necessary, calls &vb2_ops->buf_prepare callback in the driver
 141 *    (if provided), in which driver-specific buffer initialization can
 142 *    be performed;
 143 * #) if streaming is on, queues the buffer in driver by the means of
 144 *    &vb2_ops->buf_queue callback for processing.
 145 *
 146 * The return values from this function are intended to be directly returned
 147 * from &v4l2_ioctl_ops->vidioc_qbuf handler in driver.
 148 */
 149int vb2_qbuf(struct vb2_queue *q, struct media_device *mdev,
 150             struct v4l2_buffer *b);
 151
 152/**
 153 * vb2_expbuf() - Export a buffer as a file descriptor
 154 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 155 * @eb:         export buffer structure passed from userspace to
 156 *              &v4l2_ioctl_ops->vidioc_expbuf handler in driver
 157 *
 158 * The return values from this function are intended to be directly returned
 159 * from &v4l2_ioctl_ops->vidioc_expbuf handler in driver.
 160 */
 161int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb);
 162
 163/**
 164 * vb2_dqbuf() - Dequeue a buffer to the userspace
 165 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 166 * @b:          buffer structure passed from userspace to
 167 *              &v4l2_ioctl_ops->vidioc_dqbuf handler in driver
 168 * @nonblocking: if true, this call will not sleep waiting for a buffer if no
 169 *               buffers ready for dequeuing are present. Normally the driver
 170 *               would be passing (&file->f_flags & %O_NONBLOCK) here
 171 *
 172 * Should be called from &v4l2_ioctl_ops->vidioc_dqbuf ioctl handler
 173 * of a driver.
 174 *
 175 * This function:
 176 *
 177 * #) verifies the passed buffer;
 178 * #) calls &vb2_ops->buf_finish callback in the driver (if provided), in which
 179 *    driver can perform any additional operations that may be required before
 180 *    returning the buffer to userspace, such as cache sync;
 181 * #) the buffer struct members are filled with relevant information for
 182 *    the userspace.
 183 *
 184 * The return values from this function are intended to be directly returned
 185 * from &v4l2_ioctl_ops->vidioc_dqbuf handler in driver.
 186 */
 187int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking);
 188
 189/**
 190 * vb2_streamon - start streaming
 191 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 192 * @type:       type argument passed from userspace to vidioc_streamon handler,
 193 *              as defined by &enum v4l2_buf_type.
 194 *
 195 * Should be called from &v4l2_ioctl_ops->vidioc_streamon handler of a driver.
 196 *
 197 * This function:
 198 *
 199 * 1) verifies current state
 200 * 2) passes any previously queued buffers to the driver and starts streaming
 201 *
 202 * The return values from this function are intended to be directly returned
 203 * from &v4l2_ioctl_ops->vidioc_streamon handler in the driver.
 204 */
 205int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type);
 206
 207/**
 208 * vb2_streamoff - stop streaming
 209 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 210 * @type:       type argument passed from userspace to vidioc_streamoff handler
 211 *
 212 * Should be called from vidioc_streamoff handler of a driver.
 213 *
 214 * This function:
 215 *
 216 * #) verifies current state,
 217 * #) stop streaming and dequeues any queued buffers, including those previously
 218 *    passed to the driver (after waiting for the driver to finish).
 219 *
 220 * This call can be used for pausing playback.
 221 * The return values from this function are intended to be directly returned
 222 * from vidioc_streamoff handler in the driver
 223 */
 224int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type);
 225
 226/**
 227 * vb2_queue_init() - initialize a videobuf2 queue
 228 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 229 *
 230 * The vb2_queue structure should be allocated by the driver. The driver is
 231 * responsible of clearing it's content and setting initial values for some
 232 * required entries before calling this function.
 233 * q->ops, q->mem_ops, q->type and q->io_modes are mandatory. Please refer
 234 * to the struct vb2_queue description in include/media/videobuf2-core.h
 235 * for more information.
 236 */
 237int __must_check vb2_queue_init(struct vb2_queue *q);
 238
 239/**
 240 * vb2_queue_release() - stop streaming, release the queue and free memory
 241 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 242 *
 243 * This function stops streaming and performs necessary clean ups, including
 244 * freeing video buffer memory. The driver is responsible for freeing
 245 * the vb2_queue structure itself.
 246 */
 247void vb2_queue_release(struct vb2_queue *q);
 248
 249/**
 250 * vb2_poll() - implements poll userspace operation
 251 * @q:          pointer to &struct vb2_queue with videobuf2 queue.
 252 * @file:       file argument passed to the poll file operation handler
 253 * @wait:       wait argument passed to the poll file operation handler
 254 *
 255 * This function implements poll file operation handler for a driver.
 256 * For CAPTURE queues, if a buffer is ready to be dequeued, the userspace will
 257 * be informed that the file descriptor of a video device is available for
 258 * reading.
 259 * For OUTPUT queues, if a buffer is ready to be dequeued, the file descriptor
 260 * will be reported as available for writing.
 261 *
 262 * If the driver uses struct v4l2_fh, then vb2_poll() will also check for any
 263 * pending events.
 264 *
 265 * The return values from this function are intended to be directly returned
 266 * from poll handler in driver.
 267 */
 268__poll_t vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait);
 269
 270/*
 271 * The following functions are not part of the vb2 core API, but are simple
 272 * helper functions that you can use in your struct v4l2_file_operations,
 273 * struct v4l2_ioctl_ops and struct vb2_ops. They will serialize if vb2_queue->lock
 274 * or video_device->lock is set, and they will set and test vb2_queue->owner
 275 * to check if the calling filehandle is permitted to do the queuing operation.
 276 */
 277
 278/* struct v4l2_ioctl_ops helpers */
 279
 280int vb2_ioctl_reqbufs(struct file *file, void *priv,
 281                          struct v4l2_requestbuffers *p);
 282int vb2_ioctl_create_bufs(struct file *file, void *priv,
 283                          struct v4l2_create_buffers *p);
 284int vb2_ioctl_prepare_buf(struct file *file, void *priv,
 285                          struct v4l2_buffer *p);
 286int vb2_ioctl_querybuf(struct file *file, void *priv, struct v4l2_buffer *p);
 287int vb2_ioctl_qbuf(struct file *file, void *priv, struct v4l2_buffer *p);
 288int vb2_ioctl_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p);
 289int vb2_ioctl_streamon(struct file *file, void *priv, enum v4l2_buf_type i);
 290int vb2_ioctl_streamoff(struct file *file, void *priv, enum v4l2_buf_type i);
 291int vb2_ioctl_expbuf(struct file *file, void *priv,
 292        struct v4l2_exportbuffer *p);
 293
 294/* struct v4l2_file_operations helpers */
 295
 296int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma);
 297int vb2_fop_release(struct file *file);
 298int _vb2_fop_release(struct file *file, struct mutex *lock);
 299ssize_t vb2_fop_write(struct file *file, const char __user *buf,
 300                size_t count, loff_t *ppos);
 301ssize_t vb2_fop_read(struct file *file, char __user *buf,
 302                size_t count, loff_t *ppos);
 303__poll_t vb2_fop_poll(struct file *file, poll_table *wait);
 304#ifndef CONFIG_MMU
 305unsigned long vb2_fop_get_unmapped_area(struct file *file, unsigned long addr,
 306                unsigned long len, unsigned long pgoff, unsigned long flags);
 307#endif
 308
 309/**
 310 * vb2_ops_wait_prepare - helper function to lock a struct &vb2_queue
 311 *
 312 * @vq: pointer to &struct vb2_queue
 313 *
 314 * ..note:: only use if vq->lock is non-NULL.
 315 */
 316void vb2_ops_wait_prepare(struct vb2_queue *vq);
 317
 318/**
 319 * vb2_ops_wait_finish - helper function to unlock a struct &vb2_queue
 320 *
 321 * @vq: pointer to &struct vb2_queue
 322 *
 323 * ..note:: only use if vq->lock is non-NULL.
 324 */
 325void vb2_ops_wait_finish(struct vb2_queue *vq);
 326
 327struct media_request;
 328int vb2_request_validate(struct media_request *req);
 329void vb2_request_queue(struct media_request *req);
 330
 331#endif /* _MEDIA_VIDEOBUF2_V4L2_H */
 332