HAL Alt Sistemi

İstekler

Uygulama çerçevesi, yakalanan sonuçlar için istekleri kamera alt sistemine gönderir. Bir istek, bir sonuç kümesine karşılık gelir. Bir istek, bu sonuçların yakalanması ve işlenmesiyle ilgili tüm yapılandırma bilgilerini kapsar. Buna çözünürlük ve piksel formatı gibi şeyler dahildir; manuel sensör, lens ve flaş kontrolü; 3A çalışma modları; RAW'dan YUV'a işleme kontrolü; ve istatistik üretimi. Bu, sonuçların çıktısı ve işlenmesi üzerinde çok daha fazla kontrole olanak tanır. Aynı anda birden fazla istek yayında olabilir ve isteklerin gönderilmesi engellenmez. Ve talepler her zaman alındıkları sıraya göre işlenir.

Kamera istek modeli

Şekil 1. Kamera modeli

HAL ve kamera alt sistemi

Kamera alt sistemi, 3A algoritması ve işleme kontrolleri gibi kamera hattındaki bileşenlere yönelik uygulamaları içerir. Kamera HAL, bu bileşenlerin sürümlerini uygulamanız için arayüzler sağlar. Birden fazla cihaz üreticisi ve Görüntü Sinyali İşlemcisi (ISP veya kamera sensörü) satıcıları arasında platformlar arası uyumluluğu sürdürmek için kamera boru hattı modeli sanaldır ve herhangi bir gerçek ISP'ye doğrudan karşılık gelmez. Ancak gerçek işlem hatlarına yeterince benzer olduğundan, onu donanımınızla verimli bir şekilde eşleştirebilirsiniz. Ayrıca kaliteden, verimlilikten veya cihazlar arası uyumluluktan ödün vermeden birden fazla farklı algoritmaya ve işlem sırasına izin verecek kadar soyuttur.

Kamera hattı aynı zamanda uygulama çerçevesinin otomatik odaklama gibi şeyleri açmak için başlatabileceği tetikleyicileri de destekler. Ayrıca uygulama çerçevesine bildirimler göndererek uygulamaları otomatik odaklama kilidi veya hatalar gibi olaylar konusunda bilgilendirir.

Kamera donanımı soyutlama katmanı

Şekil 2. Kamera boru hattı

Lütfen yukarıdaki diyagramda gösterilen bazı görüntü işleme bloklarının ilk sürümde iyi tanımlanmadığını unutmayın. Kamera boru hattı aşağıdaki varsayımları yapar:

  • RAW Bayer çıktısı ISP içinde herhangi bir işleme tabi tutulmaz.
  • İstatistikler ham sensör verilerine dayanarak oluşturulur.
  • Ham sensör verilerini YUV'ye dönüştüren çeşitli işleme blokları rastgele bir sıradadır.
  • Çoklu ölçek ve kırpma birimleri gösterilirken, tüm ölçekleyici birimleri çıktı bölgesi kontrollerini (dijital yakınlaştırma) paylaşır. Ancak her ünite farklı bir çıkış çözünürlüğüne ve piksel formatına sahip olabilir.

API kullanımının özeti
Bu, Android kamera API'sini kullanma adımlarının kısa bir özetidir. API çağrıları da dahil olmak üzere bu adımların ayrıntılı bir dökümü için Başlangıç ​​ve beklenen işlem sırası bölümüne bakın.

  1. Kamera cihazlarını dinleyin ve numaralandırın.
  2. Cihazı açın ve dinleyicileri bağlayın.
  3. Hedef kullanım durumu için çıktıları yapılandırın (hareketsiz yakalama, kayıt vb. gibi).
  4. Hedef kullanım durumu için istek(ler) oluşturun.
  5. İstekleri ve patlamaları yakalayın/tekrarlayın.
  6. Sonuç meta verilerini ve görüntü verilerini alın.
  7. Kullanım senaryolarını değiştirirken 3. adıma dönün.

