In questa pagina sono elencati tutti i test disponibili per valutare l'HAL (Hardware Abstraction Layer) della fotocamera Android. È destinata ai produttori di apparecchiature originali (OEM) e ai fornitori di processori applicativi (AP) per garantire la corretta implementazione dell'HAL della fotocamera con il minimo di difetti. Sebbene si tratti di un'aggiunta facoltativa alla Compatibility Test Suite (CTS) di Android, aumenta notevolmente la copertura dei test della fotocamera e sicuramente identificherà potenziali bug.
Superando questi test, gli OEM verificano se hanno integrato correttamente le interfacce HAL (Hardware Abstraction Layer) 3 della fotocamera Android. Se un'implementazione del dispositivo è conforme a tutti gli elementi della checklist, può essere considerata completa rispetto alle interfacce HAL della fotocamera Android. A sua volta, ciò consentirà a un dispositivo di
supportare correttamente il
android.hardware.camera2 pacchetto su cui si basano le
app della fotocamera.
Specifiche di Camera HAL3
Le specifiche di Camera HAL3 di Android sono 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 checklist. Gli implementatori di Camera HAL (ad es. i fornitori di AP) devono esaminare le specifiche di Camera HAL3 riga per riga e assicurarsi che i loro dispositivi siano conformi.
Le specifiche HAL attuali sono definite in questi file all'interno del PDK (Platform Development Kit) generico di Android 5.0 e versioni successive:
- Interfaccia e specifiche di Camera HAL 3.x:
hardware/libhardware/include/hardware/camera3.h,hardware/libhardware/include/hardware/camera_common.h - Specifiche dei metadati di Camera HAL 3.x:
system/media/camera/docs/docs.html - Interfaccia e specifiche del formato pixel HAL:
system/core/libsystem/include/system/graphics.h
Tipi di test della fotocamera
Di seguito sono riportati i tipi principali di test disponibili per l'ultima fotocamera Android, insieme ai riferimenti alle istruzioni associate:
- Vendor Test Suite (VTS): test che verificano direttamente l'interfaccia HAL della fotocamera
- Compatibility Test Suite (CTS): test Android standard e automatici per garantire la compatibilità del dispositivo. Per maggiori dettagli, vedi Compatibility Test Suite e Trade Federation Overview.
- Image Test Suite (ITS): esegui manualmente i test per garantire la correttezza delle immagini. Per maggiori dettagli, vedi Camera ITS.
- Test manuali di TestingCam:
esegui dall'origine in
pdk/apps/TestingCamera/ - Test manuali di TestingCam2.1
test: esegui dall'origine in
pdk/apps/TestingCamera2/
Tutti questi tipi di test sono descritti in dettaglio di seguito. Questi test vengono presentati nell'ordine cronologico in cui gli OEM sono tenuti a eseguirli.
Ad esempio, se un dispositivo non supera i test nativi, sicuramente non supererà i successivi test della Compatibility Test Suite (CTS). E se un dispositivo non supera i test CTS, è poco utile procedere con l'Image Test Suite (ITS). Ti consigliamo di risolvere i problemi in ogni tipo di test prima di procedere con il set di test successivo.
Test di Vendor Test Suite (VTS)
Android Vendor Test Suite (VTS) è una suite di test che funziona a livello di interfaccia HIDL. Per maggiori informazioni sull'utilizzo di VTS, vedi Vendor Test Suite.
Test di Compatibility Test Suite (CTS)
I test della Compatibility Test Suite (CTS) di Android per la 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 i test CTS della fotocamera per i dispositivi che supportano fotocamere esterne (ad es. webcam USB), devi collegare un dispositivo quando esegui i test CTS, altrimenti i test non verranno superati automaticamente. Esempi di fotocamere esterne includono: Logitech HD Pro Webcam C920 e Microsoft LifeCam HD-3000.
Per istruzioni generali sull'esecuzione dei test CTS, consulta l'introduzione a CTS e le relative sottopagine.
Test CTS per l'API android.hardware.Camera
Trova questi test della fotocamera in cts/tests/tests/:
hardware/src/android/hardware/cts/CameraTest.javahardware/src/android/hardware/cts/CameraGLTest.javahardware/src/android/hardware/cts/Camera_SizeTest.javapermission/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 fotocamera di 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 di Camera Image Test Suite (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 di Camera ITS si trovano nella
cts/apps/CameraITS directory.
Ogni test si trova in una tests/scene# sottodirectory.
Per maggiori informazioni su come configurare ed eseguire i test, vedi Camera ITS.
Per le descrizioni delle scene e dei test, vedi Test di Camera ITS.
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 verificano scenari non testati in CTS e sono un importante componente del piano di test HAL 3.2.
Test di 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 eseguire 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 di Media Framework relativi alla fotocamera è:
platform/frameworks/base
Trova il codice sorgente dei test qui:
frameworks/base/media/tests/MediaFrameworkTest
Per configurare questi test:
make mediaframeworktestadb 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 i test di Media Framework
Per visualizzare tutti i test disponibili:
adb shell pm list instrumentation
Verranno visualizzati 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)
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 runner di test
(MediaFramework).
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 nel seguente modo:
adb shell am instrument -w component.name
Dove component.name è uguale al valore estratto
sopra. Ad esempio:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Tieni presente che, sebbene il percorso della classe sia il nome del pacchetto Java + il nome della classe, 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 risiede la classe del runner di test.
Per eseguire una singola classe di test, passa l'argomento -e class
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 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, bilanciamento del bianco, 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 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'
Se l'operazione va a buon fine, viene generato 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 verrà confrontato l'utilizzo della memoria dopo 200 iterazioni. Il test non verrà superato 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à multimediali
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 multimediali
Questo test serve a stressare 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 manuali di TestingCam
L'app TestingCam deve essere eseguita manualmente con i seguenti controlli.
L'origine di TestingCam è qui: pdk/apps/TestingCamera/
Messa a fuoco all'infinito con l'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 (almeno 10 m di distanza) con la fotocamera puntata orizzontalmente, verso l'alto (quasi verticale) e verso il basso (quasi verticale); un esempio di scatto verso l'alto potrebbe essere foglie/rami alti 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 distante deve essere nitido e a fuoco. Salva e visualizza gli scatti nella visualizzazione della galleria in modo da poter ingrandire e ispezionare più facilmente la nitidezza.
Tieni presente che, affinché una fotocamera con un attuatore VCM superi questo test, è necessario un sistema di controllo AF a circuito chiuso oppure una sorta di correzione software basata sull'utilizzo dei dati dell'accelerometro per determinare l'orientamento della fotocamera. Sarà necessaria anche una calibrazione di fabbrica affidabile della posizione all'infinito dell'obiettivo.
Test manuali di TestingCam2
L'app TestingCam2 deve essere eseguita manualmente, con i seguenti controlli. L'origine 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 apparire uguale al mirino, incluso lo stesso orientamento.