主程序框架:
1. options_init();
2.options_deal(argc, argv);
3. video_init();
4.screen_init();
5.screen_mainloop();
6.screen_quit();
7.video_quit();
3.视频初始化
3.1 video_open(); fd = open(device, O_RDWR); //打开设备
3.2 video_set_format(); VIDIOC_S_FMT //设定格式,查看格式为VIDIOC_GFMT
3.3 buffer_init(); //缓冲区初始化,见下文
3.4 video_streamon(); VIDIOC_STREAMON //打开采集
3.3缓冲区初始化
3.3.1 缓冲区请求,VIDIOC_REQBUFS, 应用程序缓冲获得了calloc()
3.3.2 缓冲区映射, VIDIOC_QUERYBUF(把VIDIO_REQBUFS 中分配的数据缓存转换成物理地址)
3.3.3 缓冲区入队VIDIO_QBUF
5屏幕显示主循环
5.1 出队,VIDIOC_DQBUF //从缓冲区获取一个缓冲帧,前提是所有的队列已经入好。
5.2 处理采集回来的图像
5.3 VIDIOC_QBUF // 将取出的缓冲帧放回缓冲区
7视频采集退出
7.1 关闭采集 VIDIO_STREAMOFF
7.2 关闭视频文件指针close(fd)
7.3 释放缓存,解除映射关系unmmap();