相機 HAL 測試清單

本文檔列出了可用於評估 Android 相機硬件抽象層 (HAL) 的所有測試。它適用於原始設備製造商 (OEM) 和應用處理器 (AP) 供應商,因此他們可以確保正確實施相機 HAL,並將缺陷降至最低。儘管這是對 Android 兼容性測試套件 (CTS) 的自願添加,但它大大增加了相機測試覆蓋率,並且肯定會發現潛在的錯誤。

通過這些測試,OEM 可以驗證他們是否正確集成了 Android 相機硬件抽象層 (HAL) 3 接口。當符合清單中的所有項目時,設備實現可能被認為是完整的 Android 相機 HAL 接口。這反過來將使設備能夠正確支持相機應用程序構建的android.hardware.camera2包。

相機 HAL3 規範

Android Camera HAL3規範是有關設備必須滿足哪些信息的權威信息源;此頁面提供了可用作檢查表的所有測試的摘要。相機 HAL 實施者(例如 AP 供應商)應逐行檢查相機 HAL3 規範,並確保其設備符合該規範。

當前的 HAL 規範在 Android 5.0 及更高版本的通用 Android 平台開發工具包 (PDK) 中的這些文件中定義:

相機測試類型

以下是可用於最新 Android 攝像頭的主要測試類型以及對以下相關說明的參考:

所有這些測試類型都在下面詳細描述。這些測試按 OEM 預計執行它們的時間順序呈現。

例如,如果設備未通過本機測試,它肯定會通過後續的兼容性測試套件 (CTS) 測試。如果設備未能通過 CTS,則繼續執行圖像測試套件 (ITS) 幾乎沒有用處。我們建議在進行下一組測試之前解決每種測試類型中的故障。

供應商測試套件 (VTS) 測試

Android 供應商測試套件 (VTS) 是一個適用於 HIDL 接口級別的測試套件。有關使用 VTS 的更多信息,請參閱供應商測試套件。

兼容性測試套件 (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.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 Verifier 相機測試

在以下位置找到這些相機測試: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

圖像測試套件 (ITS) 測試

相機圖像測試套件 (ITS) 測試側重於圖像正確性。要執行測試,請在通過 USB 連接 Android 設備的工作站上運行 Python 腳本。

Camera ITS 基礎設施和測試位於cts/apps/CameraITS目錄中。每個測試駐留在tests/scene #子目錄中。

要設置測試環境,請運行:
extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
cd CameraITS
source build/envsetup.sh

有關如何設置和運行測試的更多信息,請參閱cts/apps/CameraITS中的CameraITS PDF 文件。有關如何使用腳本的指南,請參閱tests子目錄中的tutorial.py 。

ITS 測試需要 Linux 環境。有關運行 ITS 測試所需的特定 Python 版本的詳細信息,請參閱該版本的CameraITS PDF 文件或 Android 12 的Android 12 發行說明。

Camera ITS-in-a-box 中描述了靜態場景的推薦設置。 Sensor_fusion 場景的推薦設置在Sensor Fusion Box 快速入門指南中進行了描述。

要手動運行 ITS,請準備一個簡單的物理環境,其中包含特定的、可重複使用的目標,例如白牆、灰卡和檯燈。將 Android 設備安裝在三腳架上並運行腳本以測試相機功能。大多數測試通過或失敗,但有些提供指標。

這些腳本測試未在 CTS 中測試的場景,是 HAL 3.2 測試計劃的重要組成部分。

ITS 測試要么通過,要么失敗。每個場景文件夾中的所有強制測試都必須通過。未強制執行的測試可能會失敗,但仍算作CtsVerifier中的通過。

有關場景和測試說明,請參閱相機 ITS 測試。

媒體框架測試

在 MediaFrameworkTest 中通過所有與相機相關的媒體測試。請注意,這些測試需要在 Android 設備上安裝 mediaframeworktest.apk。您需要make mediaframeworktest ,然後使用 adb 安裝生成的 .apk。下麵包括示例命令。

Camera相關媒體框架測試的起始路徑是: 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/

運行媒體框架測試

查看所有可用的測試::

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 TestRunner )組成MediaFramework TestRunner )。

例如:

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 類論據,像這樣:

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 次迭代後不同的內存使用情況。如果差異大於 150kM,測試將失敗。

運行測試命令:

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,打開預覽,並確保自動對焦模式設置為無限遠。使用拍照按鈕,以水平、向上(接近垂直)和向下(接近垂直)的相機指向遠處拍攝對象(至少 10m 外);向上拍攝的一個例子可以是從下面看一棵樹的高葉子/樹枝,而向下拍攝的一個例子可以是從建築物屋頂看到的街道。在所有情況下,遠處的主體都應該清晰且清晰。在圖庫視圖中保存和查看照片,以便您可以更輕鬆地放大和檢查清晰度。

請注意,對於帶有 VCM 執行器的相機要通過此測試,它需要一個閉環 AF 控制系統,或者需要基於使用加速度計數據來確定相機方向的某種 SW 校正。還需要對鏡頭無限遠位置進行可靠的工廠校準。

手動測試Cam2 測試

TestingCam2 應用程序應手動運行,並執行以下檢查。 TestingCam2 的來源在這裡: pdk/apps/TestingCamera2/

JPEG 捕捉

啟動 TestingCam2,然後按下JPEG按鈕。出現在取景器圖像右側的圖像應與取景器顯示相同,包括具有相同的方向。