我正在尝试为我拥有的特殊相机设备编写兼容V4L2的驱动程序,但该设备似乎与V4L2的缓冲系统并不特别友好。而不是单独分配的缓冲区,它需要一个能够容纳一组缓冲区(通常为4个)的内存的连续块,然后提供一个状态寄存器,告诉您最新的状态(在对每个帧进行DMA处理后更新)给主机)。因此,基本上只需要一个大的DMA分配的内存块即可工作,而不需要4个最可能分离的内存块。

如何在V4L中使用它?我所看到的有关VIDIOC_CREATE_BUFSVIDIOC_REQBUFS等的所有内容都对缓冲区进行了内部分配,而且我无法获得基于V4L的任何东西(例如qv4l2,而没有成功使用其内部结构的QBUFDQBUF,它们就无法工作。

如何才能做到这一点?

最佳答案

只是为了完成,我终于在“meye”驱动程序中找到了一个解决方案。我删除了所有VB2,并编写了自己的reqbuf,querybuf,qbuf和dqbuf,以及我自己的mmap例程来处理分配。一切正常!

关于linux - 控制V4L2/VB2缓冲区分配?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24038120/

10-16 10:24