相機 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 C920Microsoft 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按鈕。出現在取景器圖像右側的圖像應與取景器顯示相同,包括具有相同的方向。