İ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.

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.

Ş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.
- Kamera cihazlarını dinleyebilir ve numaralandırabilir.
- Cihazı açın ve dinleyicileri bağlayın.
- Hedef kullanım alanı için çıkışları yapılandırın (ör. fotoğraf çekme, kayıt vb.).
- 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.
- 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.

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
- Ç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. - Çerçeve, kamera cihazlarını
ICameraProvider::getCameraIdList()
üzerinden numaralandırır. - Çerçeve, ilgili
ICameraProvider::getCameraDeviceInterface_VX_X()
'yi çağırarak yeni birICameraDevice
oluşturur. - Çerçeve, yeni bir etkin yakalama oturumu ICameraDeviceSession oluşturmak için
ICameraDevice::open()
işlevini çağırır.
Etkin bir kamera oturumu kullanma
- Çerçeve, HAL cihazına giriş/çıkış akışlarının listesiyle
ICameraDeviceSession::configureStreams()
iş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::open
tarafından oluşturulduktan sonra herhangi bir zamanda meydana gelebilir. - Ç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. - Ç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ş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 ilkprocessCaptureResult()
çağrısından önce gerçekleşmek zorunda değildir ancak bu yakalama içinnotify()
çağrısı yapılana kadar yakalama için uygulamaya sonuç gönderilmez. - 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, önceICameraDeviceSession::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'denICameraDeviceCallback
'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öylecenotify()
ö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.

Ş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.