kamera HAL

Android'in kamera donanımı soyutlama katmanı (HAL), android.hardware.camera2'deki üst düzey kamera çerçevesi API'lerini temeldeki 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ıyor. Android 8.0, Kamera HAL API'sini HAL arayüz açıklama dili (HIDL) tarafından tanımlanan kararlı bir arayüze dönüştürerek Treble'ı tanıttı. Daha önce Android 7.0 ve daha düşük sürümler için bir kamera HAL modülü ve sürücüsü geliştirdiyseniz kamera hattındaki önemli değişikliklerden haberdar olun.

AIDL kamera HAL

Android 13 veya üstünü çalıştıran cihazlar için kamera çerçevesi, AIDL kamera HAL'leri için destek içerir. Kamera çerçevesi aynı zamanda 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 daha yeni bir sürüme yükselten cihazlarda uygulamak için cihaz üreticilerinin HAL işlemlerini HIDL kamera arayüzlerini kullanmaktan AIDL kamera arayüzlerine taşıması gerekir.

AIDL'nin avantajları hakkında bilgi edinmek için bkz. HAL'ler için AIDL .

AIDL kamera HAL'sini uygulayın

AIDL kamera HAL'sinin referans uygulaması için bkz. hardware/google/camera/common/hal/aidl_service/ .

AIDL kamera HAL spesifikasyonları aşağıdaki konumlardadır:

AIDL'ye geçiş yapan 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'sini doğrulayın

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 ( VtsAidlHalCameraProvider_TargetTest.cpp kullanıma sunuyor.

Kamera HAL3 özellikleri

Android Kamera API'sinin yeniden tasarımının amacı, API'yi daha verimli ve bakımı kolay hale getirecek şekilde yeniden düzenlerken uygulamaların Android cihazlarda kamera alt sistemini kontrol etme yeteneğini önemli ölçüde artırmaktır. Ek kontrol, 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 şekilde çalışabilen Android cihazlarda yüksek kaliteli kamera uygulamaları oluşturmayı kolaylaştırır.

Kamera alt sisteminin 3. Versiyonu, çalışma modlarını tek bir birleşik görünümde yapılandırır; bu, önceki modlardan herhangi birini ve seri çekim modu gibi diğer birkaç modu uygulamak için kullanılabilir. Bu, odaklama ve pozlama için daha iyi kullanıcı kontrolü ve gürültü azaltma, kontrast ve keskinleştirme gibi daha fazla işlem sonrası işlemle sonuçlanır. Ayrıca bu basitleştirilmiş görünüm, uygulama geliştiricilerinin kameranın çeşitli işlevlerini kullanmasını kolaylaştırır.

API, kamera alt sistemini, kare yakalama için gelen istekleri 1:1 temelinde karelere dönüştüren bir boru hattı olarak modeller. İstekler, bir çerçevenin yakalanması ve işlenmesiyle ilgili tüm yapılandırma bilgilerini kapsar. Buna çözünürlük ve piksel formatı da dahildir; manuel sensör, lens ve flaş kontrolü; 3A çalışma modları; RAW->YUV işleme kontrolü; istatistik üretimi; ve benzeri.

Basit bir ifadeyle 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 sonuç kümesi için renk uzayları ve mercek gölgelemesi gibi bilgileri içeren meta veriler oluşturulur. Kamera sürüm 3'ü, kamera sürüm 1'in tek yönlü akışına giden bir boru hattı olarak düşünebilirsiniz. Her yakalama talebini, sensör tarafından yakalanan tek bir görüntüye dönüştürür ve bu görüntü şu şekilde işlenir:

  • Yakalamayla ilgili meta verileri içeren bir sonuç nesnesi.
  • Her biri kendi hedef yüzeyinde bulunan birden N'ye kadar görüntü verisi arabelleği.

Olası çıkış yüzeyleri seti önceden yapılandırılmıştır:

  • Her yüzey, sabit çözünürlükteki görüntü arabelleklerinin akışı için bir hedeftir.
  • Aynı anda 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ü arabelleklerinin (toplam yapılandırılmış kümenin dışına) itileceği çıkış yüzeylerinin listesini içerir. Bir istek tek seferlik olabilir ( capture() ile) veya süresiz olarak tekrarlanabilir ( setRepeatingRequest() ile). Yakalamaların yinelenen isteklere göre önceliği vardır.

Kamera veri modeli

Şekil 1. Kamera çekirdeği çalışma modeli

Kamera HAL1'e genel bakış

Kamera alt sisteminin 1. Versiyonu, üst düzey kontrollere ve aşağıdaki üç çalışma moduna sahip bir kara kutu olarak tasarlanmıştır:

  • Ön izleme
  • Video Kaydı
  • Hala Yakala

Her modun biraz farklı ve örtüşen yetenekleri vardır. Bu, iki çalışma modu arasında yer alan seri çekim modu gibi yeni özelliklerin uygulanmasını zorlaştırdı.

Kamera blok şeması

Şekil 2. Kamera bileşenleri

Android 7.0, birçok cihaz hâlâ buna bağlı olduğundan HAL1 kamerayı desteklemeye devam ediyor. Ek olarak, Android kamera hizmeti her iki HAL'in (1 ve 3) uygulanmasını destekler; bu, HAL1 kameralı daha az yetenekli bir ön kamerayı ve HAL3 kameralı 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. Cihaz 2 veya daha yenisini desteklemek için Kamera modülü 2 veya daha yenisi gereklidir ve bu tür kamera modülleri, kamera cihazı versiyonlarının bir karışımına sahip olabilir (Android'in her iki HAL'in uygulanmasını desteklediğini söylediğimizde bunu kastediyoruz).