目录:
一)摄像头
二)照明
三)所想
四)总结
一)摄像头
摄像头这块学了跟没学一样我觉得,摄像头给的api,yuyv转rgb24也是给的api,总而言之就是,直接给了两个源文件,这两个源文件已经实现了屏幕显示摄像头数据的这个功能,我们所做的就只是把这两个文件和main文件整合,摄像头是怎么获得数据怎么传输数据,数据如何通过什么方式显示在屏幕上这些重点的都没详细讲,只是粗略讲了一下这个过程,不过这也正常,看了一下老师的源码,涉及到的东西确实很多,不觉得这是几天可以搞定的东西,而这可以说是本次培训的最后一天了。
那么这篇笔记该怎么写呢,如何实现的肯定是没法写的了,我也不懂,就只记录目前知道的东西吧
1)老师的笔记图
2)V4L2
V4L2是linux系统中的一个关于处理视频这一块的一个开发框架,一个处理视频数据的机制,目前我还没有开始学习这个框架
3)过程遇到的问题
① 问题:显示摄像头界面与菜单栏的点击无法同时实现,就是希望进入摄像界面以后点击返回可以返回主界面,再进入摄像界面依然可以显示摄像头内容
② 解决方法:有了之前解决视频菜单栏无法显示的经验,容易想到这个问题也可以使用线程来解决
③ 实现:我希望我的main.c文件尽量简洁,其中代码尽量少尽量清晰,我整合了很久代码,希望最终可以只是在main里添加一个显示摄像头的子线程,而把其他什么打开设备、缓存帧、yuyv转rgb24等显示摄像头内容之前需要进行的操作独立成一个文件,但是无论我怎么尝试,都无法实现预期,几个小时后,我妥协了,直接把摄像这一块的代码全部移植到main里,yuyv转rgb24为单独一个文件,这就解决问题了,但是我的main.c也变得繁琐起来了。以下是摄像界面图,图一是摄像头打开前显示的画面:
二)照明
其实就是点灯,这个就不详写了,直接给代码吧
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <fcntl.h> 4 #include <linux/ioctl.h> 5 6 #define GEC210_LED_ON _IOW('A', 0x03, unsigned long) 7 #define GEC210_LED_OFF _IOW('A', 0x04, unsigned long) 8 int light(void) 9 { 10 int fd_light; 11 fd_light = open("/dev/led_drv", O_RDONLY);//以只读的方式LED的驱动,这个驱动文件要先安装,用老师给的驱动文件led_drv.ko 12 if(fd_light < 0) 13 { 14 perror("open"); 15 return -1; 16 } 17 //在此基础上实现流水灯的效果 18 while(1) 19 { 20 ioctl(fd_light, GEC210_LED_ON, 4); //点亮第4个灯 21 sleep(1); 22 ioctl(fd_light, GEC210_LED_OFF, 4); //关闭第4个灯 23 sleep(1); 24 } 25 close(fd_light); 26 return 0; 27 }led.c
三)所想
1)没什么想的今天,就感觉没学到什么东西,希望自己可以抽空学习一下V4L2这个东西,如果学了的话到时候再补充这篇笔记
四)总结
1)实现了摄像头的功能,解决的菜单栏的问题
2)菜单栏的拍照拍摄功能没有实现
3)学习了点灯
4)第七天就不单独写笔记了,因为第七天没学新东西,项目验收而已,我在第七天尝试了实现拍照功能,但是失败了,的确可以生成一张jpg图片,但是这张图片没有数据,问了一下老师,说是在数据写入的时候出现了问题,测试了一下发现不是数据写入的问题,而是使用read函数读取屏幕信息的时候就失败了,尝试了半天,read依然返回-1,也就是依然失败,最后放弃了。