【v4l2】Linux多媒体框架 - videobuf2详解

发布时间 2023-04-23 21:27:00作者: -zx-

框架分析

框架可以分为两部分看:控制流+数据流,之前已经大概的描述了控制流,数据流部分就是video buffer,V4l2 buffer的管理是通过videobuf2来完成的,它充当于用户空间和驱动空间之间的中间层,并提供模块化的内存管理功能。

img

上图大体包含了videobuf2的框架

1.vb2_queue:核心的数据结构,用于描述buffer队列,其中struct vb2_buffer *bufs[]是存放buffer节点的数组,该数组中的成员代表了vb2 buffer.并将在queued_list和down_list两个队列中进行流转。

2.struct vb2_buf_ops:buffer的操作函数集,由驱动来实现,并由框架通过call_bufop宏来对特定的函数进行调用;

3.struct vb2_mem_ops:内存buffer分配函数接口,buffer类型分为三种:(1)虚拟地址和物理地址都分散,,可以通过dma-sg来完成;(2)物理地址分散,虚拟地址连续,可以通过vmalloc分配;(3)物理地址连续,可以通过dma-config来完成;三种类型在vb2框架总都有实现,框架可以通过call_memop来调用。

4.struct vb2_ops:vb2队列操作函数集,由驱动来实现对应的接口,并在框架中通过call_vb_qop宏被调用。

流程分析

以omap3isp/ispvideo.c为例进行分析:

buffer申请(REQUBUFS):

img

buffer enqueue(QBUF):

img

buffer dequeue(DQBUF):

img

stream on :

img

相关结构说明