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

,

本文檔列出了可用於評估 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按鈕。顯示在取景器圖像右側的圖像應與取景器顯示相同,包括具有相同的方向。