zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    文件遍历
    小记——LocalFree与指针
    小记——遍历文件2
    数据库索引
    easyui验证
    JDBC事务
    ajax登录跳转实现
    dom解析xml
    kindeditor使用
    log4j的配置
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/8285013.html
Copyright © 2011-2022 走看看