Testowanie interfejsu HAL aparatu

Na tej stronie znajdziesz listę wszystkich testów dostępnych do oceny warstwy abstrakcji sprzętu (HAL) aparatu na Androidzie. Jest on przeznaczony dla producentów oryginalnego sprzętu (OEM) i dostawców procesorów aplikacji (AP), aby mogli oni zapewnić prawidłowe wdrożenie warstwy HAL aparatu z minimalną liczbą błędów. Chociaż jest to dobrowolne rozszerzenie pakietu CTS (Compatibility Test Suite) dla Androida, znacznie zwiększa zakres testów kamery i z pewnością pomoże wykryć potencjalne błędy.

Przejście tych testów potwierdza, że producenci OEM prawidłowo zintegrowali interfejsy warstwy abstrakcji sprzętu (HAL) 3 aparatu Androida. Jeśli urządzenie spełnia wszystkie wymagania z tej listy, można uznać, że jego implementacja jest pełna w zakresie interfejsów HAL aparatu na Androidzie. Umożliwi to urządzeniu prawidłową obsługę pakietu android.hardware.camera2, na którym są oparte aplikacje aparatu.

Specyfikacja Camera HAL3

Specyfikacja Android Camera HAL3 jest wiarygodnym źródłem informacji o tym, jakie wymagania muszą spełniać urządzenia. Ta strona zawiera podsumowanie wszystkich testów, które można wykorzystać jako listę kontrolną. Osoby wdrażające HAL aparatu (np. dostawcy procesorów aplikacji) powinny dokładnie zapoznać się ze specyfikacją HAL3 aparatu i upewnić się, że ich urządzenia są z nią zgodne.

Obecna specyfikacja HAL jest zdefiniowana w tych plikach w ogólnym pakiecie Android Platform Development Kit (PDK) w wersji 5.0 i nowszych:

Rodzaje testów aparatu

Oto główne typy testów dostępne w przypadku najnowszych aparatów na Androida wraz z odwołaniami do powiązanych instrukcji poniżej:

Wszystkie te typy testów zostały szczegółowo opisane poniżej. Testy te są przedstawione w kolejności chronologicznej, w jakiej producenci OEM powinni je przeprowadzać.

Jeśli na przykład urządzenie nie przejdzie testów natywnych, z pewnością nie przejdzie też kolejnych testów pakietu CTS (Compatibility Test Suite). Jeśli urządzenie nie przejdzie testu CTS, nie ma sensu przechodzić do testu ITS. Zalecamy usunięcie błędów 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 testów działający na poziomie interfejsu HIDL. Więcej informacji o korzystaniu z VTS znajdziesz w artykule Vendor Test Suite.

Testy pakietu CTS (Compatibility Test Suite)

Testy pakietu CTS (Compatibility Test Suite) dla aparatu na Androida koncentrują się na zgodności urządzenia. Informacje o konfigurowaniu środowiska testowego znajdziesz w artykule Konfigurowanie CTS.

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

Podczas przeprowadzania testów CTS kamery na urządzeniach obsługujących kamery zewnętrzne (np. kamery internetowe USB) musisz mieć podłączone urządzenie. W przeciwnym razie testy CTS automatycznie zakończą się niepowodzeniem. Przykłady kamer zewnętrznych: Logitech HD Pro Webcam C920Microsoft LifeCam HD-3000.

Ogólne instrukcje dotyczące uruchamiania CTS znajdziesz we wprowadzeniu do CTS i na jego podstronach.

Testy CTS dla interfejsu android.hardware.Camera API

Testy kamery znajdziesz w sekcji 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 interfejsu android.hardware.camera2 API

