Questo documento elenca tutti i test disponibili per valutare il livello di astrazione hardware (HAL) della fotocamera Android. È destinato ai produttori di apparecchiature originali (OEM) e ai fornitori di processori applicativi (AP), in modo che possano garantire la corretta implementazione della fotocamera HAL con difetti minimi. Sebbene questa sia un'aggiunta volontaria all'Android Compatibility Test Suite (CTS), aumenta notevolmente la copertura dei test della fotocamera e identificherà sicuramente potenziali bug.
Superando questi test, gli OEM convalidano se hanno integrato correttamente le interfacce HAL (Hardware Abstraction Layer) 3 della fotocamera Android. Quando è conforme a tutti gli elementi nell'elenco di controllo, l'implementazione di un dispositivo può essere considerata completa rispetto alle interfacce HAL della fotocamera Android. Ciò a sua volta consentirà a un dispositivo di supportare correttamente il pacchetto android.hardware.camera2
su cui si basano le app della fotocamera.
Specifiche della fotocamera HAL3
La specifica Android Camera HAL3 è l'autorevole fonte di informazioni su ciò che i dispositivi devono soddisfare; questa pagina fornisce un riepilogo di tutti i test che possono essere utilizzati come checklist. Gli implementatori di Camera HAL (ad es. i fornitori di AP) dovrebbero seguire la specifica Camera HAL3 riga per riga e assicurarsi che i loro dispositivi siano conformi ad essa.
L'attuale specifica HAL è definita in questi file all'interno di Android 5.0 e versioni successive Android Platform Development Kit (PDK) generico:
- Interfaccia e specifiche della fotocamera HAL 3.x :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Specifiche dei metadati della fotocamera HAL 3.x :
system/media/camera/docs/docs.html
- Interfaccia e specifiche in formato pixel HAL :
system/core/libsystem/include/system/graphics.h
Tipi di test della fotocamera
Di seguito sono riportati i principali tipi di test disponibili per l'ultima fotocamera Android insieme ai riferimenti alle istruzioni associate di seguito:
- Vendor Test Suite (VTS) : test che testano direttamente l'interfaccia HAL della telecamera
- Compatibility Test Suite (CTS) : test Android standard e automatizzati per garantire la compatibilità dei dispositivi - vedere l' introduzione CTS e la panoramica della Trade Federation
- Image Test Suite (ITS) : esegui manualmente i test per garantire la correttezza dell'immagine: consulta i file
README
di primo livello e specifici del test etutorial.py
per le istruzioni di configurazione - Test manuali di TestingCam : eseguiti dal sorgente in
pdk/apps/TestingCamera/
- Test manuali TestingCam2.1 : Esegui dal sorgente in
pdk/apps/TestingCamera2/
Tutti questi tipi di test sono descritti in dettaglio di seguito. Questi test sono presentati nell'ordine cronologico in cui ci si aspetta che gli OEM li eseguano.
Ad esempio, se un dispositivo non supera i test nativi, fallirà sicuramente i successivi test di Compatibility Test Suite (CTS). E se un dispositivo non riesce a CTS, è poco utile procedere all'Image Test Suite (ITS). Si consiglia di risolvere gli errori in ciascun tipo di test prima di procedere alla serie di test successiva.
Test della Vendor Test Suite (VTS).
Android Vendor Test Suite (VTS) è una suite di test che funziona a livello di interfaccia HIDL. Per ulteriori informazioni sull'utilizzo di VTS, vedere Vendor Test Suite .
Test di compatibilità Test Suite (CTS).
I test della Camera Android Compatibility Test Suite (CTS) si concentrano sulla compatibilità del dispositivo. Per informazioni sulla configurazione di un ambiente di test, vedere Configurazione di CTS .
Il percorso di partenza per i test CTS della telecamera è: platform/cts
.
Quando si esegue CTS fotocamera per dispositivi che supportano fotocamere esterne (come webcam USB), è necessario che un dispositivo sia collegato durante l'esecuzione di CTS, altrimenti i test falliranno automaticamente. Esempi di telecamere esterne includono: Logitech HD Pro Webcam C920 e Microsoft LifeCam HD-3000 .
Vedere l' introduzione di CTS e le sue sottopagine per istruzioni generali sull'esecuzione di CTS.
Test CTS per l'API android.hardware.Camera
Trova questi test della fotocamera in 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
Test CTS per l'API android.hardware.camera2
Trova questi test della fotocamera in cts/tests/tests/
:
-
hardware/src/android/hardware/camera2/cts/*
-
permission/src/android/permission/cts/Camera2PermissionTest.java
Test della telecamera CTS Verifier
Trova questi test della fotocamera in: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
Test di Image Test Suite (ITS).
I test Camera Image Test Suite (ITS) si concentrano sulla correttezza dell'immagine. Per eseguire i test, esegui gli script Python su una workstation con il dispositivo Android connesso tramite USB.
L'infrastruttura e i test di Camera ITS si trovano nella directory cts/apps/CameraITS
. Ciascun test risiede in una sottodirectory 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
Per ulteriori informazioni su come impostare ed eseguire i test, vedere il file PDF CameraITS
in cts/apps/CameraITS
. Vedi tutorial.py
nella sottodirectory tests
per una guida su come usare gli script.
I test ITS richiedono un ambiente Linux. Per i dettagli sulle versioni specifiche di Python necessarie per eseguire i test ITS, vedere il file PDF CameraITS
per la versione o anche le note di rilascio di Android 12 per Android 12.
La configurazione consigliata per le scene statiche è descritta in Camera ITS-in-a-box . L'impostazione consigliata per la scena sensor_fusion è descritta nella Guida rapida di Sensor Fusion Box .
Per eseguire ITS manualmente, prepara un semplice ambiente fisico con un obiettivo specifico e riutilizzabile come un muro bianco, una scheda grigia e una lampada da tavolo. Monta il dispositivo Android su un treppiede ed esegui gli script per testare le funzioni della fotocamera. La maggior parte dei test sono superati o falliti, ma alcuni offrono metriche.
Questi script testano scenari che non sono testati in CTS e sono una componente importante del piano di test HAL 3.2.
I test ITS passano o falliscono. Tutti i test obbligatori in ogni cartella di scena devono essere superati. I test non obbligatori possono fallire e continuare a contare come un passaggio in CtsVerifier
.
Per le descrizioni delle scene e dei test, vedere Test ITS della telecamera .
Test della struttura dei media
Supera tutti i test multimediali relativi alla fotocamera in MediaFrameworkTest. Tieni presente che questi test richiedono l'installazione di mediaframeworktest.apk sul dispositivo Android. Dovrai make mediaframeworktest
e quindi utilizzare adb per installare il .apk risultante. Di seguito sono inclusi comandi di esempio.
Il percorso di partenza per i test del framework dei media relativi alla fotocamera è: platform/frameworks/base
Trova il codice sorgente per i test qui: frameworks/base/media/tests/MediaFrameworkTest
Per impostare questi test:
make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk
Dove la variabile name rappresenta la directory contenente il prodotto del venditore.
Trova tutti i test nella directory seguente o nelle sue sottodirectory:
frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest
Ogni sottodirectory rappresenta una classe di test:
-
functional/
-
integration/
-
performance/
-
power/
-
stress/
-
unit/
Esecuzione di test di Media Framework
Per vedere tutti i test disponibili:
adb shell pm list instrumentation
Questo produrrà risultati simili a:
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)
Identificare ed estrarre il componente (tra instrumentation:
e (target=com.android.mediaframeworktest)
da ciascuna riga di test. Il componente è composto dal nome del pacchetto di destinazione ( com.android.mediaframeworktest
) e dal nome del test runner ( MediaFramework TestRunner
MediaFramework TestRunner
).
Per esempio:
com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner com.android.mediaframeworktest/.MediaRecorderStressTestRunner com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner
Puoi quindi passare ogni componente ad adb shell am instrument
in questo modo:
adb shell am instrument -w component.name
Dove component.name
è uguale al valore estratto sopra. Per esempio:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Nota, mentre il percorso della classe è il pacchetto Java + il nome della classe, il pacchetto di strumentazione non è necessariamente lo stesso del pacchetto Java. Assicurati di utilizzare il pacchetto AndroidManifest.xml durante la concatenazione del nome del componente, non il pacchetto Java in cui risiede la classe test runner.
Per eseguire una singola classe di test, superare la classe -e
adb shell am instrument -e class com.android.mediaframeworktest.integration.CameraBinderTest -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Per eseguire un solo metodo in una classe di test, aggiungi un cancelletto (#) e il nome del metodo (in questo caso, testConnectPro
) al nome della classe, in questo modo:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Test funzionali delle impostazioni dei supporti
Ecco un esempio di esecuzione di un test funzionale. Questo test verifica la funzionalità di base di diverse combinazioni di impostazioni della fotocamera. (ad es. Flash, esposizione, bilanciamento del bianco, scena, dimensione dell'immagine e geoTag)
Esegui il comando di prova:
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
Test di integrazione con i media
Ecco un esempio di esecuzione di un test di integrazione, in questo caso mediaframeworktest/integration/CameraBinderTest.java e mediaframeworktest/CameraStressTestRunner.java:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
In caso di successo, l'output è simile a:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Test di performance dei media
Questo test di anteprima della memoria aprirà e rilascerà l'anteprima della fotocamera per 200 volte. In ogni 20 iterazioni, verrà registrata l'istantanea di ps mediaserver e confronterà l'utilizzo della memoria diverso dopo 200 iterazioni. Il test fallirà se la differenza è maggiore di 150kM.
Esegui il comando di prova:
adb shell am instrument -w -r -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
Un output più dettagliato può essere trovato in: /sdcard/mediaMemOutput.txt
Test delle unità multimediali
I comandi per eseguire gli unit test sono tutti simili. Ad esempio, per CameraMetadataTest.java, il comando sarebbe:
adb shell am instrument -e class 'com.android.mediaframeworktest.unit.CameraMetadataTest' -w 'com.android.mediaframeworktest/.CameraStressTestRunner'
Prove di stress mediatico
Questo test serve a sottolineare l'acquisizione dell'immagine della fotocamera e la registrazione video.
Esegui il comando di prova:
adb shell am instrument -w com.google.android.camera.tests/com.android.camera.stress.CameraStressTestRunner
Tutti i test dovrebbero passare.
Test manuali di TestingCam
L'app TestingCam deve essere eseguita manualmente con i seguenti controlli eseguiti. La fonte di TestingCam è qui: pdk/apps/TestingCamera/
Messa a fuoco infinita con inclinazione della fotocamera
Avvia TestingCam, attiva l'anteprima e assicurati che la modalità di messa a fuoco automatica sia impostata su infinito. Utilizzando il pulsante Scatta foto , catturare scatti di soggetti distanti (almeno 10 m di distanza) con la fotocamera puntata orizzontalmente, verso l'alto (vicino alla verticale) e verso il basso (vicino alla verticale); un esempio dell'inquadratura dall'alto potrebbe essere foglie/rami alti di un albero da sotto e un esempio dell'inquadratura dal basso potrebbe essere la strada vista dal tetto di un edificio. In tutti i casi, il soggetto distante dovrebbe essere nitido e a fuoco. Salva e visualizza gli scatti nella vista galleria in modo da poter ingrandire e ispezionare la nitidezza più facilmente.
Si noti che affinché una fotocamera con un attuatore VCM superi questo test, sarà necessario un sistema di controllo AF a circuito chiuso o una sorta di correzione SW basata sull'utilizzo dei dati dell'accelerometro per determinare l'orientamento della fotocamera. Sarà inoltre necessaria una calibrazione di fabbrica affidabile della posizione infinito dell'obiettivo.
TestingCam2 manuali
L'app TestingCam2 deve essere eseguita manualmente, con i seguenti controlli eseguiti. La fonte per TestingCam2 è qui: pdk/apps/TestingCamera2/
Acquisizione JPEG
Avvia TestingCam2 e premi il pulsante JPEG . L'immagine che appare a destra dell'immagine del mirino dovrebbe apparire uguale a quella del mirino, incluso avere lo stesso orientamento.