
linux系统V4L2视频驱动
文章平均质量分 72
隨意的風
从事10+年的技术开发,结交天下软件研发朋友,共同探讨技术、共同进步。
展开
-
【genius_platform软件平台开发】第五十三讲:Linux系统之V4L2视频驱动-应用层代码如何编写篇章
V4L2支持多种接口:capture(捕获)、output(输出)、overlay(预览)等等,这里主要分析capture。1. 打开设备open//////////////////////////////////////////////////////////////////////// 打开设备节点INT32 CV4l2CaptureIr::openVideoDev(){ LOGMSG("CV4l2CaptureIr::openVideoDev"); // 等待耗时统计.原创 2022-04-22 12:06:22 · 903 阅读 · 2 评论 -
【genius_platform软件平台开发】第五十二讲:Linux系统之V4L2视频驱动详解
1. 简介Video4Linux2(简称V4L2)是Linux下关于视频采集相关设备的驱动框架,为驱动和应用程序提供了一套统一的接口规范。支持三类设备,分别会在/dev目录下产生不同的设备节点:1.1 视频输入输出设备(video capture device,video output device)分别是提供视频捕获功能的摄像头类型设备和提供视频输出功能的设备,对应的设备名为videoX。这是我们最常用的一种设备类型。1.2 VBI设备(Vertical Blanking Interval原创 2022-04-20 11:38:58 · 1278 阅读 · 3 评论 -
【genius_platform软件平台开发】第六十六讲:Linux系统之V4L2视频驱动-应用层close关闭
应用层close关闭创建了微信群欢迎一起学习:1. 概述2.应用层3. 驱动层3.1 vb2_queue_release函数3.2 vb2_core_queue_release函数3.3 __vb2_cleanup_fileio函数3.4 vb2_core_streamoff函数创建了微信群欢迎一起学习:1. 概述关闭视频流,munmap解除参数start所指向的内存起始地存起始地址。2.应用层终于走到最后一步closeclose(fd);3. 驱动层close可能不会走rel原创 2022-04-27 16:53:55 · 459 阅读 · 0 评论 -
【genius_platform软件平台开发】第六十五讲:Linux系统之V4L2视频驱动-VIDIOC_STREAMOFF停止取流
# 1. 概述- 关闭视频流,munmap解除参数start所指向的内存起始地存起始地址。# 2.应用层```c// 停止视频的采集 enum v4l2_buf_type unBuffType = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == this->ioCtrl(m_nFd, VIDIOC_STREAMOFF, &unBuffType)) { LOGERROR("CV4l2CaptureIr::stopCapture原创 2022-04-27 16:42:04 · 666 阅读 · 0 评论 -
【genius_platform软件平台开发】第六十四讲:Linux系统之V4L2视频驱动-VIDIOC_DQBUF出队列
VIDIOC_DQBUF出队列创建了微信群欢迎一起学习:1. 概述2.应用层3. 驱动层3.1 vb2_dqbuf函数3.2 vb2_core_dqbuf 函数3.3 __vb2_get_done_vb函数创建了微信群欢迎一起学习:1. 概述从v4l2驱动层中读取视频帧缓存数据。2.应用层struct v4l2_buffer info; memset(&info, 0, sizeof(info));// 取出FIFO缓存中已经采样的帧缓存 mem原创 2022-04-27 15:22:36 · 1118 阅读 · 1 评论 -
【genius_platform软件平台开发】第六十三讲:Linux系统之V4L2视频驱动-select查询
select查询喜欢的可以加微信群:1. 概述2.应用层3. 驱动层3.1 vb2_poll函数3.2 vb2_core_poll 函数喜欢的可以加微信群:1. 概述这一步主要是通过select函数在应用层查询是否有可读状态,如果有的话则执行后面的读取数据流操作。具体select做个简单分析得了,属于网络协议栈范畴。2.应用层for (;;) { fd_set readFds; struct timeval tv; FD_ZERO(原创 2022-04-27 14:53:30 · 918 阅读 · 0 评论 -
【genius_platform软件平台开发】第六十二讲:Linux系统之V4L2视频驱动-VIDIOC_STREAMON开启视频流
# 1. 概述- 主要就是让设备启动视频流,驱动中不停的获取视频数据,queued_list中产生源源不断的视频数据帧。# 2.应用层```c // 开始视频流数据的采集 unBuffType = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == this->ioCtrl(m_nFd, VIDIOC_STREAMON, &unBuffType)) { LOGERROR("CV4l2CaptureIr::startCaptur原创 2022-04-27 14:24:41 · 1329 阅读 · 0 评论 -
【genius_platform软件平台开发】第六十一讲:Linux系统之V4L2视频驱动-VIDIOC_QBUF入队列
操作系统一般把系统使用的内存划分成用户空间和内核空间,分别由应用程序管理和操作系统管理。应用程序可以直接访问内存的地址,而内核空间存放的是 供内核访问的代码和数据,用户不能直接访问。v4l2捕获的数据,最初是存放在内核空间的,这意味着用户不能直接访问该段内存,必须通过某些手段来转换地址;具体流程可以查看【genius_platform软件平台开发】第五十三讲:Linux系统之V4L2视频驱动-应用层代码如何编写篇章原创 2022-04-27 11:15:18 · 1833 阅读 · 0 评论 -
【genius_platform软件平台开发】第六十讲:Linux系统之V4L2视频驱动-mmap映射
详细讲解请参考这篇博客:[【genius_platform软件平台开发】第五十一讲:Linux系统内存映射mmap原理](https://blog.youkuaiyun.com/Windgs_YF/article/details/124019601)主要就是内核内存区域的迎神,方便用户空间操控该内存,获取数据。原创 2022-04-26 18:13:44 · 746 阅读 · 0 评论 -
【genius_platform软件平台开发】第五十九讲:Linux系统之V4L2视频驱动-VIDIOC_QUERYBUF查询缓存信息
- `VIDIOC_QUERYBUF`主要作用是查询分配好的 `buffer` 信息在内核空间中的`长度length`和`偏移量offset`.查询已经分配好的`V4L2`视频缓冲区的相关信息,包括缓冲区的使用`状态`、在内核空间的`偏移地址`、缓冲区`长度`等,然后应用程序根据这些信息使用`mmap`把内核空间地址映射到用户空间。原创 2022-04-26 16:41:10 · 2170 阅读 · 0 评论 -
【genius_platform软件平台开发】第五十八讲:Linux系统之V4L2视频驱动-VIDIOC_REQBUFS向驱动申请帧缓冲代码详解
请求在内核空间分配视频缓冲区功能:请求V4L2驱动分配视频缓冲区(申请V4L2视频驱动分配内存)V4L2是视频设备的驱动层,位于内核空间,所以通过VIDIOC_REQBUFS控制命令申请的内存位于内核空间,应用程序不能直接访问,需要通过调用mmap内存映射函数,把内核空间内存映射到用户空间后,应用程序通过访问用户空间地址来访问内核空间。参数说明:参数类型为V4L2的申请缓冲区数据结构体类型;结构中定义了缓存的数量,驱动会据此申请对应数量的视频缓存。...原创 2022-04-26 16:08:32 · 1668 阅读 · 0 评论 -
【genius_platform软件平台开发】第五十七讲:Linux系统之V4L2视频驱动-VIDIOC_ENUM_FMT枚举、VIDIOC_S_FMT、VIDIOC_S_FMT视频格式代码详解
1.应用层代码1.1 struct v4l2_fmtdesc结构体struct v4l2_fmtdesc { __u32 index; /* Format number */ enum v4l2_buf_type type; /* buffer type */ __u32 flags; __u8 de原创 2022-04-24 16:38:00 · 1470 阅读 · 0 评论 -
【genius_platform软件平台开发】第五十六讲:Linux系统之V4L2视频驱动-VIDIOC_QUERYCAP 查询设备能力代码详解
1. 应用层代码struct v4l2_capability { __u8 driver[16]; /* i.e. "bttv" */ __u8 card[32]; /* i.e. "Hauppauge WinTV" */ __u8 bus_info[32]; /* "PCI:" + pci_name(pci_dev) */ __u32 version; /* should use KERNEL_VER原创 2022-04-24 15:35:23 · 929 阅读 · 0 评论 -
【genius_platform软件平台开发】第五十五讲:Linux系统之V4L2视频驱动-ioctl函数代码详解
v4l2视频驱动的一些命令都是通过ioctl函数来实现的,比如:VIDIOC_QUERYCAP、VIDIOC_QBUF、VIDIOC_DQBUF、VIDIOC_STREAMON、VIDIOC_STREAMOFF等1. ioctl函数1.1 v4l2_ioctl函数只要是命令都会涉及到v4l2_ioctl方法的处理,源代码如下:static long v4l2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg){ .原创 2022-04-24 15:10:33 · 2157 阅读 · 0 评论 -
【genius_platform软件平台开发】第五十四讲:Linux系统之V4L2视频驱动-open函数代码详解
有幸在项目中使用到了v4l2视频驱动,作为一个字符设备驱动程序,有必要进行一下深层次的内核代码阅读。对驱动如何实现VIDIOC_QUERYCAP、VIDIOC_REQBUFS、VIDIOC_G_FMT,VIDIOC_S_FMT、VIDIOC_QBUF、VIDIOC_STREAMON、VIDIOC_DQBUF、VIDIOC_STREAMOFF等操作展开细节查阅;V4L2 的核心是 v4l2-dev.c 它向上提供统一的文件操作接口 v4l2_fops ,向下提供 video_device 注册接口 reg.原创 2022-04-24 13:52:33 · 852 阅读 · 0 评论