【原创】Linux v4l2框架分析 (3)

【原创】Linux v4l2框架分析

上图大体包含了videobuf2的框架;

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

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

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

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

4.2 流程分析

本节以omap3isp为例进行简要分析,感觉直接看图就可以了:

buffer申请

【原创】Linux v4l2框架分析

buffer enqueue

【原创】Linux v4l2框架分析

buffer dequeue

【原创】Linux v4l2框架分析

stream on

【原创】Linux v4l2框架分析

行文至此,主体讲完了,相信看完本文应该有个大概的轮廓了,还有一些细节未进一步描述,就此打住。

参考

https://lwn.net/Articles/416649/
《OMAP35x Technical Reference Manual (Rev. Y).pdf》

欢迎关注公众号,不定期分享技术文章

【原创】Linux v4l2框架分析

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwxpdx.html