Elenco di controllo per il test HAL della fotocamera

Questa pagina 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 dell'HAL della fotocamera con difetti minimi. Sebbene si tratti di un'aggiunta volontaria alla Android Compatibility Test Suite (CTS), 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 (Hardware Abstraction Layer) 3 della fotocamera Android. Quando è conforme a tutti gli elementi nell'elenco di controllo, l'implementazione del 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.

Specifica 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 lista di controllo. Gli implementatori di Camera HAL (ad esempio i fornitori di AP) dovrebbero esaminare la specifica Camera HAL3 riga per riga e garantire che i loro dispositivi siano conformi ad essa.

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

Tipi di test della fotocamera

Ecco i principali tipi di test disponibili per l'ultima fotocamera Android insieme ai riferimenti alle istruzioni associate di seguito:

Tutti questi tipi di test sono descritti in dettaglio di seguito. Questi test sono presentati nell'ordine cronologico in cui si prevede che gli OEM li eseguano.

Ad esempio, se un dispositivo non supera i test nativi, sicuramente non supererà i successivi test Compatibility Test Suite (CTS). E se un dispositivo non supera il 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 del 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, consultare Vendor Test Suite .

Test della Compatibility Test Suite (CTS).

I test CTS (Camera Android Compatibility Test Suite) 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 fotocamera è: platform/cts .

Quando si esegue CTS della 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 fotocamere esterne includono: Logitech HD Pro Webcam C920 e Microsoft LifeCam HD-3000 .

Vedere l' introduzione al 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 della 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 . Ogni test risiede nella sottodirectory tests/scene # .

Per ulteriori informazioni su come impostare ed eseguire i test, vedere Camera ITS .

Per le descrizioni delle scene e dei test, vedere Test ITS della telecamera .

I test ITS passano o falliscono. Tutti i test obbligatori in ciascuna cartella di scena devono essere superati. I test non obbligatori possono fallire e conteggiare comunque come superati in CtsVerifier .

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

Test sulla struttura dei media

Supera tutti i test multimediali relativi alla fotocamera in MediaFrameworkTest. Tieni presente che questi test richiedono che mediaframeworktest.apk sia installato sul dispositivo Android. Dovrai make mediaframeworktest e quindi utilizzare adb per installare il file .apk risultante. I comandi di esempio sono inclusi di seguito.

Il percorso di partenza per i test sui framework multimediali relativi a Camera è: 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 fornitore.

Trova tutti i test nella seguente directory 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/

Esegui test di Media Framework

Per vedere tutti i test disponibili::

adb shell pm list instrumentation

Ciò 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 ).

Ad esempio:

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

Puoi quindi passare ciascun componente allo 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

Tieni presente che, sebbene il percorso della classe sia il pacchetto Java + il nome della classe, il pacchetto di strumentazione 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 del test runner.

Per eseguire una singola classe di test, superare la classe -e argomento, in questo modo:

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 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 esempio, flash, esposizione, bilanciamento del bianco, scena, dimensioni 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 multimediale

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, il risultato sarà un output simile a:

-----

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

OK (11 tests)

-----

Test delle prestazioni multimediali

Questo test della memoria di anteprima 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 è disponibile in: /sdcard/mediaMemOutput.txt

Test delle unità multimediali

I comandi per eseguire 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'

Test di stress sui media

Questo test serve a sottolineare l'acquisizione delle immagini 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 essere superati.

Test manuali TestingCam

L'app TestingCam deve essere eseguita manualmente effettuando i seguenti controlli. 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 , scattare foto 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 di ripresa verso l'alto potrebbe essere foglie/rami alti di un albero dal basso e un esempio di ripresa verso il 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 controllare 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 oppure 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 dell'infinito dell'obiettivo.

Test manuali TestingCam2

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

Acquisizione JPEG

Avvia TestingCam2 e premi il pulsante JPEG . L'immagine che appare a destra dell'immagine nel mirino dovrebbe apparire identica al mirino, incluso avere lo stesso orientamento.