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_routeflags 欄位的標誌,使用 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_routesnum_routes 值。 這表明路由表中存在比 routes 陣列容納的更多的路由。 在這種情況下,核心會在 routes 陣列中填充子裝置路由表的前 len_routes 項。 這不被認為是錯誤,並且 ioctl 呼叫成功。 如果應用程式想要檢索丟失的路由,它可以發出一個新的 VIDIOC_SUBDEV_G_ROUTING 呼叫,並帶有足夠大的 routes 陣列。

由於例如硬體屬性,VIDIOC_SUBDEV_S_ROUTING 可能會返回比使用者在 num_routes 欄位中提供的更多的路由。

type v4l2_subdev_routing
struct v4l2_subdev_routing

__u32

which

要訪問的路由表,來自列舉 v4l2_subdev_format_whence

__u32

len_routes

陣列的長度(如為陣列保留的記憶體)

struct v4l2_subdev_route

routes[]

struct v4l2_subdev_route 條目的陣列

__u32

num_routes

routes 陣列的條目數

__u32

reserved[11]

保留用於將來的擴充套件。 應用程式和驅動程式必須將陣列設定為零。

type v4l2_subdev_route
struct v4l2_subdev_route

__u32

sink_pad

Sink pad 編號。

__u32

sink_stream

Sink pad 流編號。

__u32

source_pad

Source pad 編號。

__u32

source_stream

Source pad 流編號。

__u32

flags

路由啟用/停用標誌 v4l2_subdev_routing_flags

__u32

reserved[5]

保留用於將來的擴充套件。 應用程式和驅動程式必須將陣列設定為零。

enum v4l2_subdev_routing_flags

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 大於驅動程式可以處理的路由數。