| sheu@chromium.org: trimmed from upstream kernel patch |
| |
| From b799d09a157da71566e8013a62073435550cab6d Mon Sep 17 00:00:00 2001 |
| From: Tomasz Stanislawski <t.stanislaws@samsung.com> |
| Date: Thu, 14 Jun 2012 11:32:23 -0300 |
| Subject: [PATCH] [media] v4l: add buffer exporting via dmabuf |
| |
| This patch adds extension to V4L2 api. A new ioctl VIDIOC_EXPBUF is added. The |
| ioctl is used to export an mmap buffer as a DMABUF file descriptor. |
| |
| Signed-off-by: Tomasz Stanislawski <t.stanislaws@samsung.com> |
| Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> |
| Acked-by: Hans Verkuil <hans.verkuil@cisco.com> |
| Tested-by: Mauro Carvalho Chehab <mchehab@redhat.com> |
| Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com> |
| --- |
| drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 1 + |
| drivers/media/v4l2-core/v4l2-dev.c | 1 + |
| drivers/media/v4l2-core/v4l2-ioctl.c | 10 ++++++++++ |
| include/media/v4l2-ioctl.h | 2 ++ |
| include/uapi/linux/videodev2.h | 28 +++++++++++++++++++++++++++ |
| 5 files changed, 42 insertions(+) |
| |
| diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h |
| index 91ac83b..3cf3e94 100644 |
| --- a/include/linux/videodev2.h |
| +++ b/include/linux/videodev2.h |
| @@ -679,6 +679,33 @@ struct v4l2_buffer { |
| #define V4L2_BUF_FLAG_NO_CACHE_INVALIDATE 0x0800 |
| #define V4L2_BUF_FLAG_NO_CACHE_CLEAN 0x1000 |
| |
| +/** |
| + * struct v4l2_exportbuffer - export of video buffer as DMABUF file descriptor |
| + * |
| + * @index: id number of the buffer |
| + * @type: enum v4l2_buf_type; buffer type (type == *_MPLANE for |
| + * multiplanar buffers); |
| + * @plane: index of the plane to be exported, 0 for single plane queues |
| + * @flags: flags for newly created file, currently only O_CLOEXEC is |
| + * supported, refer to manual of open syscall for more details |
| + * @fd: file descriptor associated with DMABUF (set by driver) |
| + * |
| + * Contains data used for exporting a video buffer as DMABUF file descriptor. |
| + * The buffer is identified by a 'cookie' returned by VIDIOC_QUERYBUF |
| + * (identical to the cookie used to mmap() the buffer to userspace). All |
| + * reserved fields must be set to zero. The field reserved0 is expected to |
| + * become a structure 'type' allowing an alternative layout of the structure |
| + * content. Therefore this field should not be used for any other extensions. |
| + */ |
| +struct v4l2_exportbuffer { |
| + __u32 type; /* enum v4l2_buf_type */ |
| + __u32 index; |
| + __u32 plane; |
| + __u32 flags; |
| + __s32 fd; |
| + __u32 reserved[11]; |
| +}; |
| + |
| /* |
| * O V E R L A Y P R E V I E W |
| */ |
| @@ -1880,6 +1907,7 @@ struct v4l2_create_buffers { |
| #define VIDIOC_S_FBUF _IOW('V', 11, struct v4l2_framebuffer) |
| #define VIDIOC_OVERLAY _IOW('V', 14, int) |
| #define VIDIOC_QBUF _IOWR('V', 15, struct v4l2_buffer) |
| +#define VIDIOC_EXPBUF _IOWR('V', 16, struct v4l2_exportbuffer) |
| #define VIDIOC_DQBUF _IOWR('V', 17, struct v4l2_buffer) |
| #define VIDIOC_STREAMON _IOW('V', 18, int) |
| #define VIDIOC_STREAMOFF _IOW('V', 19, int) |
| -- |
| 1.8.1 |
| |