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