Entities、pads、links 实体、垫、链接

Entities、pads、links 实体、垫、链接

Entities:
1.实体由一个struct media_entity实例表示。结构通常嵌入到一个较高级别的结构,例如v4l2_subdev或video_device实例,虽然驱动程序
可以直接分配实体。
2.驱动程序初始化实体
media_entity_init(struct media_entity *entity, u16 num_pads,struct media_pad *pads, u16extra_links);
驱动向媒体设备注册实体:
media_device_register_entity(structmedia_device *mdev, struct media_entity*entity);
驱动程序注销实体:
media_device_unregister_entity(structmedia_entity *entity);
驱动程序释放与实体相关联的资源:
media_entity_cleanup(structmedia_entity * entity);

①可以在调用media_entity_init之前或之后初始化media_entity的name,type,flags,revision和group_id字段。嵌入在较高级别标准结构中的
实体可以具有由较高级别框架设置其中的某些字段。
②由于pad的数目是预先已知的,所以pad阵列不是动态分配的,而是由实体驱动器管理。大多数驱动程序会将驱动程序阵列嵌入到驱动程序特
定的结构中,从而避免动态分配。
③驱动程序必须在调用media_entity_init之前设置pad数组中每个pad的方向。该功能将初始化其他pad字段。
④与pad的数量不同,链接的总数不总是由实体驱动程序预先知道。作为初始估计,media_entity_init预分配等于衬垫数量的链路数量加上可
选数量的额外链路。如果链路数组增长超过初始估计,它将被重新分配。
⑥实体由唯一的正整数ID标识。 驱动程序可以在注册之前填充media_entity id字段来提供ID,或者请求媒体控制器框架自动分配ID。手动提
供ID的驱动程序必须确保所有ID是唯一的。ID不能保证是连续的,即使它们都由框架自动分配。
⑦注销实体不会更改其他实体的ID,并且ID将永远不会重新用于新注册的实体。当媒体设备未注册时,其所有实体都将自动取消注册。不需要手
动实体注销。
⑧在注销实体后,必须在清除阶段调用media_entity_cleanup函数。请注意,如果需要,驱动程序必须显式释放media_entity实例本身。
⑨实体具有描述实体能力和状态的标志,eg.MEDIA_ENT_FL_DEFAULT:表示给定类型的默认实体。这可用于报告默认的音频和视频设备或默认
相机传感器。
逻辑实体组可以通过将所有成员实体的组ID设置为相同的非零值来定义。实体组在内核中不起作用,但在实体枚举期间会报告给用户空间。
group_id字段属于媒体设备驱动程序,且不能由实体驱动程序触摸。
10.如果几个实体在逻辑上绑定在一起,媒体设备驱动程序应该定义组。eg
- 携带相同媒体流的ALSA,VBI和视频节点
- 与传感器相关联的透镜和闪光控制器


Pads:
pad由一个struct media_pad实例表示,每个实体将其焊盘存储在由实体驱动器管理的焊盘阵列中。驱动程序通常将数组嵌入到驱动程序特定
的结构中。
pads由其实体和其在pads阵列中的基于0的索引来标识。这两个信息都存储在media_pad结构中,使media_pad指针可以存储和传递链接引用的
规范方式。
pads具有描述pad的能力和状态的标志:
MEDIA_PAD_FL_SINK 表示该pad支持目标数据。
MEDIA_PAD_FL_SOURCE 表示该pad支持源数据。
必须为每个pad设置MEDIA_PAD_FL_SINK和MEDIA_PAD_FL_SOURCE中的一个且仅有一个。


Links:
链接由struct media_link实例表示。每个实体存储源自或针对链路阵列中的任何其pads的所有链路。因此,给定link被存储两次,一次在
源实体中,一次在目标实体中。数组是预分配并根据需要动态增长。
驱动程序创建链接:
media_entity_create_link(struct media_entity *source, u16source_pad,struct media_entity*sink, u16 sink_pad,u32 flags);

每个实体的链接阵列中的条目被分配并且存储指向源和接收pads的指针。

链接具有描述链接能力和状态的标志:
MEDIA_LNK_FL_ENABLED 表示链接已启用,可用于传输媒体数据。当两个或更多链路以接收器焊盘为目标时,每次只能启用其中一个。
MEDIA_LNK_FL_IMMUTABLE 指示无法在运行时修改链接启用状态。如果设置MEDIA_LNK_FL_IMMUTABLE,则由于始终启用不可变链接,因此也
必须设置MEDIA_LNK_FL_ENABLED。

原文地址:https://www.cnblogs.com/hellokitty2/p/8285013.html