7.60. ioctl VIDIOC_SUBDEV_G_FMT, VIDIOC_SUBDEV_S_FMT

7.60.1. 名称

VIDIOC_SUBDEV_G_FMT - VIDIOC_SUBDEV_S_FMT - 获取或设置子设备焊盘上的数据格式

7.60.2. 概要

VIDIOC_SUBDEV_G_FMT

int ioctl(int fd, VIDIOC_SUBDEV_G_FMT, struct v4l2_subdev_format *argp)

VIDIOC_SUBDEV_S_FMT

int ioctl(int fd, VIDIOC_SUBDEV_S_FMT, struct v4l2_subdev_format *argp)

7.60.3. 参数

fd

open()返回的文件描述符。

argp

指向 v4l2_subdev_format 结构的指针。

7.60.4. 描述

这些 ioctl 用于协商图像管道中特定子设备焊盘的帧格式。

要检索当前格式,应用程序将 v4l2_subdev_format 结构的 pad 字段设置为媒体 API 报告的所需焊盘号,并将 which 字段设置为 V4L2_SUBDEV_FORMAT_ACTIVE。当他们使用指向此结构的指针调用 VIDIOC_SUBDEV_G_FMT ioctl 时,驱动程序会填充 format 字段的成员。

要更改当前格式,应用程序将设置 padwhich 字段以及 format 字段的所有成员。当他们使用指向此结构的指针调用 VIDIOC_SUBDEV_S_FMT ioctl 时,驱动程序会验证请求的格式,根据硬件功能对其进行调整并配置设备。返回时,v4l2_subdev_format 结构包含当前格式,就像 VIDIOC_SUBDEV_G_FMT 调用返回的格式一样。

应用程序可以通过将 which 设置为 V4L2_SUBDEV_FORMAT_TRY 来查询设备功能。设置后,'try' 格式不会由驱动程序应用于设备,而是像活动格式一样进行更改并存储在子设备文件句柄中。因此,两个查询同一子设备的应用程序不会相互影响。

例如,要在子设备的输出焊盘上尝试一种格式,应用程序首先使用 VIDIOC_SUBDEV_S_FMT ioctl 在子设备输入端设置尝试格式。然后,他们可以使用 VIDIOC_SUBDEV_G_FMT ioctl 检索输出焊盘上的默认格式,或者使用 VIDIOC_SUBDEV_S_FMT ioctl 设置所需的输出焊盘格式并检查返回值。

尝试格式不依赖于活动格式,但可以依赖于当前的链接配置或子设备控制值。例如,低通噪声滤波器可能会在帧边界处裁剪像素,从而修改其输出帧大小。

如果子设备设备节点已在只读模式下注册,则仅当 which 字段设置为 V4L2_SUBDEV_FORMAT_TRY 时,调用 VIDIOC_SUBDEV_S_FMT 才有效,否则将返回错误,并且 errno 变量设置为 -EPERM

驱动程序不应仅仅因为请求的格式与设备功能不匹配而返回错误。相反,他们必须修改格式以匹配硬件可以提供的格式。修改后的格式应尽可能接近原始请求。

type v4l2_subdev_format
struct v4l2_subdev_format

__u32

pad

媒体控制器 API 报告的焊盘编号。

__u32

which

要修改的格式,来自枚举 v4l2_subdev_format_whence

struct v4l2_mbus_framefmt

format

图像格式的定义,详见 v4l2_mbus_framefmt

__u32

stream

流标识符。

__u32

reserved[7]

保留以供将来扩展。应用程序和驱动程序必须将数组设置为零。

enum v4l2_subdev_format_whence

V4L2_SUBDEV_FORMAT_TRY

0

尝试格式,用于查询设备功能。

V4L2_SUBDEV_FORMAT_ACTIVE

1

活动格式,应用于硬件。

7.60.5. 返回值

成功时返回 0,出错时返回 -1,并适当设置 errno 变量。通用错误代码在 通用错误代码 章节中进行了描述。

EBUSY

由于焊盘当前正忙,因此无法更改格式。例如,这可能是由焊盘上的活动视频流引起的。必须先执行其他操作以解决问题,然后再重试 ioctl。仅由 VIDIOC_SUBDEV_S_FMT 返回

EINVAL

结构体 v4l2_subdev_format pad 引用不存在的焊盘,或者 which 字段具有不受支持的值。

EPERM

已在只读子设备上调用了 VIDIOC_SUBDEV_S_FMT ioctl,并且 which 字段设置为 V4L2_SUBDEV_FORMAT_ACTIVE


成功时返回 0,出错时返回 -1,并适当设置 errno 变量。通用错误代码在 通用错误代码 章节中进行了描述。