本頁列出所有可用於評估 Android 相機硬體抽象層 (HAL) 的測試。這份文件適用於原始設備製造商 (OEM) 和應用程式處理器 (AP) 供應商,協助他們確保相機 HAL 實作正確無誤,盡量減少缺陷。雖然這是 Android 相容性測試套件 (CTS) 的自願性新增項目,但可大幅提升相機測試涵蓋範圍,並找出潛在錯誤。
通過這些測試後,原始設備製造商就能驗證是否已正確整合 Android 相機硬體抽象層 (HAL) 3 介面。如果裝置實作項目符合檢查清單中的所有項目,則可視為完整支援 Android Camera HAL 介面。這樣一來,裝置就能正確支援相機應用程式建構的
android.hardware.camera2 套件。
相機 HAL3 規格
Android Camera HAL3 規格是裝置必須滿足的資訊權威來源。本頁面提供所有測試的摘要,可做為檢查清單。相機 HAL 實作者 (例如 AP 供應商) 應逐行檢查 Camera HAL3 規格,確保裝置符合規格。
目前的 HAL 規格定義於 Android 5.0 以上版本通用 Android 平台開發套件 (PDK) 的下列檔案中:
- 攝影機 HAL 3.x 介面和規格:
hardware/libhardware/include/hardware/camera3.h,hardware/libhardware/include/hardware/camera_common.h - 相機 HAL 3.x 中繼資料規格:
system/media/camera/docs/docs.html - HAL 像素格式介面和規格:
system/core/libsystem/include/system/graphics.h
相機測試類型
以下是最新 Android 相機可用的主要測試類型,以及相關操作說明的參考資料:
- 供應商測試套件 (VTS):直接測試攝影機 HAL 介面
- 相容性測試套件 (CTS):標準的自動化 Android 測試,可確保裝置相容性。詳情請參閱「相容性測試套件」和「Trade Federation 總覽」。
- 影像測試套件 (ITS):手動執行測試,確保影像正確無誤。詳情請參閱「相機 ITS」。
- 手動測試攝影機測試:
從
pdk/apps/TestingCamera/中的來源執行 - 手動測試 Cam2.1 測試:從
pdk/apps/TestingCamera2/中的來源執行
下文將詳細說明所有這些測試類型。這些測試會依 OEM 預期執行的時間順序呈現。
舉例來說,如果裝置無法通過原生測試,就一定會無法通過後續的相容性測試套件 (CTS) 測試。如果裝置無法通過 CTS,繼續進行影像測試套件 (ITS) 測試的意義不大。建議您先解決每種測試類型的失敗問題,再繼續進行下一組測試。
供應商測試套件 (VTS) 測試
Android 供應商測試套件 (VTS) 是一種測試套件,可在 HIDL 介面層級運作。如要進一步瞭解如何使用 VTS,請參閱「供應商測試套件」。
Compatibility Test Suite (CTS) 測試
攝影機 Android 相容性測試套件 (CTS) 測試的重點在於裝置相容性。如要瞭解如何設定測試環境,請參閱「設定 CTS」。
相機 CTS 測試的起始路徑為:platform/cts。
為支援外接式攝影機 (例如 USB 網路攝影機) 的裝置執行攝影機 CTS 時,您必須在執行 CTS 時插入裝置,否則測試會自動失敗。外部攝影機的例子包括:Logitech HD Pro Webcam C920 和 Microsoft LifeCam HD-3000。
如需執行 CTS 的一般操作說明,請參閱 CTS 簡介及其子頁面。
android.hardware.Camera API 的 CTS 測試
您可以在 cts/tests/tests/ 下方找到這些攝影機測試:
hardware/src/android/hardware/cts/CameraTest.javahardware/src/android/hardware/cts/CameraGLTest.javahardware/src/android/hardware/cts/Camera_SizeTest.javapermission/src/android/permission/cts/CameraPermissionTest.java
android.hardware.camera2 API 的 CTS 測試
您可以在 cts/tests/tests/ 下方找到這些攝影機測試:
hardware/src/android/hardware/camera2/cts/*permission/src/android/permission/cts/Camera2PermissionTest.java
CTS 驗證器攝影機測試
如要進行這些攝影機測試,請前往:
cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
影像測試套件 (ITS) 測試
攝影機影像測試套件 (ITS) 測試的重點是影像正確性。如要執行測試,請在工作站上執行 Python 指令碼,並透過 USB 連接 Android 裝置。
Camera ITS 基礎架構和測試位於
cts/apps/CameraITS 目錄中。
每個測試都位於 tests/scene# 子目錄中。
如要進一步瞭解如何設定及執行測試,請參閱「Camera ITS」。
如需場景和測試說明,請參閱「攝影機 ITS 測試」。
ITS 測試結果只有通過或失敗。每個場景資料夾中的所有必要測試都必須通過。
非必要測試失敗時,CtsVerifier 仍會將其視為通過。
ITS 測試的測試情境與 CTS 不同,是 HAL 3.2 測試計畫的重要環節。
媒體架構測試
通過 MediaFrameworkTest 中的所有攝影機相關媒體測試。請注意,這些測試需要在 Android 裝置上安裝 mediaframeworktest.apk。您需要 make mediaframeworktest,然後使用 adb 安裝產生的 .apk。指令範例如下。
與攝影機相關的媒體架構測試起始路徑為:
platform/frameworks/base
如要查看測試的原始碼,請前往:
frameworks/base/media/tests/MediaFrameworkTest
如要設定這些測試,請按照下列步驟操作:
make mediaframeworktestadb install out/target/product/name/data/app/mediaframeworktest.apk
其中 name 變數代表包含供應商產品的目錄。
在下列目錄或其子目錄中找出所有測試:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
每個子目錄都代表一類測試:
functional/integration/performance/power/stress/unit/
執行 Media Framework 測試
如要查看所有可用的測試:
adb shell pm list instrumentation
這會產生類似下列內容的結果:
instrumentation:com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaRecorderStressTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner (target=com.android.mediaframeworktest) instrumentation:com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner (target=com.android.mediaframeworktest)
找出並擷取每個測試行中的元件 (介於 instrumentation: 和 (target=com.android.mediaframeworktest) 之間)。這個元件由目標套件名稱 (com.android.mediaframeworktest) 和測試執行工具名稱 (MediaFramework) 組成。
例如:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
接著,您可以將每個元件傳遞至 adb shell am instrument,如下所示:
adb shell am instrument -w component.name
其中 component.name 等於上述擷取的值。例如:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
請注意,雖然類別路徑是 Java 套件 + 類別名稱,但檢測套件不一定與 Java 套件相同。請務必在串連元件名稱時使用 AndroidManifest.xml 套件,而非測試執行工具類別所在的 Java 套件。
如要執行單一測試類別,請傳遞 -e class
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
如要只執行測試類別中的單一方法,請在類別名稱後方加上井號 (#) 和方法名稱 (在本例中為 testConnectPro),如下所示:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
媒體設定功能測試
以下是功能測試的執行範例。這項測試會驗證不同攝影機設定組合的基本功能。(例如閃光燈、曝光、白平衡、場景、相片大小和地理標記)
執行測試指令:
adb shell am instrument -w -r -e delay_msec 15 -e log true -e class com.android.mediaframeworktest.functional.camera.CameraPairwiseTest com.android.mediaframeworktest/com.android.mediaframeworktest.CameraStressTestRunner
媒體整合測試
以下是整合測試的執行範例,在本例中為 mediaframeworktest/integration/CameraBinderTest.java 和 mediaframeworktest/CameraStressTestRunner.java:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
如果成功,輸出結果會類似下列內容:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
媒體效能測試
這項預覽記憶體測試會開啟並釋出相機預覽畫面 200 次。每 20 次疊代都會記錄 ps mediaserver 的快照,並比較 200 次疊代後的記憶體用量差異。如果差異超過 150 公里,測試就會失敗。
執行測試指令:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
如需更詳細的輸出內容,請參閱:
/sdcard/mediaMemOutput.txt
媒體單元測試
執行單元測試的指令都類似。舉例來說,如果是 CameraMetadataTest.java,指令會是:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
媒體壓力測試
這項測試的目的是要對相機的影像擷取和影片錄製功能進行壓力測試。
執行測試指令:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
所有測試都應通過。
手動測試攝影機測試
請手動執行 TestingCam 應用程式,並進行下列檢查。TestingCam 的來源位於:pdk/apps/TestingCamera/
傾斜相機即可無限遠對焦
啟動 TestingCam,開啟預覽畫面,並確認自動對焦模式設為無限遠。使用「拍照」按鈕,以水平、向上 (接近垂直) 和向下 (接近垂直) 的角度拍攝遠處物體 (至少 10 公尺外)。向上拍攝的例子可以是從下方拍攝樹木高處的葉子/樹枝,向下拍攝的例子可以是從建築物屋頂拍攝街道。無論如何,遠處的主體都應清晰對焦。將拍攝結果儲存到相片庫,然後放大檢視,方便檢查銳利度。
請注意,如果攝影機使用 VCM 驅動器,必須具備閉迴路自動對焦控制系統,或根據使用加速計資料判斷攝影機方向,進行某種軟體校正,才能通過這項測試。鏡頭無限遠位置也需要可靠的工廠校準。
手動測試 Cam2 測試
您必須手動執行 TestingCam2 應用程式,並進行下列檢查。TestingCam2 的來源位於:pdk/apps/TestingCamera2/
擷取 JPEG
啟動 TestingCam2,然後按下 JPEG 按鈕。觀景窗圖像右側顯示的圖像應與觀景窗相同,包括方向。