您的位置:首页 > 移动开发 > Android开发

mini6410移植cmos和usb camera到android中

2011-11-26 22:59 726 查看
友善在新的版本上闭源了多媒体相关的驱动,而我花了好多钱从友善那里买的camera不能浪费啊,所以就只好自己porting了。好久不写东西了,而且在libreoffice里排好版贴上来就乱了,凑合着看吧。

系统版本:

Kernel:2.36

Android:2.3.1

一:CMOScamera

1:Kernel部分

这部分主要基于2.28版本的代码(这个版本的代码是开源的)。要做些修改使编译通过,没有太大的改动。
主要是下面几个部分:
s3c_fimc_core.c
//staticconst struct file_operations s3c_fimc_fops
staticconst struct v4l2_file_operations s3c_fimc_fops = {

s3c_fimc3x_regs.c
s3c_fimc_set_input_address
if(frame->planes == 1)
end_y= start_y + (width * height * 2);
后面的函数自己找吧,不写文件了。
s3c_fimc_v4l2_querybuf())
b->memory= V4L2_MEMORY_MMAP;//this is set to zero in v4l2-ioctl.c
if(b->memory != V4L2_MEMORY_MMAP)
return-EINVAL;

ov9650驱动那部分要添加probe函数。去掉以前的I2C设备注册的函数。
staticint ov965x_probe(struct i2c_client *client,const struct i2c_device_id*did)
{
s3c_fimc_register_camera(&ov965x_data);
ov965x_data.client= client;
i2c_set_clientdata(client,&ov965x_data);
printk("=========ov965x_probe\n");

}
return0;

}

2:Android libcamera部分:
主要基于google原来的Fake camera的代码和Nexus的代码修改。其实就是基于V4l2的程序,网上其他这种代码也很多(比如mjpeg-stream)。
其中要注意的是尺寸要设对。2.28代码里ov9650驱动中只用640X480部分的代码是正确的,其他尺寸的要自己对照datasheet修改。再者就是格式,目前是设成RBG,YUV格式surfacefinger那边不认,而且还要改下surfacefinger那边的代码,强制设成RGB。不过我看友善最新的代码是设成YUV的,应该还有其他的办法。

二:USBcamera:
这个要简单些。如果是买的友善的摄像头,这个摄像头UVC驱动是支持的,直接插上就能用。不过要注意,如果开机之前插的话,usbcamera的设备节点是dev/video0,cmos
camera 是dev/video1。开机后查usb camera是video2,cmos camera是video0.另外还要注意设备节点的权限,
默认权限不够。还有就是在previewthread中的delay去掉,这个是fake camra用的,不去掉的话usb
camera会挂掉。反正是用poll,并不需要delay。

代码过段时间整理一下会放到github上。
欢迎来信讨论6410相关问题 hnmsky#gmail。com #换掉。

代码放到github上了 https://github.com/hnmsky/mini6410_android2.3_porting
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: