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 * @vb2_buf:    video buffer 2
  29 * @flags:      buffer informational flags
  30 * @field:      enum v4l2_field; field order of the image in the buffer
  31 * @timecode:   frame timecode
  32 * @sequence:   sequence count of this frame
  33 * Should contain enough information to be able to cover all the fields
  34 * of struct v4l2_buffer at videodev2.h
  35 */
  36struct vb2_v4l2_buffer {
  37        struct vb2_buffer       vb2_buf;
  38
  39        __u32                   flags;
  40        __u32                   field;
  41        struct v4l2_timecode    timecode;
  42        __u32                   sequence;
  43};
  44
  45/*
  46 * to_vb2_v4l2_buffer() - cast struct vb2_buffer * to struct vb2_v4l2_buffer *
  47 */
  48#define to_vb2_v4l2_buffer(vb) \
  49        container_of(vb, struct vb2_v4l2_buffer, vb2_buf)
  50
  51int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b);
  52int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req);
  53
  54int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create);
  55int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b);
  56
  57int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b);
  58int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb);
  59int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking);
  60
  61int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type);
  62int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type);
  63
  64int __must_check vb2_queue_init(struct vb2_queue *q);
  65void vb2_queue_release(struct vb2_queue *q);
  66unsigned int vb2_poll(struct vb2_queue *q, struct file *file,
  67                poll_table *wait);
  68
  69/*
  70 * The following functions are not part of the vb2 core API, but are simple
  71 * helper functions that you can use in your struct v4l2_file_operations,
  72 * struct v4l2_ioctl_ops and struct vb2_ops. They will serialize if vb2_queue->lock
  73 * or video_device->lock is set, and they will set and test vb2_queue->owner
  74 * to check if the calling filehandle is permitted to do the queuing operation.
  75 */
  76
  77/* struct v4l2_ioctl_ops helpers */
  78
  79int vb2_ioctl_reqbufs(struct file *file, void *priv,
  80                          struct v4l2_requestbuffers *p);
  81int vb2_ioctl_create_bufs(struct file *file, void *priv,
  82                          struct v4l2_create_buffers *p);
  83int vb2_ioctl_prepare_buf(struct file *file, void *priv,
  84                          struct v4l2_buffer *p);
  85int vb2_ioctl_querybuf(struct file *file, void *priv, struct v4l2_buffer *p);
  86int vb2_ioctl_qbuf(struct file *file, void *priv, struct v4l2_buffer *p);
  87int vb2_ioctl_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p);
  88int vb2_ioctl_streamon(struct file *file, void *priv, enum v4l2_buf_type i);
  89int vb2_ioctl_streamoff(struct file *file, void *priv, enum v4l2_buf_type i);
  90int vb2_ioctl_expbuf(struct file *file, void *priv,
  91        struct v4l2_exportbuffer *p);
  92
  93/* struct v4l2_file_operations helpers */
  94
  95int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma);
  96int vb2_fop_release(struct file *file);
  97int _vb2_fop_release(struct file *file, struct mutex *lock);
  98ssize_t vb2_fop_write(struct file *file, const char __user *buf,
  99                size_t count, loff_t *ppos);
 100ssize_t vb2_fop_read(struct file *file, char __user *buf,
 101                size_t count, loff_t *ppos);
 102unsigned int vb2_fop_poll(struct file *file, poll_table *wait);
 103#ifndef CONFIG_MMU
 104unsigned long vb2_fop_get_unmapped_area(struct file *file, unsigned long addr,
 105                unsigned long len, unsigned long pgoff, unsigned long flags);
 106#endif
 107
 108/* struct vb2_ops helpers, only use if vq->lock is non-NULL. */
 109
 110void vb2_ops_wait_prepare(struct vb2_queue *vq);
 111void vb2_ops_wait_finish(struct vb2_queue *vq);
 112
 113#endif /* _MEDIA_VIDEOBUF2_V4L2_H */
 114