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.
Ş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.
Ş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.
- Kamera cihazlarını dinleyip numaralandırır.
- Cihazı açın ve dinleyicileri bağlayın.
- Hedef kullanım alanı için çıkışları yapılandırın (ör. hareketsiz görüntü yakalama veya kayıt).
- Hedef kullanım alanı için istekler oluşturun.
- Yakalama/tekrarlama istekleri ve patlamalar.
- Sonuç meta verilerini ve görüntü verilerini alma
- 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.
Ş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
- Çerçeve, başlatma işleminden sonra
ICameraProviderarayü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. - Çerçeve, kamera cihazlarını
ICameraProvider::getCameraIdListüzerinden numaralandırır. - Çerçeve, ilgili
ICameraProvider::getCameraDeviceInterface_VX_X'yi çağırarak yeni birICameraDeviceoluşturur. - Çerçeve, yeni bir etkin yakalama oturumu ICameraDeviceSession oluşturmak için
ICameraDevice::opençağrısı yapar.
Etkin bir kamera oturumu kullanma
- Çerçeve, HAL cihazına giriş/çıkış akışlarının listesiyle
ICameraDeviceSession::configureStreamsişlevini çağırır. - Çerçeve,
ICameraDeviceSession::constructDefaultRequestSettingsçağrılarıyla bazı kullanım alanları için varsayılan ayarları ister. Bu durum,ICameraDeviceSession,ICameraDevice::opentarafından oluşturulduktan sonra herhangi bir zamanda meydana gelebilir. - Ç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::processCaptureRequestile 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. - Ç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 - 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::notifyişlevini çağırır. Bu bildirim geri çağırması, istek için ilkprocessCaptureResultçağrısından önce gerçekleşmek zorunda değildir ancak yakalama içinnotifyçağrısı yapılana kadar uygulamaya yakalama sonuçları gönderilmez. - HAL, işlem hattında bir gecikme yaşandıktan sonra tamamlanan çekimleri
ICameraDeviceCallback::processCaptureResultile ç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::configureStreamsiş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, önceICameraDeviceSession::configureStreamsgerekir.) - Çerçeve, kamera oturumunu sonlandırmak için
ICameraDeviceSession::closeiş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'denICameraDeviceCallback'ye başka çağrı yapılmasına izin verilmez.closearaması 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::notifyiş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öylecenotifyölümcül bir hatayla çağrıldıktan sonra çerçeve, cihazdan başka geri çağırma almaz.closedışındaki yöntemler,notifyyöntemi ölümcül bir hata mesajı döndürdükten sonra-ENODEVveyaNULLdeğerini döndürmelidir.
Ş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,OFFmoduna 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,OFFmoduna (kare hızı yavaşlatılmadan işlem yapılamaz) eşdeğer olabilir. Bazı cihazlarda iseHIGH_QUALITYmoduna (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,FASTveyaHIGH_QUALITYyerine 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.