İ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.
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.
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.
- Kamera cihazlarını dinleyin ve numaralandırın.
- Cihazı açın ve dinleyicileri bağlayın.
- Hedef kullanım durumu için çıktıları yapılandırın (hareketsiz yakalama, kayıt vb. gibi).
- Hedef kullanım durumu için istek(ler) oluşturun.
- İstekleri ve patlamaları yakalayın/tekrarlayın.
- Sonuç meta verilerini ve görüntü verilerini alın.
- 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.
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
- 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. - Çerçeve, kamera cihazlarını
ICameraProvider::getCameraIdList()
aracılığıyla numaralandırır. - Çerçeve, ilgili
ICameraProvider::getCameraDeviceInterface_VX_X()
öğesini çağırarak yeni birICameraDevice
örneğini oluşturur. - Çerçeve, yeni bir aktif yakalama oturumu ICameraDeviceSession oluşturmak için
ICameraDevice::open()
öğesini çağırır.
Aktif bir kamera oturumu kullanma
- Çerçeve, HAL cihazına giden giriş/çıkış akışlarının bir listesiyle birlikte
ICameraDeviceSession::configureStreams()
çağırır. - Ç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. - Ç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. - Ç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. - 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 ilkprocessCaptureResult()
çağrısından önce gerçekleşmesi gerekmez, ancak bu yakalama içinnotify()
çağrılıncaya kadar bir yakalama uygulamasına hiçbir sonuç teslim edilmez. - 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, önceICameraDeviceSession::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'denICameraDeviceCallback
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, sankiclose()
çağrılmış gibi davranmalıdır. Bununla birlikte, HAL'ninnotify()
işlevini çağırmadan önce bekleyen tüm yakalamaları iptal etmesi veya tamamlaması gerekir; böylecenotify()
ö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öntemlernotify()
yöntemi önemli bir hata mesajından döndükten sonra -ENODEV veya NULL değerini döndürmelidir.
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.