3回答

0收藏

调用V4L2 API使用USB摄像头截图的程序 C语言

Raspberry Pi Raspberry Pi 9120 人阅读 | 3 人回复 | 2015-02-04

自从大学随着兴趣做了几个单片机和arm的小DIY之后就没有接触过c语言了,这两年一直在搞java和c#,现在编c语言的程序还得经常百度各种用法,虽然会用python但是感到对底层api不了解的话难以根治这个帖子中的问题,所以决定写一个c语言的程序研究一下v4l2。
这个程序还会更新,分享出来是因为网上代码虽然很多但是比较杂乱而且没有注释(对大神来说扫一眼就能看明白么??),也没有按照结构分块。希望能帮助到需要帮助的人,顺便希望如果高手们有空的话能给我一些指点。
说说这两天的心得:
因为希望在windows上完成开发和调试,经过各种查找发现Visual Studio+WinGDB还是蛮好用的,这里有关于安装和配置的教程
调试的时候如果想看到printf的数据,可以这样-在菜单栏WinGDB下选择Show process console。

现在遇到的问题:
我用的摄像头是罗技C270,测试V4L2对它只支持MJPEG和YUYV格式。
使用YUYV格式截图,截图格式是*.ppm  写到这里想到是不是MJPEG格式就能截成jpg了呢???
貌似截图成*.ppm需要用fprint写个文件头(是应该这么叫吧)
fprintf(file_fd, "P6\n%d %d\n 255\n",imageWidth, imageHeight);
网上有的例程没有这一句,干脆打不开截图。
现在截图是附件中这种效果,我 觉得 是在读写buffer的时候哪里有问题,但buffer操作算是我比较薄弱的部分
希望能得到指点


不知道程序是这样分成几个文件方便大家参考阅读还是合成一个.c比较好?觉得一个文件好的话回复一下,我合并一下再传一份传上来。

每次编辑帖子都要重新审核,不知道什么级别能直接发出来帖子?????

下面附上一般操作流程
① 打开设备文件。 int fd=open(”/dev/video0″,O_RDWR)。
② 取得设备的capability,看看设备具有什么功能,比如是否具有视频输入,或者音频输入输出等。命令VIDIOC_QUERYCAP,结构体struct v4l2_capability。
③ 设置视频的帧格式,帧的格式个包括宽度和高度等。命令VIDIOC_S_FMT,结构体struct v4l2_format。
④ 向驱动申请帧缓冲,一般不超过5个。结构体struct v4l2_requestbuffers。
⑤ 将申请到的帧缓冲映射到用户空间,直接操作采集到的帧。
⑥ 开始视频的采集。命令VIDIOC_STREAMON。
⑦ 出队列以取得已采集数据的帧缓冲,取得原始采集数据。命令VIDIOC_DQBUF。
⑧ 将缓冲重新入队列尾,这样可以循环采集。命令VIDIOC_QBUF。
⑨ 停止视频的采集,命令VIDIOC_STREAMOFF。
⑩ 关闭视频设备,close(fd)。


BufferCam.jpg (29.03 KB, 下载次数: 61)

BufferCam.jpg

USBCam_V4L2_V0204.rar

4.02 KB, 下载次数: 22

分享到:
回复

使用道具 举报

回答|共 3 个

倒序浏览

沙发

Edwardwx

发表于 2015-2-8 21:27:26 | 只看该作者

发现自己犯了个很低级的错误,因为对linux的编译方式不够熟悉。
在最初移植这个例程的时候,没有按照说明加 -lv4l2,导致编译不过去,之后改写了一下,去掉了各种函数上的v4l2_  (很多其他例程这么做)  编译成功了,但是我发现其中open等函数用的是fcntl.h里面的。运行程序就会出现帖子中的效果。如果gcc -lv4l2就不会有这个问题了,.ppm文件可以直接用phototshop打开,是正常图片了。
不知道有没有什么特殊写法使得程序在编译的时候不用加-lv4l2这个参数???
板凳

Edwardwx

发表于 2015-2-10 14:00:12 | 只看该作者

本帖最后由 Edwardwx 于 2015-3-12 09:49 编辑

最终确定原因:fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB24;
在生成.ppm格式的时候如果用YUYV就会花
但是如果要在程序里转换成jpg格式,就得用YUYV格式
再重新传附件又要审核等很久,代码发到一个Git平台了,需要的可以去下载
https://coding.net/u/Edwardwx/p/USBCamCapture-on-Raspberry-Pi
还有另一个视频编码的项目
https://coding.net/u/Edwardwx/p/Raspberry-PI-Video-Project/git
地板

historyme

发表于 2015-2-22 21:48:53 | 只看该作者

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条