您的位置:首页 > 运维架构 > Linux

A20 linux(dragonboard)同时使用Parallel CSI Camera及UVC

2015-11-19 12:10 826 查看
【目标】

在A20上同时对parallel同时使用parallel csi摄像头及usb摄像头进行preview。

【选型】

硬件选用主控为A20的CubieBoard2开发板。

软件SDK选用全志A20 Kitkat SDK中的lichee包。

【过程】

1、在linux-3.4的menuconfig中将uvc驱动选项打开,USB_VIDEO_CLAS设置成m,USB_VIDEO_CLASS_INPUT_EVDEV设置成y。

Device Drivers —>

<*> Multimedia support —>

[*] Video capture adapters —>

[*] V4L USB devices —>

USB Video Class (UVC)

[*] UVC input events device support



2、在dragonboard中加入usb camera的testcase。全志dragonboard环境使用的是linux+DirectFb,可以参考既有的csi camera testcase代码进行添加。大致分为两步:

第一步,在df_view.c的csi camera test代码后加入启动usb camera test的代码

x2 = 0;
height2 = layer_config.height>>1;
y2 = layer_config.height>>1;
if(mic_activated)
{
width2  = (layer_config.width >> 1)-(layer_config.width>>MIC_POWER_BAR_WITH_SHIFT);
}
else
{
width2 = (layer_config.width >> 1);
}
if (usb_camera_test_init(x2,y2,width2,height2))
{
return -1;
}


第二步,增加usbcameratest.c,usbcameratest.c包含了usb camera的初始化、打开、设置参数等核心方法,上文中的usb_camera_test_init函数实现也在这个源码文件里面。可根据以下流程编写usbcameratest.c,



这里,有几点需要注意,一是usb camera的数据格式是YUYV,所以在set format的时候,pixel format要设置成YUYV;二是usb camera的图像大小是640x480。

3、从CubieBoard2原理图可知,上面只能使用csi1接parallel csi camera,所以test_config.fex需要作以下修改

[camera]
activated   = 1
module_count= 6
module1_path= "/system/vendor/modules/videobuf-core.ko"
module2_path= "/system/vendor/modules/videobuf-dma-contig.ko"
module3_path= "/system/vendor/modules/camera.ko"
module4_path= "/system/vendor/modules/gc0308.ko"
module5_path= "/system/vendor/modules/sunxi_csi1.ko"
module6_path= "/system/vendor/modules/uvcvideo.ko"
dev_cnt     = 1
csi_cnt     = 1
fps         = 30


4、编译打包烧录

cd lichee
./build.sh -p sun7i_dragonboard
./build.sh pack


【结果】

下图LCD右上角为parallel csi camera preview,左下角为usb camera preview,两个摄像头均已打开并持续采集数据绘制以屏幕上。



【遗留问题及解决方案】

由于usb camera的数据格式是YUYV,LCD中usb camera preview区域的格式是YUV420,所以无法正确显示来自于usb camera的画面数据。解决此问题可考虑数据格式转换,将YUYV转成YUV420再绘制以屏幕上,实现转换可使用A20 G2D,效率更高。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: