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。
總結
以上是生活随笔為你收集整理的Entities、pads、links 实体、垫、链接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ansible用authorized_k
- 下一篇: 补题Codeforces 1102E.