Android'in kamera donanım soyutlama katmanı (HAL), android.hardware.camera2 içindeki üst düzey kamera çerçevesi API'lerini temel kamera sürücünüze ve donanımınıza bağlar. Android 13'ten itibaren kamera HAL arayüzü geliştirmesinde AIDL kullanılır. Android 8.0, Treble'ı kullanıma sundu. Bu sürümde, Kamera HAL API'si, HAL arayüz tanımlama dili (HIDL) tarafından tanımlanan kararlı bir arayüze geçirildi. Daha önce Android 7.0 ve önceki sürümler için bir kamera HAL modülü ve sürücüsü geliştirdiyseniz kamera ardışık düzeninde önemli değişiklikler olduğunu unutmayın.
AIDL kamera HAL
Android 13 veya sonraki sürümleri çalıştıran cihazlarda kamera çerçevesi, AIDL kamera HAL'leri için destek içerir. Kamera çerçevesi, HIDL kamera HAL'lerini de destekler. Ancak Android 13 veya sonraki sürümlere eklenen kamera özellikleri yalnızca AIDL kamera HAL arayüzleri aracılığıyla kullanılabilir. Bu tür özellikleri Android 13 veya sonraki sürümlere yükseltilen cihazlara uygulamak için cihaz üreticilerinin HAL süreçlerini HIDL kamera arayüzlerinden AIDL kamera arayüzlerine taşıması gerekir.
AIDL'nin avantajları hakkında bilgi edinmek için HAL'ler için AIDL başlıklı makaleyi inceleyin.
AIDL kamera HAL'ini uygulama
AIDL kamera HAL'inin referans uygulaması için
hardware/google/camera/common/hal/aidl_service/
bölümüne bakın.
AIDL kamera HAL spesifikasyonları aşağıdaki konumlardadır:
- Kamera sağlayıcı:
hardware/interfaces/camera/provider/aidl/
- Kamera cihazı:
hardware/interfaces/camera/device/aidl/
- Kamera meta verileri:
hardware/interfaces/camera/metadata/aidl/
- Sık kullanılan veri türleri:
hardware/interfaces/camera/common/aidl/
AIDL'ye geçiş yapan cihazlarda, cihaz üreticilerinin Android SELinux politikasını (sepolicy) ve RC dosyalarını kod yapısına bağlı olarak değiştirmesi gerekebilir.
AIDL kamera HAL'ini doğrulama
AIDL kamera HAL uygulamanızı test etmek için cihazın tüm CTS ve VTS testlerini geçtiğinden emin olun. Android 13, AIDL VTS testini kullanıma sunar.
VtsAidlHalCameraProvider_TargetTest.cpp
Kamera HAL3 özellikleri
Android Camera API'nin yeniden tasarlanmasının amacı, uygulamaların Android cihazlardaki kamera alt sistemini kontrol etme yeteneğini önemli ölçüde artırmak ve API'yi daha verimli ve bakımı kolay hale getirmek için yeniden yapılandırmaktır. Ek denetim, Android cihazlarda kaliteyi ve performansı en üst düzeye çıkarmak için mümkün olduğunda cihaza özel algoritmaları kullanmaya devam ederken birden fazla üründe güvenilir bir şekilde çalışabilen yüksek kaliteli kamera uygulamaları oluşturmayı kolaylaştırır.
Kamera alt sisteminin 3. sürümü, çalışma modlarını tek bir birleşik görünümde yapılandırır. Bu görünüm, önceki modlardan herhangi birini ve art arda çekim modu gibi diğer modları uygulamak için kullanılabilir. Bu sayede kullanıcılar, odak ve pozlama üzerinde daha iyi kontrol sahibi olur ve gürültü azaltma, kontrast ve keskinleştirme gibi daha fazla son işlem yapabilir. Ayrıca bu basitleştirilmiş görünüm, uygulama geliştiricilerin kameranın çeşitli işlevlerini kullanmasını kolaylaştırır.
API, kamera alt sistemini, gelen kare yakalama isteklerini 1:1 oranında karelere dönüştüren bir ardışık düzen olarak modeller. İstekler, bir karenin yakalanması ve işlenmesi ile ilgili tüm yapılandırma bilgilerini kapsar. Çözünürlük ve piksel biçimi, manuel sensör, lens ve flaş kontrolü, 3A çalışma modları, RAW->YUV işleme kontrolü, istatistik oluşturma vb. bu kapsamdadır.
Basit bir ifadeyle, uygulama çerçevesi kamera alt sisteminden bir kare ister ve kamera alt sistemi sonuçları bir çıkış akışına döndürür. Ayrıca, her bir sonuç grubu için renk alanları ve lens gölgelendirmesi gibi bilgiler içeren meta veriler oluşturulur. 3. kamera sürümünü, 1. kamera sürümünün tek yönlü akışına giden bir ardışık düzen olarak düşünebilirsiniz. Her yakalama isteğini, sensör tarafından çekilen ve aşağıdaki şekilde işlenen tek bir görüntüye dönüştürür:
- Yakalamayla ilgili meta veriler içeren bir sonuç nesnesi.
- Her biri kendi hedef yüzeyine sahip bir veya daha fazla resim verisi arabelleği.
Olası çıkış yüzeyleri grubu önceden yapılandırılmıştır:
- Her yüzey, sabit çözünürlüklü bir görüntü arabellek akışı için bir hedeftir.
- Tek seferde yalnızca az sayıda yüzey çıkış olarak yapılandırılabilir (~3).
Bir istek, istenen tüm yakalama ayarlarını ve bu istek için görüntü arabelleklerini itilecek çıkış yüzeylerinin listesini (yapılandırılmış toplam gruptan) içerir. İstekler tek seferlik (capture()
ile) veya süresiz olarak tekrarlanabilir (setRepeatingRequest()
ile). Yakalamalar, yinelenen isteklerden önceliklidir.
![Kamera veri modeli](https://source.android.google.cn/static/docs/core/camera/images/camera_simple_model.png?authuser=4&hl=tr)
Şekil 1. Kamera çekim modeli
Kamera HAL1'e genel bakış
Kamera alt sisteminin 1. sürümü, üst düzey kontrollere ve aşağıdaki üç çalışma moduna sahip bir kara kutu olarak tasarlanmıştır:
- Önizle
- Video Kaydı
- Hareketsiz görüntü yakalama
Her modun biraz farklı ve örtüşen özellikleri vardır. Bu durum, iki çalışma modu arasında yer alan seri modu gibi yeni özelliklerin uygulanmasını zorlaştırıyordu.
![Kamera blok şeması](https://source.android.google.cn/static/docs/core/camera/images/camera_block.png?authuser=4&hl=tr)
Şekil 2. Kamera bileşenleri
Android 7.0, birçok cihazda hâlâ kullanıldığı için kamera HAL1'i desteklemeye devam etmektedir. Ayrıca Android kamera hizmeti, hem HAL1 hem de HAL3'ün uygulanmasını destekler. Bu, kamera HAL1 ile daha az yetenekli bir ön kamerayı ve kamera HAL3 ile daha gelişmiş bir arka kamerayı desteklemek istediğinizde kullanışlıdır.
Her biri kendi sürüm numarasına sahip birden fazla bağımsız kamera cihazını listeleyen tek bir kamera HAL modülü (kendi sürüm numarasına sahip) vardır. 2 veya daha yeni cihazları desteklemek için 2 veya daha yeni bir kamera modülü gerekir. Bu tür kamera modüllerinde kamera cihazı sürümlerinin bir karışımı olabilir (Android'in her iki HAL'i de uygulamayı desteklediği ifadesiyle bunu kastediyoruz).