HAL operasyon özeti

  • Yakalamalara yönelik eşzamansız istekler çerçeveden gelir.
  • HAL cihazının istekleri sırayla işlemesi gerekir. Ve her istek için çıktı sonucu meta verileri ve bir veya daha fazla çıktı görüntüsü arabelleği üretin.
  • İstekler ve sonuçlar ile sonraki istekler tarafından başvurulan akışlar için ilk giren ilk çıkar.
  • Çerçevenin gerektiğinde bunları eşleştirebilmesi için zaman damgalarının belirli bir isteğin tüm çıktıları için aynı olması gerekir.
  • Tüm yakalama yapılandırması ve durumu (3A rutinleri hariç) isteklerde ve sonuçlarda kapsüllenir.
Kamera HAL'a genel bakış

Şekil 3. Kamera HAL'ye genel bakış

Başlatma ve beklenen işlem sırası

Bu bölüm, kamera API'sini kullanırken beklenen adımların ayrıntılı bir açıklamasını içerir. HIDL arayüz tanımları için lütfen platform/donanım/arayüzler/kamera/ bölümüne bakın.

Kamera cihazlarını numaralandırma, açma ve aktif oturum oluşturma

  1. Başlatma sonrasında çerçeve, ICameraProvider arayüzünü uygulayan mevcut kamera sağlayıcılarını dinlemeye başlar. Eğer böyle bir sağlayıcı veya sağlayıcılar mevcutsa, çerçeve bir bağlantı kurmaya çalışacaktır.
  2. Çerçeve, kamera cihazlarını ICameraProvider::getCameraIdList() aracılığıyla numaralandırır.
  3. Çerçeve, ilgili ICameraProvider::getCameraDeviceInterface_VX_X() öğesini çağırarak yeni bir ICameraDevice örneğini oluşturur.
  4. Çerçeve, yeni bir aktif yakalama oturumu ICameraDeviceSession oluşturmak için ICameraDevice::open() öğesini çağırır.

Aktif bir kamera oturumu kullanma

  1. Çerçeve, HAL cihazına giden giriş/çıkış akışlarının bir listesiyle birlikte ICameraDeviceSession::configureStreams() çağırır.
  2. Çerçeve, ICameraDeviceSession::constructDefaultRequestSettings() çağrılarına sahip bazı kullanım durumları için varsayılan ayarları ister. Bu, ICameraDeviceSession ICameraDevice::open tarafından oluşturulduktan sonra herhangi bir zamanda meydana gelebilir.
  3. Çerçeve, ilk yakalama isteğini, varsayılan ayar kümelerinden birine dayalı ayarlarla ve çerçeve tarafından daha önce kaydedilmiş en az bir çıkış akışıyla oluşturur ve HAL'e gönderir. Bu, ICameraDeviceSession::processCaptureRequest() ile HAL'ye gönderilir. HAL, bir sonraki isteğin gönderilmesine hazır olana kadar bu çağrının geri dönüşünü engellemelidir.
  4. Çerçeve istekleri göndermeye devam eder ve gerektiğinde diğer kullanım durumları için varsayılan ayar arabelleklerini almak üzere ICameraDeviceSession::constructDefaultRequestSettings() öğesini çağırır.
  5. Bir isteğin yakalanması başladığında (sensör yakalama için açığa çıkmaya başladığında), HAL, çerçeve numarası ve pozlamanın başlangıcı için zaman damgasını içeren SHUTTER mesajıyla birlikte ICameraDeviceCallback::notify() işlevini çağırır. Bu bildirim geri çağırma işleminin, bir istek için ilk processCaptureResult() çağrısından önce gerçekleşmesi gerekmez, ancak bu yakalama için notify() çağrılıncaya kadar bir yakalama uygulamasına hiçbir sonuç teslim edilmez.
  6. Bir miktar ardışık düzen gecikmesinden sonra HAL, tamamlanan yakalamaları ICameraDeviceCallback::processCaptureResult() ile çerçeveye döndürmeye başlar. Bunlar, taleplerin iletildiği sırayla iade edilir. Kamera HAL cihazının boru hattı derinliğine bağlı olarak aynı anda birden fazla istek yayında olabilir.

