s3c2440camera的使用

本文介绍了一种针对OV9650摄像头的驱动优化方案,将原字符设备驱动升级为支持V4L2标准的驱动,实现了对摄像头分辨率和编码方式的灵活配置,并分享了实际操作过程中的心得体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中使用到ov9650的摄像头,但是原驱动是个简单字符设备,不支持ioctl切换编码方式和分辨率。

驱动中默认是用的是 p通道,即预览通道,支持的最发分辨率为640*512. 如果强行修改参数,最后的结果是系统停止响应,抓取的图片也是不完整的.

但是ov9650物理器件上支持130万像素,则原驱动并没有发挥其的最大性能,所以果断的只能修改驱动了。

让其支持通过c通道输出,其支持的分辨率为4096*4096,这下对于1280*1024来说,就足够用了。

驱动,国外有团体已经改写成支持v4l2 形式的驱动了。连接地址http://code.google.com/p/s3c2440camera/downloads/list

我是下载源码后编译的。编译过程中遇到的是小麻烦,倒是不怎么费时间。

其中包含测试代码,我就是根据测试代码进行修改的。 测试代码中把Y部分和uv部分分开存储了,其实写入一个文件就正好。

图像编码这一块,只识得rgb,对yuv并没有太多的了解,了解到yuv444,yuv420等等,还有打包模式..

自己去实践一下,很快就能理解了。

图像采集的默认输出格式也说了,是yuv422p。

在文件s3c2440cammif.c 中的代码 赋值 pcam->v2f.fmt.pix.pixelformat= V4L2_PIX_FMT_YUV42P.

下面的连接时对宏定义说明的比较清楚。

http://lxr.free-electrons.com/source/include/uapi/linux/videodev2.h#L327

320 #define V4L2_PIX_FMT_YVU410  v4l2_fourcc('Y', 'V', 'U', '9') /*  9  YVU 4:1:0     */
321 #define V4L2_PIX_FMT_YVU420  v4l2_fourcc('Y', 'V', '1', '2') /* 12  YVU 4:2:0     */
322 #define V4L2_PIX_FMT_YUYV    v4l2_fourcc('Y', 'U', 'Y', 'V') /* 16  YUV 4:2:2     */
323 #define V4L2_PIX_FMT_YYUV    v4l2_fourcc('Y', 'Y', 'U', 'V') /* 16  YUV 4:2:2     */
324 #define V4L2_PIX_FMT_YVYU    v4l2_fourcc('Y', 'V', 'Y', 'U') /* 16 YVU 4:2:2 */
325 #define V4L2_PIX_FMT_UYVY    v4l2_fourcc('U', 'Y', 'V', 'Y') /* 16  YUV 4:2:2     */
326 #define V4L2_PIX_FMT_VYUY    v4l2_fourcc('V', 'Y', 'U', 'Y') /* 16  YUV 4:2:2     */
327 #define V4L2_PIX_FMT_YUV422P v4l2_fourcc('4', '2', '2', 'P') /* 16  YVU422 planar */
328 #define V4L2_PIX_FMT_YUV411P v4l2_fourcc('4', '1', '1', 'P') /* 16  YVU411 planar */
329 #define V4L2_PIX_FMT_Y41P    v4l2_fourcc('Y', '4', '1', 'P') /* 12  YUV 4:1:1     */

那UV 在前还是在后?

http://blog.youkuaiyun.com/jmq_0000/article/details/7536805#V4L2-PIX-FMT-YUV422P

这篇链接里清清楚楚的说明了其定义

V4L2_PIX_FMT_YUV422P ('422P') -- Format with ½ horizontal chroma resolution,also known as YUV 4:2:2. Planar layout as opposed to V4L2_PIX_FMT_YUYV
链接中的说明更到位些。


自己的测试代码中用到jpeglib库(修改过的,网络上很多,支持从内存中存储图片为jpg形式),这样就可以直接从摄像头中读取数据然后转存成jpg查看了。yuv格式查看是相当的不方便,好不容易搜到一个软件,也是试用期已过的。还是在自己的代码中转吧。

yuv转rgb转换方式网络上也很多。不知道yuv能不能直接存储为jpg图像,我这里是先转换成rgb,然后再存储为jpg的。

最后效果能够出来了,图片也比较清晰,毕竟是1280*1024的,不过底色是绿色的,这个就让我比较纳闷了。

不知道哪里还有问题,等待继续修改了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值