Skip to content

Commit 8d41b00

Browse files
committed
Support DMA-BUF memory type in buffer queue
- Added VB2_DMABUF to vb2_queue.io_modes - Set mem_ops to vb2_dma_contig_memops for physically contiguous memory - Implemented buf_init() and buf_cleanup() to manage per-buffer state
1 parent 4898750 commit 8d41b00

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

videobuf.c

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include <linux/spinlock.h>
44
#include <linux/vmalloc.h>
55
#include <media/videobuf2-core.h>
6-
#include <media/videobuf2-vmalloc.h>
6+
#include <media/videobuf2-dma-contig.h>
77

88
#include "videobuf.h"
99

@@ -114,6 +114,23 @@ static void vcam_outbuf_unlock(struct vb2_queue *vq)
114114
mutex_unlock(&dev->vcam_mutex);
115115
}
116116

117+
static int vcam_buf_init(struct vb2_buffer *vb)
118+
{
119+
struct vcam_out_buffer *buf =
120+
container_of(vb, struct vcam_out_buffer, vb.vb2_buf);
121+
122+
buf->filled = 0;
123+
INIT_LIST_HEAD(&buf->list);
124+
125+
pr_debug("vcam_buf_init: buffer initialized\n");
126+
return 0;
127+
}
128+
129+
static void vcam_buf_cleanup(struct vb2_buffer *vb)
130+
{
131+
pr_debug("vcam_buf_cleanup called\n");
132+
}
133+
117134
static const struct vb2_ops vcam_vb2_ops = {
118135
.queue_setup = vcam_out_queue_setup,
119136
.buf_prepare = vcam_out_buffer_prepare,
@@ -122,19 +139,21 @@ static const struct vb2_ops vcam_vb2_ops = {
122139
.stop_streaming = vcam_stop_streaming,
123140
.wait_prepare = vcam_outbuf_unlock,
124141
.wait_finish = vcam_outbuf_lock,
142+
.buf_init = vcam_buf_init,
143+
.buf_cleanup = vcam_buf_cleanup,
125144
};
126145

127146
int vcam_out_videobuf2_setup(struct vcam_device *dev)
128147
{
129148
struct vb2_queue *q = &dev->vb_out_vidq;
130149

131150
q->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
132-
q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ;
151+
q->io_modes = VB2_MMAP | VB2_USERPTR | VB2_READ | VB2_DMABUF;
133152
q->drv_priv = dev;
134153
q->buf_struct_size = sizeof(struct vcam_out_buffer);
135154
q->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC;
136155
q->ops = &vcam_vb2_ops;
137-
q->mem_ops = &vb2_vmalloc_memops;
156+
q->mem_ops = &vb2_dma_contig_memops;
138157
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 8, 0)
139158
q->min_queued_buffers = 2;
140159
#else

0 commit comments

Comments
 (0)