V4L2视频采集驱动框架
来源:互联网 发布:软件如何做授权加密 编辑:程序博客网 时间:2024/04/25 00:20
V4l2是视频采集的驱动吗,不是。V4l2只是一个视频采集的框架,何为框架,V4l2只是定义了一系列有关视频采集数据 的数据结构,而没有真正进行内存映射以及数据读写的操作。但是在V4l2中的确声明了数据读写和内存映射的操作(file_operations v4l2_fops),但是具体的实现却是另外的内核代码实现的。
static const struct file_operations v4l2_fops = { .owner = THIS_MODULE .read = v4l2_read .write = v4l2_write .open = v4l2_open .mmap = v4l2_mmap .ioctl = v4l2_ioctl ....};
这里我们v4l2_read函数为例,来解释一下为什么v4l2只是一个视频采集的框架而非真正意义上的驱动程序。下面是v4l2_read函数的相关代码:
static ssize_t v4l2_read(struct file *filp, char _user *buf, size_t sz, lofft_t *off){ struct video_device *vdev = video_devdata(filp); if (!vdev->fops->read) return -EINVAL; if (video_is_unregister(vdev)) return -EIO; return vdev->fops->read(filp, buf, sz, off);}这里我们可以看到v4l2_read函数里面没有做什么实际的数据操作,只是把操作引向了vdev->fops->read()函数,这个函数才是视频采集真正的驱动程序。
那么这个函数是在什么地方呢,在2.6.32的内核版本中,deriver/media/video文件夹下面有一个vivi.c源码文件,对应的就是这个read函数的实现:
static const struct v4l2_file_oparations vivi_fops = { .owner = THIS_MODULE, .open = vivi_open, .release = vivi_close, .read = vivi_read, .poll = vivi_poll, .ioctl = video.ioctl2, .mmap = vivi_mmap,};
至于和缓存有关的操作,则是在driver/media/video文件夹下面的videobuf-core.c等文件中实现的。
所以V4l2这里的作用就是一个框架的作用,它定义了一系列数据结构和操作函数,但却没有具体实现,而是指向了其他的内核代码,
0 0
- V4L2视频采集驱动框架
- v4l2视频采集驱动框架
- V4L2视频采集框架
- linux V4L2框架 视频驱动
- Davinci V4L2视频采集框架分析
- Davinci V4L2视频采集框架分析
- linux3.3 v4l2视频采集驱动框架(vfe, camera i2c driver,v4l2_subdev等之间的联系)
- v4l2视频采集驱动框架(vfe, camera i2c driver,v4l2_subdev等之间的联系)
- 基于Linux视频驱动接口V4L2视频采集编程
- 基于Linux视频驱动接口V4L2视频采集编程
- 基于Linux视频驱动接口V4L2视频采集编程
- 基于Linux视频驱动接口V4L2视频采集编程
- 基于Linux视频驱动接口V4L2视频采集编程
- 基于Linux视频驱动接口V4L2视频采集编程
- 基于Linux视频驱动接口V4L2视频采集编程
- 基于Linux视频驱动接口V4L2视频采集编程
- v4l2视频采集程序
- 视频采集V4L2
- 大数加法、大数乘法、大数减法。Swift。
- 多对多表的连接关系
- codeforces 659 D. Bicycle Race
- 分库分表
- Android中线程同步
- V4L2视频采集驱动框架
- s5pv210 jpeg硬件编码
- 01-复杂度1 最大子列和问题
- shiro 第二节 身份验证
- HBase2.0的可用性与一致性
- n乘1
- miniUI 前台的一个小功能
- Eclipse和MyEclipse自动提示设置
- 渲染到纹理(Render To Texture, RTT)