HAL alt sistemi

İstekler

Uygulama çerçevesi, yakalanan sonuçlarla ilgili istekleri kamera alt sistemine 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 bu kapsamdadır. 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

1. şekil. 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 (ISP veya kamera sensörü) satıcısı arasında platformlar arası uyumluluğu korumak için kamera işlem hattı modeli sanaldır ve herhangi bir gerçek ISP'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

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

  1. Kamera cihazlarını dinleyebilir ve numaralandırabilir.
  2. Cihazı açın ve dinleyicileri bağlayın.
  3. Hedef kullanım alanı için çıkışları yapılandırın (ör. fotoğraf çekme, kayıt vb.).
  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.
  • Talepler ve sonuçlar ile sonraki taleplerde referans verilen yayınlar için ilk gelen ilk işlenir.
  • Ç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ış

3.Şekil Kamera donanım soyutlama katmanına genel bakış

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

Bu bölümde, kamera API'si kullanılırken yapılması 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ı 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() işlevini çağırır.

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 kümelerinden 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şladığında) HAL, ICameraDeviceCallback::notify() işlevini çağırarak pozlamanın başlangıç zaman damgası ve kare numarası da dahil olmak üzere SHUTTER mesajını gönderir. Bu bildirim geri çağırması, istek için ilk processCaptureResult() çağrısından önce gerçekleşmek zorunda değildir ancak bu yakalama için notify() çağrısı yapılana kadar yakalama için uygulamaya sonuç 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 işlem hattı 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 durdurabilir, mevcut yakalamaların tamamlanmasını (tüm arabelleklerin doldurulması, tüm sonuçların döndürülmesi) bekleyebilir ve ardından ICameraDeviceSession::configureStreams()'ı tekrar çağırabilir. Bu işlem, yeni bir giriş/çıkış akışları grubu için kamera donanımını ve işlem hattını sıfırlar. Önceki yapılandırmadan bazı akışlar yeniden kullanılabilir. Ardından, kayıtlı en az bir çıkış akışı kalırsa çerçeve, ilk yakalama isteğinden HAL'ye devam eder. (Aksi takdirde, önce ICameraDeviceSession::configureStreams() gerekir.)
  • Çerçeve, kamera oturumunu sonlandırmak için ICameraDeviceSession::close() işlevini çağırabilir. Bu, çerçeveden başka bir arama etkin olmadığında herhangi bir zamanda çağrılabilir. Ancak, devam eden tüm yakalama işlemleri tamamlanana kadar (tüm sonuçlar döndürülene, tüm arabellekler doldurulana kadar) arama engellenebilir. close() çağrısı döndükten sonra HAL'den ICameraDeviceCallback'ye başka çağrı yapılmasına izin verilmez. close() görüşmesi devam ederken çerçeve başka HAL cihaz işlevlerini çağırmayabilir.
  • 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ğırmadan önce tüm bekleyen çekimleri iptal etmeli veya tamamlamalıdır. Böylece notify() ölümcül bir hatayla çağrıldığında çerçeve, cihazdan başka geri çağırma almaz. close() dışındaki yöntemler, notify() yöntemi ölümcül bir hata mesajından döndükten sonra -ENODEV veya NULL değerini döndürmelidir.
Kamera işlemleri akışı

Şekil 4. Kamera operasyon 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 düzeyi 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 işlem hattı, 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 platformun 3A algoritması tarafından kontrol edilir ve uygulamaya özel olarak belirtilen 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'tır. Ayrıca android.flash.firingPower, android.flash.firingTime ve android.flash.mode da AÇIK'tır.
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 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 sabitlemeyi uygulamak için android.scaler.cropRegion ayarlanabilir.
android.control.mode KAPALI AE, AWB ve AF devre dışı bırakıldı
OTOMATİK Ayrı AE, AWB ve AF ayarları kullanılır.
SCENE_MODE_* Yukarıda listelenen tüm parametreleri geçersiz kılabilir. Ayrı ayrı 3A kontrolleri devre dışı bırakılır.

Şekil 2'deki Görüntü İşleme bloğundaki kontrollerin tümü benzer bir prensiple çalışır ve genellikle her blokta üç mod bulunur:

  • KAPALI: Bu işleme bloğu devre dışıdır. Demosaik, renk düzeltme ve ton eğrisi ayarlama blokları devre dışı bırakılamaz.
  • HIZLI: Bu modda, işleme bloğu, ÇEVRİMDIŞI moda 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 iyi kalitede çıkışı üretmelidir. Bu özellik genellikle önizleme veya video kaydı modlarında ya da fotoğraflar için seri çekim modunda kullanılır. Bazı cihazlarda bu, KAPALI moduna (kare hızı düşürülmeden işlem yapılamaz) eşdeğer olabilir. Bazı cihazlarda ise YÜKSEK_KALİTE moduna (en iyi kalite kare hızını düşürmez) eşdeğer olabilir.
  • HIGH_QUALITY: Bu modda, işleme bloğu mümkün olan en iyi kaliteyi elde etmek için 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 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şebileceğinden, 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 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 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.