HAL alt sistemi

İ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. İstekler, bu sonuçların yakalanması ve işlenmesi ile ilgili tüm yapılandırma bilgilerini kapsar. Çözünürlük ve piksel biçimi, manuel sensör, lens ve flaşlı kamera kontrolü, 3A çalışma modları, RAW'dan YUV'ye işleme kontrolü ve istatistik oluşturma gibi özellikler bu kapsamdadır. Bu sayede, sonuçların çıkışı ve işlenmesi üzerinde çok daha fazla kontrol sahibi olabilirsiniz. Birden fazla istek aynı anda gönderilebilir ve istek gönderme işlemi engellenmez. İstekler her zaman gönderildikleri sırayla işlenir.

Kamera isteği modeli

Şekil 1. Kamera modeli

HAL ve kamera alt sistemi

Kamera alt sistemi, kamera ardışık düzenindeki bileşenlerin (ör. 3A algoritması ve işleme kontrolleri) uygulamalarını 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 işleyici (ISP veya kamera sensörü) tedarikçisi arasında platformlar arası uyumluluğu sağlamak için kamera ardışık düzeni modeli sanaldır ve doğrudan herhangi bir gerçek ISP ile eşleşmez. Ancak gerçek işleme ardışık düzenlerine yeterince benzediğinden donanımınızla verimli bir şekilde eşleyebilirsiniz. Ayrıca, kalite, verimlilik veya cihazlar arası uyumluluktan ödün vermeden birden fazla farklı algoritmaya ve işlem sırasına izin verecek kadar soyuttur.

Kamera ardışık düzeni, otomatik odaklama gibi özellikleri etkinleştirmek için uygulama çerçevesinin başlatabileceği tetikleyicileri de destekler. Ayrıca, uygulama çerçevesine geri bildirim göndererek uygulamaları otomatik odaklama 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 yeterince tanımlanmadığını lütfen unutmayın. Kamera ardışık düzeni 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çek ve kırpma birimi gösterilirken tüm ölçek birimleri çıkış bölgesi kontrollerini (dijital yakınlaştırma) paylaşır. Ancak her bir birimin farklı çıkış çözünürlüğü ve piksel biçimi 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ı dökümünü görmek için Başlangıç ve beklenen işlem sırası bölümüne bakın.

  1. Kamera cihazlarını dinleyebilir ve sayabilir.
  2. Cihazı açın ve dinleyicileri bağlayın.
  3. Çıkışları hedef kullanım alanına göre yapılandırın (ör. fotoğraf çekme, kayıt vb.).
  4. Hedef kullanım alanı için istek oluşturun.
  5. İstekleri ve seri çekimleri yakalama/tekrarlama.
  6. Sonuç meta verilerini ve resim verilerini alın.
  7. Kullanım alanlarını değiştirirken 3. adıma dönün.

HAL operasyon özeti

  • Yakalamalarla ilgili asenkron istekler çerçeveden gelir.
  • HAL cihazı, istekleri sırayla işlemelidir. Ayrıca her istek için çıkış sonucu meta verilerini ve bir veya daha fazla çıkış görüntü arabelleğini oluşturur.
  • İstekler ve sonuçlar için, sonraki istekler tarafından referans verilen akışlar için önce giren, önce çıkan.
  • Zaman damgaları, çerçevenin gerektiğinde bunları eşleştirebilmesi için belirli bir istekteki tüm çıkışlar için aynı olmalıdır.
  • Tüm yakalama yapılandırması ve durumu (3A rutinleri hariç) istek ve sonuçlara dahil edilir.
Kamera HAL'e genel bakış

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

Başlangıç ve beklenen işlem sırası

Bu bölümde, kamera API'si kullanılırken uygulanması gereken adımlar ayrıntılı olarak açıklanmaktadır. HIDL arayüzü tanımları için lütfen platform/hardware/interfaces/camera/ adresine bakın.

Kamera cihazlarını sayma, açma ve etkin oturum oluşturma

  1. İlklendirmeden sonra çerçeve, ICameraProvider arayüzünü uygulayan mevcut kamera sağlayıcılarını 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 enumerate eder.
  3. Çerçeve, ilgili ICameraProvider::getCameraDeviceInterface_VX_X()'ı çağırarak yeni bir ICameraDevice örneği oluşturur.
  4. Çerçeve, yeni bir etkin yakalama oturumu ICameraDeviceSession oluşturmak için ICameraDevice::open()'ü çağırır.

