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. 引數

fd

open() 返回的檔案描述符。

argp

指向 struct v4l2_edid 的指標。

7.27.4. 描述

這些 ioctl 可用於獲取或設定與接收器的輸入或發射器的輸出裝置關聯的 EDID。它們可以與子裝置節點 (/dev/v4l-subdevX) 或影片節點 (/dev/videoX) 一起使用。

與影片節點一起使用時,pad 欄位表示輸入(對於影片捕獲裝置)或輸出(對於影片輸出裝置)索引,如 ioctl VIDIOC_ENUMINPUTioctl VIDIOC_ENUMOUTPUT 分別返回的。與子裝置節點一起使用時,pad 欄位表示子裝置的輸入或輸出 pad。如果給定的 pad 值沒有 EDID 支援,則將返回 EINVAL 錯誤程式碼。

要獲取 EDID 資料,應用程式必須填寫 padstart_blockblocksedid 欄位,將 reserved 陣列清零,並呼叫 VIDIOC_G_EDID。來自塊 start_block 的當前 EDID 和大小為 blocks 的 EDID 將放置在 edid 指向的記憶體中。edid 指標必須指向至少 blocks * 128 位元組大小的記憶體(一個塊的大小為 128 位元組)。

如果塊數少於指定的塊數,則驅動程式會將 blocks 設定為實際塊數。如果根本沒有 EDID 塊可用,則設定錯誤程式碼 ENODATA

如果必須從接收器檢索塊,則此呼叫將阻塞,直到讀取它們。

如果在呼叫 VIDIOC_G_EDIDstart_blockblocks 都設定為 0,則驅動程式會將 blocks 設定為可用的 EDID 塊的總數,並且它將返回 0 而不復制任何資料。這是一種發現有多少 EDID 塊的簡便方法。

注意

如果根本沒有 EDID 塊可用,則驅動程式會將 blocks 設定為 0 並返回 0。

要設定接收器的 EDID 塊,應用程式必須填寫 padblocksedid 欄位,將 start_block 設定為 0,並將 reserved 陣列清零。無法設定 EDID 的一部分,它始終是全部或全部不設定。設定 EDID 資料僅對接收器有效,因為它對發射器沒有任何意義。

驅動程式假定傳入完整的 EDID。如果 EDID 塊多於硬體可以處理的 EDID 塊,則不會寫入 EDID,而是設定錯誤程式碼 E2BIG,並將 blocks 設定為硬體支援的最大值。如果 start_block 是 0 以外的任何值,則會設定錯誤程式碼 EINVAL

要停用 EDID,請將 blocks 設定為 0。根據硬體的不同,這會將熱插拔引腳驅動為低電平和/或以某種方式阻止源讀取 EDID 資料。在任何情況下,最終結果都是相同的:EDID 不再可用。

type v4l2_edid
struct v4l2_edid

__u32

pad

用於獲取/設定 EDID 塊的 Pad。與影片裝置節點一起使用時,pad 表示輸入或輸出索引,如 ioctl VIDIOC_ENUMINPUTioctl VIDIOC_ENUMOUTPUT 分別返回的。

__u32

start_block

從這個塊開始讀取 EDID。設定 EDID 時必須為 0。

__u32

blocks

要獲取或設定的塊數。必須小於或等於 256(標準定義的最大塊數)。當您設定 EDID 且 blocks 為 0 時,EDID 將被停用或擦除。

__u32

reserved[5]

保留用於將來的擴充套件。應用程式和驅動程式必須將陣列設定為零。

__u8 *

edid

指向包含 EDID 的記憶體的指標。最小大小為 blocks * 128。

7.27.5. 返回值

成功時返回 0,錯誤時返回 -1,並適當設定 errno 變數。通用錯誤程式碼在 通用錯誤程式碼 章節中描述。

ENODATA

EDID 資料不可用。

E2BIG

您提供的 EDID 資料超過了硬體可以處理的資料。