嵌入式视频采集编程思路(Video 4 Linux)

简介:

嵌入式视频采集编程思路(Video 4 Linux

1linux 内核有video for linux简称V4LV4LLinux影像系统与嵌入式影像的基础,是Linux kernel里支持影像设备的一组APIs,配合适当的视频采集卡与视频采集卡驱动程序,V4L可以实现影像采集、AM/FM无线广播、影像CODEC、频道切换等功能。目前,V4L主要应用在影像串流系统与嵌入式影像系统里,其应用范围相当广泛,例如:远程教学、远程医疗、视频会议、视频监控、可视电话等。V4L2层式架构,最上层为V4L驱动程序,最下层则是影像设备驱动程序。
2】接上USB摄像头,硬件设备在linux下都是作为文件访问,所以只需在/dev/下查找,一般情况下为video0。当摄像机通过USB接口连接到视频采集终端后,在程序中调用V4L APIs对设备文件video0的读操作即可实现摄像头视频数据采集。其主要过程如下:
1) 打开设备文件: int v4l_open(char *dev, v4l_device *vd){}打开影像源的设备文件;
2) 初始化picture: int v4l_get_picture(v4l_device *vd){} 获取输入的影像信息;
3) 初始化channelint v4l_get_channels(v4l_device *vd){} 获取每个channel的信息;
4) channel设置normint v4l_set_norm(v4l_device *vd, int norm){} 对所有的channel设置norm
5) 设备地址映射:v4l_mmap_init(v4l_device *vd){} 返回存放图像数据的地址; 
6) 初始化mmap缓冲区: int v4l_grab_init(v4l_device *vd, int width, int height){}
7) 视频捕获同步: int v4l_grab_sync(v4l_device *vd){}
8) 视频捕获: int device_grab_frame(){}
针对USB摄像头设备文件/dev/video0的视频采集程序流程,首先调用V4L_open()函数打开视频设备,设备文件开启成功后使用V4L_ get_capability()读取设备信息,然后选择相应的视频采【集方式进行视频采集并对采集的图像进行处理,最后调用V4L_close()函数关闭视频设备文件。其中的视频采集方式有两种,一种是read()直接读取方式,另外一种是mmap()内存映射方式。mmap()方式下进程之间通过映射同一个文件实现内存共享,各进程可以像访问普通内存一样对文件进行访问。此外,mmap()方式加速了IO访问,提高了效率,故常选用内存映射方式获取视频。
Video for Linux支持的数据结构及其用途:
video_capability:设备的基本信息(设备名称、支持的分辨率等)
video_picture:采集的图像的各种属性;
video_channel:各个信号源的属性;
video_windows:包含采集区域的信息;
video_mbuf:利用mmap映射的帧的信息;
video_mmap:用于mmap方式。  
通过以上操作,即可将摄像机视频数据采集到内存。采集到内存的视频数据既可采用文件的形式保存,也可将其压缩后通过网络发布到Internet


本文转自 曾永刚 51CTO博客,原文链接:http://blog.51cto.com/zyg0227/271954
相关文章
|
16天前
|
JSON 机器人 Linux
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
推荐一款嵌入式Linux开源框架与封装-cpp-tbox
48 3
|
24天前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
24天前
|
算法 Linux C++
【Linux系统编程】深入解析Linux中read函数的错误场景
【Linux系统编程】深入解析Linux中read函数的错误场景
196 0
|
24天前
|
Linux API C语言
【Linux系统编程】深入理解Linux 组ID和附属组ID的查询与设置
【Linux系统编程】深入理解Linux 组ID和附属组ID的查询与设置
30 0
【Linux系统编程】深入理解Linux 组ID和附属组ID的查询与设置
|
30天前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
31 1
|
24天前
|
存储 算法 Linux
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
【Linux系统编程】深入理解Linux目录扫描函数:scandir目录函数(按条件扫描目录
37 0
|
24天前
|
存储 算法 Linux
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
【Linux系统编程】Linux 文件系统探究:深入理解 struct dirent、DIR 和 struct stat结构
36 0
|
4天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
|
11天前
|
Linux 开发者
Linux文件编程(open read write close函数)
通过这些函数,开发者可以在Linux环境下进行文件的读取、写入和管理。 买CN2云服务器,免备案服务器,高防服务器,就选蓝易云。百度搜索:蓝易云
84 4
|
17天前
|
Linux
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
嵌入式Linux系统(NUC980)tf卡出错处理errors=remount-ro改为errors=continue
7 1