Lista kontrolna testów HAL kamery

Na tej stronie znajdują się wszystkie dostępne testy umożliwiające ocenę warstwy abstrakcji sprzętu aparatu w systemie Android (HAL). Jest przeznaczony dla producentów oryginalnego sprzętu (OEM) i dostawców procesorów aplikacji (AP), aby mogli zapewnić prawidłowe wdrożenie warstwy HAL kamery przy minimalnej liczbie defektów. Chociaż jest to dobrowolny dodatek do pakietu testów zgodności Androida (CTS), znacznie zwiększa zasięg testów aparatu i z pewnością zidentyfikuje potencjalne błędy.

Przechodząc te testy, producenci OEM sprawdzają, czy prawidłowo zintegrowali interfejsy warstwy abstrakcji sprzętu aparatu z systemem Android (HAL) 3. Po spełnieniu wszystkich elementów listy kontrolnej implementacja urządzenia może zostać uznana za pełną w odniesieniu do interfejsów HAL aparatu Android. 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 wiarygodnym źródłem informacji o tym, jakie urządzenia muszą spełniać; na tej stronie znajduje się podsumowanie wszystkich testów, które można wykorzystać jako listę kontrolną. Osoby wdrażające technologię Camera HAL (np. dostawcy punktów dostępowych) powinny szczegółowo zapoznać się ze specyfikacją Camera HAL3 i upewnić się, że ich urządzenia są z nią zgodne.

Bieżąca specyfikacja HAL jest zdefiniowana w tych plikach w ogólnym zestawie Android Platform Development Kit (PDK) dla systemu Android 5.0 i nowszych:

Rodzaje testów aparatu

Oto podstawowe typy testów dostępnych dla najnowszego aparatu z systemem Android wraz z odniesieniami do powiązanych instrukcji poniżej:

Wszystkie te typy testów opisano szczegółowo poniżej. Testy te przedstawiono w porządku chronologicznym, w jakim producenci OEM powinni je przeprowadzać.

Na przykład, jeśli urządzenie nie przejdzie testów natywnych, z pewnością nie przejdzie kolejnych testów pakietu testów zgodności (CTS). A jeśli urządzenie nie przejdzie testu CTS, korzystanie z 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 pakietu Vendor Test Suite (VTS).

Android Vendor Test Suite (VTS) to pakiet testowy działający na poziomie interfejsu HIDL. Więcej informacji na temat korzystania z VTS można znaleźć w dokumencie Vendor Test Suite .

Testy zestawu testów zgodności (CTS).

Testy Camera Android Compatibility Test Suite (CTS) koncentrują się na zgodności urządzeń. Aby uzyskać informacje na temat konfigurowania środowiska testowego, zobacz Konfigurowanie CTS .

Ścieżka początkowa testów CTS kamery to: platform/cts .

Uruchamiając CTS kamery dla urządzeń obsługujących kamery zewnętrzne (takie jak kamery internetowe USB), musisz mieć podłączone urządzenie podczas uruchamiania CTS, w przeciwnym razie testy automatycznie zakończą się niepowodzeniem. Przykładowe kamery zewnętrzne to: Logitech HD Pro Webcam C920 i Microsoft LifeCam HD-3000 .

Ogólne instrukcje dotyczące uruchamiania CTS można znaleźć we wstępie do CTS i jego podstronach.

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 kamery CTS Verifier

Znajdź te testy aparatu pod: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Testy pakietu 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 # .

Aby uzyskać więcej informacji na temat konfigurowania i przeprowadzania testów, zobacz Camera ITS .

Aby zapoznać się z opisami scen i testów, zobacz Testy ITS kamer .

Testy ITS albo kończą się pomyślnie, albo nie. Wszystkie obowiązkowe testy w każdym folderze scen muszą zostać zaliczone. Testy, które nie są wymagane, mogą zakończyć się niepowodzeniem i nadal liczyć się jako zaliczone w CtsVerifier .

ITS testuje scenariusze testowe, które nie są testowane w CTS i stanowią ważny element planu testów HAL 3.2.

Testy Media Framework

Przejdź wszystkie testy multimediów związane z kamerą w programie MediaFrameworkTest. Pamiętaj, że te testy wymagają zainstalowania pliku mediaframeworktest.apk na urządzeniu z Androidem. Będziesz musiał make mediaframeworktest , a następnie użyć adb, aby zainstalować wynikowy plik .apk. Przykładowe polecenia znajdują się poniżej.

Ścieżka początkowa testów frameworku multimediów związanych z kamerą to: platform/frameworks/base

Kod źródłowy testów znajdziesz 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/

Uruchom testy Media Framework

Aby zobaczyć wszystkie dostępne testy:

adb shell pm list instrumentation

Da to wyniki podobne do:

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żdej linii testowej. Komponent składa się z nazwy pakietu docelowego ( com.android.mediaframeworktest ) i nazwy modułu uruchamiającego test ( 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 w następujący sposób:

adb shell am instrument -w component.name

Gdzie component.name jest równa wartości wyodrębnionej powyżej. Na przykład:

adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Należy pamiętać, że choć ś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 modułu uruchamiającego test.

Aby uruchomić pojedynczą klasę testów, należy przekazać klasę -e argument w stylu:

adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Aby uruchomić tylko jedną metodę w klasie testowej, dołącz 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ń multimediów

Oto przykładowy przebieg testu funkcjonalnego. Ten test sprawdza podstawową funkcjonalność różnych kombinacji ustawień aparatu. (tj. lampa błyskowa, ekspozycja, balans bieli, scena, rozmiar zdjęcia 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, wynik będzie podobny do:

-----

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 się i udostępni podgląd kamery 200 razy. W każdych 20 iteracjach rejestrowana będzie migawka serwera multimediów ps, która porównuje wykorzystanie pamięci po 200 iteracjach. Test zakończy się niepowodzeniem, jeśli różnica jest większa niż 150 kM.

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 jednostki multimedialnej

Wszystkie polecenia służące do uruchamiania testów jednostkowych są podobne. Na przykład w przypadku pliku CameraMetadataTest.java polecenie będzie wyglądać następująco:

adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'

Testy obciążeniowe mediów

Ten test ma na celu sprawdzenie 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 przejść pomyślnie.

Testowanie ręczneTesty Cam

Aplikację TestingCam należy uruchomić ręcznie, po wykonaniu następujących kontroli. Źródło TestingCam znajduje się tutaj: pdk/apps/TestingCamera/

Ostrość na nieskończoność przy pochyleniu aparatu

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) 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 widziane 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 zdjęcia w widoku galerii, aby móc łatwiej je powiększać i sprawdzać ostrość.

Należy pamiętać, że aby kamera z siłownikiem VCM przeszła ten test, będzie wymagała albo systemu sterowania AF w zamkniętej pętli, albo będzie wymagała pewnego rodzaju korekcji SW w oparciu o dane z akcelerometru do określenia orientacji aparatu. Konieczna będzie również niezawodna fabryczna kalibracja pozycji nieskończoności obiektywu.

Testy ręczne TestingCam2

Aplikację TestingCam2 należy uruchomić ręcznie, po wykonaniu następujących kontroli. Źródło TestingCam2 znajduje się tutaj: pdk/apps/TestingCamera2/

Przechwytywanie JPEG

Uruchom TestingCam2 i naciśnij przycisk JPEG . Obraz pojawiający się po prawej stronie obrazu w wizjerze powinien wyglądać tak samo jak w wizjerze, łącznie z tą samą orientacją.