本頁列出所有可用於評估 Android 相機硬體抽象層 (HAL) 的測試。這項工具適用於原始設備製造商 (OEM) 和應用程式處理器 (AP) 供應商,可確保相機 HAL 實作正確無誤,且瑕疵最少。雖然這是 Android 相容性測試套件 (CTS) 的自願性加購項目,但可大幅提升相機測試涵蓋範圍,並找出潛在錯誤。
通過這些測試後,原始設備製造商就能驗證是否已正確整合 Android 相機硬體抽象層 (HAL) 3 介面。如果裝置實作項目符合檢查清單中的所有項目,則可視為完整支援 Android Camera HAL 介面。這樣一來,裝置就能正確支援相機應用程式建構的
android.hardware.camera2
套件。
相機 HAL3 規格
Android Camera HAL3 規格是裝置必須滿足條件的權威資訊來源。本頁面提供所有測試的摘要,可做為檢查清單。相機 HAL 實作者 (例如 AP 供應商) 應逐行檢查 Camera HAL3 規格,確保裝置符合規格。
Android 5.0 以上版本的通用 Android 平台開發套件 (PDK) 內,有下列檔案定義目前的 HAL 規格:
- 攝影機 HAL 3.x 介面和規格:
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Camera 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):手動執行測試,確保影像正確無誤。詳情請參閱「Camera ITS」。
- 手動測試 Cam 測試:
從
pdk/apps/TestingCamera/
中的來源執行 - 手動測試 Cam2.1 測試:從
pdk/apps/TestingCamera2/
中的來源執行
下文將詳細說明所有這些測試類型。這些測試會依 OEM 預期執行的時間順序呈現。
舉例來說,如果裝置無法通過原生測試,就一定會無法通過後續的 Compatibility Test Suite (CTS) 測試。如果裝置未通過 CTS,繼續進行 Image Test Suite (ITS) 測試的意義不大。建議您先解決每種測試類型的失敗問題,再繼續進行下一組測試。
供應商測試套件 (VTS) 測試
Android 供應商測試套件 (VTS) 是一種測試套件,可在 HIDL 介面層級運作。如要進一步瞭解如何使用 VTS,請參閱「供應商測試套件」。
Compatibility Test Suite (CTS) 測試
Camera Android Compatibility Test Suite (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.java
hardware/src/android/hardware/cts/CameraGLTest.java
hardware/src/android/hardware/cts/Camera_SizeTest.java
permission/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 mediaframeworktest
adb 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」按鈕。觀景窗圖像右側顯示的圖像應與觀景窗相同,包括方向。