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_888 和 IMPLEMENTATION_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:
constructDefaultRequestSettings
: 為指定的CaptureRequest
類型建立預設設定。HAL 可以使用ICameraDeviceSession::constructDefaultRequestSettings
實作項目。isStreamCombinationWithSettingsSupported
: 檢查裝置是否支援特定攝影機串流組合,以及工作階段參數和額外的CaptureRequest
鍵。必須針對支援的組合傳回true
,針對不支援的功能組合傳回false
。HAL 可以使用isStreamCombinationSupported
實作項目,並新增支援功能來檢查sessionParams
中傳遞的CaptureRequest
設定。getSessionCharacteristics
:接受支援的串流組合和工作階段參數,並傳回工作階段專屬特徵。INFO_SESSION_CONFIGURATION_QUERY_VERSION
: 列出所有常用的工作階段設定。這些設定會透過相容性測試進行驗證。
如果 ICameraDevice
介面低於第 3 版,HAL 應實作 isStreamCombinationSupported
方法。
如要進一步瞭解 API 查詢的功能組合,請參閱 system/media/camera/docs/metadata_definitions.xml
中的 sessionConfigurationQueryVersion
說明文件。
如需這項功能的參考實作方式,請參閱 hardware/google/camera/devices/EmulatedCamera/hwl/
。
公開 API
應用程式可使用下列公開 API 查詢裝置支援的功能組合:
CameraDevice.CameraDeviceSetup
:CameraDevice
的有限表示法,可用於查詢功能組合,不需要CameraDevice
執行個體。getCameraDeviceSetup
:如果isCameraDeviceSetupSupported
傳回true
,則會取得指定攝影機 ID 的CameraDeviceSetup
物件。INFO_SESSION_CONFIGURATION_QUERY_VERSION
: 如果這個值為VANILLA_ICE_CREAM
以上,則支援特徵組合查詢。OutputConfiguration
: 說明相機輸出的類別,可包含延遲表面,用於低延遲功能組合查詢。SessionConfiguration
: 實用工具類別,用於說明工作階段設定,包括串流組合和工作階段參數,可用於特徵組合查詢。
驗證
如要驗證這項功能的實作情形,請使用下列 VTS、CTS 和 Camera ITS (CTS 驗證器) 測試:
VTS
CTS
- cts/tests/camera/src/android/hardware/camera2/cts/FeatureCombinationTest.java
- cts/tests/camera/src/android/hardware/camera2/cts/CameraDeviceSetupTest.java
相機 ITS