Bu sayfa, Android kamera donanım soyutlama katmanını (HAL) değerlendirmek için mevcut 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'nin minimum kusurla doğru şekilde uygulanmasını sağlayabilirler. Bu, Android Uyumluluk Testi Paketi'ne (CTS) isteğe bağlı bir eklenti olmasına rağmen, 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 uyulduğunda, bir cihaz uygulamasının Android Kamera HAL arayüzlerine göre tam olduğu düşünülebilir. Bu da cihazın, kamera uygulamalarının üzerine inşa edildiği android.hardware.camera2
paketini düzgün bir şekilde desteklemesini sağlayacaktır.
Kamera HAL3 spesifikasyonu
Android Kamera HAL3 spesifikasyonu, hangi cihazların karşılaması gerektiği konusunda yetkili bilgi kaynağıdır; Bu sayfada kontrol listesi olarak kullanılabilecek tüm testlerin bir özeti sunulmaktadır. Kamera HAL uygulayıcıları (örneğin AP satıcıları), Kamera HAL3 spesifikasyonunu satır satır incelemeli ve cihazlarının buna uygun olmasını sağlamalıdır.
Geçerli HAL spesifikasyonu, Android 5.0 ve sonraki genel Android Platform Geliştirme Kiti (PDK) içindeki bu dosyalarda tanımlanmıştır:
- Kamera HAL 3.x arayüzü ve özellikleri :
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Kamera HAL 3.x meta veri spesifikasyonu :
system/media/camera/docs/docs.html
- HAL piksel formatı arayüzü ve özellikleri :
system/core/libsystem/include/system/graphics.h
Kamera test türleri
Aşağıda, en yeni Android kamera için mevcut olan başlıca test türleri ve ilgili talimatlara ilişkin referanslar verilmiştir:
- Satıcı Test Paketi (VTS) : Kamera HAL arayüzünü doğrudan test eden testler
- Uyumluluk Test Paketi (CTS) : Cihaz uyumluluğunu sağlamak için standart, otomatik Android testleri. Daha fazla ayrıntı için Uyumluluk Test Paketi ve Ticaret Federasyonuna Genel Bakış'a bakın.
- Görüntü Test Paketi (ITS) : Görüntünün doğruluğunu sağlamak için testleri manuel olarak çalıştırın. Daha fazla ayrıntı için bkz. Kamera ITS .
- Manuel TestingCam testleri :
pdk/apps/TestingCamera/
içindeki kaynaktan çalıştırın - Manuel TestingCam2.1 testleri :
pdk/apps/TestingCamera2/
içindeki kaynaktan çalıştırın
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ıraya göre sunulmaktadır.
Ö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 eğer bir cihaz CTS'de başarısız olursa Image Test Suite'e (ITS) geçmenin pek bir faydası yoktur. Bir sonraki test grubuna geçmeden önce her test türündeki hataları gidermenizi öneririz.
Satıcı Test Paketi (VTS) testleri
Android Vendor Test Suite (VTS), HIDL arabirim düzeyinde çalışan bir test paketidir. VTS'yi kullanma hakkında daha fazla bilgi için bkz. Satıcı Test Paketi .
Uyumluluk Test Paketi (CTS) testleri
Kamera Android Uyumluluk Test Paketi (CTS) testleri cihaz uyumluluğuna odaklanır. Test ortamı ayarlama hakkında bilgi için bkz. CTS'yi Ayarlama .
Kamera CTS testleri için başlangıç yolu şudur: platform/cts
.
Harici kameraları destekleyen cihazlar (USB web kameraları gibi) için kamera CTS'yi çalıştırırken, CTS'yi çalıştırırken takılı bir cihazın olması gerekir, aksi takdirde testler otomatik olarak başarısız olur. Harici kamera örnekleri arasında şunlar yer alır: Logitech HD Pro Web Kamerası C920 ve Microsoft LifeCam HD-3000 .
CTS'yi çalıştırmaya ilişkin genel talimatlar için CTS girişine ve alt sayfalarına bakın.
android.hardware.Camera
API'si 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'si 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 şu adreste 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ünün doğruluğuna odaklanır. Testleri gerçekleştirmek için Python komut dosyalarını, Android cihazını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 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 testlerin geçmesi gerekir. Zorunlu olmayan testler başarısız olabilir ve CtsVerifier
yine de 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 bu testlerin Android cihazda mediaframeworktest.apk dosyasının yüklü olmasını gerektirdiğini unutmayın. make mediaframeworktest
ve ardından ortaya çıkan .apk dosyasını yüklemek için adb'yi kullanmanız gerekecektir. Örnek komutlar aşağıda yer almaktadır.
Kamerayla ilgili medya çerçevesi testlerinin başlangıç yolu şu şekildedir: 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ırın
Mevcut tüm testleri görmek için::
adb shell pm list instrumentation
Bu, aşağıdakine 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)
tanımlayın ve çıkarın. Bileşen, hedef paket adı ( com.android.mediaframeworktest
) ve test çalıştırıcısı 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 bir bileşeni adb shell am instrument
şu şekilde aktarabilirsiniz:
adb shell am instrument -w component.name
Burada component.name
yukarıdaki çıkarılan değere eşittir. Örneğin:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Lütfen sınıf yolunun Java paketi + sınıf adı olmasına rağmen enstrümantasyon paketinin mutlaka Java paketiyle aynı olmadığını unutmayın. Bileşen adını birleştirirken test çalıştırıcısı 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ını çalıştırmak için -e sınıfını geç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 bir 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
İşte fonksiyonel bir testin örnek çalışması. Bu test, farklı kamera ayarları kombinasyonlarının temel işlevselliğini doğrular. (yani 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
Burada bir entegrasyon testinin örnek çalışması verilmiştir; 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, şuna benzer bir çıktı elde edilir:
----- com.android.mediaframeworktest.integration.CameraBinderTest:........... Test results for CameraStressTestRunner=........... Time: 3.328 OK (11 tests) -----
Medya performans testleri
Bu önizleme hafıza testi, kamera önizlemesini 200 kez açacak ve yayınlayacaktır. Her 20 yinelemede, ps mediaserver'ın anlık görüntüsü kaydedilecek ve 200 yinelemeden sonraki farklı bellek kullanımı karşılaştırılacaktır. Fark 150kM'den büyükse 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ı şu adreste 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 testin amacı kameradan görüntü yakalama ve video kaydetmeyi vurgulamaktı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 geçmelidir.
Manuel TestKamera 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ğimi ile sonsuz odaklama
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 nesnelerin (en az 10 m uzaklıktaki) fotoğraflarını, kamera yatay, yukarı (dikey'e yakın) ve aşağı (dikey'e yakın) bakacak şekilde çekin; Yukarı doğru çekimin bir örneği, bir ağacın alttan yüksek yaprakları/dalları olabilir ve aşağı doğru çekimin bir örneği, bir binanın çatısından görülen sokak olabilir. Her durumda uzaktaki konu net ve odakta olmalıdır. Çekimleri galeri görünümünde kaydedin ve görüntüleyin, böylece yakınlaştırıp keskinliği daha kolay inceleyebilirsiniz.
VCM aktüatörlü bir kameranın bu testi geçmesi için kapalı döngü AF kontrol sistemine veya kamera yönünü belirlemek için ivmeölçer verilerinin kullanılmasına dayalı bir tür SW düzeltmesine ihtiyaç duyacağını unutmayın. Lens sonsuzluk konumunun güvenilir fabrika kalibrasyonuna da ihtiyaç duyulacaktı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önelime sahip olmak da dahil olmak üzere vizörle aynı görünmelidir.