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. Orijinal ekipman üreticileri (OEM'ler) ve uygulama işlemcisi (AP) satıcıları, kamera HAL'inin minimum kusurla düzgün şekilde uygulanmasını sağlamak için bu kılavuzdan yararlanabilir. 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 olası 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 specification

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 verilmektedir. Kamera HAL uygulayıcıları (ör. AP satıcıları), 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 başlıca test türlerini ve ilgili talimatlara yönelik referansları aşağıda bulabilirsiniz:

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 Image Test Suite (ITS) testine devam etmenin pek bir anlamı yoktur. Bir sonraki test grubuna geçmeden önce her test türündeki hataları gidermenizi öneririz.

Tedarikçi Test Paketi (VTS) testleri

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

Compatibility Test Suite (CTS) testleri

Kamera Android Uyumluluk Test Paketi (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ırmayla 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

sorunsuz bir şekilde kullanımdan kaldırılmasını da sağlar.

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.

Kamera 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 başarılı veya başarısız olur. Her sahne klasöründeki zorunlu testlerin tamamı başarılı olmalıdır. Zorunlu olmayan testler başarısız olsa bile CtsVerifier içinde 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 cihazda mediaframeworktest.apk'nın yüklü olması gerektiğini lütfen unutmayın. make mediaframeworktest ve ardından sonuçtaki .apk'yı 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 ayıklayı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:

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ırılması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 (bu örnekte mediaframeworktest/integration/CameraBinderTest.java ve mediaframeworktest/CameraStressTestRunner.java) örnek çalıştırılması verilmiştir:

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

İşlem 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 fazla ise 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 testlerKamera 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, kamerayı yatay, yukarı (dikeye yakın) ve aşağı (dikeye yakın) yönde tutarak uzaktaki (en az 10 metre uzakta) nesnelerin fotoğraflarını çekin. Yukarı yönde çekilen fotoğraflara örnek olarak ağacın alttan çekilmiş yüksekteki yaprakları/dalları, aşağı yönde çekilen fotoğraflara örnek olarak da bir binanın çatısından çekilmiş 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 kullanması veya kamera yönünü belirlemek üzere ivmeölçer verilerini kullanan bir yazılım düzeltmesi yapması gerektiğini unutmayın. Ayrıca, lensin sonsuzluk konumunun güvenilir fabrika kalibrasyonu da gereklidir.

Manuel testlerCam2 testleri

TestingCam2 uygulaması, aşağıdaki kontroller yapılarak 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 resim, aynı yöne sahip olması da dahil olmak üzere vizörle aynı görünmelidir.