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) isteğe bağlı olarak eklenen bir özellik 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. Bir cihaz uygulaması, yapılacaklar listesindeki tüm öğelere uyduğunda 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 düzgün şekilde desteklemesini sağlar.
Kamera HAL3 spesifikasyonu
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'ndeki (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 - Manuel TestingCam2.1 testleri:
pdk/apps/TestingCamera2/
'teki 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'den geçemezse Görüntü Test Paketi'ne (ITS) geçmenin pek bir faydası yoktur. Sonraki test grubuna geçmeden önce her test türünde hataları gidermenizi ö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 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ı (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ırmayla ilgili genel talimatlar için CTS girişine ve alt sayfalarına bakın.
android.hardware.Camera
API için CTS testleri
Aşağıdaki kamera testlerini cts/tests/tests/
altında 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
Aşağıdaki kamera testlerini cts/tests/tests/
altında 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ümde 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) testleri, görüntünün doğruluğuna odaklanır. 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 başlıklı makaleyi inceleyin.
ITS testleri başarılı veya başarısız olur. Her sahne klasöründeki zorunlu testlerin tümü geçmelidir.
Zorunlu olmayan testler başarısız olsa bile CtsVerifier
'te geçilmiş 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 testlerin, 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, tedarikçinin ürününe ait 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ğı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)
Her test satırında bileşeni (instrumentation:
ile (target=com.android.mediaframeworktest)
arasında) bulun ve ayıklayın.
Bileşen, hedef paket adından (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 bir bileşeni adb shell am instrument
parametresine aşağıdaki gibi iletebilirsiniz:
adb shell am instrument -w component.name
Burada component.name
, yukarıdaki ayıklanmış değere eşittir. Örneğin:
adb shell am instrument -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Sınıf yolunun Java paketi + sınıf adı olduğunu ancak enstrümantasyon paketinin Java paketiyle aynı olmayabileceğ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 test sınıfı ç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. 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 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 iterasyonda ps mediaserver'ın anlık görüntüsü kaydedilir ve 200 iterasyondan sonra bellek kullanımı farklı şekilde 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ı olmalıdır.
Manuel TestingCam testleri
TestingCam uygulaması, aşağıdaki kontrollerin yapılmasıyla 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 kamerayı yatay, yukarı (dikeye yakın) ve aşağı (dikeye yakın) doğru yönlendirerek uzaktaki nesnelerin (en az 10 metre uzaklıkta) fotoğraflarını çekin. Yukarıya doğru çekilen bir fotoğraf örneği olarak bir ağacın alt kısmındaki yüksek yapraklar/dallar, aşağıya doğru çekilen bir fotoğraf örneği olarak da bir binanın çatısından görülen cadde verilebilir. 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ı görünmelidir.