Bir süre sonra aşağıdakilerden biri meydana gelecektir:

  • Çerçeve yeni istek göndermeyi durdurabilir, mevcut yakalamaların tamamlanmasını bekleyebilir (tüm arabellekler doldurulur, tüm sonuçlar döndürülür) ve ardından ICameraDeviceSession::configureStreams() yeniden çağırabilir. Bu, yeni bir giriş/çıkış akışı seti için kamera donanımını ve boru hattını sıfırlar. Bazı akışlar önceki yapılandırmadan yeniden kullanılabilir. Daha sonra çerçeve, eğer en az bir kayıtlı çıktı akışı kalırsa, ilk yakalama talebinden HAL'ye kadar devam eder. (Aksi takdirde, önce ICameraDeviceSession::configureStreams() gereklidir.)
  • Çerçeve, kamera oturumunu sonlandırmak için ICameraDeviceSession::close() çağırabilir. Bu, çerçeveden başka hiçbir çağrının aktif olmadığı herhangi bir zamanda çağrılabilir, ancak tüm uçuş sırasındaki yakalamalar tamamlanana kadar çağrı engellenebilir (tüm sonuçlar döndürülür, tüm ara bellekler doldurulur). close() çağrısı geri döndükten sonra, HAL'den ICameraDeviceCallback yapılan çağrılara artık izin verilmez. close() çağrısı başlatıldığında, çerçeve başka hiçbir HAL aygıtı işlevini çağıramayabilir.
  • Bir hata veya başka bir eşzamansız olay durumunda HAL, uygun hata/olay mesajıyla birlikte ICameraDeviceCallback::notify() öğesini çağırmalıdır. Cihaz çapında önemli bir hata bildiriminden döndükten sonra HAL, sanki close() çağrılmış gibi davranmalıdır. Bununla birlikte, HAL'nin notify() işlevini çağırmadan önce bekleyen tüm yakalamaları iptal etmesi veya tamamlaması gerekir; böylece notify() ölümcül bir hatayla çağrıldığında çerçeve aygıttan başka geri çağrılar almayacaktır. close() dışındaki yöntemler notify() yöntemi önemli bir hata mesajından döndükten sonra -ENODEV veya NULL değerini döndürmelidir.
Kamera işlemleri akışı

Şekil 4. Kameranın çalışma akışı

Donanım seviyeleri

Kamera cihazları, yeteneklerine bağlı olarak çeşitli donanım seviyelerini uygulayabilir. Daha fazla bilgi için desteklenen donanım düzeyine bakın.

Uygulama yakalama isteği, 3A kontrolü ve işleme hattı arasındaki etkileşim

3A kontrol bloğundaki ayarlara bağlı olarak kamera boru hattı, uygulamanın yakalama isteğindeki bazı parametreleri göz ardı eder ve bunun yerine 3A kontrol rutinleri tarafından sağlanan değerleri kullanır. Örneğin, otomatik pozlama etkin olduğunda sensörün pozlama süresi, kare süresi ve hassasiyet parametreleri platform 3A algoritması tarafından kontrol edilir ve uygulama tarafından belirlenen değerler göz ardı edilir. 3A rutinleri tarafından çerçeve için seçilen değerlerin çıktı meta verilerinde bildirilmesi gerekir. Aşağıdaki tabloda 3A kontrol bloğunun farklı modları ve bu modlar tarafından kontrol edilen özellikler açıklanmaktadır. Bu özelliklerin tanımları için platform/system/media/camera/docs/docs.html dosyasına bakın.

