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
值没有 EDID 支持,则会返回 EINVAL
错误代码。
要获取 EDID 数据,应用程序必须填写 pad
、start_block
、blocks
和 edid
字段,将 reserved
数组清零,并调用 VIDIOC_G_EDID。从块 start_block
开始、大小为 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,而是设置错误代码 E2BIG
,并将 blocks
设置为硬件支持的最大值。如果 start_block
是 0 以外的任何值,则会设置错误代码 EINVAL
。
要禁用 EDID,请将 blocks
设置为 0。根据硬件的不同,这会将热插拔引脚驱动为低电平,和/或以某种方式阻止源读取 EDID 数据。无论如何,最终结果都是相同的:EDID 不再可用。
-
type v4l2_edid¶
__u32 |
|
要获取/设置 EDID 块的焊盘。当与视频设备节点一起使用时,焊盘表示输入或输出索引,如 ioctl VIDIOC_ENUMINPUT 和 ioctl VIDIOC_ENUMOUTPUT 分别返回的那样。 |
__u32 |
|
从这个块开始读取 EDID。设置 EDID 时必须为 0。 |
__u32 |
|
要获取或设置的块数。必须小于或等于 256(标准定义的最大块数)。当您设置 EDID 且 |
__u32 |
|
为将来的扩展保留。应用程序和驱动程序必须将数组设置为零。 |
__u8 * |
|
指向包含 EDID 的内存的指针。最小大小为 |
7.27.5. 返回值¶
成功时返回 0,失败时返回 -1,并适当地设置 errno
变量。通用错误代码在 通用错误代码 章节中描述。
ENODATA
EDID 数据不可用。
E2BIG
您提供的 EDID 数据超出了硬件可以处理的范围。