7.62. ioctl VIDIOC_SUBDEV_G_ROUTING, VIDIOC_SUBDEV_S_ROUTING¶
7.62.1. 名称¶
VIDIOC_SUBDEV_G_ROUTING - VIDIOC_SUBDEV_S_ROUTING - 获取或设置媒体实体中媒体pad流之间的路由。
7.62.2. 概要¶
-
VIDIOC_SUBDEV_G_ROUTING¶
int ioctl(int fd, VIDIOC_SUBDEV_G_ROUTING, struct v4l2_subdev_routing *argp)
-
VIDIOC_SUBDEV_S_ROUTING¶
int ioctl(int fd, VIDIOC_SUBDEV_S_ROUTING, struct v4l2_subdev_routing *argp)
7.62.3. 参数¶
fd
由 open() 返回的文件描述符。
argp
指向 struct
v4l2_subdev_routing
的指针。
7.62.4. 描述¶
这些 ioctl 用于获取和设置媒体实体中的路由。 路由配置决定了实体内部的数据流。
驱动程序使用 VIDIOC_SUBDEV_G_ROUTING
ioctl 报告其当前路由表,应用程序可以通过添加或删除路由以及设置或清除 struct v4l2_subdev_route
的 flags
字段的标志,使用 VIDIOC_SUBDEV_S_ROUTING
ioctl 启用或禁用路由。 与 VIDIOC_SUBDEV_G_ROUTING
类似,VIDIOC_SUBDEV_S_ROUTING
也会将路由返回给用户。
当调用 VIDIOC_SUBDEV_S_ROUTING
时,所有流配置都会被重置。 这意味着在调用 ioctl 后,用户空间必须使用例如 VIDIOC_SUBDEV_S_FMT
重新配置所有流格式和选择。
只有同时具有sink和source pad的子设备才能支持路由。
len_routes
字段表示可以容纳在用户空间分配的 routes
数组中的路由数。 它由应用程序为两个 ioctl 设置,以指示内核可以返回多少条路由,并且永远不会被内核修改。
num_routes
字段表示路由表中的路由数。 对于 VIDIOC_SUBDEV_S_ROUTING
,它由用户空间设置为应用程序存储在 routes
数组中的路由数。 对于两个 ioctl,它都由内核返回,并指示子设备路由表中存储了多少条路由。 这可能小于或大于应用程序为 VIDIOC_SUBDEV_S_ROUTING
设置的 num_routes
值,因为驱动程序可能会调整请求的路由表。
内核可以从两个 ioctl 返回大于 len_routes
的 num_routes
值。 这表明路由表中存在比 routes
数组容纳的更多的路由。 在这种情况下,内核会在 routes
数组中填充子设备路由表的前 len_routes
项。 这不被认为是错误,并且 ioctl 调用成功。 如果应用程序想要检索丢失的路由,它可以发出一个新的 VIDIOC_SUBDEV_G_ROUTING
调用,并带有足够大的 routes
数组。
由于例如硬件属性,VIDIOC_SUBDEV_S_ROUTING
可能会返回比用户在 num_routes
字段中提供的更多的路由。
-
type v4l2_subdev_routing¶
__u32 |
|
要访问的路由表,来自枚举 v4l2_subdev_format_whence。 |
__u32 |
|
数组的长度(如为数组保留的内存) |
struct |
|
struct |
__u32 |
|
routes 数组的条目数 |
__u32 |
|
保留用于将来的扩展。 应用程序和驱动程序必须将数组设置为零。 |
-
type v4l2_subdev_route¶
__u32 |
|
Sink pad 编号。 |
__u32 |
|
Sink pad 流编号。 |
__u32 |
|
Source pad 编号。 |
__u32 |
|
Source pad 流编号。 |
__u32 |
|
路由启用/禁用标志 v4l2_subdev_routing_flags。 |
__u32 |
|
保留用于将来的扩展。 应用程序和驱动程序必须将数组设置为零。 |
V4L2_SUBDEV_ROUTE_FL_ACTIVE |
0x0001 |
路由已启用。 由应用程序设置。 |
7.62.5. 返回值¶
成功时返回 0,错误时返回 -1,并适当设置 errno
变量。 通用错误代码在 通用错误代码 章节中描述。
- EINVAL
sink 或 source pad 标识符引用了不存在的 pad 或引用了不同类型的 pad(即 sink_pad 标识符引用了 source pad),或者
which
字段具有不支持的值。- E2BIG
应用程序为
VIDIOC_SUBDEV_S_ROUTING
提供的num_routes
大于驱动程序可以处理的路由数。