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 也能使用 Google Cloud CLI 或 Compute Engine API
必要用途
必須為下列用途提供建議的串流設定 並符合相關規定:
用途 | 規定 |
---|---|
PREVIEW |
預覽只能包含不會延遲的處理串流設定
以及 YUV_420_888 和
IMPLEMENTATION_DEFINED 。 |
RECORD |
影片記錄必須包含與通告相符的串流設定
支援的媒體設定檔
格式為 IMPLEMENTATION_DEFINED 。 |
VIDEO_SNAPSHOT |
影片快照必須包含的串流設定,至少須符合 最大 RECORD 解析度,且僅適用於 BLOB + DATASPACE_JFIF 格式/資料空間組合 (JPEG)。設定 應該不會造成預覽出現問題,且應能以 30 fps 放送。 |
SNAPSHOT |
快照串流設定必須包含至少一個大小接近大小的快照
與 BLOB + android.sensor.info.activeArraySize
DATASPACE_JFIF 格式/資料空間組合 (JPEG)。考量中
長寬比、一致性和其他供應商特有限制的限制;
建議大小上限的面積不應小於感應器的 97%
陣列大小區域。 |
ZSL (如果支援) |
如果相機裝置支援,建議輸入串流設定 只能與其他已處理或延遲的輸出內容同時進行通告 格式。 |
RAW (如果支援) |
如果相機裝置支援原始串流設定,建議採用原始串流設定 只能包含 RAW 型輸出格式。 |
其他使用情況
您可以針對用途,提供其他建議的設定串流 專用於您實作的特定項目
驗證
如要測試建議設定串流的實作方式,請執行 下列 CTS 和 VTS 測試:
用於查詢特徵組合的 API
從 Android 15 開始,Android 平台 用於查詢特徵組合的 API這個 API 可讓相機用戶端查詢 裝置可支援的特定功能組合。這個 API 因為 camera2 API 建構不同的功能,例如 4K、60fps HDR 影片、UlHDR、超廣角變焦和穩定技術做為立體控制。
需求條件
為支援 API 查詢特徵組合,相機 HAL 必須實作
ICameraDevice
介面第 3 版。詳情請參閱
導入一節。
支援這個 API 時,必須授予預覽穩定功能
其他功能因此適用於支援預覽的相機裝置
穩定度,傳回 isStreamCombinationWithSettingsSupported
的值
預覽穩定度時,特定組合的值必須相同。
開啟或關閉。這樣可以減少特徵組合查詢的搜尋空間。
此外,如果是媒體效能類別 15,主要後置鏡頭必須 支援 10 位元 HLG10 預覽 (1080p 和 720p) 預覽穩定功能 預覽畫面和 JPEG 的大小上限如要進一步瞭解這些規定,請參閱 區段 2.2.7.2.相機 CDD 的故事。
實作
如要支援 API 查詢特徵組合,請採用下列程式碼
功能組合查詢 API 適用於第 3 版
ICameraDevice
:
constructDefaultRequestSettings
: 建立指定CaptureRequest
類型的預設設定。HAL 可以使用ICameraDeviceSession::constructDefaultRequestSettings
敬上 。isStreamCombinationWithSettingsSupported
: 檢查指定的攝影機串流組合裝置是否支援 搭配工作階段參數和其他CaptureRequest
鍵必選 針對支援的組合傳回true
,針對不支援的組合傳回false
特徵組合。HAL 可以使用isStreamCombinationSupported
敬上 並新增支援來檢查CaptureRequest
設定 在sessionParams
中傳遞的資料getSessionCharacteristics
:採用支援的 包含工作階段參數的串流組合,並傳回 每個工作階段的特性INFO_SESSION_CONFIGURATION_QUERY_VERSION
: 列出所有常用的工作階段設定。這些設定 並通過法規遵循測試。
若是 ICameraDevice
介面 3 以下版本,HAL
應該將
isStreamCombinationSupported
方法。
如要進一步瞭解 API 查詢的特徵組合,請參閱
有關「sessionConfigurationQueryVersion
」的說明文件
system/media/camera/docs/metadata_definitions.xml
。
如需這項功能的參考實作,請參閱
hardware/google/camera/devices/EmulatedCamera/hwl/
。
公用 API
應用程式可以使用下列公用 API 查詢支援的功能組合 :
CameraDevice.CameraDeviceSetup
: 能用來查詢特徵的CameraDevice
有限表示法 而且不需要CameraDevice
例項。getCameraDeviceSetup
: 針對指定相機 ID 取得CameraDeviceSetup
物件 (如果)isCameraDeviceSetupSupported
會傳回true
。INFO_SESSION_CONFIGURATION_QUERY_VERSION
: 支援特徵組合查詢 (如果這個值為VANILLA_ICE_CREAM
或更高版本。OutputConfiguration
: 說明相機輸出內容的類別,可包含 縮短延遲時間特徵組合查詢的目的SessionConfiguration
: 說明工作階段設定 (包括串流) 的公用程式類別 用於功能 組合查詢。
驗證
如要確認是否已導入這項功能,請使用下列 VTS、CTS 和 相機 ITS (CTS Verifier) 測試:
影片觀看體驗 (VTS)
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
相機 ITS
- cts/apps/CameraITS/tests/feature_combination/test_feature_combination.py
- cts/apps/CameraITS/tests/scene6/test_session_characteristics_zoom.py