tiny4412 linux-4.2 移植(十四)v4l2 camera(3)v4l2与media framework

本文深入探讨了Tiny4412平台上V4L2与Media Framework的交互,涉及fimc-capture, fimc_core, media_dev和ov7740驱动。通过分析结构体如video_device, v4l2_device, v4l2_subdev以及media_entity和medi_pad,展示了如何建立媒体实体和垫之间的链接,以及媒体设备之间的连接。媒体管道的启动和验证过程也进行了说明。" 139251569,7337247,AIGC实战:预训练模型与LoRA微调,"['深度学习', '神经网络', '大数据', '人工智能', '大型语言模型']
摘要由CSDN通过智能技术生成

概述

上两节我们介绍了v4l2的api使用方法,然后通过api深入框架之中了解其中的原理。这一节我们以tiny4412平台上的fimc和ov7740为例子介绍v4l2与media framework。
本文涉及到的驱动有:fimc-capture.c & fimc_core.c(capture驱动)、media_dev.c(SoC series camera host interface media device driver)和ov7740.c。capture驱动会根据设备树的配置(我设备树只配置了一个fimc)生成fimc.x(x = 0~4),fimc.x是芯片内部的摄像头接口模块,属于cameraif(camera interface),它主要负责获取摄像头的图像。media_dev.c可以理解为桥接器,它会去桥接各个subdev,并且提供一些核心的处理函数。

框架图

在这里插入图片描述
注:我这里省略了一些中间结构体,比如media_gobj。因为如果要画上这些结构体,以完整的形式表示,那一张框架图会变得杂乱不堪。
struct video_device:视频设备结构体,通过video_register_device注册到系统后会在/dev/下生成videoX节点。在capture驱动中,为videoX节点配置了ops如v4l2_file_operations和v4l2_ioctl_ops。这样应用层就可以open、mmap和ioctl视频设备节点了。
struct v4l2_device:v4l2设备结构体,在fimc的media_dev中创建的结构体。在注册这个设备的同时也注册了异步的subdev_notifier,有了这个subdev_notifier之后,只要subdev通过v4l2_async_register_subdev以异步的方式注册到系统,那么就会匹配到这个v4l2_device然后建立链接关系。
struct v4l2_subdev:v4l2子设备结构体,在这里我有两个子设备,一个是fimc.0,一个是ov7740。这里的ov7740以异步的方式注册,所以会跟上面的v4l2_device建立联系。
struct media_entity:属于media framework的概念,可以类比成电子元件。这个结构体代表一个media实体,它一般嵌入到更高级的一个数据结构中,比如video_device、v4l2_subdev中。
struct medi_pad:属于media framework的概念,可以类比成电子元件上面的引脚。比如我ov7740定义了一个source pad、fimc.0定义了属于video_device的一个sink pad、属于subdev的一个sink pad和src pad。
struct medi_link:用于链接的结构体,在调用media_create_pad_link的时候会生成一个link和一个back link,然后建立指定pad,以及对应的entity之间的链接。
通过对这些结构体的初始化和注册,结合media框架中提供的media_create_pad_link就会产生图中的链接图。media各个结构体的关系是你中有我,我中有你。这种密切的关系为media pipeline的运行时控制提供了基础。

相关函数

建立media_entity与media_pad之间的链接:

int media_entity_pads_init(struct media_entity *entity, u16 num_pads,struct media_pad *pads){
   
	struct media_device *mdev = entity->graph_obj.mdev;
	.....
	entity->num_pads = num_pads;	
	entity
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值