串流設定

Android 內建多項功能,可讓相機用戶端為特定用途選擇最佳相機串流,並確保相機裝置支援特定串流組合。串流設定是指在攝影機裝置中設定的單一攝影機串流,串流組合則是指在攝影機裝置中設定的一或多組串流。如要進一步瞭解這些功能,請參閱建議的串流設定查詢功能組合的 API

參考實作

我們提供建議設定串流的供應商端參考實作,以及查詢串流組合功能的 API。您可以在 QCamera3HWI.cpp 中找到這項實作項目

攝影機供應商可以向攝影機用戶宣傳特定用途的建議串流設定。這些建議的串流設定是 StreamConfigurationMap 的子集,可協助攝影機用戶端選擇最佳設定。

雖然 StreamConfigurationMap 會向攝影機用戶端提供詳盡的串流設定資訊,但不會提供任何關於選擇某個串流而非另一個串流,對效率、電力或效能的影響。相機用戶端可以自由選擇所有可能的串流設定,但在許多情況下,這會導致用戶端使用次佳的相機設定,而應用程式則會進行耗時的詳盡搜尋。

舉例來說,雖然系統要求支援某些處理過的 YUV 格式,但相機裝置可能不支援這些格式。這會導致格式轉換的額外處理程序,並降低效率。大小和對應的長寬比也可能產生類似影響,因此就電力和效能而言,特定尺寸會比較合適。

StreamConfigurationMap 相比,建議的串流設定對應不需要詳盡。建議的設定對應表必須符合實作一節中的規定,且可包含 StreamConfigurationMap 中提供的任何格式、大小或其他值。StreamConfigurationMap 中未列出的隱藏格式、大小或其他值,無法納入建議的串流設定對應中。

所有測試都會維持不變,不會根據建議的串流設定放寬。

攝影機實作提供的建議串流設定為選用設定,攝影機用戶端可以忽略這些設定。

實作

請按照下列步驟實作這項功能。

中繼資料項目

如要啟用這項功能,相機 HAL 必須填入下列靜態中繼資料項目:

  • android.scaler.availableRecommendedStreamConfigurations:特定用途的建議串流設定子集。宣告會使用點陣圖,以 [1 << PREVIEW | 1 << RECORD..] 的形式指出建議的用途。這些用途會將一般 (格式、寬度、高度、輸入) 元組擴充為一個額外項目。禁止使用不存在的公開用途或範圍內設定的任何其他位元 [PUBLIC_END, VENDOR_START]

    這項資訊會儲存在availableRecommendedStreamConfigurations中繼資料標記中。

    以下範例顯示攝影機裝置的建議串流設定陣列,該裝置僅支援 4K 和 1080p,其中這兩種解析度都適合錄製影片,但建議預覽時使用 1080p。

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations (僅在裝置支援時提供):建議用於這個攝影機裝置的深度資料空間串流設定。與上述中繼資料項目類似,額外的用途點陣圖會指出建議的用途。

    這項資訊會儲存在availableRecommendedInputOutputFormatsMap中繼資料標記中。

  • android.scaler.availableRecommendedInputOutputFormatsMap (僅在裝置支援時提供):建議用於這個攝影機裝置輸入串流的建議圖像格式,對應的輸出格式。

    這項資訊會儲存在availableRecommendedDepthStreamConfigurations中繼資料標記中。

相機用戶端可透過 RecommendedStreamConfigurationMap API 取得這項資訊。

必要用途

請為下列用途提供建議的串流設定,並符合相應規定:

用途 規定
PREVIEW 預覽畫面只能包含非停滯的已處理串流設定,以及 YUV_420_888IMPLEMENTATION_DEFINED 等輸出格式。
RECORD 影片記錄必須包含與廣告支援的媒體設定檔相符的串流設定,且格式為 IMPLEMENTATION_DEFINED
VIDEO_SNAPSHOT 影片快照必須包含至少與最大 RECORD 解析度一樣大的串流設定,且只能使用 BLOB + DATASPACE_JFIF 格式/資料空間組合 (JPEG)。設定不應導致預覽畫面出現故障,且應能以 30 fps 執行。
SNAPSHOT 快照串流設定必須至少包含一個大小接近 android.sensor.info.activeArraySize 的設定,且採用 BLOB + DATASPACE_JFIF 格式/資料空間組合 (JPEG)。考量長寬比、對齊方式和其他供應商專屬限制後,建議的最大尺寸區域面積應不小於感應器陣列尺寸區域的 97%。
ZSL (如支援) 如果攝影機裝置支援,建議的輸入串流設定只能與其他處理或停滯的輸出格式一起宣傳。
RAW (如支援) 如果攝影機裝置支援,建議的原始串流設定必須只包含以 RAW 為基礎的輸出格式。

其他使用情況

您可以針對實作的特定用途,提供其他建議的設定串流。

驗證

如要測試建議設定串流的導入成果,請執行下列 CTS 和 VTS 測試:

查詢功能組合的 API

從 Android 15 開始,Android 平台提供 API 來查詢功能組合。相機用戶端可透過這項 API 查詢裝置是否支援特定功能組合。由於 camera2 API 會將 4K、60 FPS、HDR 影片、UltraHDR、超廣角變焦和穩定等不同功能視為正交控制項,因此必須使用這個 API。

需求條件

如要支援查詢功能組合的 API,相機 HAL 必須實作 ICameraDevice 介面的第 3 版。詳情請參閱「實作」一節。

如果支援 API,預先發布版穩定性必須與其他功能正交。也就是說,如果攝影機裝置支援預覽穩定功能,則無論預覽穩定功能是否開啟,特定組合的 isStreamCombinationWithSettingsSupported 傳回值都必須相同。這樣一來,功能組合查詢的搜尋空間就會縮小。

此外,如為媒體效能等級 15,主後置相機必須支援預覽畫面穩定功能,並以 10 位元 HLG10 預覽畫面顯示 1080p 和 720p 預覽畫面,以及最大尺寸的 JPEG。如要進一步瞭解這些規定,請參閱第 2.2.7.2 節。攝影機 的 CDD。

實作

如要支援查詢功能組合的 API,請在 ICameraDevice 第 3 版中實作下列功能組合查詢 API:

如果 ICameraDevice 介面低於第 3 版,HAL 應實作 isStreamCombinationSupported 方法。

如要進一步瞭解 API 查詢的功能組合,請參閱 system/media/camera/docs/metadata_definitions.xml 中的 sessionConfigurationQueryVersion 說明文件。

如需這項功能的參考實作方式,請參閱 hardware/google/camera/devices/EmulatedCamera/hwl/

公開 API

應用程式可使用下列公開 API 查詢裝置支援的功能組合:

驗證

如要驗證這項功能的實作情形,請使用下列 VTS、CTS 和 Camera ITS (CTS 驗證器) 測試:

VTS

CTS

相機 ITS