Camera2_device_ops Yapı Referansı
#include < camera2.h >
Veri alanları | |
int(* | set_request_queue_src_ops )(const struct kamera2_device *, const kamera2_request_queue_src_ops_t *request_src_ops) |
int(* | notify_request_queue_not_empty )(const struct kamera2_device *) |
int(* | set_frame_queue_dst_ops )(const struct kamera2_device *, const kamera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* | get_in_progress_count )(const struct kamera2_device *) |
int(* | flush_captures_in_progress )(const struct kamera2_device *) |
int(* | build_default_request )(const struct kamera2_device *, int request_template, kamera_metadata_t **request) |
int(* | allocate_stream )(const struct kamera2_device *, uint32_t genişlik, uint32_t yükseklik, int format, const kamera2_stream_ops_t *stream_ops, uint32_t *stream_id, uint32_t *format_actual, uint32_t *kullanım, uint32_t *max_buffers) |
int(* | Register_stream_buffers )(const struct kamera2_device *, uint32_t flow_id, int num_buffers, buffer_handle_t *buffers) |
int(* | yayın_akışı )(const struct kamera2_device *, uint32_t akış_id) |
int(* | allocate_reprocess_stream )(const struct kamera2_device *, uint32_t genişlik, uint32_t yükseklik, uint32_t biçimi, const kamera2_stream_in_ops_t *reprocess_stream_ops, uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
int(* | allocate_reprocess_stream_from_stream )(const struct kamera2_device *, uint32_t çıktı_akışı_kimliği, const kamera2_akış_in_ops_t *reprocess_stream_ops, uint32_t *akış_kimliği) |
int(* | yayın_reprocess_stream )(const struct kamera2_device *, uint32_t akış_id) |
int(* | tetikleyici_eylem )(const struct kamera2_device *, uint32_t tetikleyici_id, int32_t ext1, int32_t ext2) |
int(* | set_notify_callback )(const struct kamera2_device *, kamera2_notify_callback notify_cb, void *kullanıcı) |
int(* | get_metadata_vendor_tag_ops )(const struct kamera2_device *, seller_tag_query_ops_t **ops) |
int(* | dump )(const struct kamera2_device *, int fd) |
int(* | get_instance_metadata )(const struct kamera2_device *, kamera_metadata **instance_metadata) |
Detaylı Açıklama
Saha Dokümantasyonu
int(* allocate_reprocess_stream)(const struct kamera2_device *, uint32_t genişlik, uint32_t yükseklik, uint32_t biçimi, const kamera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id, uint32_t *consumer_usage, uint32_t *max_buffers) |
allocate_reprocess_stream:
Çıkış arabelleğinin genişliği, yüksekliği ve piksel formatına göre tanımlanan yeni bir giriş akışını kullanım için ayırın. Başarı durumunda yeni akışın kimliğini, gralloc kullanım işaretlerini ve gerekli eşzamanlı olarak elde edilebilir arabellek sayısını döndürür. Hata koşulları:
- Sensörün statik özellikleri tarafından desteklendiği şekilde listelenmeyen bir genişlik/yükseklik/biçim kombinasyonu talep etme
- Aynı anda çok fazla yeniden işleme akışının yapılandırılması isteniyor.
Giriş parametreleri:
- genişlik, yükseklik, format: Bu akış aracılığıyla gönderilecek arabelleklerin özellikleri. Biçim, HAL_PIXEL_FORMAT_* listesinden bir değer olmalıdır.
- reprocess_stream_ops: Bu akış için arabelleklerin edinilmesi ve serbest bırakılmasına yönelik işlev işaretçilerinin yapısı. Temel akış, kullanıma ve max_buffers çıktılarına göre yapılandırılacaktır.
Çıkış parametreleri:
- Stream_id: Bu akışı tanımlayan işaretsiz bir tam sayı. Bu değer, akışı tanımlamak için gelen isteklerde ve akışın serbest bırakılmasında kullanılır. Bu kimlikler, giriş akışı kimliklerinden ayrı olarak numaralandırılır.
- Consumer_usage: HAL cihazının istenen veri türünü tüketmek için ihtiyaç duyduğu gralloc kullanım maskesi. Bu, akış arabellek kuyruğu için yeni gralloc arabelleklerinin tahsisinde kullanılır.
- max_buffers: HAL cihazının aynı anda edinmesi gerekebilecek maksimum arabellek sayısı. Cihazda aynı anda alınan bu değerden daha fazla arabellek bulunamaz.
int(* allocate_reprocess_stream_from_stream)(const struct kamera2_device *, uint32_t çıktı_akışı_kimliği, const kamera2_stream_in_ops_t *reprocess_stream_ops,uint32_t *stream_id) |
allocate_reprocess_stream_from_stream:
Mevcut bir çıkış akışı için ayrılan arabellekleri kullanacak yeni bir giriş akışını kullanım için tahsis edin. Yani, HAL çıkış akışına bir arabellek ekledikten sonra, bu giriş yeniden işleme akışından kendisine verilen aynı arabelleğini görebilir. HAL, arabelleği yeniden işleme akışına geri bıraktıktan sonra, yeniden kullanım için çıkış kuyruğuna döndürülecektir.
Hata koşulları:
- Yeniden işleme akışının temeli için uygun olmayan boyutta/formatta bir çıkış akışı kullanılması.
- Aynı anda çok fazla yeniden işleme akışı tahsis edilmeye çalışılıyor.
Giriş parametreleri:
- Output_stream_id: Yeniden işlemeye uygun boyut ve formata sahip mevcut bir çıktı akışının kimliği.
- reprocess_stream_ops: Bu akış için arabelleklerin edinilmesi ve serbest bırakılmasına yönelik işlev işaretçilerinin yapısı. Temel akış, çıkış akışının kullandığı grafik arabellek tanıtıcılarının aynısını kullanacaktır.
Çıkış parametreleri:
- Stream_id: Bu akışı tanımlayan işaretsiz bir tam sayı. Bu değer, akışı tanımlamak için gelen isteklerde ve akışın serbest bırakılmasında kullanılır. Bu kimlikler, giriş akışı kimliklerinden ayrı olarak numaralandırılır.
HAL istemcisi, temel aldığı çıkış akışını yayınlamadan önce her zaman yeniden işleme akışını serbest bırakmalıdır.
int(* allocate_stream)(const struct kamera2_device *,uint32_t genişlik, uint32_t yükseklik, int format, const kamera2_stream_ops_t *stream_ops,uint32_t *stream_id, uint32_t *format_actual,uint32_t *kullanım, uint32_t *max_buffers) |
tahsis_akımı:
Çıkış arabelleğinin genişliği, yüksekliği, hedefi ve muhtemelen piksel formatına göre tanımlanan yeni bir çıkış akışını kullanım için tahsis edin. Başarı durumunda yeni akışın kimliğini, gralloc kullanım işaretlerini, minimum kuyruk arabellek sayısını ve muhtemelen piksel biçimini döndürür. Hata koşulları:
- Sensörün statik özellikleri tarafından desteklendiği şekilde listelenmeyen bir genişlik/yükseklik/biçim kombinasyonu talep etme
- Belirli bir format türünde çok fazla akış istenmesi (örneğin 2 Bayer ham akışı).
Giriş parametreleri:
- genişlik, yükseklik, format: Bu akış aracılığıyla gönderilecek arabelleklerin özellikleri. Biçim, HAL_PIXEL_FORMAT_* listesindeki bir değerdir. HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED kullanılırsa platform gralloc modülü, kamera HAL'si ve akışın tüketicisi tarafından sağlanan kullanım işaretlerine dayalı olarak bir format seçecektir. Kamera HAL'si, gerekirse uygulamaya özel formatı elde etmek için, Register_stream_buffers çağrısında kendisine verilen arabellekleri incelemelidir.
- Stream_ops: Bu akış için arabellekleri elde etmek ve sıraya koymak için kullanılan işlev işaretçilerinin yapısı. Temel akış, kullanıma ve max_buffers çıktılarına göre yapılandırılacaktır. Bu yapıdaki yöntemler allocate_stream dönene kadar çağrılamayabilir.
Çıkış parametreleri:
- Stream_id: Bu akışı tanımlayan işaretsiz bir tam sayı. Bu değer, akışı tanımlamak için gelen isteklerde ve akışın serbest bırakılmasında kullanılır.
- kullanım: HAL cihazının istenen veri tipini üretmek için ihtiyaç duyduğu gralloc kullanım maskesi. Bu, akış arabellek kuyruğu için yeni gralloc arabelleklerinin tahsisinde kullanılır.
- max_buffers: HAL cihazının aynı anda kuyruğundan çıkarması gerekebilecek maksimum arabellek sayısı. Cihaz aynı anda bu değerden daha fazla arabelleği sıraya koyamaz.
int(* build_default_request)(const struct kamera2_device *, int request_template, kamera_metadata_t **request) |
Standart kamera kullanım durumları için doldurulmuş bir varsayılan istek oluşturun.
Cihaz, CAMERA2_TEMPLATE_* numaralandırmalarından biri olması gereken, istenen kullanım durumunu karşılayacak şekilde yapılandırılmış tam bir istek döndürmelidir. Android.request.outputStreams dışındaki tüm istek kontrol alanları dahil edilmelidir.
Döndürülen meta veri arabelleği allocate_camera_metadata ile ayrılmalıdır. Çerçeve arabelleğin sahipliğini alır.
int(* dump)(const struct kamera2_device *, int fd) |
int(*flush_captures_in_progress)(const struct kamera2_device *) |
Devam eden tüm yakalamaları temizleyin. Bu, henüz bir akışa veya çerçeve kuyruğuna herhangi bir çıktı yerleştirmemiş olan tüm sıradan istekleri (normal veya yeniden işleme) içerir. Kısmen tamamlanmış yakalamaların normal şekilde tamamlanması gerekir. Temizleme tamamlanana kadar hiçbir yeni istek istek kuyruğundan çıkarılamaz.
int(* get_in_progress_count)(const struct kamera2_device *) |
Şu anda cihaz tarafından işlenen kamera isteklerinin sayısı (istekleri kuyruktan çıkarılmış, ancak henüz çıkış hattında/hatlarında kuyruğa alınmamış yakalamalar/yeniden işlemeler). Devam eden sayı 0 olana kadar çerçeve tarafından hiçbir akış yayınlanamaz.
int(* get_instance_metadata)(const struct kamera2_device *, kamera_metadata **instance_metadata) |
Cihaz örneğine özgü meta verileri alın. Bu meta veriler, kamera cihazının tek bir örneği için sabit olmalıdır ancak open() çağrıları arasında farklı olabilir. Döndürülen kamera_metadata işaretçisi, aygıt close() yöntemi çağrılana kadar geçerli olmalıdır.
Versiyon bilgisi:
CAMERA_DEVICE_API_VERSION_2_0:
Müsait değil. Çerçeve bu işlev işaretçisine erişemeyebilir.
CAMERA_DEVICE_API_VERSION_2_1:
Geçerli. Çerçeve tarafından çağrılabilir.
int(* get_metadata_vendor_tag_ops)(const struct kamera2_device *, seller_tag_query_ops_t **ops) |
int(* notify_request_queue_not_empty)(const struct kamera2_device *) |
int(* register_stream_buffers)(const struct kamera2_device *, uint32_t flow_id, int num_buffers, buffer_handle_t *buffers) |
Belirli bir akış için arabellekleri kaydedin. Bu, başarılı bir allocate_stream çağrısından sonra ve akışa referans veren ilk isteğin kuyruğa alınmasından önce çağrılır. Bu yöntemin amacı, HAL cihazının arabellekleri daha sonra kullanmak üzere eşlemesine veya başka şekilde hazırlamasına olanak sağlamaktır. num_buffers'ın en azından max_buffers (allocate_stream'den) olacağı garanti edilir, ancak daha büyük olabilir. Tamponlar kullanım için zaten kilitlenecektir. Çağrının sonunda tüm tamponların kuyruğa geri gönderilmeye hazır olması gerekir. Akış formatı HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED olarak ayarlanmışsa, kamera HAL'si, platforma özel piksel formatı bilgilerini belirlemek için buraya aktarılan arabellekleri incelemelidir.
int(* yayın_reprocess_stream)(const struct kamera2_device *, uint32_t akış_id) |
int(* yayın_akışı)(const struct kamera2_device *, uint32_t akış_id) |
int(* set_frame_queue_dst_ops)(const struct kamera2_device *, const kamera2_frame_queue_dst_ops_t *frame_dst_ops) |
int(* set_notify_callback)(const struct kamera2_device *, kamera2_notify_callback notify_cb, void *kullanıcı) |
int(* set_request_queue_src_ops)(const struct kamera2_device *, const kamera2_request_queue_src_ops_t *request_src_ops) |
int(* tetikleyici_eylem)(const struct kamera2_device *, uint32_t tetikleyici_id, int32_t ext1, int32_t ext2) |
Bu yapıya ilişkin belgeler aşağıdaki dosyadan oluşturulmuştur:
- donanım/libdonanım/include/donanım/ kamera2.h