Elenco di controllo per i test HAL della fotocamera

In questa pagina sono elencati tutti i test disponibili per valutare l'HAL (Hardware Abstraction Layer) della fotocamera Android. È destinato ai produttori di apparecchiature originali (OEM) e ai fornitori di processori di applicazioni (AP) in modo che possano garantire l'implementazione corretta dell'HAL della fotocamera con difetti minimi. Sebbene si tratti di un'aggiunta volontaria alla Compatibility Test Suite (CTS) di Android, aumenta notevolmente la copertura dei test della fotocamera e identificherà sicuramente potenziali bug.

Superando questi test, gli OEM verificano se hanno integrato correttamente le interfacce HAL 3 (Hardware Abstraction Layer) per l'hardware delle videocamere Android. Se è conforme a tutti gli elementi del checklist, un'implementazione del dispositivo può essere considerata completa rispetto alle interface HAL della fotocamera Android. In questo modo, un dispositivo potrà supportare correttamente il pacchetto android.hardware.camera2 su cui si basano le app per videocamere.

Specifiche HAL3 della videocamera

La specifica Android Camera HAL3 è la fonte autorevole di informazioni sui requisiti dei dispositivi. Questa pagina fornisce un riepilogo di tutti i test che possono essere utilizzati come elenco di controllo. Gli implementatori di Camera HAL (ad es. i fornitori di AP) devono esaminare la specifica Camera HAL3 riga per riga e assicurarsi che i loro dispositivi siano conformi.

La specifica HAL corrente è definita in questi file all'interno del PDK (Platform Development Kit) generico Android 5.0 e versioni successive:

Tipi di test della videocamera

Di seguito sono riportati i principali tipi di test disponibili per la videocamera Android più recente, insieme ai riferimenti alle istruzioni associate:

Tutti questi tipi di test sono descritti in dettaglio di seguito. Questi test sono presentati nell'ordine cronologico in cui gli OEM dovrebbero eseguirli.

Ad esempio, se un dispositivo non supera i test nativi, non supererà di certo i test successivi della Compatibility Test Suite (CTS). Se un dispositivo non supera il CTS, è poco utile procedere con l'ITS (Image Test Suite). Ti consigliamo di risolvere i problemi in ogni tipo di test prima di passare al successivo insieme di test.

Test della suite di test del fornitore (VTS)

La suite di test del fornitore Android (VTS) è una suite di test che funziona a livello di interfaccia HIDL. Per ulteriori informazioni sull'utilizzo di VTS, consulta Vendor Test Suite.

Test della suite di test di compatibilità (CTS)

I test della suite di test di compatibilità Android (CTS) della fotocamera si concentrano sulla compatibilità del dispositivo. Per informazioni sulla configurazione di un ambiente di test, vedi Configurare CTS.

Il percorso iniziale per i test CTS della fotocamera è: platform/cts.

Quando esegui il CTS della fotocamera per i dispositivi che supportano le fotocamere esterne (ad esempio le webcam USB), devi collegare un dispositivo durante l'esecuzione del CTS, altrimenti i test non andranno a buon fine automaticamente. Alcuni esempi di videocamere esterne sono: Logitech HD Pro Webcam C920 e Microsoft LifeCam HD-3000.

Consulta l'introduzione al CTS e le relative sottopagine per istruzioni generali sull'esecuzione del 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 videocamera di CTS Verifier

Trova questi test della fotocamera in: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Test della suite di test delle immagini (ITS)

deprecata.

I test della suite di test delle immagini della fotocamera (ITS) si concentrano sulla correttezza delle immagini. Per eseguire i test, esegui gli script Python su una workstation con il dispositivo Android collegato tramite USB.

L'infrastruttura e i test ITS della videocamera si trovano nella directory cts/apps/CameraITS. Ogni test si trova in una sottodirectory tests/scene#.

Per ulteriori informazioni su come configurare ed eseguire i test, consulta ITS della videocamera.

Per le descrizioni delle scene e dei test, vedi Test ITS della videocamera.

I test ITS possono essere superati o non superati. Tutti i test obbligatori in ogni cartella della scena devono essere superati. I test non obbligatori possono non riuscire e comunque essere conteggiati come superati in CtsVerifier.

I test ITS verificano scenari che non vengono testati in CTS e sono un componente importante del piano di test HAL 3.2.

Test del framework multimediale

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 poi utilizzare adb per installare il file APK risultante. Di seguito sono riportati alcuni comandi di esempio.

Il percorso iniziale per i test del framework multimediale relativi alla fotocamera è: platform/frameworks/base

