Na tej stronie znajdziesz listę wszystkich testów do oceny warstwy abstrakcji sprzętowej (HAL) aparatu w Androidzie. Jest on przeznaczony dla producentów oryginalnego sprzętu (OEM) i producentów procesorów aplikacji (AP), aby mogli oni zapewnić prawidłowe wdrożenie interfejsu HAL aparatu z minimalną liczbą błędów. Chociaż jest to dobrowolne uzupełnienie pakietu Compatibility Test Suite (CTS) na Androida, znacznie zwiększa zakres testów kamery i zdecydowanie pomoże w identyfikacji potencjalnych błędów.
Przechodząc te testy, producenci OEM sprawdzają, czy poprawnie zintegrowali interfejsy HAL 3 dla aparatu w Androidzie. Jeśli wszystkie elementy na liście kontrolnej są zgodne, implementacja urządzenia może być uznana za pełną w odniesieniu do interfejsów interfejsu API aparatu w Androidzie. Umożliwi to urządzeniu prawidłowe korzystanie z pakietu
android.hardware.camera2
, na którym opierają się aplikacje aparatu.
Specyfikacja Camera HAL3
Specyfikacja HAL3 aparatu Androida jest wiarygodnym źródłem informacji o wymaganiach dotyczących urządzeń. Ta strona zawiera podsumowanie wszystkich testów, które można wykorzystać jako listę kontrolną. Implementatorzy interfejsu Camera HAL (np. dostawcy AP) powinni sprawdzić każdą linię specyfikacji Camera HAL3 i upewnić się, że ich urządzenia są z nią zgodne.
Aktualna specyfikacja HAL jest zdefiniowana w tych plikach w uniwersalnym pakiecie Android Platform Development Kit (PDK) w wersji 5.0 i nowszych:
- Interfejs i specyfikacja Camera 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 piksela HAL:
system/core/libsystem/include/system/graphics.h
Typy testów kamery
Oto główne typy testów dostępnych w najnowszej wersji aplikacji Aparat na Androidzie (oraz linki do instrukcji):
- Zestaw testów dostawcy (VTS): testy bezpośrednio testujące interfejs HAL aparatu.
- Compatibility Test Suite (CTS): standardowe, zautomatyzowane testy Androida, które sprawdzają zgodność urządzenia. Więcej informacji znajdziesz w artykule Compatibility Test Suite i Federacja handlowa – omówienie.
- Image Test Suite (ITS): ręcznie uruchamiaj testy, aby sprawdzić poprawność obrazów. Więcej informacji znajdziesz w ITS aparatu.
- Ręczne testowanie kamery:
Uruchom z źródła w
pdk/apps/TestingCamera/
- Testy ręczne kamery 2.1: uruchamianie z źródła w pliku
pdk/apps/TestingCamera2/
Wszystkie te typy testów szczegółowo opisujemy poniżej. Testy te są prezentowane w kolejności chronologicznej, w jakiej OEM powinien je przeprowadzać.
Jeśli na przykład urządzenie nie przejdzie testów natywnych, z pewnością nie przejdzie kolejnych testów Compatibility Test Suite (CTS). Jeśli urządzenie nie przejdzie testu CTS, nie ma sensu przechodzenie do testu ITS. Zalecamy usunięcie błędów w przypadku każdego typu testu przed przejściem do następnego zestawu testów.
testy Vendor Test Suite (VTS);
Pakiet testów dostawców Androida (VTS) to zestaw testów, który działa na poziomie interfejsu HIDL. Więcej informacji o używaniu VTS znajdziesz w artykule Vendor Test Suite.
Testy Compatibility Test Suite (CTS)
Testy Compatibility Test Suite (CTS) na potrzeby kamery koncentrują się na zgodności urządzenia. Informacje o konfigurowaniu środowiska testowego znajdziesz w artykule Konfigurowanie CTS.
Ścieżka początkowa testów CTS aparatu: platform/cts
.
Jeśli korzystasz z modułu CTS z kamerą w przypadku urządzeń obsługujących zewnętrzne kamery (np. kamer internetowych USB), musisz podłączyć takie urządzenie do trybu CTS. W przeciwnym razie testy automatycznie zakończą się niepowodzeniem. Przykłady zewnętrznych kamer: Logitech HD Pro Webcam C920 i Microsoft LifeCam HD-3000.
Ogólne instrukcje dotyczące uruchamiania CTS znajdziesz w CTS: wprowadzeniu i na jego podstronach.
testy CTS dotyczące interfejsu android.hardware.Camera
API,
Te testy aparatu 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 dotyczące interfejsu android.hardware.camera2
API,
Te testy aparatu znajdziesz w sekcji cts/tests/tests/
:
hardware/src/android/hardware/camera2/cts/*
permission/src/android/permission/cts/Camera2PermissionTest.java
Testy kamery w weryfikatorze CTS
Te testy aparatu znajdziesz w tych miejscach:cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
testy Image Test Suite (ITS),
Testy z użyciem pakietu testów obrazu z aparatu (ITS) sprawdzają poprawność obrazu. Aby przeprowadzić testy, uruchom skrypty Pythona na stacji roboczej z połączonym przez USB urządzeniem z Androidem.
Infrastruktura i testy aparatu fotograficznego 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 ITS aparatu.
Opisy scen i testów znajdziesz w artykule Testy ITS kamery.
Testy ITS kończą się wynikiem pozytywnym lub negatywnym. Wszystkie wymagane testy w każdym folderze scen muszą zostać zaliczone.
Testy, które nie są wymagane, mogą zakończyć się niepowodzeniem i zostać uznane za zaliczone w CtsVerifier
.
ITS testuje scenariusze testowe, które nie są testowane w narzędziu CTS i są ważnym elementem planu testów HAL 3.2.
Testy platformy Media Framework
Zalicz wszystkie testy multimediów związane z aparatem w MediaFrameworkTest. Pamiętaj, że te testy wymagają zainstalowania pliku mediaframeworktest.apk na urządzeniu z Androidem. Musisz użyć make mediaframeworktest
, a potem użyć adb do zainstalowania pliku .apk. Poniżej znajdziesz przykładowe polecenia.
Ścieżka początkowa testów frameworku multimediów związanych z aparatami:
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.
Wszystkie testy znajdziesz 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 platformy Media Framework
Aby wyświetlić wszystkie dostępne testy:
adb shell pm list instrumentation
Da to wyniki 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:
i (target=com.android.mediaframeworktest)
) z każdej linii testowej.
Składa się on z nazwy docelowego pakietu (com.android.mediaframeworktest
) i nazwy testu (MediaFramework
).
Przykłady:
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 ten sposób:
adb shell am instrument -w component.name
Gdzie component.name
jest równa wyodrębnionej wartości powyżej. Przykład:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Pamiętaj, że ścieżka klasy to pakiet Java plus nazwa klasy, ale pakiet instrumentacji nie musi być taki sam jak pakiet Java. Pamiętaj, aby podczas łączenia nazwy komponentu używać pliku 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
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 krzyżyka (#) i nazwę metody (w tym przypadku testConnectPro
), na przykład:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Testy funkcjonalne ustawień multimediów
Oto przykładowe uruchomienie testu funkcjonalnego. Ten test sprawdza podstawową funkcjonalność różnych kombinacji ustawień aparatu. (np. Flash, ekspozycja, WB, scena, rozmiar obrazu 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 medió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ę powiedzie, zwróci dane 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 spowoduje 200 razy otwarcie i zwolnienie podglądu aparatu. Po 20 iteracjach zostanie zarejestrowany ps mediaserver, a po 200 iteracjach zostanie porównany sposób wykorzystania pamięci. Test zakończy się niepowodzeniem, jeśli różnica będzie większa niż 150 tys. zł.
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 jednostek mediów
Polecenia do uruchamiania testów jednostkowych są podobne. Na przykład w przypadku pliku CameraMetadataTest.java będzie to:
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 działania aparatu i nagrywarki wideo.
Uruchom polecenie testowe:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
Wszystkie testy powinny być zaliczone.
Testy ręczne TestingCam
Aplikację TestingCam należy uruchomić ręcznie, wykonując te czynności.
Kod źródłowy TestingCam: pdk/apps/TestingCamera/
ostrość nieskończoności z pochyleniem aparatu
Uruchom aplikację TestingCam, włącz podgląd i upewnij się, że tryb autofokusa jest ustawiony na „nieskończoność”. Za pomocą przycisku Zrób zdjęcie rób zdjęcia odległych obiektów (co najmniej 10 m od aparatu) z kamerą skierowaną poziomo, w górę (blisko pionu) i w dół (blisko pionu). Przykładem zdjęcia w górę może być zdjęcie liści lub gałęzi drzewa z poziomej perspektywy, a przykładem zdjęcia w dół – zdjęcie ulicy z dachu budynku. W każdym przypadku obiekt w dalszym planie powinien być ostry i ostre. Ujęcia możesz zapisywać i wyświetlać w widoku galerii, aby łatwiej je powiększać i sprawdzać ostrość.
Pamiętaj, że aby aparat z silnikiem krokowym VCM mógł przejść ten test, musi mieć system sterowania AF z zamkniętą pętlą lub jakiś rodzaj korekty oprogramowania, który wykorzystuje dane z akcelerometru do określania orientacji aparatu. Potrzebna jest też niezawodna kalibracja fabryczna pozycji nieskończoności obiektywu.
Testy ręczne TestingCam2
Aplikację TestingCam2 należy uruchomić ręcznie, wykonując te czynności. Źródło TestingCam2: pdk/apps/TestingCamera2/
Przechwytywanie w formacie JPEG
Uruchom aplikację TestingCam2 i kliknij przycisk JPEG. Obraz wyświetlany po prawej stronie wizjera powinien być taki sam jak obraz w wizjerze, w tym mieć taką samą orientację.