在项目开发过程中,有时需要一个虚拟camera,由我们自己填充数据,比如TOF 模组 IR数据与depth数据是混合在一起输出的。我们需要将它们分开,分成两路送到上层去处理。物理camera只有一个,让上层认为是两个独立的camera。
第一种方案:虚拟一个mipi camera
我首先想到的方案是模仿原有的mipi或usb camera框架,虚拟出一个camera。先说mipi camera,RK 的mipi camera源码都在
hardware\rockchip\camera\CameraHal下,添加一个driver就是在hardware\rockchip\camera\SiliconImage\isi\drv参考其他sensor型号根据具体硬件信息修改出具体sensor的驱动;然后就是在hardware\rockchip\camera\Config\cam_board_rk3399.xml添加配置信息。虚拟一个mipi camera 核心就是在驱动中注释掉与硬件通讯的函数,直接返回成功,然后在"hardware\rockchip\camera\CameraHal\CameraHal_board_xml_parse.cpp" 中注释掉硬件操作的过程。这样就可以注册成功。但是有一个关键问题就是我们没有RK ISP源码,无法在ISP里调过对虚拟camera的处理,最终打开camera ,ISP内一直打印无效帧的log,不会执行到bufferCb函数。最终这个方案放弃了,但理论上是肯定行的通的。
第二种方案:移植linux下的vivi虚拟camera驱动,网上很多都是基于Ubuntu PC验证的很少有基于嵌入式的。下面列出一些参考网站。
(1)