camera3_capture_result Yapı Referansı
#include <
camera3.h
>
Veri Alanları |
|
uint32_t | frame_number |
const camera_metadata_t * | sonuç |
uint32_t | num_output_buffers |
const camera3_stream_buffer_t * | output_buffers |
const camera3_stream_buffer_t * | input_buffer |
uint32_t | partial_result |
Ayrıntılı Açıklama
camera3_capture_result_t:
Kamera HAL cihazı tarafından tek bir yakalama/yeniden işleme işleminin sonucu. Bu, process_capture_request() ile HAL'e gönderilen tek bir yakalama isteğine yanıt olarak process_capture_result() ile çerçeveye ayarsız olarak gönderilir. HAL, her istek için birden fazla process_capture_result() çağrısı gerçekleştirebilir.
Hepsi aynı çerçeve numarasına sahip olan her çağrı, çıkış arabelleklerinin bir alt kümesini ve/veya sonuç meta verilerini içerebilir. Meta veriler, belirli bir kare numarası için yalnızca bir kez sağlanabilir. Diğer tüm çağrılarda sonuç meta verileri NULL olarak ayarlanmalıdır.
Sonuç yapısı, bu yakalamadan elde edilen çıkış meta verilerini ve bu yakalama için doldurulmuş/doldurulacak çıkış arabelleklerinin kümesini içerir. Her çıkış arabelleğinin, arabellek HAL tarafından henüz doldurulmamışsa çerçevenin okumadan önce bekleyeceği bir yayın senkronizasyon çiti olabilir.
>= CAMERA_DEVICE_API_VERSION_3_2:
Meta veriler, tek bir kare numarası için birden çok kez sağlanabilir. Çerçeve, her bir kısmi sonucu toplam sonuç kümesiyle birleştirerek nihai sonuç kümesini bir araya getirir.
Bir istekte giriş arabelleği verilirse HAL, bunu process_capture_result çağrılarından birinde döndürmelidir. Bu çağrı, meta veriler ve çıkış arabellekleri olmadan yalnızca giriş arabelleğini döndürmek için olabilir. Senkronizasyon çitleri, çıkış arabellekleri için olduğu gibi ele alınmalıdır.
Performansla ilgili dikkat edilmesi gereken noktalar:
Uygulamalar da bu kısmi sonuçları hemen alır. Bu nedenle, ardışık düzenin çok erken aşamalarında bilinen sonuçlar gönderilmeden önce toplam ardışık düzen gecikmesini önlemek için kısmi sonuçlar göndermek son derece önerilen bir performans optimizasyonudur.
Tipik bir kullanım alanı, ardışık düzenin ortasında AF durumunu hesaplamaktır. Durumu hemen çerçeveye geri göndererek% 50 performans artışı ve otomatik odaklama için algılanan duyarlılık elde ederiz.
Alan Belgeleri
uint32_t frame_number |
Çerçeve numarası, bu yakalamayı benzersiz şekilde tanımlamak için çerçeve tarafından gönderilen istekte ayarlanan artan bir tam sayıdır. Ayrıca, camera3_callback_ops_t.notify() adresine gönderilen asenkron bildirimlerde isteği tanımlamak için de kullanılır.
const camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
Bu yakalama için giriş akışı arabelleğinin tutamaç. HAL, process_capture_result() işlevini çağırdığında henüz tüketilmeyebilir. Çerçeve, arabelleği yeniden kullanmadan önce HAL tarafından sağlanan serbest bırakma senkronizasyon çitlerini bekler.
HAL, senkronizasyon çitlerini output_buffers için yapıldığı şekilde işlemelidir.
İstek başına yalnızca bir giriş arabelleğinin gönderilmesine izin verilir. Çıkış arabelleklerine benzer şekilde, döndürülen giriş arabelleklerinin sıralaması HAL tarafından korunmalıdır.
Performansla ilgili dikkat edilmesi gereken noktalar:
Giriş arabelleği mümkün olduğunca erken döndürülmelidir. HAL, senkronizasyon çitlerini destekliyorsa process_capture_result işlevini çağırarak senkronizasyon çitleri uygun şekilde ayarlanmış şekilde geri verebilir. Senkronizasyon çitleri desteklenmiyorsa arabellek yalnızca tüketildiğinde döndürülebilir. Bu işlem uzun sürebilir. HAL, arabelleğin daha hızlı döndürülmesi için bu giriş arabelleğini kopyalayabilmeyi seçebilir.
Tanımı, camera3.h dosyasının 2361. satırı içindedir.
uint32_t num_output_buffers |
Bu sonuç yapısında döndürülen çıkış arabelleklerinin sayısı. Eşleşen yakalama isteğinin sayısından az veya eşit olmalıdır. Bu değer, yakalama isteklerindeki arabellek sayısından azsa kalan çıkış arabelleklerini çerçeveye döndürmek için process_capture_result işlevine aynı frame_number ile en az bir kez daha çağrı yapılmalıdır. Bu değer yalnızca yapı geçerli sonuç meta verileri içeriyorsa veya bu sonuçta bir giriş arabelleği döndürülmüşse sıfır olabilir.
const camera3_stream_buffer_t * output_buffers |
Bu yakalama için çıkış akışı arabelleklerinin sapları. HAL, process_capture_result() işlevini çağırdığında bu alanlar henüz doldurulmamış olabilir. Çerçeve, arabellekleri okumadan önce HAL tarafından sağlanan yayın senkronizasyon çitlerini bekler.
HAL, akış arabelleğinin yayın senkronizasyon çitini geçerli bir senkronizasyon fd'sine veya arabellek zaten doldurulmuşsa -1 değerine ayarlamalıdır.
HAL, arabelleği işlerken bir hatayla karşılaşırsa ve arabellek doldurulmazsa arabelleğin durum alanı CAMERA3_BUFFER_STATUS_ERROR olarak ayarlanmalıdır. HAL, hatayla karşılaşmadan önce edinme çitinde beklemediyse çerçevenin arabelleği yeniden kullanmadan önce çitte beklemesine izin vermek için edinme çiti, serbest bırakma çitine kopyalanmalıdır.
Edinme çiti, tüm çıkış arabellekleri için -1 olarak ayarlanmalıdır. num_output_buffers sıfır ise bu değer NULL olabilir. Bu durumda, çıkış arabelleklerini sağlamak için HAL tarafından en az bir tane daha process_capture_result çağrısı yapılmalıdır.
process_capture_result, bir kare için yeni bir arabellekle çağrıldığında, ilgili akışa ait önceki tüm karelerin arabellekleri önceden yayınlanmış olmalıdır (çitler henüz sinyallenmiş olmamalıdır).
>= CAMERA_DEVICE_API_VERSION_3_2:
Bir kare için Gralloc arabellekleri, ilgili SHUTTER-notify çağrısından önce çerçeveye gönderilebilir.
Performansla ilgili dikkat edilmesi gereken noktalar:
Çerçeveye iletilen arabellekler, SHUTTER notify() çağrısı aracılığıyla bir pozlama başlangıcı zaman damgası alınana kadar uygulama katmanına gönderilmez. Bu aramayı en kısa sürede göndermeniz önemle tavsiye edilir.
uint32_t partial_result |
>= CAMERA_DEVICE_API_VERSION_3_2:
Kısmi sonuçlardan yararlanmak için HAL'in statik meta veri android.request.partialResultCount'ı her kare için göndereceği kısmi sonuç sayısına ayarlamalıdır.
Kısmi sonucu olan her yeni yakalama sonucu, bu alanı (partial_result) 1 ile android.request.partialResultCount arasında farklı bir dahili değere ayarlamalıdır.
Bu özellikten yararlanmak istemeyen HAL'ler, android.request.partialResultCount veya partial_result parametresini 1 dışında bir değere ayarlamalıdır.
Bir yakalama sonucu yalnızca arabellekler içeriyorsa ve meta veri içermiyorsa bu değer 0 olarak ayarlanmalıdır.
const camera_metadata_t * result |
Bu yakalamanın sonuç meta verileri. Nihai yakalama parametreleri, yakalama ve son işleme donanımının durumu, etkinse 3A algoritmalarının durumu ve etkinleştirilen istatistik birimlerinin çıkışı hakkında bilgi içerir.
Sonuç meta verilerini yalnızca belirli bir frame_number ile process_capture_result() çağrısı içerebilir. Aynı frame_number için yapılan diğer tüm çağrılar bunu NULL olarak ayarlamalıdır.
Sonuç meta verilerini oluştururken hata oluştuysa result boş bir meta veri arabelleği olmalı ve notify(), ERROR_RESULT ile çağrılmalıdır.
>= CAMERA_DEVICE_API_VERSION_3_2:
Belirli bir frame_number ile process_capture_result() işlevinin birden fazla kez çağrılması, sonuç meta verilerini içerebilir.
Gönderilen kısmi meta veriler, belirli bir kare için önceki bir kısmi sonuçta döndürülen meta veri anahtarlarını içermemelidir. Söz konusu çerçeve için her yeni kısmi sonuçta da farklı bir partial_result değeri ayarlanmalıdır.
notify, ERROR_RESULT ile çağrılırsa söz konusu çerçeveyle ilgili diğer tüm kısmi sonuçlar çerçeve tarafından yoksayılır.
Bu yapının dokümanları aşağıdaki dosyadan oluşturulmuştur:
- hardware/libhardware/include/hardware/ camera3.h