7.16. ioctl VIDIOC_ENUM_FRAMEINTERVALS¶
7.16.1. 名稱¶
VIDIOC_ENUM_FRAMEINTERVALS - 列舉幀間隔
7.16.2. 概要¶
-
VIDIOC_ENUM_FRAMEINTERVALS¶
int ioctl(int fd, VIDIOC_ENUM_FRAMEINTERVALS, struct v4l2_frmivalenum *argp)
7.16.3. 引數¶
fd由
open()返回的檔案描述符。argp指向 struct
v4l2_frmivalenum的指標,該結構體包含畫素格式和大小,並接收幀間隔。
7.16.4. 描述¶
此 ioctl 允許應用程式列舉裝置支援的給定畫素格式和幀大小的所有幀間隔。
支援的畫素格式和幀大小可以透過使用 ioctl VIDIOC_ENUM_FMT 和 ioctl VIDIOC_ENUM_FRAMESIZES 函式來獲得。
返回值和 v4l2_frmivalenum.type 欄位的內容取決於裝置支援的幀間隔型別。以下是針對不同情況的函式語義
離散: 如果給定的索引值(從零開始)有效,則函式返回成功。 應用程式應該為每次呼叫將索引加一,直到返回
EINVAL。 v4l2_frmivalenum.type 欄位由驅動程式設定為 V4L2_FRMIVAL_TYPE_DISCRETE。 在 union 中,只有 discrete 成員有效。步進: 如果給定的索引值為零,則函式返回成功;對於任何其他索引值,則返回
EINVAL。v4l2_frmivalenum.type欄位由驅動程式設定為V4L2_FRMIVAL_TYPE_STEPWISE。 在 union 中,只有stepwise成員有效。連續: 這是上述步進型別的一種特殊情況。 如果給定的索引值為零,則函式返回成功;對於任何其他索引值,則返回
EINVAL。v4l2_frmivalenum.type欄位由驅動程式設定為V4L2_FRMIVAL_TYPE_CONTINUOUS。 在 union 中,只有stepwise成員有效,並且step值設定為 1。
當應用程式使用索引零呼叫函式時,它必須檢查 type 欄位以確定裝置支援的幀間隔列舉型別。 僅對於 V4L2_FRMIVAL_TYPE_DISCRETE 型別,增加索引值以接收更多幀間隔才有意義。
注意
返回幀間隔的順序沒有特殊含義。 特別是,它沒有說明任何潛在的預設幀間隔。
應用程式可以假設列舉資料在沒有任何應用程式本身互動的情況下不會更改。 這意味著如果在執行幀間隔列舉時應用程式不執行任何其他 ioctl 呼叫,則列舉資料是一致的。
注意
幀間隔和幀率: V4L2 API 使用幀間隔而不是幀率。 給定幀間隔,可以按如下方式計算幀率
frame_rate = 1 / frame_interval
7.16.5. 結構體¶
在下面的結構體中,IN 表示必須由應用程式填充的值,OUT 表示驅動程式填充的值。 應用程式應將所有成員清零,除了 IN 欄位。
-
型別 v4l2_frmival_stepwise¶
結構體 |
|
最小幀間隔 [s]。 |
結構體 |
|
最大幀間隔 [s]。 |
結構體 |
|
幀間隔步長 [s]。 |
-
型別 v4l2_frmivalenum¶
__u32 |
|
IN:列舉中給定幀間隔的索引。 |
__u32 |
|
IN:列舉幀間隔的畫素格式。 |
__u32 |
|
IN:列舉幀間隔的幀寬度。 |
__u32 |
|
IN:列舉幀間隔的幀高度。 |
__u32 |
|
OUT:裝置支援的幀間隔型別。 |
union { |
(anonymous) |
OUT:具有給定索引的幀間隔。 |
結構體 |
|
幀間隔 [s]。 |
|
||
} |
||
__u32 |
|
為將來使用保留的空間。 驅動程式和應用程式必須將其清零。 |
7.16.6. 列舉¶
-
型別 v4l2_frmivaltypes¶
|
1 |
離散幀間隔。 |
|
2 |
連續幀間隔。 |
|
3 |
步進定義的幀間隔。 |
7.16.7. 返回值¶
成功時返回 0,出錯時返回 -1,並適當設定 errno 變數。 通用錯誤程式碼在 通用錯誤程式碼 章節中描述。