輸出串流
相機子系統只會在 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)
裁剪區域:(500、375、1333、750) (顯示比例 16:9)
640x480 串流裁剪:(666、375、1000、750)
1280x720 串流裁剪:(500、375、1333、750) (等於裁剪區域)
裁剪區域:(500、375、750、750) (1:1 顯示比例)
640x480 串流裁剪:(500、469、750、562)
1280x720 串流裁剪:(500、543、750、414)
最後再以 1024 x 1024 的正方形顯示比例串流,而非 480p
串流:
裁剪區域:(500、375、1000、750) (顯示比例 4:3)
1024 x 1024 串流裁剪:(625、375、750、750)
1280x720 串流裁剪:(500、469、1000、562)
重新處理中
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)
縮放比例:2.0;原始視野 1/4
裁剪區域:(0、187、2000、1125) (顯示比例 16:9)
640x480 串流裁剪:(250、187、1500、1125) (左右黑邊)
1280x720 串流裁剪:(0、187、2000、1125) (等於裁剪區域)
縮放比例:0.5;4 倍原始視野 (從廣角鏡頭切換為超廣角鏡頭)
裁剪區域:(250、0、1500、1500) (顯示比例 1:1)
640x480 串流裁剪:(250、187、1500、1125) (上下黑邊)
1280x720 串流裁剪:(250、328、1500、844) (上下黑邊)
如上圖所示,裁剪區域的座標系會變更為有效
並由下列尺寸的矩形表示:
(0
、0
、activeArrayWith
、activeArrayHeight
)。
AE/AWB/AF 區域和臉孔都適用這項原則。此座標系統變更不適用於
RAW 擷取內容及其相關中繼資料,例如 intrinsicCalibration
和
lensShadingMap
。
就上述的假設範例,並假設輸出串流 #1 (640x480) 是 觀景窗串流可提供 2.0 倍變焦功能,方法有以下兩種:
zoomRatio = 2.0
、scaler.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
個。