Referensi Struktur camera2_request_queue_src_ops
#include < camera2.h >
Bidang Data | |
ke dalam(* | request_count )(const struct kamera2_request_queue_src_ops *q) |
ke dalam(* | dequeue_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
ke dalam(* | free_request )(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
Detil Deskripsi
Protokol antrian masukan permintaan:
Kerangka kerja ini menampung antrian dan isinya. Pada awalnya, antriannya kosong.
- Saat buffer metadata pertama ditempatkan ke dalam antrean, kerangka kerja memberi sinyal ke perangkat dengan memanggil notify_request_queue_not_empty().
- Setelah menerima notify_request_queue_not_empty, perangkat harus memanggil dequeue() setelah siap menangani buffer berikutnya.
- Setelah perangkat memproses buffer, dan siap untuk buffer berikutnya, perangkat harus memanggil dequeue() lagi alih-alih menunggu notifikasi. Jika tidak ada lagi buffer yang tersedia, dequeue() akan mengembalikan NULL. Setelah titik ini, ketika buffer tersedia, kerangka kerja harus memanggil notify_request_queue_not_empty() lagi. Jika perangkat menerima pengembalian NULL dari dequeue, perangkat tidak perlu menanyakan antrian lagi hingga panggilan notify_request_queue_not_empty() diterima dari sumber.
- Jika perangkat memanggil buffer_count() dan menerima 0, ini tidak berarti bahwa framework akan memberikan panggilan notify_request_queue_not_empty(). Kerangka kerja hanya akan memberikan pemberitahuan seperti itu setelah perangkat menerima NULL dari dequeue, atau pada permulaan awal.
- Panggilan dequeue() sebagai respons terhadap notify_request_queue_not_empty() mungkin berada di thread yang sama dengan panggilan notify_request_queue_not_empty(), dan dapat dilakukan dari dalam panggilan notify.
- Semua buffer permintaan yang sudah di-dequeued harus dikembalikan ke framework dengan memanggil free_request, termasuk ketika terjadi kesalahan, perangkat diminta untuk di-flush, atau ketika perangkat dimatikan.
Dokumentasi Lapangan
int(* dequeue_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t **buffer) |
Dapatkan buffer metadata dari kerangka kerja. Mengembalikan OK jika tidak ada kesalahan. Jika antrian kosong, kembalikan NULL dalam buffer. Dalam hal ini, perangkat harus menunggu pesan notify_request_queue_not_empty() sebelum mencoba melakukan dequeue lagi. Buffer yang diperoleh dengan cara ini harus dikembalikan ke framework dengan free_request() .
int(* free_request)(const struct camera2_request_queue_src_ops *q, camera_metadata_t *old_buffer) |
int(* request_count)(const struct kamera2_request_queue_src_ops *q) |
Dapatkan jumlah buffer permintaan yang tertunda dalam antrian. Dapat mengembalikan CAMERA2_REQUEST_QUEUE_IS_BOTTOMLESS jika permintaan berulang (permintaan streaming) saat ini dikonfigurasi. Memanggil metode ini tidak berpengaruh pada apakah metode notify_request_queue_not_empty() akan dipanggil oleh framework.
Dokumentasi untuk struct ini dihasilkan dari file berikut:
- perangkat keras/libhardware/termasuk/perangkat keras/ kamera2.h