我使用Buildroot为SoC Allwinner A20构建的自定义Linux。该SoC有4个模拟视频输入,我需要使用它。问题是这个视频输入没有合适的驱动程序,所以我修复了我能通过互联网找到的单个驱动程序。它是此设备的V4L2驱动程序。
该设备可以同时捕获来自多个视频输入的视频,并将它们组合在一个图像中,将图像分成2或4个部分,在不同部分显示来自每个摄像机的视频。 / p>
但是,驱动程序非常基本,并且还没有准备好配置它。它仅从视频输入#1捕获。我想要做的是修改这个驱动程序,以便它允许配置你不能启用多少输入(1,2或4个输入)和哪些输入(例如:启用输入#2和#4并将它们组合成一个视频分为两部分)。
我首先要做的是使用VIDIOC_S_INPUT ioctl,因为这是它应该做的:从具有多个输入的设备中选择要使用的输入。但是,如果我只需要选择4个输入中的一个,这将会很有效,但我不知道如何使用它来启用2个或4个输入,并且在这种情况下必须启用的输入更少,并且什么顺序。
如何以符合4vl2标准的方式实现这一目标?我想将它与ffmpeg和gstreamer等标准软件一起使用。
答案 0 :(得分:0)
我认为符合v4l2
标准的方法是创建4个设备/dev/video0
.. /dev/video3
每个设备公开一个捕获源,然后在用户空间中进行覆盖。
如果这不可能,并且您确实只能通过单个设备(/dev/video0
)呈现单个组合视频流,因为设备会在硬件中进行流合并,那么我不会认为使用VIDIOC_S_INPUT
已经不在了。只是想出一个好的编号方案......
然而(重新迭代),如果流合并不是在硬件中完成而是在软件中完成,那么你应该永远不会在内核空间中这样做并且始终在用户空间中(所以你应通过4个设备文件公开4个流)