HAL alt sistemi

Bu sayfada, istekler, kamera alt sistemi, başlatma ve işlem sırası, donanım düzeyleri ve etkileşimler dahil olmak üzere HAL alt sistemi açıklanmaktadır.

İstekler

Uygulama çerçevesi, yakalanan sonuçlar için kamera alt sistemine istek gönderir. Bir istek, bir sonuç kümesine karşılık gelir. İstek, bu sonuçların yakalanması ve işlenmesiyle 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'dan YUV'ya işleme kontrolü ve istatistik oluşturma gibi özellikler buna dahildir. Bu sayede sonuçların çıkışı ve işlenmesi üzerinde çok daha fazla kontrol sahibi olabilirsiniz. Aynı anda birden fazla istek gönderilebilir ve istek gönderme işlemi engellenmez. İstekler her zaman alındıkları sırayla işlenir.

Kamera isteği modeli

Şekil 1. Kamera modeli.

HAL ve kamera alt sistemi

Kamera alt sistemi, 3A algoritması ve işleme kontrolleri gibi kamera işlem hattındaki bileşenlerin uygulamalarını içerir. Kamera HAL'si, bu bileşenlerin sürümlerini uygulamanız için arayüzler sağlar. Birden fazla cihaz üreticisi ve Görüntü Sinyali İşlemcisi (GSİ veya kamera sensörü) satıcısı arasında platformlar arası uyumluluğu korumak için kamera ardışık düzen modeli sanaldır ve herhangi bir gerçek GSİ'ye doğrudan karşılık gelmez. Ancak, donanımınıza verimli bir şekilde eşleyebilmeniz için gerçek işleme işlem hatlarına yeterince benzerdir. Ayrıca, kalite, verimlilik veya cihazlar arası uyumluluktan ödün vermeden birden fazla farklı algoritma ve işlem sırasına izin verecek kadar soyuttur.

Kamera işlem hattı, uygulama çerçevesinin otomatik odaklama gibi özellikleri etkinleştirmek için başlatabileceği tetikleyicileri de destekler. Ayrıca, uygulama çerçevesine bildirimler göndererek uygulamaları otomatik odak kilidi veya hatalar gibi etkinlikler hakkında bilgilendirir.

Kamera donanım soyutlama katmanı

Şekil 2. Kamera ardışık düzeni.

Yukarıdaki şemada gösterilen bazı görüntü işleme bloklarının ilk sürümde iyi tanımlanmadığını unutmayın. Kamera işlem hattı aşağıdaki varsayımlarda bulunur:

  • RAW Bayer çıkışı, ISP içinde herhangi bir işleme tabi tutulmaz.
  • İstatistikler, ham sensör verilerine göre oluşturulur.
  • Ham sensör verilerini YUV'ye dönüştüren çeşitli işleme blokları rastgele bir sıradadır.
  • Birden fazla ölçeklendirme ve kırpma birimi gösterilirken tüm ölçeklendirme birimleri çıkış bölgesi kontrollerini (dijital yakınlaştırma) paylaşır. Ancak her birimin farklı bir çıkış çözünürlüğü ve piksel biçimi olabilir.

API kullanım ö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ı dökümü için Başlatma ve beklenen işlem sırası bölümüne bakın.

  1. Kamera cihazlarını dinleyip numaralandırır.
  2. Cihazı açın ve dinleyicileri bağlayın.
  3. Hedef kullanım alanı için çıkışları yapılandırın (ör. hareketsiz görüntü yakalama veya kayıt).
  4. Hedef kullanım alanı için istekler oluşturun.
  5. Yakalama/tekrarlama istekleri ve patlamalar.
  6. Sonuç meta verilerini ve görüntü verilerini alma
  7. Kullanım alanları arasında geçiş yaparken 3. adıma dönün.

HAL işlem özeti

  • Yakalamalar için eşzamansız istekler çerçeveden gelir.
  • HAL cihazı, istekleri sırayla işlemelidir. Ayrıca her istek için çıkış sonucu meta verileri ve bir veya daha fazla çıkış resmi arabelleği oluşturun.
  • İstekler ve sonuçlar ile sonraki isteklerde referans verilen yayınlar için ilk gelen ilk çıkar.
  • Çerçevenin gerekirse bunları eşleştirebilmesi için belirli bir istekten gelen tüm çıktılarda zaman damgaları aynı olmalıdır.
  • Tüm yakalama yapılandırması ve durumu (3A rutinleri hariç) isteklerde ve sonuçlarda kapsüllenir.
Kamera donanım soyutlama katmanına genel bakış

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

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

