İ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.
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.
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.
- Kamera cihazlarını dinleyebilir ve sayabilir.
- Cihazı açın ve dinleyicileri bağlayın.
- Çıkışları hedef kullanım alanına göre yapılandırın (ör. fotoğraf çekme, kayıt vb.).
- Hedef kullanım alanı için istek oluşturun.
- İstekleri ve seri çekimleri yakalama/tekrarlama.
- Sonuç meta verilerini ve resim verilerini alın.
- 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.
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
- İ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. - Çerçeve, kamera cihazlarını
ICameraProvider::getCameraIdList()
üzerinden enumerate eder. - Çerçeve, ilgili
ICameraProvider::getCameraDeviceInterface_VX_X()
'ı çağırarak yeni birICameraDevice
örneği oluşturur. - Çerçeve, yeni bir etkin yakalama oturumu ICameraDeviceSession oluşturmak için
ICameraDevice::open()
'ü çağırır.
Etkin bir kamera oturumu kullanma
- Çerçeve, HAL cihazına giriş/çıkış akışlarının listesini içeren
ICameraDeviceSession::configureStreams()
çağrısı yapar. - Ç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. - Ç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. - Ç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. - 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 ilkprocessCaptureResult()
çağrısından önce yapılması gerekmez ancak ilgili yakalama içinnotify()
çağrısı yapıldıktan sonra yakalama işlemine ilişkin hiçbir sonuç uygulamaya iletilmez. - 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'denICameraDeviceCallback
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 sonraclose()
ç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.
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.