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 {		//描述摄像头等子设备
#if defined(CONFIG_MEDIA_CONTROLLER)struct media_entity entity;
#endifstruct list_head list;struct module *owner;bool owner_v4l2_dev;u32 flags;struct v4l2_device *v4l2_dev;const struct v4l2_subdev_ops *ops;const struct v4l2_subdev_internal_ops *internal_ops;struct v4l2_ctrl_handler *ctrl_handler;char name[V4L2_SUBDEV_NAME_SIZE];u32 grp_id;void *dev_priv;void *host_priv;struct video_device *devnode;struct device *dev;struct fwnode_handle *fwnode;struct list_head async_list;struct v4l2_async_subdev *asd;struct v4l2_async_notifier *notifier;struct v4l2_async_notifier *subdev_notifier;struct v4l2_subdev_platform_data *pdata;
};	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()//卸载entitystruct 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()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/343748.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NAND SCA接口对性能影响有多大?

在多LUN场景下,SCA接口尤其有助于提高随机读取性能。通过合理安排读取命令和等待时间(如tR),SCA接口可以在一个LUN完成读取后立即开始另一个LUN的读取操作,而无需等待整个DQ总线空闲,从而减少了延迟和提高了…

C++学习笔记——多态与静态联编和动态联编

目录 一、多态 二、静态联编(Static Binding)和动态联编(Dynamic Binding) 2.1静态联编 2.2动态联编 一、多态 是C中面向对象编程的一个核心概念,它允许派生类对象替代其基类对象,从而实现代码重用和扩…

[每周一更]-(第82期):认识自然处理语言(NLP)

GPT的大火,带起了行业内大模型的爆发;国内外都开始拥有或者研发自己的大模型,下边我们从NLP来进一步深入了解大模型、AI。 一、什么是NLP? 自然语言处理(英语:Natural Language Processing,缩…

【动态规划】dp多状态问题

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:【LeetCode】winter vacation training 目录 👉🏻按摩师👉&…

代码随想录算法训练营第17天 | 110.平衡二叉树 + 257. 二叉树的所有路径 + 404.左叶子之和

今日内容 110.平衡二叉树 257. 二叉树的所有路径 404.左叶子之和 110.平衡二叉树 - Easy 题目链接:. - 力扣(LeetCode) 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为&#xff1…

MES系统如何进行产品的质量管理

质量管理重点是对产品的检验,这里面包括:采购来料检验、工序检验、入库前检验等几个检验环节,并根据系统设定的检验标准进行检验,检验不通过的不能留到下个环节。质量管理也是万界星空科技云MES中的一个重要组成部分,旨…

【深度学习】Anaconda3 + PyCharm 的环境配置 1:手把手带你安装 PyTorch 并创建 PyCharm 项目

前言 文章性质:实操记录 💻 主要内容:这篇文章记录了 PyTorch 的安装过程,包括: 1. 创建并激活新的虚拟环境; 2. 查看电脑是否支持 CUDA 以及 CUDA 的版本; 3. 根据 CUDA 的版本安装 PyTorch&am…

NAND Separate Command Address (SCA) 接口命令解读

CA output packet和CA input packet是Separate Command Address (SCA) NAND接口协议中用于命令和地址传输的关键数据结构。 CA Input Packet: 在SCA接口中,输入到NAND器件的命令和地址信息被组织成并行至串行转换的CA(Command and Address)输…

主动学习基础-贝叶斯神经网络

引言 传统的深度神经网络一般都有过度自信的问题。 即使我给神经网络提供一个从来没有训练过的类别图像,神经网络也会输出一个类别。比如训练猫狗的分类器,如果你抛出一个人的图像,网络也会将其分类为猫或者狗。 在几乎所有现实世界的问题中…

【论文阅读】Self-supervised Learning: Generative or Contrastive

Abstract 研究了在计算机视觉、自然语言处理和图形学习中用于表示的新的自监督学习方法。全面回顾了现有的实证方法,并根据其目的将其归纳为三大类:生成性、对比性和生成性对比(对抗性)。进一步收集了关于自我监督学习的相关理论…

亚信安慧AntDB超融合数据库:拓展亿级用户系统的智能化新纪元

在面对亿级用户规模的系统建设需求时,传统数据库往往面临诸多挑战。为了满足多样化的技术要求,项目通常需要倚赖多套技术体系,例如,一套关系型数据库用于元数据管理和标签化管理,另一套则专注于非结构化文件的处理。这…

软件测试|深入了解PyCharmDebug功能:逐步调试Python代码

简介 PyCharm作为一款强大的Python集成开发环境,提供了丰富的调试功能,可以帮助开发者轻松定位和解决代码问题。本文将详细介绍如何在PyCharm中使用Debug功能,并通过示例演示其实际应用。 debug 步骤 打开项目: 打开PyCharm&…