Bu bölümde, kamera API'si kullanılırken beklenen adımlarla ilgili ayrıntılı bir açıklama yer almaktadır. HIDL arayüz tanımları için platform/hardware/interfaces/camera/ adresine bakın.

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

  1. Çerçeve, başlatma işleminden sonra ICameraProvider arayüzünü uygulayan mevcut kamera sağlayıcıları dinlemeye başlar. Bu tür bir sağlayıcı veya sağlayıcılar varsa çerçeve bağlantı kurmaya çalışır.
  2. Çerçeve, kamera cihazlarını ICameraProvider::getCameraIdList üzerinden numaralandırır.
  3. Çerçeve, ilgili ICameraProvider::getCameraDeviceInterface_VX_X'yi çağırarak yeni bir ICameraDevice oluşturur.
  4. Çerçeve, yeni bir etkin yakalama oturumu ICameraDeviceSession oluşturmak için ICameraDevice::open çağrısı yapar.

Etkin bir kamera oturumu kullanma

  1. Çerçeve, HAL cihazına giriş/çıkış akışlarının listesiyle ICameraDeviceSession::configureStreams işlevini çağırır.
  2. Çerçeve, ICameraDeviceSession::constructDefaultRequestSettings çağrılarıyla bazı kullanım alanları için varsayılan ayarları ister. Bu durum, ICameraDeviceSession, ICameraDevice::open tarafından oluşturulduktan sonra herhangi bir zamanda meydana gelebilir.
  3. Çerçeve, varsayılan ayar gruplarından birine dayalı ayarlarla ve çerçeve tarafından daha önce kaydedilmiş en az bir çıkış akışıyla ilk yakalama isteğini oluşturup HAL'ye gönderir. Bu, ICameraDeviceSession::processCaptureRequest ile birlikte HAL'ye gönderilir. HAL, bir sonraki isteğin gönderilmesine hazır olana kadar bu çağrının döndürülmesini engellemelidir.
  4. Çerçeve, gerektiğinde diğer kullanım alanları için varsayılan ayar arabelleklerini almak üzere istek ve çağrı göndermeye devam eder. ICameraDeviceSession::constructDefaultRequestSettings
  5. Bir isteğin yakalanması başladığında (sensör, yakalama için pozlamaya başlar) HAL, pozlamanın başlangıcına ait zaman damgası ve kare numarası da dahil olmak üzere SHUTTER mesajıyla ICameraDeviceCallback::notify işlevini çağırır. Bu bildirim geri çağırması, istek için ilk processCaptureResult çağrısından önce gerçekleşmek zorunda değildir ancak yakalama için notify çağrısı yapılana kadar uygulamaya yakalama sonuçları gönderilmez.
  6. HAL, işlem hattında bir gecikme yaşandıktan sonra tamamlanan çekimleri ICameraDeviceCallback::processCaptureResult ile çerçeveye döndürmeye başlar. Bunlar, isteklerin gönderildiği sırayla döndürülür. Kamera HAL cihazının ardışık düzen derinliğine bağlı olarak aynı anda birden fazla istek işlenebilir.

Bir süre sonra aşağıdaki durumlardan biri gerçekleşir:

  • Çerçeve yeni istek göndermeyi durdurur, mevcut yakalamaların tamamlanmasını (tüm arabellekler doldurulur, tüm sonuçlar döndürülür) bekler ve ardından ICameraDeviceSession::configureStreams işlevini tekrar çağırır. Bu işlem, yeni bir giriş/çıkış akışı grubu için kamera donanımını ve işlem hattını sıfırlar. Bazı akışlar önceki yapılandırmadan yeniden kullanılabilir. Daha sonra, kayıtlı en az bir çıkış akışı kalırsa çerçeve, ilk yakalama isteğinden HAL'ye kadar devam eder. (Aksi takdirde, önce ICameraDeviceSession::configureStreams gerekir.)
  • Çerçeve, kamera oturumunu sonlandırmak için ICameraDeviceSession::close işlevini çağırabilir. Bu işlev, çerçeveden başka bir çağrı etkin değilken herhangi bir zamanda çağrılabilir. Ancak, tüm devam eden yakalamalar tamamlanana kadar (tüm sonuçlar döndürülene, tüm arabellekler doldurulana kadar) çağrı engellenebilir. close çağrısı döndükten sonra HAL'den ICameraDeviceCallback'ye başka çağrı yapılmasına izin verilmez. close araması devam ederken çerçeve başka HAL cihaz işlevlerini çağıramaz.
  • Hata veya başka bir eşzamansız etkinlik durumunda HAL, uygun hata/etkinlik mesajıyla ICameraDeviceCallback::notify işlevini çağırmalıdır. Cihaz genelinde önemli bir hata bildirimi döndürüldükten sonra HAL, close çağrılmış gibi davranmalıdır. Ancak HAL, notify çağrılmadan önce tüm bekleyen yakalamaları iptal etmeli veya tamamlamalıdır. Böylece notify ölümcül bir hatayla çağrıldıktan sonra çerçeve, cihazdan başka geri çağırma almaz. close dışındaki yöntemler, notify yöntemi ölümcül bir hata mesajı döndürdü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ı, özelliklerine bağlı olarak çeşitli donanım düzeylerini uygulayabilir. Daha fazla bilgi için desteklenen donanım seviyesi başlıklı makaleyi inceleyin.

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

