Kamera HAL testi kontrol listesi

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

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

Kamera HAL3 spesifikasyonu

Android Kamera HAL3 spesifikasyonu, cihazların hangileri karşılaması gerektiğine ilişkin yetkili bilgi kaynağıdır; bu sayfa, kontrol listesi olarak kullanılabilecek tüm testlerin bir özetini sunar. Kamera HAL uygulayıcıları (örn. AP satıcıları), Kamera HAL3 spesifikasyonunu satır satır incelemeli 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 şu dosyalarda tanımlanmıştır:

Kamera testi türleri

En son Android kamera için kullanılabilen birincil 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ı yürütmesinin beklendiği kronolojik sırayla sunulur.

Örneğin, bir cihaz yerel testlerde başarısız olursa, sonraki Uyumluluk Test Paketi (CTS) testlerinde de kesinlikle başarısız olacaktır. Ve 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 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ı destekleyen cihazlar (USB web kameraları gibi) için kamera CTS'sini çalıştırırken, CTS'yi çalıştırırken takılı bir cihaza sahip olmanız gerekir, 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 Verifier kamera testleri

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

Image Test Suite (ITS) testleri

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

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

Testlerin nasıl kurulacağı ve çalıştırılacağı hakkında daha fazla bilgi için bkz. Kamera ITS .

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

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ı olarak sayılır.

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

Medya Çerçevesi testleri

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

Kamera ile ilgili ortam ç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 bulunan 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, şuna 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)

Her test satırından bileşeni ( instrumentation: ve (target=com.android.mediaframeworktest) arasında) tanımlayın ve çıkarın. Bileşen, hedef paket adından ( com.android.mediaframeworktest ) ve test çalıştırıcı adından ( MediaFramework TestRunner 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

component.name yukarıda çıkarılan değere eşittir. Örneğin:

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

Sınıf yolu Java paketi + sınıf adı olsa da enstrümantasyon paketinin mutlaka Java paketi ile 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 pound (#) 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şlev testleri

İşte işlevsel bir testin örnek çalıştırması. Bu test, farklı kamera ayarı kombinasyonlarının temel işlevselliğini doğrular. (ör. Flaş, pozlama, WB, sahne, resim boyutu ve coğrafi etiket)

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 çalıştırma örneği, bu durumda mediaframeworktest/integration/CameraBinderTest.java ve mediaframeworktest/CameraStressTestRunner.java:

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

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

-----

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

OK (11 tests)

-----

Medya performans testleri

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

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 birimi 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 Test Kamera testleri

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

Kamera eğme ile sonsuz odak

TestingCam'i başlatın, önizlemeyi açın ve otomatik odaklama modunun sonsuza ayarlandığından emin olun. Fotoğraf çek düğmesini kullanarak, fotoğraf makinesi yatay, yukarı (dikey yakın) ve aşağı (dikey yakın) olacak şekilde uzaktaki nesnelerin (en az 10 m uzakta) çekimlerini yapın; yukarı doğru çekime bir örnek, bir ağacın alttan yüksek yaprakları/dalları olabilir ve aşağı doğru çekime bir örnek, bir binanın çatısından görülen sokak olabilir. Her durumda, uzaktaki konu keskin ve odakta olmalıdır. Çekimleri kaydedin ve galeri görünümünde görüntüleyin, böylece yakınlaştırıp netliği daha kolay inceleyebilirsiniz.

VCM aktüatörlü bir kameranın bu testi geçebilmesi için ya bir 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 gerektireceğini unutmayın. Lens sonsuz konumunun güvenilir fabrika kalibrasyonu da gerekli olacaktır.

Manuel TestCam2 testleri

TestingCam2 uygulaması, aşağıdaki kontroller gerçekleştirilerek manuel olarak çalıştırılmalıdır. TestingCam2'nin kaynağı 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.