Kamera HAL testi kontrol listesi

Bu belge, Android kamera donanım soyutlama katmanını (HAL) değerlendirmek için kullanılabilen tüm testleri listeler. Orijinal ekipman üreticileri (OEM'ler) ve uygulama işlemcisi (AP) satıcılarına yöneliktir, böylece kamera HAL'inin minimum kusurla doğru şekilde uygulanmasını sağlayabilirler. Bu, Android Uyumluluk Test Paketi'ne (CTS) isteğe bağlı bir ekleme olmasına rağmen, kamera testi kapsamını büyük ölçüde artırır ve kesinlikle olası hataları belirleyecektir.

OEM'ler bu testleri geçerek, Android kamera donanım soyutlama katmanı (HAL) 3 arabirimlerini düzgün şekilde entegre edip etmediklerini doğrular. Kontrol listesindeki tüm öğelerle uyumluyken, Android Kamera HAL arabirimlerine göre bir cihaz uygulaması tam olarak kabul edilebilir. Bu da, bir cihazın kamera uygulamalarının üzerine inşa ettiği android.hardware.camera2 paketini doğru şekilde desteklemesini sağlayacaktır.

Kamera HAL3 özelliği

Android Camera HAL3 spesifikasyonu, hangi cihazların karşılaması gerektiğine dair yetkili bilgi kaynağıdır; bu sayfa, kontrol listesi olarak kullanılabilecek tüm testlerin bir özetini sunar. Camera HAL uygulayıcıları (örneğin AP satıcıları), Camera HAL3 spesifikasyonunu satır satır gözden geçirmeli ve cihazlarının buna uygun olduğundan emin olmalıdır.

Geçerli HAL belirtimi, Android 5.0 ve sonraki genel Android Platform Geliştirme Kiti (PDK) içindeki bu dosyalarda tanımlanmıştır:

Kamera test türleri

En yeni Android kamera için mevcut olan başlıca test türleri ve aşağıdaki ilgili talimatlara referanslar aşağıda verilmiştir:

Bu test türlerinin tümü aşağıda ayrıntılı olarak açıklanmaktadır. Bu testler, OEM'lerin bunları gerçekleştirmesinin beklendiği kronolojik sırayla sunulur.

Örneğin, bir cihaz yerel testlerde başarısız olursa, sonraki Uyumluluk Test Paketi (CTS) testlerinde kesinlikle başarısız olacaktır. Ve eğer bir cihaz CTS'de başarısız olursa, Image Test Suite'e (ITS) ilerlemenin çok az faydası vardır. Bir sonraki test grubuna geçmeden önce her bir test türündeki hataları ele almanızı öneririz.

Satıcı Test Paketi (VTS) testleri

Android Vendor Test Suite (VTS), HIDL arayüz seviyesinde çalışan bir test paketidir. VTS'yi kullanma hakkında daha fazla bilgi için bkz. Vendor Test Suite .

Uyumluluk Test Paketi (CTS) testleri

Kamera Android Uyumluluk Test Paketi (CTS) testleri, cihaz uyumluluğuna odaklanır. Bir test ortamı kurma hakkında bilgi için, bkz. CTS'yi Kurma .

Kamera CTS testleri için başlangıç ​​yolu şudur: platform/cts .

Harici kameraları (USB web kameraları gibi) destekleyen aygıtlar için kamera CTS'sini çalıştırırken, CTS'yi çalıştırırken takılı bir aygıtınız olmalıdır, aksi takdirde testler otomatik olarak başarısız olur. Harici kamera örnekleri şunları içerir: Logitech HD Pro Webcam C920 ve Microsoft LifeCam HD-3000 .

CTS'yi çalıştırmayla ilgili genel talimatlar için CTS tanıtımına ve alt sayfalarına bakın.

android.hardware.Camera API için CTS testleri

Bu kamera testlerini cts/tests/tests/ altında bulun:

  • 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

android.hardware.camera2 API için CTS testleri

Bu kamera testlerini cts/tests/tests/ altında bulun:

  • hardware/src/android/hardware/camera2/cts/*
  • permission/src/android/permission/cts/Camera2PermissionTest.java

CTS Doğrulayıcı kamera testleri

Bu kamera testlerini şurada bulabilirsiniz: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

Görüntü Test Paketi (ITS) testleri

Camera Image Test Suite (ITS) testleri, görüntü doğruluğuna odaklanır. Testleri gerçekleştirmek için, Android cihazı USB üzerinden bağlı olan bir iş istasyonunda Python komut dosyalarını çalıştırın.

Camera ITS altyapısı ve testleri cts/apps/CameraITS dizininde bulunur. Her test bir tests/scene # alt dizininde bulunur.

Test ortamını kurmak için şunu çalıştırın:
extract root/out/host/linux-x86/cts-verfier/android-cts-verifier.zip
cd android-cts-verifier
adb install -r -g CtsVerifier.apk
cd CameraITS
source build/envsetup.sh

Testlerin nasıl kurulacağı ve çalıştırılacağı hakkında daha fazla bilgi için cts/apps/CameraITS içindeki CameraITS PDF dosyasına bakın. Komut dosyalarının nasıl kullanılacağına ilişkin bir kılavuz için tests alt dizinindeki tutorial.py bakın.

ITS testleri bir Linux ortamı gerektirir. ITS testlerini çalıştırmak için gereken belirli Python sürümleriyle ilgili ayrıntılar için, sürüm için CameraITS PDF dosyasına veya ayrıca Android 12 için Android 12 sürüm notlarına bakın.

Statik sahneler için önerilen kurulum, Camera ITS-in-a-box'ta açıklanmıştır. sensor_fusion sahnesi için önerilen kurulum, Sensor Fusion Box Hızlı Başlangıç ​​Kılavuzu'nda açıklanmıştır.

ITS'yi manuel olarak çalıştırmak için beyaz duvar, gri kart ve masa lambası gibi belirli, yeniden kullanılabilir bir hedef içeren basit bir fiziksel ortam hazırlayın. Android cihazını bir tripoda monte edin ve kamera işlevlerini test etmek için komut dosyalarını çalıştırın. Çoğu test başarılı veya başarısızdır, ancak bazıları metrikler sunar.

Bu komut dosyaları, CTS'de test edilmeyen ve HAL 3.2 test planının önemli bir bileşeni olan senaryoları test eder.

ITS testleri ya geçer ya da başarısız olur. Her sahne klasöründeki tüm zorunlu testler geçmelidir. Zorunlu olmayan testler başarısız olabilir ve yine de CtsVerifier başarılı sayılır.

Sahne ve test açıklamaları için bkz. Kamera ITS Testleri .

Medya Çerçevesi testleri

MediaFrameworkTest'te kamerayla ilgili tüm medya testlerini geçin. Lütfen unutmayın, bu testler Android cihazda mediaframeworktest.apk'nin kurulu olmasını gerektirir. make mediaframeworktest ve ardından ortaya çıkan .apk'yi yüklemek için adb kullanmanız gerekecektir. Örnek komutlar aşağıda yer almaktadır.

Kamera ile ilgili medya çerçevesi testleri için başlangıç ​​yolu şudur: platform/frameworks/base

Testlerin kaynak kodunu burada bulabilirsiniz: frameworks/base/media/tests/MediaFrameworkTest

Bu testleri ayarlamak için:

make mediaframeworktest
adb install out/target/product/name/data/app/mediaframeworktest.apk

name değişkeninin satıcının ürününü içeren dizini temsil ettiği yer.

Aşağıdaki dizinde veya alt dizinlerinde tüm testleri bulun:

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

Her alt dizin bir test sınıfını temsil eder:

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

Media Framework testlerini çalıştırma

Mevcut tüm testleri görmek için:

adb shell pm list instrumentation

Bu, aşağıdakilere benzer sonuçlar verecektir:

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)

Bileşeni tanımlayın ve ( instrumentation: ve (target=com.android.mediaframeworktest) her test satırından çıkarın. Bileşen, hedef paket adından ( com.android.mediaframeworktest ) ve test çalıştırıcı adından ( MediaFramework TestRunner ) oluşur. MediaFramework TestRunner ).

Örneğin:

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

Daha sonra her bileşeni şu şekilde adb shell am instrument iletebilirsiniz:

adb shell am instrument -w component.name

Burada component.name , yukarıdaki ayıklanan değere eşittir. Örneğin:

adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner

Lütfen, sınıf yolu Java paketi + sınıf adı olsa da, enstrümantasyon paketinin Java paketiyle aynı olması gerekmediğini unutmayın. Bileşen adını birleştirirken test çalıştırıcı sınıfının bulunduğu Java paketini değil, AndroidManifest.xml paketini kullandığınızdan emin olun.

Tek bir test sınıfı çalıştırmak için -e sınıfını geçin argüman, şöyle:

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

Bir test sınıfında yalnızca tek bir yöntemi çalıştırmak için, sınıf adına bir sayı (#) işareti ve yöntem adını (bu durumda testConnectPro ) ekleyin, şöyle:

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

Medya ayarları işlevsel testleri

İşte bir işlevsel test çalıştırması örneği. Bu test, farklı kamera ayarları kombinasyonlarının temel işlevlerini doğrular. (yani, Flash, pozlama, WB, sahne, resim boyutu ve geoTag)

Test komutunu çalıştırın:

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

Medya entegrasyon testleri

İşte bir entegrasyon testi örneği, bu durumda mediaframeworktest/integration/CameraBinderTest.java ve mediaframeworktest/CameraStrressTestRunner.java:

adb  shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'

Başarılı olursa, bu şuna benzer çıktı ile sonuçlanır:

-----

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

OK (11 tests)

-----

Medya performans testleri

Bu ön izleme bellek testi, kamera ön izlemesini 200 kez açacak ve serbest bırakacaktır. Her 20 yinelemede, ps mediaserver'ın anlık görüntüsü kaydedilecek ve 200 yinelemeden sonra farklı bellek kullanımını karşılaştıracaktır. Fark 150kM'den büyükse test başarısız olacaktır.

Test komutunu çalıştırın:

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

Daha ayrıntılı çıktı şurada bulunabilir: /sdcard/mediaMemOutput.txt

Medya birim testleri

Birim testlerini çalıştırma komutlarının tümü benzerdir. Örneğin, CameraMetadataTest.java için komut şöyle olacaktır:

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

Medya stres testleri

Bu test, kamera görüntüsü yakalama ve video kaydını vurgulamak içindir.

Test komutunu çalıştırın:

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

Tüm testler geçmelidir.

Manuel TestingCam testleri

TestingCam uygulaması, aşağıdaki kontroller gerçekleştirilerek manuel olarak çalıştırılmalıdır. TestingCam için kaynak burada: pdk/apps/TestingCamera/

Kamera eğimi ile sonsuz odak

TestingCam'i başlatın, önizlemeyi açın ve otomatik odak modunun sonsuz olarak ayarlandığından emin olun. Fotoğraf çek düğmesini kullanarak, uzak nesnelerin (en az 10 m uzaklıktan) çekimlerini fotoğraf makinesi yatay, yukarı (dikeye yakın) ve aşağı (dikeye yakın) olacak şekilde çekin; Yukarı doğru atışa bir örnek, alttan bir ağacın yüksek yaprakları/dalları olabilir ve aşağı atışa bir örnek, bir binanın çatısından görülen sokak olabilir. Her durumda, uzaktaki özne keskin ve odakta olmalıdır. Yakınlaştırabilmeniz ve netliği daha kolay kontrol edebilmeniz için çekimleri galeri görünümünde kaydedin ve görüntüleyin.

VCM aktüatörlü bir kameranın bu testi geçmesi için ya kapalı döngü AF kontrol sistemi gerektireceğini ya da kamera yönünü belirlemek için ivmeölçer verilerini kullanmaya dayalı bir tür SW düzeltmesi gerekeceğini unutmayın. Lens sonsuz konumunun güvenilir fabrika kalibrasyonu da gerekli olacaktır.

Manuel TestingCam2 testleri

TestingCam2 uygulaması, aşağıdaki kontroller gerçekleştirilerek manuel olarak çalıştırılmalıdır. TestingCam2 için kaynak burada: pdk/apps/TestingCamera2/

JPEG yakalama

TestingCam2'yi başlatın ve JPEG düğmesine basın. Vizör görüntüsünün sağında görünen görüntü, aynı yöne sahip olmak da dahil olmak üzere vizörle aynı görünmelidir.