1.27.3. 配置

應用程式可以使用 選擇 API 來選擇影片訊號或緩衝區中的區域,並查詢預設設定和硬體限制。

影片硬體可能存在各種裁剪、合成和縮放限制。它可能只能放大或縮小,只支援離散的縮放因子,或者在水平和垂直方向上具有不同的縮放能力。同時,它可能根本不支援縮放。裁剪/合成矩形可能需要對齊,並且源和接收器都可能具有任意的上下尺寸限制。因此,與往常一樣,驅動程式應調整請求的引數並返回實際選定的值。應用程式可以使用 約束標誌 來控制舍入行為。

1.27.3.1. 影片捕獲配置

有關影片捕獲裝置可用選擇目標的示例,請參見圖 裁剪和合成目標。建議在配置合成目標之前配置裁剪目標。

可採樣區域的左上角座標、寬度和高度的範圍由 V4L2_SEL_TGT_CROP_BOUNDS 目標給出。建議驅動程式開發人員將左上角置於 (0,0) 位置。矩形的座標以畫素表示。

源矩形的左上角座標、寬度和高度,即實際取樣的區域,由 V4L2_SEL_TGT_CROP 目標給出。它使用與 V4L2_SEL_TGT_CROP_BOUNDS 相同的座標系。活動裁剪區域必須完全位於捕獲邊界內部。驅動程式可以根據硬體限制進一步調整請求的大小和/或位置。

每個捕獲裝置都有一個預設源矩形,由 V4L2_SEL_TGT_CROP_DEFAULT 目標給出。此矩形應覆蓋驅動程式編寫者認為的完整影像。驅動程式應在首次載入時將活動裁剪矩形設定為預設值,但之後不應更改。

合成目標指的是記憶體緩衝區。合成座標的限制透過使用 V4L2_SEL_TGT_COMPOSE_BOUNDS 獲得。所有座標均以畫素表示。矩形的左上角必須位於 (0,0) 位置。寬度和高度等於 VIDIOC_S_FMT 設定的影像大小。

影像由硬體插入到緩衝區中的部分由 V4L2_SEL_TGT_COMPOSE 目標控制。矩形的座標也以與邊界矩形相同的座標系表示。合成矩形必須完全位於邊界矩形內部。驅動程式必須調整合成矩形以適應邊界限制。此外,驅動程式可以根據硬體限制執行其他調整。應用程式可以使用 約束標誌 控制舍入行為。

對於捕獲裝置,預設合成矩形透過使用 V4L2_SEL_TGT_COMPOSE_DEFAULT 查詢。它通常等於邊界矩形。

由硬體修改的緩衝區部分由 V4L2_SEL_TGT_COMPOSE_PADDED 給出。它包含使用 V4L2_SEL_TGT_COMPOSE 定義的所有畫素以及在插入過程中由硬體修改的所有填充資料。此矩形外部的所有畫素不得由硬體更改。位於填充區域內部但活動區域外部的畫素內容是未定義的。應用程式可以使用填充矩形和活動矩形來檢測垃圾畫素的位置並在需要時將其刪除。

1.27.3.2. 影片輸出配置

對於輸出裝置,目標和 ioctl 的使用與影片捕獲情況類似。合成矩形指的是將影像插入影片訊號。裁剪矩形指的是記憶體緩衝區。建議在配置裁剪目標之前配置合成目標。

裁剪目標指的是包含要插入影片訊號或圖形螢幕的影像的記憶體緩衝區。裁剪座標的限制透過使用 V4L2_SEL_TGT_CROP_BOUNDS 獲得。所有座標均以畫素表示。左上角始終是 (0,0) 點。寬度和高度等於使用 VIDIOC_S_FMT ioctl 指定的影像大小。

源矩形的左上角座標、寬度和高度,即影像資料由硬體處理的區域,由 V4L2_SEL_TGT_CROP 給出。其座標以與邊界矩形相同的座標系表示。活動裁剪區域必須完全位於裁剪邊界內部,並且驅動程式可以根據硬體限制進一步調整請求的大小和/或位置。

對於輸出裝置,預設裁剪矩形透過使用 V4L2_SEL_TGT_CROP_DEFAULT 查詢。它通常等於邊界矩形。

影像由硬體插入到影片訊號或圖形顯示中的部分由 V4L2_SEL_TGT_COMPOSE 目標控制。矩形的座標以畫素表示。合成矩形必須完全位於邊界矩形內部。驅動程式必須調整區域以適應邊界限制。此外,驅動程式可以根據硬體限制執行其他調整。

裝置有一個預設的合成矩形,由 V4L2_SEL_TGT_COMPOSE_DEFAULT 目標給出。此矩形應覆蓋驅動程式編寫者認為的完整影像。建議驅動程式開發人員將左上角置於 (0,0) 位置。驅動程式應在首次載入時將活動合成矩形設定為預設值。

裝置除了來自記憶體緩衝區的影像外,還可能向影片訊號中引入額外內容。這包括影像周圍的邊框。然而,這種填充區域是依賴於驅動程式的特性,本檔案不予涵蓋。鼓勵驅動程式開發人員將填充矩形保持與活動矩形相同。填充目標透過 V4L2_SEL_TGT_COMPOSE_PADDED 識別符號訪問。它必須包含 V4L2_SEL_TGT_COMPOSE 目標中的所有畫素。

1.27.3.3. 縮放控制

應用程式可以透過比較使用 V4L2_SEL_TGT_CROPV4L2_SEL_TGT_COMPOSE 目標獲得的矩形的寬度和高度來檢測是否執行了縮放。如果它們不相等,則應用了縮放。應用程式可以使用這些值計算縮放比例。