7.27. ioctl VIDIOC_G_EDID, VIDIOC_S_EDID, VIDIOC_SUBDEV_G_EDID, VIDIOC_SUBDEV_S_EDID¶
7.27.1. 名稱¶
VIDIOC_G_EDID - VIDIOC_S_EDID - VIDIOC_SUBDEV_G_EDID - VIDIOC_SUBDEV_S_EDID - 獲取或設定影片接收器/發射器的 EDID
7.27.2. 概要¶
-
VIDIOC_G_EDID¶
int ioctl(int fd, VIDIOC_G_EDID, struct v4l2_edid *argp)
-
VIDIOC_S_EDID¶
int ioctl(int fd, VIDIOC_S_EDID, struct v4l2_edid *argp)
-
VIDIOC_SUBDEV_G_EDID¶
int ioctl(int fd, VIDIOC_SUBDEV_G_EDID, struct v4l2_edid *argp)
-
VIDIOC_SUBDEV_S_EDID¶
int ioctl(int fd, VIDIOC_SUBDEV_S_EDID, struct v4l2_edid *argp)
7.27.3. 引數¶
7.27.4. 描述¶
這些 ioctl 可用於獲取或設定與接收器的輸入或發射器的輸出裝置關聯的 EDID。它們可以與子裝置節點 (/dev/v4l-subdevX) 或影片節點 (/dev/videoX) 一起使用。
與影片節點一起使用時,pad 欄位表示輸入(對於影片捕獲裝置)或輸出(對於影片輸出裝置)索引,如 ioctl VIDIOC_ENUMINPUT 和 ioctl VIDIOC_ENUMOUTPUT 分別返回的。與子裝置節點一起使用時,pad 欄位表示子裝置的輸入或輸出 pad。如果給定的 pad 值沒有 EDID 支援,則將返回 EINVAL 錯誤程式碼。
要獲取 EDID 資料,應用程式必須填寫 pad、start_block、blocks 和 edid 欄位,將 reserved 陣列清零,並呼叫 VIDIOC_G_EDID。來自塊 start_block 的當前 EDID 和大小為 blocks 的 EDID 將放置在 edid 指向的記憶體中。edid 指標必須指向至少 blocks * 128 位元組大小的記憶體(一個塊的大小為 128 位元組)。
如果塊數少於指定的塊數,則驅動程式會將 blocks 設定為實際塊數。如果根本沒有 EDID 塊可用,則設定錯誤程式碼 ENODATA。
如果必須從接收器檢索塊,則此呼叫將阻塞,直到讀取它們。
如果在呼叫 VIDIOC_G_EDID 時 start_block 和 blocks 都設定為 0,則驅動程式會將 blocks 設定為可用的 EDID 塊的總數,並且它將返回 0 而不復制任何資料。這是一種發現有多少 EDID 塊的簡便方法。
注意
如果根本沒有 EDID 塊可用,則驅動程式會將 blocks 設定為 0 並返回 0。
要設定接收器的 EDID 塊,應用程式必須填寫 pad、blocks 和 edid 欄位,將 start_block 設定為 0,並將 reserved 陣列清零。無法設定 EDID 的一部分,它始終是全部或全部不設定。設定 EDID 資料僅對接收器有效,因為它對發射器沒有任何意義。
驅動程式假定傳入完整的 EDID。如果 EDID 塊多於硬體可以處理的 EDID 塊,則不會寫入 EDID,而是設定錯誤程式碼 E2BIG,並將 blocks 設定為硬體支援的最大值。如果 start_block 是 0 以外的任何值,則會設定錯誤程式碼 EINVAL。
要停用 EDID,請將 blocks 設定為 0。根據硬體的不同,這會將熱插拔引腳驅動為低電平和/或以某種方式阻止源讀取 EDID 資料。在任何情況下,最終結果都是相同的:EDID 不再可用。
-
type v4l2_edid¶
__u32 |
|
用於獲取/設定 EDID 塊的 Pad。與影片裝置節點一起使用時,pad 表示輸入或輸出索引,如 ioctl VIDIOC_ENUMINPUT 和 ioctl VIDIOC_ENUMOUTPUT 分別返回的。 |
__u32 |
|
從這個塊開始讀取 EDID。設定 EDID 時必須為 0。 |
__u32 |
|
要獲取或設定的塊數。必須小於或等於 256(標準定義的最大塊數)。當您設定 EDID 且 |
__u32 |
|
保留用於將來的擴充套件。應用程式和驅動程式必須將陣列設定為零。 |
__u8 * |
|
指向包含 EDID 的記憶體的指標。最小大小為 |
7.27.5. 返回值¶
成功時返回 0,錯誤時返回 -1,並適當設定 errno 變數。通用錯誤程式碼在 通用錯誤程式碼 章節中描述。
ENODATAEDID 資料不可用。
E2BIG您提供的 EDID 資料超過了硬體可以處理的資料。