Linux V4L2 async框架

内容目录:

  • v4l2 async框架介绍
  • v4l2 async框架实现
    • v4l2 async框架定义接口
    • v4l2 async框架访问接口
    • v4l2 async框架处理流程
  • v4l2 async框架应用-omap3isp

开始本次v4l2 async框架分析前先提个问题:使用库和使用框架有什么却别?

库和框架主要有两个区别:

  1. 从函数实现来说,库不但定义函数还负责实现函数,自定义模块是功能函数的使用者; 框架不但定义函数还使用功能函数,自定义模块负责实现函数。
  2. 从函数调用时机来说,自定义模块决定什么时候调用库定义的函数;框架实现决定什么时候调用框架定义的函数-自定义模块实现的函数。
  3. 从使用姿势来说,库定义的函数直接调用返回即结束;自定义模块实现框架定义的函数,首先需要注册到框架,然后函数可以被多次调用(具体调用多少次由框架实现决定)。

注释:这里说的函数特指功能函数。

1.v4l2 async框架介绍

v4l2 async框架是Linux V4L2框架中的一个子框架,用于实现v4l2 device的异步注册。我们都知道Linux V4L2框架中对设备定义分为:v4l2_device和v4l2_subdev, 设备是有从属概念的,v4l2 device之间是可以存在依赖关系的。v4l2 async框架主要就是为了解决这种乱序异步注册问题,保证一个v4l2 device的上一层的被依赖设备注册后注册这个v4l2 device。按依赖链自上而下完成注册。

v4l2 async框架定义两个角色,3个概念:

  • v4l2_async_subdev  //async的桥。是异步通知到对端的桥。kernel 6.x版本中中v4l2_async_connection数据结构替代。notifier通过这个桥知道异步操作的对端是谁。notifier持有桥(其实是怎么match)。
  • v4l2_async_notifier  //v4l2 async框架中的重要角色,是绑定动作的发起者(该角色需要实现v4l2_async框架定义接口:bound, complete, unbind)。
  • v4l2_subdev  //async通知给谁。是通知桥连接的对端。

    如上图构成的v4l2_async系统有两个notifier(v4l2_async_notifier和v4l2_subdev3)。v4l2_async_notifier是root notifier, 通过桥 v4l2_async_subdev3连接对端v4l2_subdev3。v4l2_subdev3有两重身份,对于v4l2_async_notifier来说,v4l2_subdev3是通过桥v4l2_async_subdev3连接的对端;对于v4l2_subdev4来说,v4l2_subdev3是notifier,通过桥v4l2_async_subdev3.1通知v4l2_subdev4。v4l2_subdev1、v4l2_subdev2、v4l2_subdev4身份单一,是通过桥连接的对端。

注意:通过v4l2 async框架实现的异步通知注册系统中不存在相同的"桥"。

v4l2 async框架是围绕两个链表来实现异步处理的:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值