Trova il codice sorgente dei test qui: frameworks/base/media/tests/MediaFrameworkTest

Per configurare 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 fornitore.

Trova tutti i test nella seguente directory o nelle relative sottodirectory:

frameworks/base/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest

Ogni sottodirectory rappresenta una classe di test:

  • functional/
  • integration/
  • performance/
  • power/
  • stress/
  • unit/

Esegui test del Media Framework

Per visualizzare tutti i test disponibili:

adb shell pm list instrumentation

I risultati saranno 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)

Identifica ed estrai il componente (tra instrumentation: e (target=com.android.mediaframeworktest) da ogni riga di test. Il componente è composto dal nome del pacchetto di destinazione (com.android.mediaframeworktest) e dal nome del programma di test (MediaFrameworkTestRunner).

Ad esempio:

com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
com.android.mediaframeworktest/.MediaRecorderStressTestRunner
com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner
com.android.mediaframeworktest/.MediaFrameworkPowerTestRunner

Puoi quindi passare ogni componente a adb shell am instrument come segue:

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

Tieni presente che, sebbene il percorso della classe sia il nome del pacchetto Java + della classe, il pacchetto di strumenti non è necessariamente uguale al pacchetto Java. Assicurati di utilizzare il pacchetto AndroidManifest.xml quando concatena il nome del componente, non il pacchetto Java in cui risiede la classe dell'esecutore del test.

Per eseguire un singolo gruppo di test, passa l'argomento class -e, ad esempio:

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, come segue:

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

Test funzionali delle impostazioni multimediali

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, WB, scena, dimensioni dell'immagine e geoTag)

Esegui il comando di test:

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 dei contenuti multimediali

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 esito positivo, l'output sarà simile al seguente:

-----

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

OK (11 tests)

-----

Test sul rendimento dei contenuti multimediali

Questo test di memoria dell'anteprima aprirà e rilascierà l'anteprima della fotocamera 200 volte. In ogni 20 iterazioni, verrà registrato lo snapshot di ps mediaserver e verrà confrontato l'utilizzo della memoria diverso dopo 200 iterazioni. Il test non supererà se la differenza è superiore a 150 km.

Esegui il comando di test:

adb shell am instrument -w -r  -e class com.android.mediaframeworktest.performance.MediaPlayerPerformance#testCameraPreviewMemoryUsage com.android.mediaframeworktest/.MediaFrameworkPerfTestRunner

Un output più dettagliato è disponibile in: /sdcard/mediaMemOutput.txt

Test delle unità media

I comandi per eseguire i test delle unità sono tutti simili. Ad esempio, per CameraMetadataTest.java, il comando sarà:

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

Stress test dei contenuti multimediali

Questo test ha lo scopo di sottoporre a stress l'acquisizione di immagini e la registrazione video della fotocamera.

Esegui il comando di test:

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

Tutti i test dovrebbero essere superati.

Test manuali di TestingCam

L'app TestingCam deve essere eseguita manualmente con i seguenti controlli. La fonte di TestingCam è disponibile qui: pdk/apps/TestingCamera/

Messa a fuoco all'infinito 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, scatta foto di soggetti distanti (ad almeno 10 m di distanza) con la fotocamera rivolta orizzontalmente, verso l'alto (quasi in verticale) e verso il basso (quasi in verticale). Un esempio di foto verso l'alto potrebbe essere una foto di foglie/rami di un albero dall'alto, mentre un esempio di foto verso il basso potrebbe essere la strada vista dal tetto di un edificio. In ogni caso, il soggetto lontano deve essere nitido e a fuoco. Salva e visualizza gli scatti nella visualizzazione galleria per aumentare lo zoom e controllare più facilmente la nitidezza.

Tieni presente che, per superare questo test, una videocamera con un attuatore VCM richiede un sistema di controllo AF a ciclo chiuso o una sorta di correzione del software in base all'utilizzo dei dati dell'accelerometro per determinare l'orientamento della fotocamera. Sarà inoltre necessaria una calibrazione di fabbrica affidabile della posizione infinito dell'obiettivo.

Test manuali di TestingCam2

L'app TestingCam2 deve essere eseguita manualmente, con i seguenti controlli. Il codice sorgente di TestingCam2 è disponibile qui: pdk/apps/TestingCamera2/

Acquisizione JPEG

Avvia TestingCam2 e premi il pulsante JPEG. L'immagine visualizzata a destra dell'immagine del mirino deve essere uguale al mirino, incluso lo stesso orientamento.