Kamera HAL testi kontrol listesi

Bu sayfada, Android kamera donanım soyutlama katmanının (HAL) değerlendirilmesi için kullanılabilen tüm testler listelenmektedir. Bu API, özgün donanım üreticileri (OEM'ler) ve uygulama işlemcisi (AP) tedarikçileri için tasarlanmıştır. Böylece, kamera HAL'inin minimum kusurla doğru şekilde uygulanmasını sağlayabilirler. Bu, Android Uyumluluk Test Paketi'ne (CTS) gönüllü olarak yapılan bir ekleme olsa da kamera testi kapsamını büyük ölçüde artırır ve potansiyel hataları 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 maddelere uyulduğunda, bir cihaz uygulaması Android Kamera HAL arayüzleri açısından tam olarak kabul edilebilir. Bu da cihazın, kamera uygulamalarının temel aldığı android.hardware.camera2 paketini doğru şekilde desteklemesini sağlar.

Kamera HAL3 özellikleri

Android Kamera HAL3 spesifikasyonu, hangi cihazların karşılaması gereken bilgilerle ilgili yetkili kaynaktır. Bu sayfada, yapılacaklar listesi olarak kullanılabilecek tüm testlerin özeti sunulmaktadır. Kamera HAL'i uygulayıcıları (ör. AP tedarikçileri), Kamera HAL3 spesifikasyonunu satır satır inceleyip cihazlarının bu spesifikasyona uygun olduğundan emin olmalıdır.

Mevcut HAL spesifikasyonu, Android 5.0 ve sonraki sürümlerde bulunan genel Android Platform Geliştirme Kiti'nde (PDK) şu dosyalarda tanımlanmıştır:

Kamera testi türleri

En son Android kamera için kullanılabilen birincil 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 gerçekleştirmesi beklenen kronolojik sırayla sunulur.

Örneğin, bir cihaz yerel testleri geçemezse sonraki Compatibility Test Suite (CTS) testlerini de kesinlikle geçemez. Bir cihaz CTS'de başarısız olursa Görüntü Test Paketi'ne (ITS) geçmenin pek bir faydası yoktur. Sonraki test grubuna geçmeden önce her bir test türündeki hataları ele almanızı öneririz.

Tedarikçi Firma Test Paketi (VTS) testleri

Android Tedarikçi Test Paketi (VTS), HIDL arayüzü düzeyinde çalışan bir test paketidir. VTS'yi kullanma hakkında daha fazla bilgi için Satıcı Test Paketi 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ı (USB web kameraları gibi) destekleyen cihazlar için kamera CTS'sini çalıştırırken CTS'yi çalıştırırken cihazınızı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ırmaya ilişkin genel talimatlar için CTS'nin girişine ve alt sayfalarına bakın.

android.hardware.Camera API için CTS testleri

Aşağıdaki 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 için CTS testleri

cts/tests/tests/ kapsamında şu kamera testlerini bulabilirsiniz:

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

CTS Doğrulayıcı kamera testleri

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

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

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

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

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

Sahne ve test açıklamaları için Kamera ITS Testleri'ne bakın.

ITS testleri, geçti veya kaldı şeklinde sonuçlanır. Her sahne klasöründeki tüm zorunlu testler başarılı olmalıdır. Zorunlu olmayan testler başarısız olsa bile CtsVerifier'te 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. Bu testler için Android cihaza mediaframeworktest.apk'nin yüklenmesi gerektiğini lütfen unutmayın. make mediaframeworktest ve ardından elde edilen .apk dosyasını yüklemek için adb'yi kullanmanız gerekir. Örnek komutlar aşağıda verilmiştir.

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, satıcının ürününü içeren dizini temsil eder.

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/

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ğıdakilere 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)

Bileşeni tanımlayın ve çıkarın (her test satırından instrumentation: ile (target=com.android.mediaframeworktest) arasında). 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 parametresine aşağıdaki gibi 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 paket + sınıf adı olsa da araç paketinin Java paketiyle aynı olması gerekmediğini lütfen 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 sınıf testini çalıştırmak için -e sınıf bağımsız değişkenini iletin. Örneğin:

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 pound (#) işareti ve yöntem adını (bu durumda testConnectPro) ekleyin.

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

Medya ayarları işlevsel testleri

Aşağıda işlevsel bir testin örnek çalışması verilmiştir. Bu test, farklı kamera ayarı kombinasyonlarının temel işlevini doğrular. (ör. 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 entegrasyonu testleri

Aşağıda, bir entegrasyon testinin (bu örnekte mediaframeworktest/integration/CameraBinderTest.java ve mediaframeworktest/CameraStressTestRunner.java) örnek çalışması verilmiştir:

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

İşlem başarılı olursa aşağıdakine benzer bir sonuç 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 farklı bellek kullanımı 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ı çıkışı şu adreste bulabilirsiniz: /sdcard/mediaMemOutput.txt

Medya birimi testleri

Birim testlerini çalıştırmak için kullanılan komutların tümü 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ü yakalama ve video kaydı işlemlerini 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ı olacaktır.

Manuel TestingCam testleri

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

Kamerayı yatırarak sonsuz odak

TestingCam'i başlatın, önizlemeyi açın ve otomatik odaklama modunun sonsuz olarak ayarlandığından emin olun. Fotoğraf çek düğmesini kullanarak uzaktaki özneleri (en az 10 metre uzaklıktaki) çekin. Kamera yatay, yukarı doğru (dikeye yakın) ve aşağı doğru (dikeye yakın) bakacak şekilde çekim yapabilirsiniz. Yukarıya doğru çekime örnek olarak aşağıdan yüksek yapraklar/ağaç dalları ve binanın çatısından görülen sokağı gösterebilirsiniz. Uzaktaki özne her durumda keskin ve net olmalıdır. Fotoğrafları kaydedip galeri görünümünde görüntüleyerek yakınlaştırabilir ve keskinliği daha kolay inceleyebilirsiniz.

VCM aktüatörüne sahip bir kameranın bu testi geçebilmesi için kapalı döngülü bir AF kontrol sistemi veya kamera yönünü belirlemek için ivmeölçer verilerini kullanan bir tür yazılım düzeltmesi gerekeceğini unutmayın. Ayrıca, lensin sonsuzluk konumunun güvenilir bir şekilde fabrikada kalibre edilmesi de gerekir.

Manuel testCam2 testleri

TestingCam2 uygulaması, aşağıdaki kontrollerin yapılmasıyla manuel olarak çalıştırılmalıdır. TestingCam2 kaynağı: pdk/apps/TestingCamera2/

JPEG yakalama

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