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 HAL 3.x arayüzü ve spesifikasyonu:
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 biçimi arayüzü ve spesifikasyonu:
system/core/libsystem/include/system/graphics.h
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:
- Tedarikçi 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 bilgi için Uyumluluk Test Paketi ve Ticaret Federasyonu'na Genel Bakış başlıklı makaleleri inceleyin.
- Resim Testi Paketi (ITS): Resimlerin doğruluğundan emin olmak için testleri manuel olarak çalıştırın. Daha ayrıntılı bilgi için Kamera ITS başlıklı makaleyi inceleyin.
- Manuel TestingCam testleri:
pdk/apps/TestingCamera/
'teki kaynaktan çalıştırın - Manual TestingCam2.1 testleri:
pdk/apps/TestingCamera2/
konumundaki kaynaktan çalıştırın
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 (MediaFramework
) 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
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.