輸出串流、裁剪及縮放

輸出串流

相機子系統只會在 ANativeWindow 管道上運作 各種解析度和輸出格式您可以在 將單一影格傳送給許多目標,例如 GPU、影片 編碼器 RenderScript 或應用程式可見的緩衝區 (RAW Bayer,處理的 YUV) 緩衝區或 JPEG 編碼的緩衝區)。

為獲得最佳效果,您必須事先設定這些輸出串流。 但可能有部分數量限制這樣一來,您就能預先分配 相機硬體的記憶體緩衝區和設定 因此在要求時 輸出管道時 處理要求時發生延遲或延遲。

進一步瞭解保證串流輸出組合 取決於支援的硬體等級 createCaptureSession()

裁剪

裁剪整個像素陣列 (適用於數位變焦及其他 可透過 ANDROID_SCALER_CROP_REGION 進行通訊 以及環境敘述這是個別要求的設定,可以依個別請求進行變更。 這一點對於導入順暢的數位變焦至關重要

區域定義為矩形 (x, y, 寬度, 高度),其中 (x, y) 說明矩形的左上角。矩形是在 感應器使用像素陣列的座標系統,其中 (0,0) 是 使用中像素陣列的左上角像素。因此,寬度和高度 大於 ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY 中回報的維度 靜態資訊欄位中的值。HAL 會回報允許的寬度和高度下限 填寫 ANDROID_SCALER_MAX_DIGITAL_ZOOM 靜態資訊欄位,其中會描述 系統支援的最大縮放比例係數因此,最小的裁剪區域寬度 高度為:

  {width, height} =
   { floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[0] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM),
     floor(ANDROID_SENSOR_ACTIVE_PIXEL_ARRAY[1] /
       ANDROID_SCALER_MAX_DIGITAL_ZOOM) }

如果裁剪區域需要滿足特定需求 (例如 才能以偶數座標為起點,而且寬度/高度必須平均), 必須進行必要的四捨五入,並寫出 輸出結果中繼資料。同樣地,如果 HAL 導入了影片防震功能 必須調整結果裁剪區域,以描述實際包含的區域 會套用影片防震模式後輸出的結果一般而言 應用程式必須能根據以下條件決定其接收的視野 裁剪區域、影像感應器尺寸以及鏡頭焦距。

裁剪區域會套用至所有串流,因此長寬比可能不同 那麼實際感應器區域的比率可能會高於裁剪區域 大於裁剪區域具體來說,每個串流都應該維持正方形 以盡量減少裁切定義的裁剪框內像素大小,以及其顯示比例 區域。如果串流的顯示比例大於裁剪區域,系統就會開始串流 垂直裁剪,如果串流的顯示比例不是 請進一步裁剪畫面 水平移動

在所有情況下,串流裁剪框都必須以完整裁剪區域為中心。 每個直播都必須以相對於完整內容的水平或垂直方向裁剪 裁剪區域,只能擇一使用

舉例來說,如果您定義了兩個串流,就會有一個 640x480 串流 (4:3 長寬比) 和 以下為 1280x720 串流 (16:9 長寬比) 的預期輸出區域 以 300 萬像素 (2, 000 x 1500 像素陣列) 感應器。

裁剪區域:(500、375、1000、750) (顯示比例 4:3)
640x480 串流裁剪:(500、375、1000、750) (等於裁剪區域)
1280x720 串流裁剪:(500、469、1000、562)

Clip-region-43-ratio

圖 1. 長寬比 4:3

裁剪區域:(500、375、1333、750) (顯示比例 16:9)
640x480 串流裁剪:(666、375、1000、750)
1280x720 串流裁剪:(500、375、1333、750) (等於裁剪區域)

Clip-region-169-ratio

圖 2. 長寬比 16:9

裁剪區域:(500、375、750、750) (1:1 顯示比例)
640x480 串流裁剪:(500、469、750、562)
1280x720 串流裁剪:(500、543、750、414)

Clip-region-11-ratio

圖 3. 長寬比 1:1

最後再以 1024 x 1024 的正方形顯示比例串流,而非 480p 串流:
裁剪區域:(500、375、1000、750) (顯示比例 4:3)
1024 x 1024 串流裁剪:(625、375、750、750)
1280x720 串流裁剪:(500、469、1000、562)

