Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

輸出流,裁剪和縮放

輸出流

相機子系統僅在基於ANativeWindow的管道上運行,以實現所有分辨率和輸出格式。可以一次配置多個流,以將一個幀發送到許多目標,例如GPU,視頻編碼器, RenderScript或應用程序可見的緩衝區(RAW Bayer,已處理的YUV緩衝區或JPEG編碼的緩衝區)。

作為優化,這些輸出流必須提前配置,並且一次只能存在有限數量。這允許預先分配內存緩衝區和配置攝像頭硬件,這樣,當使用列出的多個或變化的輸出管道提交請求時,在完成請求時不會有延遲或延遲。

有關取決於支持的硬件級別的保證的流輸出組合的更多信息,請參見createCaptureSession()

播種

通過ANDROID_SCALER_CROP_REGION設置傳達完整像素陣列的裁剪(用於數字縮放和其他需要較小FOV的使用情況)。這是每個請求的設置,並且可以在每個請求的基礎上進行更改,這對於實現平滑的數字縮放至關重要。

該區域定義為矩形(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必須進行必要的捨入並寫出輸出中使用的最終作物區域結果元數據。同樣,如果HAL實現視頻穩定,則必須調整結果裁剪區域,以描述應用視頻穩定後實際包含在輸出中的區域。通常,使用相機的應用程序必須能夠基於裁剪區域,圖像傳感器的尺寸和鏡頭焦距來確定其正在接收的視場。

由於作物區域適用於可能具有與作物區域不同的長寬比的所有流,因此用於每個流的確切傳感器區域可能小於作物區域。具體來說,每個流應通過最小化進一步裁剪定義的裁剪區域來保持正方形像素及其縱橫比。如果流的長寬比寬於裁剪區域,則流應在垂直方向上進一步裁剪;如果流的長寬比窄於裁剪區域,則流應在水平方向上進一步裁剪。

在所有情況下,流作物都必須在整個作物區域內居中,並且每個流都只能相對於整個作物區域水平或垂直地進行裁剪,而不能兩者都進行。

例如,如果定義了兩個流,則在假設3的情況下,下面演示了幾個樣本作物區域的每個流的預期輸出區域,分別是640x480流(4:3縱橫比)和1280x720流(16:9縱橫比)。 MP(2000 x 1500像素陣列)傳感器。

裁切區域:(500、375、1000、750)(4:3長寬比)
640x480流式作物:(500,375,1000,750)(等於作物面積)
1280x720流裁剪:(500,469,1000,562)

作物區域43比

圖1. 4:3的寬高比

裁切區域:(500、375、1333、750)(16:9長寬比)
640x480流裁剪:(666,375,1000,750)
1280x720串流作物:(500、375、1333、750)(等於作物面積)

作物地區169比率

圖2. 16:9寬高比

裁切區域:(500、375、750、750)(1:1長寬比)
640x480流裁剪:(500,469,750,562)
1280x720流裁剪:(500,543,750,414)

作物區域11比

圖3. 1:1長寬比

最後一個示例是1024x1024方形長寬比流,而不是480p流:
裁切區域:(500、375、1000、750)(4:3長寬比)
1024x1024流裁剪:(625、375、750、750)
1280x720流裁剪:(500,469,1000,562)

作物區域43平方比

圖4. 4:3長寬比,正方形

再加工

對RAW Bayer數據的重新處理支持提供了對原始圖像文件的附加支持。這種支持使相機管道可以處理先前捕獲的RAW緩衝區和元數據(先前記錄的整個幀),以生成新的渲染YUV或JPEG輸出。

放大

對於運行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)(帶信箱)

圖片/縮放比例-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.zoomRatio1.0 ,應用程序可以將android.control.aeRegions設置為(500, 375, 1000, 750) android.control.aeRegions的等效區域。