本文檔列出了可用於評估 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) 內的以下文件中定義:
- 相機 HAL 3.x 接口和規範:
hardware/libhardware/include/hardware/camera3.h
、hardware/libhardware/include/hardware/camera_common.h
- 相機 HAL 3.x 元數據規範:
system/media/camera/docs/docs.html
- HAL 像素格式接口和規範:
system/core/libsystem/include/system/graphics.h
相機測試類型
以下是適用於最新 Android 相機的主要測試類型以及以下相關說明的參考:
- Vendor Test Suite (VTS) :直接測試相機HAL接口的測試
- 兼容性測試套件 (CTS) :標準、自動化 Android 測試,以確保設備兼容性。有關更多詳細信息,請參閱兼容性測試套件和Trade Federation 概述。
- 圖像測試套件 (ITS) :手動運行測試以確保圖像正確性。有關更多詳細信息,請參閱相機 ITS 。
- 手動TestingCam測試:從
pdk/apps/TestingCamera/
中的源運行 - 手動TestingCam2.1測試:從
pdk/apps/TestingCamera2/
中的源運行
下面詳細描述了所有這些測試類型。這些測試按照 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 腳本。
相機 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) 內的以下文件中定義:
- 相機 HAL 3.x 接口和規範:
hardware/libhardware/include/hardware/camera3.h
、hardware/libhardware/include/hardware/camera_common.h
- 相機 HAL 3.x 元數據規範:
system/media/camera/docs/docs.html
- HAL 像素格式接口和規範:
system/core/libsystem/include/system/graphics.h
相機測試類型
以下是適用於最新 Android 相機的主要測試類型以及以下相關說明的參考:
- Vendor Test Suite (VTS) :直接測試相機HAL接口的測試
- 兼容性測試套件 (CTS) :標準、自動化 Android 測試,以確保設備兼容性。有關更多詳細信息,請參閱兼容性測試套件和Trade Federation 概述。
- 圖像測試套件 (ITS) :手動運行測試以確保圖像正確性。有關更多詳細信息,請參閱相機 ITS 。
- 手動TestingCam測試:從
pdk/apps/TestingCamera/
中的源運行 - 手動TestingCam2.1測試:從
pdk/apps/TestingCamera2/
中的源運行
下面詳細描述了所有這些測試類型。這些測試按照 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 腳本。
相機 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按鈕。顯示在取景器圖像右側的圖像應與取景器顯示相同,包括具有相同的方向。