]>
Commit | Line | Data |
---|---|---|
c139990e JS |
1 | /* |
2 | * videobuf2-v4l2.h - V4L2 driver helper framework | |
3 | * | |
4 | * Copyright (C) 2010 Samsung Electronics | |
5 | * | |
6 | * Author: Pawel Osciak <[email protected]> | |
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 | ||
2d700715 | 15 | #include <linux/videodev2.h> |
c139990e JS |
16 | #include <media/videobuf2-core.h> |
17 | ||
bed04f93 JS |
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 | ||
2d700715 JS |
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 | |
2d700715 JS |
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 | */ | |
36 | struct vb2_v4l2_buffer { | |
37 | struct vb2_buffer vb2_buf; | |
38 | ||
39 | __u32 flags; | |
40 | __u32 field; | |
2d700715 JS |
41 | struct v4l2_timecode timecode; |
42 | __u32 sequence; | |
43 | }; | |
44 | ||
d383b579 | 45 | /* |
2d700715 JS |
46 | * to_vb2_v4l2_buffer() - cast struct vb2_buffer * to struct vb2_v4l2_buffer * |
47 | */ | |
48 | #define to_vb2_v4l2_buffer(vb) \ | |
d383b579 | 49 | container_of(vb, struct vb2_v4l2_buffer, vb2_buf) |
2d700715 | 50 | |
3c5be988 JS |
51 | int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b); |
52 | int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req); | |
53 | ||
54 | int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create); | |
55 | int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b); | |
56 | ||
57 | int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b); | |
58 | int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb); | |
59 | int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking); | |
60 | ||
61 | int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type); | |
62 | int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type); | |
63 | ||
64 | int __must_check vb2_queue_init(struct vb2_queue *q); | |
65 | void vb2_queue_release(struct vb2_queue *q); | |
af3bac1a JS |
66 | unsigned int vb2_poll(struct vb2_queue *q, struct file *file, |
67 | poll_table *wait); | |
3c5be988 JS |
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 | ||
79 | int vb2_ioctl_reqbufs(struct file *file, void *priv, | |
80 | struct v4l2_requestbuffers *p); | |
81 | int vb2_ioctl_create_bufs(struct file *file, void *priv, | |
82 | struct v4l2_create_buffers *p); | |
83 | int vb2_ioctl_prepare_buf(struct file *file, void *priv, | |
84 | struct v4l2_buffer *p); | |
85 | int vb2_ioctl_querybuf(struct file *file, void *priv, struct v4l2_buffer *p); | |
86 | int vb2_ioctl_qbuf(struct file *file, void *priv, struct v4l2_buffer *p); | |
87 | int vb2_ioctl_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p); | |
88 | int vb2_ioctl_streamon(struct file *file, void *priv, enum v4l2_buf_type i); | |
89 | int vb2_ioctl_streamoff(struct file *file, void *priv, enum v4l2_buf_type i); | |
90 | int vb2_ioctl_expbuf(struct file *file, void *priv, | |
91 | struct v4l2_exportbuffer *p); | |
92 | ||
93 | /* struct v4l2_file_operations helpers */ | |
94 | ||
95 | int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma); | |
96 | int vb2_fop_release(struct file *file); | |
97 | int _vb2_fop_release(struct file *file, struct mutex *lock); | |
98 | ssize_t vb2_fop_write(struct file *file, const char __user *buf, | |
99 | size_t count, loff_t *ppos); | |
100 | ssize_t vb2_fop_read(struct file *file, char __user *buf, | |
101 | size_t count, loff_t *ppos); | |
102 | unsigned int vb2_fop_poll(struct file *file, poll_table *wait); | |
103 | #ifndef CONFIG_MMU | |
104 | unsigned 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 | ||
110 | void vb2_ops_wait_prepare(struct vb2_queue *vq); | |
111 | void vb2_ops_wait_finish(struct vb2_queue *vq); | |
112 | ||
c139990e | 113 | #endif /* _MEDIA_VIDEOBUF2_V4L2_H */ |