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+
117134static 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
127146int 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