相機 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 腳本。

相機 ITS 基礎架構和測試位於cts/apps/CameraITS目錄中。每個測試都駐留在tests/scene #子目錄中。

有關如何設定和運行測試的更多信息,請參閱相機 ITS

有關場景和測試描述,請參閱相機 ITS 測試

ITS 測試要么通過,要么失敗。每個場景資料夾中的所有強制測試都必須通過。未強制執行的測試可能會失敗,但在CtsVerifier中仍被視為通過。

ITS 測試未在 CTS 中測試的測試場景,並且是 HAL 3.2 測試計劃的重要組成部分。

媒體框架測試

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

所有測試都應該通過。

手動測試Cam測試

應手動執行 TestCam 應用程式並執行以下檢查。 TestCam 的來源在這裡: pdk/apps/TestingCamera/

相機傾斜無限遠對焦

啟動TestingCam,開啟預覽,並確保自動對焦模式設定為無限遠。使用「拍照」按鈕,以水平、向上(接近垂直)和向下(接近垂直)的方式拍攝遠處的拍攝對象(至少 10m 外);向上拍攝的範例可以是從下方看去的高高的樹葉/樹枝,向下拍攝的範例可以是從建築物的屋頂看到的街道。在所有情況下,遠處的拍攝對像都應該清晰且清晰。儲存並在圖庫視圖中查看照片,以便您可以更輕鬆地放大並檢查清晰度。

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

手排TestingCam2測試

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

JPEG 捕捉

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