Linux-v4l2框架

框架图在这里插入图片描述

从上图不难看出,v4l2_device作为顶层管理者,一方面通过嵌入到一个video_device中,暴露video设备节点给用户空间进行控制;另一方面,video_device内部会创建一个media_entity作为在media controller中的抽象体,被加入到media_device中的entities链表中。此外,为了保持对所从属子设备的控制,内部还维护了一个挂载了所有v4l2_subdev子设备的subdevs链表。
而对于其中每一个子设备而言,统一采用了v4l2_subdev结构体来进行描述,一方面通过嵌入到video_device,暴露v4l2_subdev子设备节点给用户空间进行控制,另一方面其内部也维护着在media controller中的对应的一个media_entity抽象体,而该抽象体也会链入到media_device中的entities链表中。
通过加入entities链表的方式,media_device保持了对所有的设备信息的查询和控制的能力,而该能力会通过media controller框架在用户空间创建meida设备节点,将这种能力暴露给用户进行控制。

Linux-v4l2框架

struct video_device {}		//创建用户层设备节点
struct media_device {} 		//
	media_device_init()
	media_device_cleanup()
	media_device_register()
	media_device_unregister()
struct v4l2_device {} 		//v4l2控制器	
	v4l2_device_register()
	v4l2_device_unregister()
	
struct v4l2_subdev {} 		//摄像头等子设备
	v4l2_i2c_subdev_init()
	v4l2_spi_subdev_init()

media controller

媒体实体(Media Entity)
媒体端口(Media Pad)
媒体连接(Media Link)

struct media_device {}
media_device_init()
media_device_cleanup()
media_device_register()
media_device_unregister()

struct media_entity {}
media_entity_pads_init() //初始化entity pad
media_device_register_entity() //注册entity
media_device_unregister_entity()//卸载entity

struct media_pad {}
//分为sink pad输入端口和source pad输出端口
//输入端口负责接收数据,输出端口负责发送数据。

struct media_link {}
media_create_pad_link()
media_entity_remove_links()
media_create_intf_link()
media_remove_intf_links()

相关推荐

  1. Linux基于V4L2的视频捕捉

    2024-01-07 09:14:05       9 阅读
  2. V4L2驱动

    2024-01-07 09:14:05       11 阅读
  3. Linux多媒体基础 - v4l2 vb2_queue的用法

    2024-01-07 09:14:05       13 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-07 09:14:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-07 09:14:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-07 09:14:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-07 09:14:05       20 阅读

热门阅读

  1. ubuntu/linux 如何在虚拟环境中下载MPI-IS mesh

    2024-01-07 09:14:05       35 阅读
  2. Python数据实战项目

    2024-01-07 09:14:05       42 阅读
  3. ARM CC编译错误和警告解释大全(1) 序列号0-1000

    2024-01-07 09:14:05       39 阅读
  4. 关于axios的二次封装

    2024-01-07 09:14:05       40 阅读
  5. c++类全面讲解

    2024-01-07 09:14:05       36 阅读
  6. Linux内核--进程管理(十二)LinuxIO基础知识与概念

    2024-01-07 09:14:05       32 阅读
  7. 如何预防变种.halo勒索病毒感染您的计算机?

    2024-01-07 09:14:05       34 阅读
  8. 【MybatisPlus Docker】

    2024-01-07 09:14:05       40 阅读