Ten dokument zawiera listę wszystkich testów dostępnych do oceny warstwy abstrakcji sprzętu aparatu Android (HAL). Jest przeznaczony dla producentów oryginalnego sprzętu (OEM) i dostawców procesorów aplikacji (AP), dzięki czemu mogą zapewnić prawidłowe wdrożenie HAL kamery z minimalną ilością wad. Chociaż jest to dobrowolny dodatek do pakietu Android Compatibility Test Suite (CTS), znacznie zwiększa zasięg testów kamer i z pewnością identyfikuje potencjalne błędy.
Przechodząc te testy, producenci OEM sprawdzają, czy prawidłowo zintegrowali interfejsy warstwy abstrakcji sprzętu (HAL) 3 aparatu w systemie Android. Po spełnieniu wszystkich elementów listy kontrolnej implementację urządzenia można uznać za pełną w odniesieniu do interfejsów Android Camera HAL. To z kolei umożliwi urządzeniu prawidłową obsługę pakietu android.hardware.camera2
, na którym opierają się aplikacje aparatu.
Specyfikacja kamery HAL3
Specyfikacja Android Camera HAL3 jest autorytatywnym źródłem informacji o tym, jakie urządzenia muszą spełniać; ta strona zawiera podsumowanie wszystkich testów, które można wykorzystać jako listę kontrolną. Realizatorzy Camera HAL (np. dostawcy AP) powinni przejść przez specyfikację Camera HAL3 linia po linii i upewnić się, że ich urządzenia są z nią zgodne.
Bieżąca specyfikacja warstwy HAL jest zdefiniowana w tych plikach w ramach ogólnego zestawu Android Platform Development Kit (PDK) dla systemu Android 5.0 i nowszych:
- Interfejs i specyfikacja kamery HAL 3.x :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Specyfikacja metadanych HAL 3.x aparatu :
system/media/camera/docs/docs.html
- Interfejs i specyfikacja formatu pikseli HAL :
system/core/libsystem/include/system/graphics.h
Rodzaje testów kamer
Oto podstawowe typy testów dostępnych dla najnowszej kamery z systemem Android wraz z odniesieniami do powiązanych instrukcji poniżej:
- Vendor Test Suite (VTS) : testy, które bezpośrednio testują interfejs HAL kamery
- Compatibility Test Suite (CTS) : standardowe, zautomatyzowane testy systemu Android w celu zapewnienia zgodności urządzeń — zobacz wprowadzenie do CTS i przegląd Federacji Handlowej
- Image Test Suite (ITS) : Ręczne uruchamianie testów, aby zapewnić poprawność obrazu — zapoznaj się z plikami
README
najwyższego poziomu i specyficznymi dla testu oraztutorial.py
, aby uzyskać instrukcje dotyczące konfiguracji - Ręczne testy TestingCam : Uruchom ze źródła w
pdk/apps/TestingCamera/
- Ręczne testy TestingCam2.1 : Uruchom ze źródła w
pdk/apps/TestingCamera2/
Wszystkie te typy testów zostały szczegółowo opisane poniżej. Testy te są przedstawione w porządku chronologicznym, w jakim mają je wykonać producenci OEM.
Na przykład, jeśli urządzenie nie przejdzie testów natywnych, z pewnością nie przejdzie kolejnych testów zestawu testów zgodności (CTS). A jeśli urządzenie ulegnie awarii CTS, przejście do pakietu Image Test Suite (ITS) nie ma większego sensu. Zalecamy zajęcie się błędami w każdym typie testu przed przejściem do następnego zestawu testów.
Testy Vendor Test Suite (VTS)
Android Vendor Test Suite (VTS) to pakiet testowy, który działa na poziomie interfejsu HIDL. Aby uzyskać więcej informacji na temat korzystania z VTS, zobacz Vendor Test Suite .
Testy zestawu testów zgodności (CTS)
Testy zestawu testów zgodności aparatu z systemem Android (CTS) skupiają się na zgodności urządzenia. Aby uzyskać informacje na temat konfigurowania środowiska testowego, zobacz Konfigurowanie CTS .
Ścieżka startowa do testów CTS kamery to: platform/cts
.
W przypadku uruchamiania CTS kamery dla urządzeń obsługujących kamery zewnętrzne (takich jak kamery internetowe USB), podczas uruchamiania CTS należy podłączyć urządzenie, w przeciwnym razie testy automatycznie zakończą się niepowodzeniem. Przykłady kamer zewnętrznych to: Logitech HD Pro Webcam C920 i Microsoft LifeCam HD-3000 .
Zapoznaj się z wprowadzeniem do CTS i jego podstronami, aby uzyskać ogólne instrukcje dotyczące uruchamiania CTS.
Testy CTS dla API android.hardware.Camera
Znajdź te testy aparatu w 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
Testy CTS dla API android.hardware.camera2
Znajdź te testy aparatu w cts/tests/tests/
:
-
hardware/src/android/hardware/camera2/cts/*
-
permission/src/android/permission/cts/Camera2PermissionTest.java
Testy kamer CTS Verifier
Znajdź te testy aparatu pod adresem: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
Testy Image Test Suite (ITS)
Testy Camera Image Test Suite (ITS) skupiają się na poprawności obrazu. Aby wykonać testy, uruchom skrypty Pythona na stacji roboczej z urządzeniem z systemem Android podłączonym przez USB.
Infrastruktura i testy Camera ITS znajdują się w katalogu cts/apps/CameraITS
. Każdy test znajduje się w podkatalogu 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
Aby uzyskać więcej informacji na temat konfigurowania i uruchamiania testów, zobacz plik PDF CameraITS
w cts/apps/CameraITS
. Zobacz tutorial.py
w tests
testing, aby dowiedzieć się, jak używać skryptów.
Testy ITS wymagają środowiska Linux. Aby uzyskać szczegółowe informacje na temat konkretnych wersji Pythona wymaganych do przeprowadzenia testów ITS, zobacz plik PDF CameraITS
dotyczący wydania lub informacje o wersji systemu Android 12 dla systemu Android 12.
Zalecana konfiguracja dla scen statycznych jest opisana w dokumencie ITS-in-a-box kamery . Zalecana konfiguracja sceny sensor_fusion została opisana w Przewodniku szybkiego startu Sensor Fusion Box .
Aby uruchomić ITS ręcznie, przygotuj proste środowisko fizyczne z określonym celem wielokrotnego użytku, takim jak biała ściana, szara karta i lampa biurkowa. Zamontuj urządzenie z systemem Android na statywie i uruchom skrypty, aby przetestować funkcje aparatu. Większość testów kończy się pomyślnie lub niepowodzeniem, ale niektóre oferują metryki.
Skrypty te testują scenariusze, które nie są testowane w CTS i są ważnym składnikiem planu testów HAL 3.2.
Testy ITS kończą się pomyślnie lub zawodzą. Wszystkie wymagane testy w każdym folderze sceny muszą przejść pomyślnie. Testy, które nie są wymagane, mogą zakończyć się niepowodzeniem i nadal liczą się jako zaliczenie w CtsVerifier
.
Aby zapoznać się z opisami scen i testów, zobacz Testy ITS kamery .
Testy Media Framework
Przejdź wszystkie testy mediów związane z kamerą w programie MediaFrameworkTest. Pamiętaj, że te testy wymagają zainstalowania mediaframeworktest.apk na urządzeniu z systemem Android. Będziesz musiał make mediaframeworktest
, a następnie użyć adb, aby zainstalować wynikowy .apk. Przykładowe polecenia znajdują się poniżej.
Ścieżka startowa do testów ram medialnych związanych z kamerą to: platform/frameworks/base
Znajdź kod źródłowy testów tutaj: frameworks/base/media/tests/MediaFrameworkTest
Aby skonfigurować te testy:
make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk
Gdzie zmienna name reprezentuje katalog zawierający produkt dostawcy.
Znajdź wszystkie testy w następującym katalogu lub jego podkatalogach:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
Każdy podkatalog reprezentuje klasę testów:
-
functional/
-
integration/
-
performance/
-
power/
-
stress/
-
unit/
Uruchamianie testów Media Framework
Aby zobaczyć wszystkie dostępne testy:
adb shell pm list instrumentation
Da to wyniki przypominające:
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)
Zidentyfikuj i wyodrębnij komponent (pomiędzy instrumentation:
i (target=com.android.mediaframeworktest)
z każdego wiersza testu. Komponent składa się z nazwy pakietu docelowego ( com.android.mediaframeworktest
) i nazwy programu uruchamiającego testy ( MediaFramework TestRunner
MediaFramework TestRunner
).
Na przykład:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
Następnie możesz przekazać każdy komponent do adb shell am instrument
sposób:
adb shell am instrument -w component.name
Gdzie component.name
jest równa wyodrębnionej wartości powyżej. Na przykład:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Należy pamiętać, że chociaż ścieżka klasy to pakiet Java + nazwa klasy, pakiet instrumentacji niekoniecznie jest taki sam jak pakiet Java. Upewnij się, że podczas łączenia nazwy komponentu używasz pakietu AndroidManifest.xml, a nie pakietu Java, w którym znajduje się klasa programu uruchamiającego testy.
Aby uruchomić pojedynczą klasę testów, przekaż klasę -e
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Aby uruchomić tylko jedną metodę w klasie testowej, dodaj znak krzyżyka (#) i nazwę metody (w tym przypadku testConnectPro
) do nazwy klasy, w następujący sposób:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Testy funkcjonalne ustawień mediów
Oto przykładowy przebieg testu funkcjonalnego. Ten test weryfikuje podstawową funkcjonalność różnych kombinacji ustawień aparatu. (tj. Flash, ekspozycja, WB, scena, rozmiar obrazu i geoTag)
Uruchom polecenie testowe:
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
Testy integracji mediów
Oto przykładowy przebieg testu integracyjnego, w tym przypadku mediaframeworktest/integration/CameraBinderTest.java i mediaframeworktest/CameraStressTestRunner.java:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
Jeśli się powiedzie, wyniki będą przypominać:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Testy wydajności mediów
Ten test pamięci podglądu otworzy i zwolni podgląd kamery 200 razy. W każdych 20 iteracjach zostanie nagrana migawka serwera ps mediaserver, która będzie porównywać zużycie pamięci inne po 200 iteracjach. Test zakończy się niepowodzeniem, jeśli różnica jest większa niż 150kM.
Uruchom polecenie testowe:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
Bardziej szczegółowe dane wyjściowe można znaleźć w: /sdcard/mediaMemOutput.txt
Testy jednostkowe mediów
Wszystkie polecenia do uruchamiania testów jednostkowych są podobne. Na przykład dla CameraMetadataTest.java polecenie to:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
Testy stresu w mediach
Ten test ma na celu podkreślenie przechwytywania obrazu z kamery i nagrywania wideo.
Uruchom polecenie testowe:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
Wszystkie testy powinny zdać.
Testy ręczne TestingCam
Aplikację TestingCam należy uruchomić ręcznie, wykonując następujące kontrole. Źródło TestingCam jest tutaj: pdk/apps/TestingCamera/
Nieskończoność ostrości z nachyleniem kamery
Uruchom TestingCam, włącz podgląd i upewnij się, że tryb autofokusa jest ustawiony na nieskończoność. Używając przycisku Zrób zdjęcie , rób zdjęcia odległych obiektów (co najmniej 10 m) z aparatem skierowanym poziomo, w górę (blisko pionu) i w dół (blisko pionu); przykładem ujęcia w górę mogą być wysokie liście/gałęzie drzewa od dołu, a przykładem ujęcia w dół może być ulica widziana z dachu budynku. We wszystkich przypadkach odległy obiekt powinien być ostry i ostry. Zapisuj i przeglądaj ujęcia w widoku galerii, aby łatwiej powiększać i sprawdzać ostrość.
Należy pamiętać, że aby aparat z siłownikiem VCM przeszedł ten test, będzie wymagał albo systemu sterowania AF w pętli zamkniętej, albo pewnego rodzaju korekcji SW na podstawie danych z akcelerometru w celu określenia orientacji aparatu. Potrzebna będzie również niezawodna fabryczna kalibracja pozycji nieskończoności obiektywu.
Testy ręczne TestingCam2
Aplikację TestingCam2 należy uruchomić ręcznie, wykonując następujące kontrole. Źródło TestingCam2 jest tutaj: pdk/apps/TestingCamera2/
Przechwytywanie JPEG
Uruchom TestingCam2 i naciśnij przycisk JPEG . Obraz, który pojawia się po prawej stronie obrazu w wizjerze, powinien wyglądać tak samo jak w wizjerze, w tym mieć taką samą orientację.