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
系统版本:
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
相关文章推荐
- Android移植源码APP(USB CAMERA APK)问题总结
- rt2870 usb wifi在mx53 android平台上的移植
- Android USB Camera(1) : 调试记录
- Android系统移植与调试之如何修改Android系统默认显示【开发者选项】并默认打开【USB调试】和【未知来源】开关
- Android.mk 移植示例--移植usbip userspace tools
- android 4.0 USB Camera实例(二)应用层
- 在android车机上调试USB Camera录像拍照功能
- 将RT2070USBwifi移植到android2.3…
- Android OTG usb camera 常见配置、调试等问题
- AndroidUSBCamera,UVCCamera开发通用库
- 和菜鸟一起学android4.0.3源码之USB wifi移植心得
- android usb挂载分析--ntfs-3g移植
- USB Camera在android车机上应用前景及初试小结
- android 平台USB wifi驱动移植及使用 SDIOwifi
- 将RT2070USBwifi移植到android2.3…
- Android USB Camera(2) : UVC协议分析
- 和菜鸟一起学android4.0.3源码之USB wifi移植心得
- ffmpeg开发之旅(8):Android UVC Camera(USB摄像头)开发核心技术详解
- 明远智睿IMX6Q Android4.4.2移植USBWIFI(RTL8188EUS)
- android 平台USB wifi驱动移植及使用