3A kontrol bloğundaki ayarlara bağlı olarak, kamera ardışık düzeni uygulamanın yakalama isteğindeki bazı parametreleri yoksayar 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 3A algoritması tarafından kontrol edilir ve uygulamaya özel olarak belirtilen değerler yok sayılır. 3A rutinleri tarafından kare için seçilen değerler, çıkış meta verilerinde bildirilmelidir. 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 Eyalet Kontrol edilen özellikler
android.control.aeMode OFF Yok.
ON android.sensor.exposureTime, android.sensor.frameDuration, android.sensor.sensitivity, android.lens.aperture (destekleniyorsa), ve android.lens.filterDensity (destekleniyorsa).
ON_AUTO_FLASH Her şey ON, ayrıca android.flash.firingPower, android.flash.firingTime ve android.flash.mode.
ON_ALWAYS_FLASH ON_AUTO_FLASH ile aynıdır.
ON_AUTO_FLASH_RED_EYE ON_AUTO_FLASH ile aynıdır.
android.control.awbMode OFF Yok.
WHITE_BALANCE_* android.colorCorrection.transform. android.colorCorrection.mode, FAST veya HIGH_QUALITY ise platforma özgü düzenlemeler.
android.control.afMode OFF Yok
FOCUS_MODE_* android.lens.focusDistance
android.control.videoStabilization OFF Yok.
ON Video sabitlemeyi uygulamak için android.scaler.cropRegion ayarlanabilir.
android.control.mode OFF AE, AWB ve AF devre dışı bırakılır.
AUTO Ayrı AE, AWB ve AF ayarları kullanılır.
SCENE_MODE_* Yukarıda listelenen tüm parametreleri geçersiz kılabilir. Ayrı 3A kontrolleri devre dışıdır.

Şekil 2'deki görüntü işleme bloğundaki kontrollerin tümü benzer bir ilkeye göre çalışır ve her blokta üç mod bulunur:

  • OFF: Bu işleme engeli devre dışı bırakıldı. Demosaik, renk düzeltme ve ton eğrisi ayarlama blokları devre dışı bırakılamaz.
  • FAST: Bu modda, işleme bloğu, OFF moduna kıyasla çıkış kare hızını yavaşlatmayabilir ancak bu kısıtlama göz önünde bulundurulduğunda mümkün olan en kaliteli çıkışı üretmelidir. Bu genellikle önizleme veya video kaydı modlarında ya da fotoğraflar için seri çekim modunda kullanılır. Bazı cihazlarda bu, OFF moduna (kare hızı yavaşlatılmadan işlem yapılamaz) eşdeğer olabilir. Bazı cihazlarda ise HIGH_QUALITY moduna (en iyi kalite kare hızını yavaşlatmaz) eşdeğer olabilir.
  • HIGH_QUALITY: Bu modda, işleme bloğu mümkün olan en iyi kalitede sonucu üretmeli ve gerektiğinde çıkış kare hızını yavaşlatmalıdır. Bu genellikle yüksek kaliteli fotoğraf çekimi için kullanılır. Bazı bloklarda, FAST veya HIGH_QUALITY yerine isteğe bağlı olarak seçilebilen bir manuel kontrol bulunur. Örneğin, renk düzeltme bloğu bir renk dönüştürme matrisini desteklerken ton eğrisi ayarı rastgele bir genel ton eşleme eğrisini destekler.

Bir kamera alt sisteminin destekleyebileceği maksimum kare hızı birçok faktöre bağlıdır:

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

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

  • Görüntü sensörü, uygulamanın istediği çıkış akışı boyutları göz önünde bulundurularak 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, istenen en büyük çıkış akışı boyutu kadar büyük olacak şekilde tanımlanır.
  • Herhangi bir istek, şu anda yapılandırılmış çıkış akışlarının herhangi birini veya tümünü kullanabilir. Bu nedenle, 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 isteklerde işlenmiş YUV akışları gibi davranır. Doğrudan referans verilen isteklerde ise JPEG akışları gibi davranır.
  • JPEG işlemcisi, kamera işlem hattının geri kalan kısmıyla eşzamanlı olarak çalışabilir ancak aynı anda birden fazla çekimi işleyemez.