7.63. ioctl VIDIOC_SUBDEV_G_SELECTION, VIDIOC_SUBDEV_S_SELECTION

7.63.1. 名称

VIDIOC_SUBDEV_G_SELECTION - VIDIOC_SUBDEV_S_SELECTION - 获取或设置 subdev pad 上的选择矩形

7.63.2. 概要

VIDIOC_SUBDEV_G_SELECTION

int ioctl(int fd, VIDIOC_SUBDEV_G_SELECTION, struct v4l2_subdev_selection *argp)

VIDIOC_SUBDEV_S_SELECTION

int ioctl(int fd, VIDIOC_SUBDEV_S_SELECTION, struct v4l2_subdev_selection *argp)

7.63.3. 参数

fd

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

argp

指向结构体 v4l2_subdev_selection 的指针。

7.63.4. 描述

选择用于配置子设备执行的各种影响图像大小的图像处理功能。 这目前包括裁剪、缩放和合成。

选择 API 替代 旧的子设备裁剪 API。 裁剪 API 的所有功能以及更多功能都由选择 API 支持。

有关每个选择目标如何影响子设备内部图像处理管道的更多信息,请参见 子设备接口

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

7.63.4.1. 选择目标类型

有两种类型的选择目标:实际目标和边界。 实际目标是配置硬件的目标。 BOUNDS 目标将返回一个包含所有可能的实际矩形的矩形。

7.63.4.2. 发现支持的功能

要发现支持哪些目标,用户可以对它们执行 VIDIOC_SUBDEV_G_SELECTION。 任何不支持的目标将返回 EINVAL

选择目标和标志在 通用选择定义 中进行了说明。

type v4l2_subdev_selection
struct v4l2_subdev_selection

__u32

which

活动或尝试选择,来自枚举 v4l2_subdev_format_whence

__u32

pad

媒体框架报告的 Pad 编号。

__u32

target

目标选择矩形。 请参见 通用选择定义

__u32

flags

标志。 请参见 选择标志

struct v4l2_rect

r

选择矩形,以像素为单位。

__u32

stream

流标识符。

__u32

reserved[7]

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

7.63.5. 返回值

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

EBUSY

由于 pad 当前正忙,因此无法更改选择矩形。 例如,这可能是由于 pad 上有活动的视频流引起的。 在没有执行其他操作以首先解决问题的情况下,不得重试 ioctl。 仅由 VIDIOC_SUBDEV_S_SELECTION 返回

EINVAL

结构体 v4l2_subdev_selection pad 引用了不存在的 pad,which 字段具有不受支持的值,或者给定 subdev pad 上不支持选择目标。

EPERM

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