Chinaunix首页 | 论坛 | 博客
  • 博客访问: 39764
  • 博文数量: 25
  • 博客积分: 605
  • 博客等级: 中士
  • 技术积分: 255
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-03 21:57
文章分类

全部博文(25)

文章存档

2012年(22)

2011年(3)

我的朋友

分类: 嵌入式

2011-11-26 22:02:41

 


友善在新的版本上闭源了多媒体相关的驱动,而我花了好多钱从友善那里买的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;



}


2Android  libcamera 部分:

主要基于google原来的Fake camera的代码和Nexus的代码修改。其实就是基于V4l2的程序,网上其他这种代码也很多(比如mjpeg-stream)。

其中要注意的是尺寸要设对。2.28代码里ov9650驱动中只用640X480部分的代码是正确的,其他尺寸的要自己对照datasheet修改。再者就是格式,目前是设成RBGYUV格式surfacefinger那边不认,而且还要改下surfacefinger那边的代码,强制设成RGB。不过我看友善最新的代码是设成YUV的,应该还有其他的办法。


二:USBcamera

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


代码过段时间整理一下会放到github上。

欢迎来信讨论6410 相关问题。hnmsky#gmailcom #换掉




阅读(1809) | 评论(0) | 转发(0) |
0

上一篇:minicom的使用

下一篇:相片恢复

给主人留下些什么吧!~~