裁剪-區域-43-平方英尺

圖 4. 顯示比例 4:3,正方形

重新處理中

RAW Bayer 現已支援重新處理原始圖片檔,以便處理原始圖片檔 資料。這項支援功能讓相機管道處理先前擷取到的 RAW 緩衝區和中繼資料 (先前錄製的整個畫面), 產生新的轉譯的 YUV 或 JPEG 輸出內容

Zoom

搭載 Android 11 以上版本的裝置,可以使用相機的縮放功能 (數位和光學) 透過 ANDROID_CONTROL_ZOOM_RATIO 設定。

縮放比例的定義為浮點因數。而不是 應用程式可以使用 ANDROID_SCALER_CROP_REGION 裁剪及縮放 ANDROID_CONTROL_ZOOM_RATIO:控制縮放等級,並使用 ANDROID_SCALER_CROP_REGION 代表水平與垂直裁剪到 支援的顯示比例與原生相機感應器不同

多鏡頭系統可能包含多個鏡頭, 編輯焦距後,使用者可切換不同的鏡頭,以便使用光學變焦功能。 在下列情況下,使用 ANDROID_CONTROL_ZOOM_RATIO 有優點:

  • 從廣角鏡頭和望遠鏡頭放大畫面:浮點比例 精確度比 ANDROID_SCALER_CROP_REGION
  • 如何從廣角鏡頭縮小到超廣角鏡頭: ANDROID_CONTROL_ZOOM_RATIO 支援縮小功能 (小於 1.0f),ANDROID_SCALER_CROP_REGION 則不是。

以下列舉幾種不同縮放比例、裁剪區域和輸出內容的情況 使用與先前章節相同的假設相機拍攝影片。

縮放比例:2.0;原始視野 1/4
裁剪區域:(0、0、2000、1500) (顯示比例 4:3)
640x480 串流裁剪:(0、0、2000、1500) (等於裁剪區域)
1280x720 串流裁剪:(0、187、2000、1125)

zoom-ratio-2-crop-43

圖 5. 2.0 縮放,顯示比例 4:3

縮放比例:2.0;原始視野 1/4
裁剪區域:(0、187、2000、1125) (顯示比例 16:9)
640x480 串流裁剪:(250、187、1500、1125) (左右黑邊)
1280x720 串流裁剪:(0、187、2000、1125) (等於裁剪區域)

zoom-ratio-2-crop-169

圖 6. 縮放比例:2.0,顯示比例為 16:9

縮放比例:0.5;4 倍原始視野 (從廣角鏡頭切換為超廣角鏡頭)
裁剪區域:(250、0、1500、1500) (顯示比例 1:1)
640x480 串流裁剪:(250、187、1500、1125) (上下黑邊)
1280x720 串流裁剪:(250、328、1500、844) (上下黑邊)

圖片/zoom-ratio-0.5-crop-11

圖 7. 縮放 0.5,顯示比例為 1:1

如上圖所示,裁剪區域的座標系會變更為有效 並由下列尺寸的矩形表示: (00activeArrayWithactiveArrayHeight)。 AE/AWB/AF 區域和臉孔都適用這項原則。此座標系統變更不適用於 RAW 擷取內容及其相關中繼資料,例如 intrinsicCalibrationlensShadingMap

就上述的假設範例,並假設輸出串流 #1 (640x480) 是 觀景窗串流可提供 2.0 倍變焦功能,方法有以下兩種:

  • zoomRatio = 2.0scaler.cropRegion = (0, 0, 2000, 1500)
  • zoomRatio = 1.0 (預設),scaler.cropRegion = (500, 375, 1000, 750)

如何設定應用程式將「android.control.aeRegions」設為左上角 觀景窗視野的四分之一, 設定 android.control.aeRegions(0, 0, 1000, 750),分享對象: android.control.zoomRatio已設為2.0。另外 應用程式可以將 android.control.aeRegions 設為對等項目 (500, 375, 1000, 750) 的所在地區: 第 android.control.zoomRatio 個,共 1.0 個。