Testy kamery znajdziesz w sekcji cts/tests/tests/:

  • hardware/src/android/hardware/camera2/cts/*
  • permission/src/android/permission/cts/Camera2PermissionTest.java

Testy kamery weryfikatora CTS

Testy kamery znajdziesz w tych miejscach:cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Testy Image Test Suite (ITS)

Testy w pakiecie Camera Image Test Suite (ITS) koncentrują się na poprawności obrazu. Aby przeprowadzić testy, uruchom skrypty Pythona na stacji roboczej z urządzeniem z Androidem 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#.

Więcej informacji o konfigurowaniu i przeprowadzaniu testów znajdziesz w artykule Camera ITS.

Opisy scen i testów znajdziesz na stronie Camera ITS Tests (Testy ITS kamery).

Testy ITS są zaliczane lub nie. Wszystkie wymagane testy w każdym folderze sceny muszą zakończyć się powodzeniem. Testy, które nie są obowiązkowe, mogą zakończyć się niepowodzeniem, ale nadal będą uznawane za zaliczone w CtsVerifier.

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

Testy platformy multimedialnej

Przejdź wszystkie testy multimediów związane z kamerą w MediaFrameworkTest. Pamiętaj, że te testy wymagają zainstalowania na urządzeniu z Androidem pliku mediaframeworktest.apk. Musisz make mediaframeworktest, a potem użyć adb, aby zainstalować wynikowy plik APK. Przykładowe polecenia znajdziesz poniżej.

Ścieżka początkowa testów platformy multimedialnej związanych z aparatem 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 tym 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/

Przeprowadzanie testów Media Framework

Aby wyświetlić wszystkie dostępne testy:

adb shell pm list instrumentation

Wyniki będą podobne do tych:

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 (między instrumentation:(target=com.android.mediaframeworktest) ) z każdej linii testu. Komponent składa się z nazwy pakietu docelowego (com.android.mediaframeworktest) i nazwy narzędzia do uruchamiania testów (MediaFrameworkTestRunner).

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 funkcji adb shell am instrument w ten sposób:

adb shell am instrument -w component.name

gdzie component.name to wyodrębniona wartość powyżej. Przykład:

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

Pamiętaj, że ścieżka klasy to nazwa pakietu Java + nazwa klasy, ale pakiet instrumentacji nie musi być taki sam jak pakiet Java. Podczas łączenia nazwy komponentu używaj pakietu AndroidManifest.xml, a nie pakietu Java, w którym znajduje się klasa mechanizmu uruchamiania testów.

Aby uruchomić jedną klasę testów, przekaż argument -e class , jak pokazano poniżej:

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 do nazwy klasy znak funta (#) i nazwę metody (w tym przypadku testConnectPro), np.:

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

Testy funkcjonalne ustawień multimediów

Oto przykład działania testu funkcjonalnego. Ten test weryfikuje podstawowe funkcje różnych kombinacji ustawień aparatu. (np. lampa błyskowa, ekspozycja, balans bieli, scena, rozmiar zdjęcia i tag geograficzny).

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 multimediów

Oto przykład uruchomienia testu integracji, 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 operacja się uda, otrzymasz dane wyjściowe podobne do tych:

-----

com.android.mediaframeworktest.integration.CameraBinderTest:...........
Test results for CameraStressTestRunner=...........
Time: 3.328

OK (11 tests)

-----

Testy skuteczności mediów

Ten test pamięci podglądu otworzy i zamknie podgląd aparatu 200 razy. W każdej z 20 iteracji zostanie zarejestrowana migawka procesu ps mediaserver, a po 200 iteracjach zostanie porównane zużycie pamięci. Test zakończy się niepowodzeniem, jeśli różnica będzie 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 znajdziesz w:/sdcard/mediaMemOutput.txt

Testy jednostkowe jednostek mediów

Polecenia do uruchamiania testów jednostkowych są podobne. Na przykład w przypadku pliku CameraMetadataTest.java polecenie będzie wyglądać tak:

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

Testy obciążeniowe multimediów

Ten test ma na celu sprawdzenie, jak aparat radzi sobie z robieniem zdjęć i nagrywaniem filmów.

Uruchom polecenie testowe:

adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner

Wszystkie testy powinny zostać zaliczone.

Testy ręczneTesty kamery

Aplikację TestingCam należy uruchomić ręcznie i wykonać te czynności: Źródło TestingCam znajdziesz tutaj: pdk/apps/TestingCamera/

Ustawianie ostrości na nieskończoność przy pochyleniu aparatu

Uruchom aplikację TestingCam, włącz podgląd i sprawdź, czy tryb autofokusa jest ustawiony na nieskończoność. Za pomocą przycisku Zrób zdjęcie zrób zdjęcia odległych obiektów (w odległości co najmniej 10 m) z aparatem skierowanym poziomo, w górę (prawie pionowo) i w dół (prawie pionowo). Przykładem zdjęcia skierowanego w górę mogą być liście lub gałęzie drzewa widziane z dołu, a przykładem zdjęcia skierowanego w dół może być ulica widziana z dachu budynku. W każdym przypadku odległy obiekt powinien być ostry i wyraźny. Zapisz i wyświetl zdjęcia w widoku galerii, aby łatwiej powiększać i sprawdzać ostrość.

Aby aparat z siłownikiem VCM przeszedł ten test, musi mieć system sterowania AF w zamkniętej pętli lub korekcję SW na podstawie danych z akcelerometru, które określają orientację aparatu. Konieczna będzie też wiarygodna kalibracja fabryczna pozycji nieskończoności obiektywu.

Testy ręczne – testy Cam2

Aplikację TestingCam2 należy uruchomić ręcznie i wykonać te testy: Źródło TestingCam2 znajdziesz tutaj: pdk/apps/TestingCamera2/

Rejestrowanie w formacie JPEG

Uruchom aplikację TestingCam2 i kliknij przycisk JPEG. Obraz wyświetlany po prawej stronie obrazu z wizjera powinien wyglądać tak samo jak obraz z wizjera, w tym mieć taką samą orientację.