Lista kontrolna testowania kamery HAL

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

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:

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:

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

Aby skonfigurować środowisko testowe, uruchom:
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 argument, jak tak:

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ę.