__vb2_queue_alloc 分配vivi_buffer结构体的空间(缓存区头部信息), 如果使用的是V4L2_MEMORY_MMAP类型则 调用==>__vb2_buf_mem_alloc ==> q->mem_ops->alloc 即vb2_vmalloc_alloc 分配空间,将分配的空间指向vb2_buffer->planes[0].mem_priv ,该指针保存着分配到的
+ v4l2_planes[plane].bytesused = + b->m.planes[plane].bytesused; v4l2_planes[plane].data_offset = b->m.planes[plane].data_offset; } @@ -943,6 +945,7 @@ static void __fill_vb2_buffer(struct vb2_buffer *vb, const struct v4l2_buffer *b if (b->memory == V4L2_MEMORY_DMABUF)...
.buf_queue = buffer_queue, .start_streaming = start_streaming, .stop_streaming = stop_streaming, .wait_prepare = vb2_ops_wait_prepare, .wait_finish = vb2_ops_wait_finish, };/*0 comments on commit d020ca1 Please sign in to comment. Footer...
Only when I use interlace field (e.g., V4L2_FIELD_INTERLACED), mx6s_vidioc_dqbuf will not return and mx6s_csi_irq_handler will not be triggered. But if I use none interlace field (e.g., V4L2_FIELD_NONE), mx6s_vidioc_dqbuf will return and mx6s_csi_irq_handler will ...
v4l2_dbg(1, debug, &vpbe_dev->v4l2_dev, "vpbe_buffer_setup\n"); @@ -271,12 +269,11 @@ vpbe_buffer_queue_setup(struct vb2_queue *vq, const struct v4l2_format *fmt, static void vpbe_buffer_queue(struct vb2_buffer *vb) { /* Get the file handle object and layer object */ - ...
vb->v4l2_buf.sequence = sequence; vb->v4l2_buf.timestamp = *ts; vb->v4l2_buf.reserved = reserved; vb2_buffer_done(vb, VB2_BUF_STATE_DONE); msm_vb2->in_freeq = 0; // vb2_buffer_done ()的实现在videobuf2-core.c中,将vb->done_entry挂到vb->vb2_queue ->done_list上 ...