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