问题描述:
在安卓系统中,一般支持UVC架构的Camera,普通的USB摄像头只要支持UVC架构都可以直接通过USB接口正常运行。但是在CubieBoard2(即树莓派3)中,接入常规的USB摄像头,预览时的图像一切正常,但是拍摄出来的照片跟视频颜色均不正常,呈现出蓝色变红色,红色变蓝色的情况。
问题分析:
此类问题一般是UV反转造成,UV序列问题可引起颜色不正常。
具体步骤:
1) 查找硬件适配层CAMERA部分的代码。
在CubieBoard2开发板中,硬件适配层CAMERA部分的代码位置:
\android42\device\softwinner\common\hardware\camera
查看cameraHardware.cpp代码,有:
#ifdef __SUN7I__
org_fmt = V4L2_PIX_FMT_NV12; // SGX support NV12
#else
org_fmt = V4L2_PIX_FMT_NV21; // MALI support NV21
#endif
当前配置org_fmt为V4L2_PIX_FMT_NV21,由于颜色反转,所以应将其修改为V4L2_PIX_FMT_NV12。此处可通过定义__SUN7I__来修改帧格式。
2) 修改图像帧格式
为了在全局进行修改,在一个模块中公用的头文件中继续定义,确保修改成功。
在CAMERA源码目录中找到CameraDebug.h,在其中定义__SUN7I__,加入如下代码:
#define __SUN7I__ 1
3) 编译并加载固件,启动摄像头应用即可正常使用。