Bu sayfada, Android kamera donanımı soyutlama katmanını (HAL) değerlendirmek için kullanılabilen tüm testler listelenmektedir. Orijinal ekipman üreticileri (OEM'ler) ve uygulama işlemcisi (AP) satıcıları, kamera HAL'inin minimum kusurla düzgün şekilde uygulanmasını sağlamak için bu kılavuzdan yararlanabilir. Bu, Android Uyumluluk Test Paketi'ne (CTS) isteğe bağlı olarak eklenen bir test 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. Kontrol listesindeki tüm öğelere uygun olduğunda, bir cihaz uygulaması Android Kamera HAL arayüzleri açısından tam olarak kabul edilebilir. Bu sayede cihaz, kamera uygulamalarının temelini oluşturan
android.hardware.camera2
paketini düzgün şekilde destekleyebilir.
Camera HAL3 specification
Hangi cihazların hangi koşulları karşılaması gerektiğiyle ilgili bilgilerin yetkili kaynağı Android Camera HAL3 spesifikasyonudur. Bu sayfada, kontrol listesi olarak kullanılabilecek tüm testlerin bir özeti verilmektedir. Kamera HAL uygulayıcıları (ör. AP satıcıları), Kamera HAL3 spesifikasyonunu satır satır incelemeli ve cihazlarının bu spesifikasyona uygun olduğundan emin olmalıdır.
Mevcut HAL spesifikasyonu, Android 5.0 ve sonraki sürümlerdeki genel Android Platform Geliştirme Kiti'ndeki (PDK) şu dosyalarda tanımlanır:
- Kamera HAL 3.x arayüzü ve spesifikasyonu:
hardware/libhardware/include/hardware/camera3.h
,hardware/libhardware/include/hardware/camera_common.h
- Camera HAL 3.x metadata spec:
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 yeni Android kamera için kullanılabilen başlıca test türlerini ve ilgili talimatlara yönelik referansları aşağıda bulabilirsiniz:
- Tedarikçi Test Paketi (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 bilgi için Uyumluluk Test Paketi ve Ticaret Federasyonu'na Genel Bakış başlıklı makaleleri inceleyin.
- Resim Test Paketi (ITS): Resimlerin doğruluğunu sağlamak için testleri manuel olarak çalıştırın. Daha ayrıntılı bilgi için Camera ITS başlıklı makaleyi inceleyin.
- Manuel TestingCam testleri:
pdk/apps/TestingCamera/
kaynağında çalıştırılır. - Manuel TestingCam2.1
testleri:
pdk/apps/TestingCamera2/
kaynağında çalıştırılır.
Bu test türlerinin tümü aşağıda ayrıntılı olarak açıklanmıştır. Bu testler, OEM'lerin bunları yürütmesi beklenen kronolojik sırayla sunulur.
Örneğin, yerel testleri geçemeyen bir cihaz, sonraki Compatibility Test Suite (CTS) testlerini de kesinlikle geçemez. Bir cihaz CTS'yi geçemezse Image Test Suite (ITS) testine devam etmenin pek bir anlamı yoktur. Bir sonraki test grubuna geçmeden önce her test türündeki hataları gidermenizi öneririz.
Tedarikçi Test Paketi (VTS) testleri
Android Vendor Test Suite (VTS), HIDL arayüzü düzeyinde çalışan bir test paketidir. VTS'yi kullanma hakkında daha fazla bilgi için Vendor Test Suite 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ı (ör. USB web kameraları) destekleyen cihazlarda kamera CTS'si çalıştırılırken CTS çalıştırılırken bir cihazı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'ye giriş ve alt sayfalarına bakın.
android.hardware.Camera
API'si için CTS testleri
Bu 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'si için CTS testleri
Bu kamera testlerini cts/tests/tests/
bölümünde 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ümlerde bulabilirsiniz:
cts/apps/CtsVerifier/src/com/android/cts/verifier/camera/*
Görüntü Test Paketi (ITS) testleri
sorunsuz bir şekilde kullanımdan kaldırılmasını da sağlar.Kamera Görüntüsü Test Paketi (ITS) testleri, görüntü doğruluğuna odaklanır. Testleri gerçekleştirmek için Python komut dosyalarını, Android cihazı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, tests/scene#
alt dizininde bulunur.
Testleri ayarlama ve çalıştırma hakkında daha fazla bilgi için Camera ITS başlıklı makaleyi inceleyin.
Sahne ve test açıklamaları için Camera ITS Tests (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 tamamı başarılı olmalıdır.
Zorunlu olmayan testler başarısız olsa bile CtsVerifier
içinde başarılı olarak sayılır.
ITS testleri, CTS'de test edilmeyen test senaryolarını test eder ve HAL 3.2 test planının önemli bir bileşenidir.
Medya çerçevesi testleri
MediaFrameworkTest'teki kamerayla ilgili tüm medya testlerini geçin. Bu testler için Android cihazda mediaframeworktest.apk'nın yüklü olması gerektiğini lütfen unutmayın. make mediaframeworktest
ve ardından sonuçtaki .apk'yı yüklemek için adb'yi kullanmanız gerekir. Örnek komutları aşağıda bulabilirsiniz.
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ünü içeren 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ğıdakine 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ındaki bileşeni (instrumentation:
ve (target=com.android.mediaframeworktest)
arasında) belirleyip ayıklayın.
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
'ya şu şekilde 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 paketi + sınıf adı olsa da enstrümantasyon paketinin Java paketiyle aynı olması gerekmez. 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 diyez (#) işareti ve yöntem adını (bu örnekte testConnectPro
) ekleyin:
adb shell am instrument -e class 'com.android.mediaframeworktest.integration.CameraBinderTest#testConnectPro' -w com.android.mediaframeworktest/.MediaFrameworkIntegrationTestRunner
Medya ayarları işlevsel testleri
İşlevsel testin bir örnek çalıştırılmasını aşağıda görebilirsiniz. Bu test, farklı kamera ayarı kombinasyonlarının temel işlevselliğini doğrular. (ör. Flash, 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
Aşağıda, bir entegrasyon testinin (bu örnekte mediaframeworktest/integration/CameraBinderTest.java ve mediaframeworktest/CameraStressTestRunner.java) örnek çalıştırılması verilmiştir:
adb shell am instrument -e class \ 'com.android.mediaframeworktest.integration.CameraBinderTest' -w \ 'com.android.mediaframeworktest/.CameraStressTestRunner'
İşlem başarılı olursa şu şekilde bir çıktı 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 bellek kullanımındaki farklılık karşılaştırılır. Fark 150 km'den fazla ise 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ıyı şu kaynakta bulabilirsiniz:
/sdcard/mediaMemOutput.txt
Medya birimi testleri
Birim testlerini çalıştırma komutları 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üsü yakalama ve video kaydını 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 testlerKamera testleri
TestingCam uygulaması, aşağıdaki kontroller gerçekleştirilerek manuel olarak çalıştırılmalıdır.
TestingCam'in kaynağına buradan ulaşabilirsiniz: pdk/apps/TestingCamera/
Kamerayı eğerek sonsuz odaklama
TestingCam'i başlatın, önizlemeyi açın ve otomatik odaklama modunun sonsuza ayarlandığından emin olun. Fotoğraf çek düğmesini kullanarak, kamerayı yatay, yukarı (dikeye yakın) ve aşağı (dikeye yakın) yönde tutarak uzaktaki (en az 10 metre uzakta) nesnelerin fotoğraflarını çekin. Yukarı yönde çekilen fotoğraflara örnek olarak ağacın alttan çekilmiş yüksekteki yaprakları/dalları, aşağı yönde çekilen fotoğraflara örnek olarak da bir binanın çatısından çekilmiş sokak verilebilir. Her durumda, uzaktaki özne net ve odaklanmış olmalıdır. Çekimleri kaydedin ve galeri görünümünde görüntüleyin. Böylece, daha kolay yakınlaştırabilir ve netliği inceleyebilirsiniz.
VCM aktüatörlü bir kameranın bu testi geçebilmesi için kapalı devre AF kontrol sistemi kullanması veya kamera yönünü belirlemek üzere ivmeölçer verilerini kullanan bir yazılım düzeltmesi yapması gerektiğini unutmayın. Ayrıca, lensin sonsuzluk konumunun güvenilir fabrika kalibrasyonu da gereklidir.
Manuel testlerCam2 testleri
TestingCam2 uygulaması, aşağıdaki kontroller yapılarak 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 resim, aynı yöne sahip olması da dahil olmak üzere vizörle aynı görünmelidir.