Elenco di controllo per il test dell'HAL per videocamera

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 convalidano se hanno integrato correttamente le interfacce HAL (HAL) 3 della fotocamera Android. Se rispetti tutti gli elementi dell'elenco di controllo, l'implementazione del dispositivo può essere considerata completa rispetto alle interfacce della fotocamera Android HAL. Ciò consentirà a un dispositivo di supportare correttamente il pacchetto android.hardware.camera2 su cui si basano le app per la videocamera.

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 gli errori in ogni tipo di test prima di passare all'insieme di test successivo.

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 (Android Compatibility Test Suite) della fotocamera (CTS) si focalizzano sulla compatibilità del dispositivo. Per informazioni sulla configurazione di un ambiente di test, consulta 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 alla CTS e le relative pagine secondarie per istruzioni generali sull'esecuzione di CTS.

Test CTS per l'API android.hardware.Camera

Trova questi test della videocamera 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

Puoi trovare questi test della fotocamera nella sezione: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Test di Image Test Suite (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 la pagina Fotocamera ITS.

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

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 testano scenari che non vengono testati in CTS e sono un componente importante del piano di test HAL 3.2.

Test del Media Framework

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/

Esecuzione dei test del Media Framework

Per visualizzare tutti i test disponibili:

adb shell pm list instrumentation

I risultati saranno simili ai seguenti:

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 un test class, 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 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 della 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 della videocamera

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

Messa a fuoco su 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 fotocamera con attuatore VCM avrà bisogno di un sistema di controllo AF a circuito chiuso oppure di una qualche tipo di correzione SW basata sull'uso 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 eseguendo 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 a quella del mirino, incluso lo stesso orientamento.