Parametre Durum Özellikler kontrol edildi
android.control.aeMode KAPALI Hiçbiri
AÇIK android.sensor.exposureTime android.sensor.frameDuration android.sensor.sensitivity android.lens.aperture (destekleniyorsa) android.lens.filterDensity (destekleniyorsa)
ON_AUTO_FLASH Her şey AÇIK, artı android.flash.firingPower, android.flash.firingTime ve android.flash.mode
ON_ALWAYS_FLASH ON_AUTO_FLASH ile aynı
ON_AUTO_FLASH_RED_EYE ON_AUTO_FLASH ile aynı
android.control.awbMode KAPALI Hiçbiri
BEYAZ DENGESİ_* android.colorCorrection.transform. android.colorCorrection.mode'un FAST veya HIGH_QUALITY olması durumunda platforma özel ayarlamalar.
android.control.afMode KAPALI Hiçbiri
ODAK MODU_* android.lens.focusDistance
android.control.videoSabitleme KAPALI Hiçbiri
AÇIK Video sabitlemeyi uygulamak için android.scaler.cropRegion'ı ayarlayabilir
android.kontrol.modu KAPALI AE, AWB ve AF devre dışı
OTO Bireysel AE, AWB ve AF ayarları kullanılır
SAHNE MODU_* Yukarıda listelenen tüm parametreleri geçersiz kılabilir. Bireysel 3A kontrolleri devre dışı bırakılır.

Şekil 2'deki Görüntü İşleme bloğundaki kontrollerin tümü benzer prensipte çalışır ve genellikle her bloğun üç modu vardır:

  • KAPALI: Bu işleme bloğu devre dışıdır. Demozaik, renk düzeltme ve ton eğrisi ayarlama blokları devre dışı bırakılamaz.
  • HIZLI: Bu modda, işleme bloğu, KAPALI moduna kıyasla çıktı kare hızını yavaşlatmayabilir, ancak aksi takdirde, bu kısıtlama göz önüne alındığında mümkün olan en iyi kalitede çıktıyı üretmelidir. Tipik olarak bu, önizleme veya video kayıt modları veya durağan görüntüler için seri çekim için kullanılır. Bazı cihazlarda bu, KAPALI moduna eşdeğer olabilir (kare hızı yavaşlatılmadan hiçbir işlem yapılamaz), bazı cihazlarda ise HIGH_QUALITY moduna eşdeğer olabilir (en iyi kalite yine de kare hızını yavaşlatmaz).
  • HIGH_QUALITY: Bu modda işleme bloğu, çıktı kare hızını gerektiği gibi yavaşlatarak mümkün olan en iyi kalitede sonucu üretmelidir. Genellikle bu, yüksek kaliteli hareketsiz çekim için kullanılır. Bazı bloklar, FAST veya HIGH_QUALITY yerine isteğe bağlı olarak seçilebilen bir manuel kontrol içerir. Örneğin, renk düzeltme bloğu bir renk dönüşüm matrisini desteklerken, ton eğrisi ayarlaması isteğe bağlı bir global ton eşleme eğrisini destekler.

Bir kamera alt sistemi tarafından desteklenebilecek maksimum kare hızı birçok faktörün bir fonksiyonudur:

  • Çıkış görüntü akışlarının istenen çözünürlükleri
  • Görüntüleyicide gruplama/atlama modlarının kullanılabilirliği
  • Görüntüleyici arayüzünün bant genişliği
  • Çeşitli ISP işleme bloklarının bant genişliği

Bu faktörler farklı ISP'ler ve sensörler arasında büyük ölçüde farklılık gösterebileceğinden, kamera HAL arayüzü bant genişliği kısıtlamalarını mümkün olduğunca basit bir modele soyutlamaya çalışır. Sunulan model aşağıdaki özelliklere sahiptir:

  • Görüntü sensörü, uygulamanın talep ettiği çıkış akışı boyutları göz önüne alındığında her zaman mümkün olan en küçük çözünürlüğü verecek şekilde yapılandırılır. En küçük çözünürlük, en az istenen en büyük çıkış akışı boyutu kadar büyük olarak tanımlanır.
  • Herhangi bir istek, halihazırda yapılandırılmış olan çıkış akışlarının herhangi birini veya tamamını kullanabileceğinden, sensör ve ISP, tek bir yakalamanın aynı anda tüm akışlara ölçeklendirilmesini destekleyecek şekilde yapılandırılmalıdır.
  • JPEG akışları, dahil edilmedikleri istekler için işlenmiş YUV akışları gibi davranır; doğrudan başvurulan isteklerde JPEG akışı görevi görürler.
  • JPEG işlemcisi, kamera hattının geri kalanıyla aynı anda çalışabilir ancak aynı anda birden fazla yakalamayı işleyemez.