Testare l'HAL della fotocamera

In questa pagina sono elencati tutti i test disponibili per valutare l'hardware abstraction layer (HAL) della videocamera Android. È destinato ai produttori di apparecchiature originali (OEM) e ai fornitori di processori per applicazioni (AP) per garantire la corretta implementazione dell'HAL della fotocamera con difetti minimi. Sebbene si tratti di un'aggiunta volontaria alla suite di test di compatibilità (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 del livello di astrazione hardware (HAL) 3 della fotocamera di Android. Se tutti gli elementi della lista di controllo sono conformi, l'implementazione di un dispositivo può essere considerata completa rispetto alle interfacce HAL della fotocamera Android. In questo modo, un dispositivo potrà supportare correttamente il pacchetto android.hardware.camera2 su cui si basano le app per la fotocamera.

Specifiche HAL3 della fotocamera

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

La specifica HAL attuale è definita in questi file all'interno del kit di sviluppo della piattaforma Android (PDK) generico di Android 5.0 e versioni successive:

Tipi di test della videocamera

Di seguito sono riportati i tipi principali di test disponibili per l'ultima videocamera Android e i riferimenti alle istruzioni associate:

Tutti questi tipi di test sono descritti in dettaglio di seguito. Questi test vengono presentati in ordine cronologico, ovvero nell'ordine in cui i produttori OEM devono eseguirli.

Ad esempio, se un dispositivo non supera i test nativi, sicuramente non supererà i successivi test del Compatibility Test Suite (CTS). Se un dispositivo non supera il CTS, è inutile procedere con l'ITS (Image Test Suite). Ti consigliamo di risolvere gli errori in ogni tipo di test prima di procedere con il set successivo 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, vedi Vendor Test Suite.

Test della suite di test di compatibilità (CTS)

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

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

Quando esegui il CTS della videocamera per i dispositivi che supportano videocamere esterne (ad esempio webcam USB), devi collegare un dispositivo quando esegui il CTS, altrimenti i test non andranno a buon fine automaticamente. Esempi di videocamere esterne includono: Logitech HD Pro Webcam C920 e Microsoft LifeCam HD-3000.

Consulta l'introduzione a CTS e le relative 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 videocamera di CTS Verifier

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

Test della suite di test delle immagini (Image Test Suite, ITS)

, che non è più supportata.

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

L'infrastruttura e i test ITS della fotocamera 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 Camera ITS.

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

I test ITS vengono superati o non superati. Tutti i test obbligatori in ogni cartella di scene devono essere superati. I test non obbligatori possono non essere superati e comunque essere considerati superati in CtsVerifier.

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

Test del framework multimediale

Supera tutti i test multimediali relativi alla videocamera 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 esempi di comandi.

Il percorso iniziale per i test del framework multimediale correlati 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 framework multimediale

Per visualizzare tutti i test disponibili:

adb shell pm list instrumentation

In questo modo otterrai risultati simili a questi:

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 test runner (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, mentre il percorso delle classi è il nome della classe e del pacchetto Java, il pacchetto di strumentazione non è necessariamente lo stesso del pacchetto Java. Assicurati di utilizzare il pacchetto AndroidManifest.xml quando concateni il nome del componente, non il pacchetto Java in cui si trova la classe dell'esecutore del test.

Per eseguire una singola classe di test, passa l'argomento -e class , come segue:

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 segno di cancelletto (#) e il nome del metodo (in questo caso, testConnectPro) al nome della classe, nel seguente modo:

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

Test funzionali delle impostazioni dei contenuti multimediali

Ecco un esempio di esecuzione di un test funzionale. Questo test verifica la funzionalità di base di diverse combinazioni di impostazioni della videocamera. (ad es. flash, esposizione, bilanciamento del bianco, 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 è simile al seguente:

-----

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

OK (11 tests)

-----

Test del rendimento dei contenuti multimediali

Questo test di anteprima della memoria aprirà e rilascerà l'anteprima della videocamera 200 volte. Ogni 20 iterazioni, lo snapshot di ps mediaserver verrà registrato e verrà confrontato l'utilizzo di memoria dopo 200 iterazioni. Il test non andrà a buon fine 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

Puoi trovare un output più dettagliato 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 sarebbe:

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

Test di stress dei media

Questo test serve a sollecitare l'acquisizione di immagini e la registrazione di 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 devono essere superati.

Test manualiTest della videocamera

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

Messa a fuoco all'infinito con inclinazione della videocamera

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 (almeno 10 metri) con la fotocamera puntata orizzontalmente, verso l'alto (quasi in verticale) e verso il basso (quasi in verticale). Un esempio di scatto verso l'alto potrebbe essere la parte superiore delle foglie/dei rami di un albero dal basso e un esempio di scatto verso il basso potrebbe essere la strada vista dal tetto di un edificio. In tutti i casi, il soggetto lontano deve essere nitido e a fuoco. Salva e visualizza gli scatti nella visualizzazione galleria per ingrandirli e ispezionare più facilmente la nitidezza.

Tieni presente che, per superare questo test, una videocamera con attuatore VCM richiede un sistema di controllo AF a circuito chiuso oppure una correzione SW basata sull'utilizzo dei dati dell'accelerometro per determinare l'orientamento della videocamera. Sarà inoltre necessaria una calibrazione di fabbrica affidabile della posizione all'infinito dell'obiettivo.

Test manualiTest Cam2

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

Acquisizione JPEG

Avvia TestingCam2 e premi il pulsante JPEG. L'immagine che appare a destra dell'immagine del mirino deve essere identica al mirino, incluso l'orientamento.