kamera HAL

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 başlayarak, kamera HAL arayüzü geliştirmesi AIDL'yi kullanır. Android 8.0, Kamera HAL API'sini HAL arabirimi açıklama dili (HIDL) tarafından tanımlanan kararlı bir arabirime dönüştüren Treble'ı tanıttı. 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 hattındaki önemli değişikliklerin farkında olun.

AIDL kamera HAL

Android 13 veya sonraki sürümleri çalıştıran cihazlar için kamera çerçevesi, AIDL kamera HAL'leri için destek içerir. Kamera çerçevesi ayrıca HIDL kamera HAL'lerini de destekler, ancak Android 13 veya sonraki sürümlerde eklenen kamera özellikleri yalnızca AIDL kamera HAL arabirimleri aracılığıyla kullanılabilir. Bu tür özellikleri Android 13 veya sonraki sürümlere yükseltilen cihazlarda uygulamak için cihaz üreticilerinin HAL işlemlerini HIDL kamera arayüzlerini kullanmaktan AIDL kamera arayüzlerine geçirmeleri gerekir.

AIDL'nin avantajları hakkında bilgi edinmek için HAL'ler için AIDL'ye bakın.

AIDL kamera HAL'ı uygulayın

Bir AIDL kamera HAL'ının referans uygulaması için, hardware/google/camera/common/hal/aidl_service/ .

AIDL kamera HAL özellikleri 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'yi 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 testi olan VtsAidlHalCameraProvider_TargetTest.cpp .

Kamera HAL3 özellikleri

Android Kamera API'sinin yeniden tasarımının amacı, API'yi daha verimli ve sürdürülebilir hale getirmek için yeniden düzenlerken uygulamaların Android cihazlarda kamera alt sistemini kontrol etme yeteneğini önemli ölçüde artırmaktır. Ek kontrol, kalite 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. Sürümü, çalışma modlarını, önceki modlardan herhangi birini ve seri çekim modu gibi birkaç diğerini uygulamak için kullanılabilen tek bir birleşik görünümde yapılandırır. Bu, odak 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şleme ile sonuçlanı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, çerçeve yakalamaları için gelen istekleri 1:1 temelinde çerçevelere 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 kapsar. Buna çözünürlük ve piksel formatı 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 çıktı akışına döndürür. Ayrıca, her bir sonuç kümesi için renk uzayları ve mercek gölgeleme 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 bir yakalama talebini, sensör tarafından yakalanan ve şu şekilde işlenen tek bir görüntüye dönüştürür:

  • Yakalama hakkında meta veriler 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 bir çözünürlüğe sahip bir görüntü arabelleği akışı için bir hedeftir.
  • Tek seferde sadece az sayıda yüzey çıkış olarak konfigüre edilebilir (~3).

Bir istek, istenen tüm yakalama ayarlarını ve bu istek için görüntü arabelleklerini itmek için çıktı yüzeylerinin listesini içerir (toplam yapılandırılmış kümenin dışında). Bir istek tek seferlik olabilir ( catch() ile) veya süresiz olarak tekrarlanabilir ( capture() setRepeatingRequest() ile). Yakalamalar, yinelenen isteklere göre önceliğe sahiptir.

Kamera veri modeli

Şekil 1. Kamera çekirdek ç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:

  • Ön izleme
  • Video Kaydı
  • Hala Yakalama

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

Kamera blok şeması

Şekil 2. Kamera bileşenleri

Android 7.0, birçok cihaz hala ona güvendiği için kamera HAL1'i desteklemeye devam ediyor. Ayrıca, Android kamera hizmeti, HAL1 kameralı daha az yetenekli bir öne bakan kamerayı ve kamera HAL3'lü daha gelişmiş bir arkaya bakan kamerayı desteklemek istediğinizde kullanışlı olan hem HAL'lerin (1 ve 3) uygulanmasını destekler.

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ı sürümlerinin bir karışımına sahip olabilir (Android'in her iki HAL'ı da uygulamayı desteklediğini söylediğimizde kastettiğimiz şey budur).