Etkin bir kamera oturumu kullanma

  1. Çerçeve, HAL cihazına giriş/çıkış akışlarının listesini içeren ICameraDeviceSession::configureStreams() çağrısı yapar.
  2. Çerçeve, ICameraDeviceSession::constructDefaultRequestSettings() çağrıları olan bazı kullanım alanları için varsayılan ayarları ister. Bu durum, ICameraDeviceSession ICameraDevice::open tarafından oluşturulduktan sonra herhangi bir zamanda gerçekleşebilir.
  3. Çerçeve, ilk yakalama isteğini HAL'e oluşturup gönderir. Bu istek, varsayılan ayar gruplarından birine dayalı ayarlarla ve çerçeve tarafından daha önce kaydedilmiş en az bir çıkış akışıyla gönderilir. Bu, HAL'e ICameraDeviceSession::processCaptureRequest() ile gönderilir. HAL, bir sonraki istek gönderilmeye 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 tamponları almak üzere ICameraDeviceSession::constructDefaultRequestSettings()'e istek göndermeye ve arama yapmaya devam eder.
  5. Bir istek yakalanmaya başladığında (sensör, yakalama için pozlamaya başlar), HAL, kare numarası ve pozlamanın başlangıç zaman damgası da dahil olmak üzere SHUTTER mesajıyla ICameraDeviceCallback::notify()'ü çağırır. Bu bildirim geri çağırma işleminin, istek için ilk processCaptureResult() çağrısından önce yapılması gerekmez ancak ilgili yakalama için notify() çağrısı yapıldıktan sonra yakalama işlemine ilişkin hiçbir sonuç uygulamaya iletilmez.
  6. HAL, bazı ardışık düzen gecikmesinden sonra tamamlanan yakalamaları 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 gönderilebilir.

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

  • Ç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() işlevini tekrar çağırabilir. Bu işlem, kamera donanımını ve ardışık düzenini yeni bir giriş/çıkış akışı grubu için sıfırlar. Bazı akışlar önceki yapılandırmadan yeniden kullanılabilir. Daha sonra çerçeve, en az bir kayıtlı çıkış akışı varsa ilk yakalama isteğinden HAL'e devam eder. (Aksi takdirde, ICameraDeviceSession::configureStreams() önce gereklidir.)
  • Çerçeve, kamera oturumunu sonlandırmak için ICameraDeviceSession::close() çağrısı yapabilir. Bu işlev, çerçeveden başka çağrı olmadığında herhangi bir zamanda çağrılabilir. Ancak çağrı, tüm uçuştaki yakalamalar tamamlanana kadar (tüm sonuçlar döndürülür, tüm arabellekler doldurulur) engellenebilir. close() çağrısı döndükten sonra HAL'den ICameraDeviceCallback adresine başka çağrı yapılmasına izin verilmez. close() çağrısı başladıktan sonra çerçeve başka bir HAL cihaz işlevi çağıramaz.
  • Hata veya başka bir eşzamansız etkinlik durumunda HAL, uygun hata/etkinlik mesajıyla ICameraDeviceCallback::notify()'ü çağırmalıdır. HAL, cihaz genelindeki önemli bir hata bildiriminde döndükten sonra 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() kritik bir hatayla çağrıldıktan sonra çerçeve, cihazdan başka geri çağırma almaz. close() dışındaki yöntemler, notify() yöntemi önemli bir hata mesajından döndükten sonra -ENODEV veya NULL döndürmelidir.
Kamera işlemleri akışı

Şekil 4. Kamera çalışma akışı

Donanım seviyeleri

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

Uygulama yakalama isteği, 3A denetimi ve işleme ardışık düzeni arasındaki etkileşim

3A kontrol bloğundaki ayarlara bağlı olarak kamera ardışık düzeni, uygulamanın yakalama isteklerindeki bazı parametreleri yoksayar ve bunun yerine 3A kontrol rutinleri tarafından sağlanan değerleri kullanır. Örneğin, otomatik pozlama etkinken sensörün pozlama süresi, kare süresi ve hassasiyet parametreleri platform 3A algoritması tarafından kontrol edilir ve uygulama tarafından belirtilen tüm değerler yok sayılır. 3A rutinleri tarafından çerçeve 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 mülkler
android.control.aeMode KAPALI Yok
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, ayrıca 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 Yok
WHITE_BALANCE_* android.colorCorrection.transform. android.colorCorrection.mode değeri FAST veya HIGH_QUALITY ise platforma özgü ayarlamalar.
android.control.afMode KAPALI Yok
FOCUS_MODE_* android.lens.focusDistance
android.control.videoStabilization KAPALI Yok
AÇIK Video sabitleme özelliğini uygulamak için android.scaler.cropRegion parametresini ayarlayabilir.
android.control.mode KAPALI AE, AWB ve AF devre dışı bırakılır
OTOMATİK 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ışı bırakılır.

Şekil 2'deki Resim İşleme bloğundaki kontrollerin tümü benzer bir prensiple çalışır ve genellikle her bloğun üç modu vardır:

  • KAPALI: Bu işleme bloğu devre dışıdır. Demosaik, renk düzeltme ve ton eğrisi ayar blokları devre dışı bırakılamaz.
  • HIZLI: Bu modda işleme bloğu, KAPALI moduna kıyasla çıkış kare hızını yavaşlatmayabilir ancak bu kısıtlama göz önüne alındığında mümkün olan en yüksek kaliteli çıkışı üretmelidir. Bu düğme genellikle önizleme veya video kaydı modları ya da hareketsiz görüntüler için seri çekim için kullanılır. Bazı cihazlarda bu, OFF moduna (kare hızını yavaşlatmadan işlem yapılamaz) eşdeğer olabilir. Bazı cihazlarda ise HIGH_QUALITY moduna (en iyi kalitede bile kare hızı yavaşlatılmaz) eşdeğer olabilir.
  • HIGH_QUALITY: Bu modda işleme bloğu, çıkış kare hızını gerektiği gibi yavaşlatarak mümkün olan en yüksek kaliteli sonucu üretmelidir. Bu genellikle yüksek kaliteli fotoğraf çekmek için kullanılır. Bazı bloklarda, FAST veya HIGH_QUALITY yerine isteğe bağlı olarak seçilebilecek manuel bir 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 sistemi tarafından desteklenebilecek 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üleme cihazında gruplandırma/atlama modlarının kullanılabilirliği
  • Görüntüleme 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 farklılıklar 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 modelin özellikleri şunlardır:

  • Görüntü sensörü, uygulamanın istenen çı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, istenen en büyük çıkış akışı boyutu kadar veya daha büyük olarak tanımlanır.
  • Herhangi bir istek, şu anda yapılandırılmış çıkış akışlarının herhangi birini veya tümü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 referans verilen isteklerde ise JPEG akışları gibi davranır.
  • JPEG işlemcisi, kamera ardışık düzeninin geri kalanıyla eşzamanlı olarak çalışabilir ancak aynı anda birden fazla yakalamayı işleyemez.