s3c2440camera的使用

来源:互联网 发布:网络信息发布审核制度 编辑:程序博客网 时间:2024/06/05 09:59

最近项目中使用到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.csdn.net/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 toV4L2_PIX_FMT_YUYV
链接中的说明更到位些。


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

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

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

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




0 0