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 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 özelliği :
system/media/camera/docs/docs.html
- HAL piksel biçimi arabirimi ve özellikleri :
system/core/libsystem/include/system/graphics.h
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:
- Vendor Test Suite (VTS) : Doğrudan kamera HAL arayüzünü test eden testler
- Uyumluluk Test Paketi (CTS) : Cihaz uyumluluğunu sağlamak için standart, otomatik Android testleri. Daha fazla ayrıntı için bkz. Uyumluluk Test Paketi ve Ticaret Federasyonuna Genel Bakış .
- Image Test Suite (ITS) : Görüntü doğruluğunu sağlamak için manuel olarak testler yapı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ı 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
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.