7.37. ioctl VIDIOC_G_PARM, VIDIOC_S_PARM

7.37.1. 名稱

VIDIOC_G_PARM - VIDIOC_S_PARM - 獲取或設定流式傳輸引數

7.37.2. 概要

VIDIOC_G_PARM

int ioctl(int fd, VIDIOC_G_PARM, v4l2_streamparm *argp)

VIDIOC_S_PARM

int ioctl(int fd, VIDIOC_S_PARM, v4l2_streamparm *argp)

7.37.3. 引數

fd

open() 返回的檔案描述符。

argp

指向 struct v4l2_streamparm 的指標。

7.37.4. 描述

應用程式可以請求不同的幀間隔。捕獲或輸出裝置將被重新配置以支援請求的幀間隔(如果可能)。驅動程式可以選擇跳過或重複幀以實現請求的幀間隔。

對於有狀態編碼器(參見 記憶體到記憶體有狀態影片編碼器介面),這表示通常嵌入在編碼影片流中的幀間隔。

更改幀間隔絕不應更改格式。另一方面,更改格式可能會更改幀間隔。

此外,這些 ioctl 可用於確定驅動程式在讀/寫模式下內部使用的緩衝區數量。有關含義,請參閱討論 read() 函式的部分。

要獲取和設定流式傳輸引數,應用程式分別呼叫 VIDIOC_G_PARMVIDIOC_S_PARM ioctl。它們接受指向 struct v4l2_streamparm 的指標,該結構包含一個聯合,其中包含輸入和輸出裝置的單獨引數。

type v4l2_streamparm
struct v4l2_streamparm

__u32

type

緩衝區(流)型別,與 struct v4l2_format type 相同,由應用程式設定。參見 v4l2_buf_type

union {

parm

struct v4l2_captureparm

capture

捕獲裝置的引數,當 typeV4L2_BUF_TYPE_VIDEO_CAPTUREV4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE 時使用。

struct v4l2_outputparm

output

輸出裝置的引數,當 typeV4L2_BUF_TYPE_VIDEO_OUTPUTV4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE 時使用。

__u8

raw_data[200]

未來擴充套件的佔位符。

}

type v4l2_captureparm
struct v4l2_captureparm

__u32

capability

參見 流式傳輸引數功能

__u32

capturemode

由驅動程式和應用程式設定,參見 捕獲引數標誌

struct v4l2_fract

timeperframe

這是驅動程式捕獲的連續幀之間的期望週期,以秒為單位。

這將配置影片源(例如感測器)生成影片幀的速度。如果速度是固定的,則驅動程式可以選擇跳過或重複幀,以實現請求的幀速率。

對於有狀態編碼器(參見 記憶體到記憶體有狀態影片編碼器介面),這表示通常嵌入在編碼影片流中的幀間隔。

應用程式在此處儲存期望的幀週期,驅動程式返回實際幀週期。

更改影片標準(也透過切換影片輸入隱式地更改)可能會將此引數重置為標稱幀週期。要手動重置,應用程式只需將此欄位設定為零。

驅動程式僅在 capability 欄位中設定 V4L2_CAP_TIMEPERFRAME 標誌時才支援此功能。

__u32

extendedmode

自定義(特定於驅動程式)流式傳輸引數。當未使用時,應用程式和驅動程式必須將此欄位設定為零。使用此欄位的應用程式應檢查驅動程式名稱和版本,參見 查詢功能

__u32

readbuffers

應用程式將此欄位設定為驅動程式在 read() 模式下內部使用的期望緩衝區數量。驅動程式返回實際緩衝區數量。當應用程式請求零緩衝區時,驅動程式應僅返回當前設定,而不是最小值或錯誤程式碼。有關詳細資訊,參見 讀/寫

__u32

reserved[4]

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

type v4l2_outputparm
struct v4l2_outputparm

__u32

capability

參見 流式傳輸引數功能

__u32

outputmode

由驅動程式和應用程式設定,參見 捕獲引數標誌

struct v4l2_fract

timeperframe

這是驅動程式輸出的連續幀之間的期望週期,以秒為單位。

該欄位旨在在 write() 模式下在驅動程式端重複幀(在流式傳輸模式下,時間戳可用於限制輸出),從而節省 I/O 頻寬。

對於有狀態編碼器(參見 記憶體到記憶體有狀態影片編碼器介面),這表示通常嵌入在編碼影片流中的幀間隔,併為編碼器提供有關原始幀排隊到編碼器的速度的提示。

應用程式在此處儲存期望的幀週期,驅動程式返回實際幀週期。

更改影片標準(也透過切換影片輸出隱式地更改)可能會將此引數重置為標稱幀週期。要手動重置,應用程式只需將此欄位設定為零。

驅動程式僅在 capability 欄位中設定 V4L2_CAP_TIMEPERFRAME 標誌時才支援此功能。

__u32

extendedmode

自定義(特定於驅動程式)流式傳輸引數。當未使用時,應用程式和驅動程式必須將此欄位設定為零。使用此欄位的應用程式應檢查驅動程式名稱和版本,參見 查詢功能

__u32

writebuffers

應用程式將此欄位設定為驅動程式在 write() 模式下內部使用的期望緩衝區數量。驅動程式返回實際緩衝區數量。當應用程式請求零緩衝區時,驅動程式應僅返回當前設定,而不是最小值或錯誤程式碼。有關詳細資訊,參見 讀/寫

__u32

reserved[4]

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

流式傳輸引數功能

V4L2_CAP_TIMEPERFRAME

0x1000

可以透過設定 timeperframe 欄位來修改幀週期。

捕獲引數標誌

V4L2_MODE_HIGHQUALITY

0x0001

高質量成像模式。高質量模式適用於靜態成像應用。其目的是獲得硬體可以提供的最佳影像質量。沒有定義驅動程式編寫者如何實現這一點;這將取決於硬體和驅動程式編寫者的聰明才智。高質量模式與常規運動影片捕獲模式不同。在高質量模式下

  • 驅動程式可能能夠捕獲比運動捕獲更高的解析度。

  • 驅動程式可能支援比運動捕獲更少的畫素格式(例如;真彩色)。

  • 驅動程式可以捕獲並算術組合多個連續的場或幀,以消除顏色邊緣偽影並減少影片資料中的噪聲。

  • 驅動程式可以像掃描器一樣以切片方式捕獲影像,以便處理比其他方式更大的格式影像。

  • 影像捕獲操作可能比運動捕獲慢得多。

  • 影像中移動的物體可能會有過度運動模糊。

  • 捕獲可能只能透過 read() 呼叫工作。

7.37.5. 返回值

成功時返回 0,錯誤時返回 -1,並適當設定 errno 變數。通用錯誤程式碼在 通用錯誤程式碼 章節中描述。