Kamera donanım soyutlama katmanı

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ştirmede AIDL kullanılır. Android 8.0, Treble'ı kullanıma sunarak Camera HAL API'sini HAL arayüz açıklama dili (HIDL) ile tanımlanan kararlı bir arayüze geçirmiştir. 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'si

Android 13 veya sonraki sürümleri çalıştıran cihazların kamera çerçevesi AIDL kamera HAL'lerini destekler. Kamera çerçevesi, HIDL kamera HAL'lerini de destekler. Ancak Android 13 veya sonraki sürümlerde 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'sini uygula

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:

AIDL'ye taşınan cihazlar için cihaz üreticilerinin, kod yapısına bağlı olarak Android SELinux politikasını (sepolicy) ve RC dosyalarını 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 tasarımı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 sürdürülebilir olacak şekilde yeniden düzenlemektir. Ek kontrol, 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ünde, çalışma modları tek bir birleşik görünümde yapılandırılır. Bu görünüm, önceki modlardan herhangi birini ve seri çekim modu gibi diğer birkaç modu uygulamak için kullanılabilir. Bu sayede, odak ve pozlama için daha iyi kullanıcı kontrolü elde edilir ve gürültü azaltma, kontrast ve keskinleştirme gibi daha fazla son işlem uygulanır. 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, kare yakalamaları için gelen istekleri bire bir karelere dönüştüren bir ardışık düzen olarak modeller. İstekler, bir çerçevenin yakalanması ve işlenmesiyle ilgili tüm yapılandırma bilgilerini içerir. Çö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 şekilde açıklamak gerekirse uygulama çerçevesi, kamera alt sisteminden bir çerçeve 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 ila N 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

Şekil 1. Kameranın temel çalışma 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ı
  • Fotoğraf çekmeye devam et

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ı

Ş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).