相機 HAL 測試清單

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

通過這些測試,OEM 可以驗證他們是否正確集成了 Android 相機硬件抽象層 (HAL) 3 接口。當與清單中的所有項目一致,設備實現可以被認為是完全相對於Android相機HAL接口。這又使設備能夠正確支持android.hardware.camera2包,相機在應用程式版本。

相機 HAL3 規格

Android相機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 時插入設備,否則測試將自動失敗。外部照相機的例子包括:羅技HD Pro的網絡攝像頭C920微軟的LifeCam HD-3000

CTS引進及其上運行的CTS一般說明子頁面。

CTS測試的android.hardware.Camera API

發現在這些相機測試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

CTS測試的android.hardware.camera2 API

發現在這些相機測試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 腳本。

與相機的基礎設施和測試位於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

有關如何設置和運行測試的詳細信息,請參閱CameraITS在PDF文件cts/apps/CameraITS 。見tutorial.pytests子目錄中如何使用這些腳本的指南。

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

對於靜態場景推薦的設置中描述攝像機ITS-在一箱。對於sensor_fusion現場推薦的設置中描述的傳感器融合盒快速入門指南

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

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

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

對於現場測試說明,請參閱相機它的測試

媒體框架測試

通過 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/

運行媒體框架測試

查看所有可用的測試:

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

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

手動 TestingCam2 測試

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

JPEG 捕獲

開始TestingCam2,然後按JPEG按鈕。出現在取景器圖像右側的圖像應該與取景器相同,包括具有相同的方向。