Kamera donanım soyutlama katmanını test etme

Bu sayfada, Android kamera donanımı soyutlama katmanını (HAL) değerlendirmek için kullanılabilen tüm testler listelenmektedir. Bu kılavuz, orijinal ekipman üreticileri (OEM'ler) ve uygulama işlemcisi (AP) satıcıları için hazırlanmıştır. Bu sayede, kamera HAL'inin minimum kusurla doğru şekilde uygulanmasını sağlayabilirler. Bu, Android Uyumluluk Test Paketi'ne (CTS) isteğe bağlı olarak eklenen bir test olsa da kamera testi kapsamını büyük ölçüde artırır ve potansiyel hataları kesinlikle tespit eder.

OEM'ler bu testleri geçerek Android kamera donanımı soyutlama katmanı (HAL) 3 arayüzlerini doğru şekilde entegre edip etmediklerini doğrular. Kontrol listesindeki tüm öğelere uygun olduğunda, bir cihaz uygulaması Android Kamera HAL arayüzleri açısından tam olarak kabul edilebilir. Bu sayede cihaz, kamera uygulamalarının temelini oluşturan android.hardware.camera2 paketini düzgün şekilde destekleyebilir.

Camera HAL3 spesifikasyonu

Hangi cihazların hangi koşulları karşılaması gerektiğiyle ilgili bilgilerin yetkili kaynağı Android Camera HAL3 spesifikasyonudur. Bu sayfada, kontrol listesi olarak kullanılabilecek tüm testlerin bir özeti yer almaktadır. Kamera HAL uygulayıcıları (ör. AP tedarikçileri), Kamera HAL3 spesifikasyonunu satır satır incelemeli ve cihazlarının bu spesifikasyona uygun olduğundan emin olmalıdır.

Mevcut HAL spesifikasyonu, Android 5.0 ve sonraki sürümlerdeki genel Android Platform Geliştirme Kiti'ndeki (PDK) şu dosyalarda tanımlanır:

Kamera testi türleri

En yeni Android kamera için kullanılabilen temel test türleri ve ilgili talimatlara yönelik referanslar aşağıda verilmiştir:

Bu test türlerinin tümü aşağıda ayrıntılı olarak açıklanmıştır. Bu testler, OEM'lerin bunları yürütmesi beklenen kronolojik sırayla sunulur.

Örneğin, yerel testleri geçemeyen bir cihaz, sonraki Compatibility Test Suite (CTS) testlerini de kesinlikle geçemez. Bir cihaz CTS'yi geçemezse Görüntü Test Paketi'ne (ITS) geçmenin pek bir anlamı yoktur. Bir sonraki test grubuna geçmeden önce her test türündeki hataları gidermenizi öneririz.

Vendor Test Suite (VTS) testleri

Android Vendor Test Suite (VTS), HIDL arayüzü düzeyinde çalışan bir test paketidir. VTS'nin kullanımı hakkında daha fazla bilgi için Vendor Test Suite başlıklı makaleyi inceleyin.

Compatibility Test Suite (CTS) testleri

Kamera Android Compatibility Test Suite (CTS) testleri, cihaz uyumluluğuna odaklanır. Test ortamı oluşturma hakkında bilgi edinmek için CTS'yi ayarlama başlıklı makaleyi inceleyin.

Kamera CTS testlerinin başlangıç yolu: platform/cts.

Harici kameraları (ör. USB web kameraları) destekleyen cihazlarda kamera CTS'si çalıştırılırken CTS çalıştırılırken bir cihazın takılı olması gerekir. Aksi takdirde testler otomatik olarak başarısız olur. Harici kameralara örnek olarak Logitech HD Pro Webcam C920 ve Microsoft LifeCam HD-3000 verilebilir.

CTS'yi çalıştırma ile ilgili genel talimatlar için CTS'ye giriş ve alt sayfalarına bakın.

android.hardware.Camera API'si için CTS testleri

Bu kamera testlerini cts/tests/tests/ bölümünde bulabilirsiniz:

  • 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'si için CTS testleri

Bu kamera testlerini cts/tests/tests/ bölümünde bulabilirsiniz:

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

CTS Doğrulayıcı kamera testleri

Bu kamera testlerini şu bölümlerde bulabilirsiniz: cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*

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

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

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

Testleri ayarlama ve çalıştırma hakkında daha fazla bilgi için Camera ITS başlıklı makaleyi inceleyin.

Sahne ve test açıklamaları için Camera ITS Tests (Kamera ITS Testleri) başlıklı makaleyi inceleyin.

ITS testleri ya başarılı olur ya da başarısız. Her sahne klasöründeki zorunlu testlerin tamamı başarılı olmalıdır. Zorunlu olmayan testler başarısız olsa bile CtsVerifier'da başarılı olarak sayılır.

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

Medya çerçevesi testleri

MediaFrameworkTest'teki kamerayla ilgili tüm medya testlerini geçin. Bu testler için Android cihaza mediaframeworktest.apk'nın yüklenmesi gerektiğini lütfen unutmayın. make mediaframeworktest ve ardından sonuçtaki .apk dosyasını yüklemek için adb'yi kullanmanız gerekir. Örnek komutları aşağıda bulabilirsiniz.

Kamerayla ilgili medya çerçevesi testlerinin başlangıç yolu: 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

Burada name değişkeni, tedarikçinin ürününü içeren dizini temsil eder.

Tüm testleri aşağıdaki dizinde veya alt dizinlerinde bulabilirsiniz:

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/

Medya çerçevesi testlerini çalıştırma

Kullanılabilir tüm testleri görmek için:

adb shell pm list instrumentation

Bu işlem, aşağıdakine benzer sonuçlar verir:

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ındaki bileşeni (instrumentation: ve (target=com.android.mediaframeworktest) arasında) belirleyip çıkarın. Bileşen, hedef paket adı (com.android.mediaframeworktest) ve test çalıştırıcı adından (MediaFrameworkTestRunner) oluşur.

Örneğin:

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

Ardından her bileşeni adb shell am instrument'ya şu şekilde iletebilirsiniz:

adb shell am instrument -w component.name

Burada 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 Java paketiyle aynı olması gerekmez. 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ı argümanını aşağıdaki gibi iletin:

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 diyez (#) işareti ve yöntem adını (bu örnekte testConnectPro) ekleyin. Örneğin:

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

Medya ayarları işlevsel testleri

İşlevsel testin bir örnek çalıştırmasını aşağıda görebilirsiniz. Bu test, farklı kamera ayarı kombinasyonlarının temel işlevselliğini doğrular. (ör. Flash, 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

Aşağıda, bir entegrasyon testinin örnek çalıştırılması verilmiştir. Bu örnekte, mediaframeworktest/integration/CameraBinderTest.java ve mediaframeworktest/CameraStressTestRunner.java testleri çalıştırılmaktadır:

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

Başarılı olursa şu şekilde bir çıktı elde edilir:

-----

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

OK (11 tests)

-----

Medya performansı testleri

Bu önizleme bellek testi, kamera önizlemesini 200 kez açıp kapatır. Her 20 yinelemede ps mediaserver'ın anlık görüntüsü kaydedilir ve 200 yinelemeden sonra bellek kullanımındaki farklılık karşılaştırılır. Fark 150 km'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ıyı şu kaynakta bulabilirsiniz: /sdcard/mediaMemOutput.txt

Medya birimi testleri

Birim testlerini çalıştırma komutları benzerdir. Örneğin, CameraMetadataTest.java için komut şu şekilde olur:

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ı zorlamak için yapılır.

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

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

Tüm testler başarılı olmalıdır.

Manuel testlerCam testleri

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

Kamerayı eğerek sonsuz odaklama

TestingCam'i başlatın, önizlemeyi açın ve otomatik odaklama modunun sonsuza ayarlandığından emin olun. Fotoğraf çek düğmesini kullanarak uzak nesnelerin (en az 10 metre uzakta) fotoğraflarını çekin. Kamerayı yatay, yukarı (dikeye yakın) ve aşağı (dikeye yakın) yönde tutun. Yukarı yönde çekilen fotoğraflara örnek olarak ağacın alttan görünen yüksekteki yaprakları/dalları, aşağı yönde çekilen fotoğraflara örnek olarak da bir binanın çatısından görünen sokak verilebilir. Her durumda, uzaktaki özne net ve odaklanmış olmalıdır. Çekimleri kaydedin ve galeri görünümünde görüntüleyin. Böylece, daha kolay yakınlaştırabilir ve netliği inceleyebilirsiniz.

VCM aktüatörlü bir kameranın bu testi geçebilmesi için kapalı devre AF kontrol sistemi veya kamera yönünü belirlemek üzere ivmeölçer verilerini kullanan bir yazılım düzeltmesi gerekeceğini unutmayın. Ayrıca, lensin sonsuzluk konumunun güvenilir bir şekilde fabrika kalibrasyonu yapılması gerekir.

Manuel testlerCam2 testleri

TestingCam2 uygulaması, aşağıdaki kontroller yapılarak manuel olarak çalıştırılmalıdır. TestingCam2'nin kaynağına buradan ulaşabilirsiniz: 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 resim, aynı yöne sahip olması da dahil olmak üzere vizörle aynı görünmelidir.