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 <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 | ||
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 | |
31 | * @timestamp: frame timestamp | |
32 | * @timecode: frame timecode | |
33 | * @sequence: sequence count of this frame | |
34 | * Should contain enough information to be able to cover all the fields | |
35 | * of struct v4l2_buffer at videodev2.h | |
36 | */ | |
37 | struct vb2_v4l2_buffer { | |
38 | struct vb2_buffer vb2_buf; | |
39 | ||
40 | __u32 flags; | |
41 | __u32 field; | |
42 | struct timeval timestamp; | |
43 | struct v4l2_timecode timecode; | |
44 | __u32 sequence; | |
45 | }; | |
46 | ||
d383b579 | 47 | /* |
2d700715 JS |
48 | * to_vb2_v4l2_buffer() - cast struct vb2_buffer * to struct vb2_v4l2_buffer * |
49 | */ | |
50 | #define to_vb2_v4l2_buffer(vb) \ | |
d383b579 | 51 | container_of(vb, struct vb2_v4l2_buffer, vb2_buf) |
2d700715 | 52 | |
3c5be988 JS |
53 | int vb2_querybuf(struct vb2_queue *q, struct v4l2_buffer *b); |
54 | int vb2_reqbufs(struct vb2_queue *q, struct v4l2_requestbuffers *req); | |
55 | ||
56 | int vb2_create_bufs(struct vb2_queue *q, struct v4l2_create_buffers *create); | |
57 | int vb2_prepare_buf(struct vb2_queue *q, struct v4l2_buffer *b); | |
58 | ||
59 | int vb2_qbuf(struct vb2_queue *q, struct v4l2_buffer *b); | |
60 | int vb2_expbuf(struct vb2_queue *q, struct v4l2_exportbuffer *eb); | |
61 | int vb2_dqbuf(struct vb2_queue *q, struct v4l2_buffer *b, bool nonblocking); | |
62 | ||
63 | int vb2_streamon(struct vb2_queue *q, enum v4l2_buf_type type); | |
64 | int vb2_streamoff(struct vb2_queue *q, enum v4l2_buf_type type); | |
65 | ||
66 | int __must_check vb2_queue_init(struct vb2_queue *q); | |
67 | void vb2_queue_release(struct vb2_queue *q); | |
68 | ||
69 | unsigned int vb2_poll(struct vb2_queue *q, struct file *file, poll_table *wait); | |
70 | size_t vb2_read(struct vb2_queue *q, char __user *data, size_t count, | |
71 | loff_t *ppos, int nonblock); | |
72 | size_t vb2_write(struct vb2_queue *q, const char __user *data, size_t count, | |
73 | loff_t *ppos, int nonblock); | |
74 | ||
75 | /* | |
76 | * vb2_thread_fnc - callback function for use with vb2_thread | |
77 | * | |
78 | * This is called whenever a buffer is dequeued in the thread. | |
79 | */ | |
80 | typedef int (*vb2_thread_fnc)(struct vb2_buffer *vb, void *priv); | |
81 | ||
82 | /** | |
83 | * vb2_thread_start() - start a thread for the given queue. | |
84 | * @q: videobuf queue | |
85 | * @fnc: callback function | |
86 | * @priv: priv pointer passed to the callback function | |
87 | * @thread_name:the name of the thread. This will be prefixed with "vb2-". | |
88 | * | |
89 | * This starts a thread that will queue and dequeue until an error occurs | |
90 | * or @vb2_thread_stop is called. | |
91 | * | |
92 | * This function should not be used for anything else but the videobuf2-dvb | |
93 | * support. If you think you have another good use-case for this, then please | |
94 | * contact the linux-media mailinglist first. | |
95 | */ | |
96 | int vb2_thread_start(struct vb2_queue *q, vb2_thread_fnc fnc, void *priv, | |
97 | const char *thread_name); | |
98 | ||
99 | /** | |
100 | * vb2_thread_stop() - stop the thread for the given queue. | |
101 | * @q: videobuf queue | |
102 | */ | |
103 | int vb2_thread_stop(struct vb2_queue *q); | |
104 | ||
105 | /* | |
106 | * The following functions are not part of the vb2 core API, but are simple | |
107 | * helper functions that you can use in your struct v4l2_file_operations, | |
108 | * struct v4l2_ioctl_ops and struct vb2_ops. They will serialize if vb2_queue->lock | |
109 | * or video_device->lock is set, and they will set and test vb2_queue->owner | |
110 | * to check if the calling filehandle is permitted to do the queuing operation. | |
111 | */ | |
112 | ||
113 | /* struct v4l2_ioctl_ops helpers */ | |
114 | ||
115 | int vb2_ioctl_reqbufs(struct file *file, void *priv, | |
116 | struct v4l2_requestbuffers *p); | |
117 | int vb2_ioctl_create_bufs(struct file *file, void *priv, | |
118 | struct v4l2_create_buffers *p); | |
119 | int vb2_ioctl_prepare_buf(struct file *file, void *priv, | |
120 | struct v4l2_buffer *p); | |
121 | int vb2_ioctl_querybuf(struct file *file, void *priv, struct v4l2_buffer *p); | |
122 | int vb2_ioctl_qbuf(struct file *file, void *priv, struct v4l2_buffer *p); | |
123 | int vb2_ioctl_dqbuf(struct file *file, void *priv, struct v4l2_buffer *p); | |
124 | int vb2_ioctl_streamon(struct file *file, void *priv, enum v4l2_buf_type i); | |
125 | int vb2_ioctl_streamoff(struct file *file, void *priv, enum v4l2_buf_type i); | |
126 | int vb2_ioctl_expbuf(struct file *file, void *priv, | |
127 | struct v4l2_exportbuffer *p); | |
128 | ||
129 | /* struct v4l2_file_operations helpers */ | |
130 | ||
131 | int vb2_fop_mmap(struct file *file, struct vm_area_struct *vma); | |
132 | int vb2_fop_release(struct file *file); | |
133 | int _vb2_fop_release(struct file *file, struct mutex *lock); | |
134 | ssize_t vb2_fop_write(struct file *file, const char __user *buf, | |
135 | size_t count, loff_t *ppos); | |
136 | ssize_t vb2_fop_read(struct file *file, char __user *buf, | |
137 | size_t count, loff_t *ppos); | |
138 | unsigned int vb2_fop_poll(struct file *file, poll_table *wait); | |
139 | #ifndef CONFIG_MMU | |
140 | unsigned long vb2_fop_get_unmapped_area(struct file *file, unsigned long addr, | |
141 | unsigned long len, unsigned long pgoff, unsigned long flags); | |
142 | #endif | |
143 | ||
144 | /* struct vb2_ops helpers, only use if vq->lock is non-NULL. */ | |
145 | ||
146 | void vb2_ops_wait_prepare(struct vb2_queue *vq); | |
147 | void vb2_ops_wait_finish(struct vb2_queue *vq); | |
148 | ||
c139990e | 149 | #endif /* _MEDIA_VIDEOBUF2_V4L2_H */ |