Referensi Struct camera3_capture_result
#include <
camera3.h
>
Kolom Data |
|
uint32_t | frame_number |
const camera_metadata_t * | result |
uint32_t | num_output_buffers |
const camera3_stream_buffer_t * | output_buffers |
const camera3_stream_buffer_t * | input_buffer |
uint32_t | partial_result |
Deskripsi Mendetail
camera3_capture_result_t:
Hasil satu pengambilan/pemrosesan ulang oleh perangkat HAL kamera. Hal ini dikirim ke framework secara asinkron dengan process_capture_result(), sebagai respons terhadap satu permintaan pengambilan yang dikirim ke HAL dengan process_capture_request(). Beberapa panggilan process_capture_result() dapat dilakukan oleh HAL untuk setiap permintaan.
Setiap panggilan, semuanya dengan nomor frame yang sama, dapat berisi beberapa subkumpulan buffering output, dan/atau metadata hasil. Metadata hanya boleh diberikan satu kali untuk nomor frame tertentu; semua panggilan lainnya harus menetapkan metadata hasil ke NULL.
Struktur hasilnya berisi metadata output dari rekaman ini, dan kumpulan buffer output yang telah/akan diisi untuk rekaman ini. Setiap buffering output dapat dilengkapi dengan pagar sinkronisasi rilis yang akan ditunggu framework sebelum membaca, jika buffering belum diisi oleh HAL.
>= CAMERA_DEVICE_API_VERSION_3_2:
Metadata dapat diberikan beberapa kali untuk satu nomor frame. Framework akan mengumpulkan kumpulan hasil akhir dengan menggabungkan setiap hasil parsial ke dalam kumpulan hasil total.
Jika buffer input diberikan dalam permintaan, HAL harus menampilkannya di salah satu panggilan process_capture_result, dan panggilan tersebut mungkin hanya untuk menampilkan buffer input, tanpa metadata dan buffer output; pagar sinkronisasi harus ditangani dengan cara yang sama seperti yang dilakukan untuk buffer output.
Pertimbangan performa:
Aplikasi juga akan langsung menerima hasil parsial ini, sehingga pengiriman hasil parsial adalah pengoptimalan performa yang sangat direkomendasikan untuk menghindari latensi pipeline total sebelum mengirim hasil untuk hal yang diketahui sejak awal dalam pipeline.
Kasus penggunaan yang umum mungkin menghitung status AF di tengah-tengah pipeline; dengan segera mengirim status kembali ke framework, kita mendapatkan peningkatan performa sebesar 50% dan responsivitas fokus otomatis yang dirasakan.
Dokumentasi Bidang
uint32_t frame_number |
Nomor frame adalah bilangan bulat yang bertambah yang ditetapkan oleh framework dalam permintaan yang dikirim untuk mengidentifikasi rekaman ini secara unik. Hal ini juga digunakan untuk mengidentifikasi permintaan dalam notifikasi asinkron yang dikirim ke camera3_callback_ops_t.notify() .
const camera3_stream_buffer_t * input_buffer |
>= CAMERA_DEVICE_API_VERSION_3_2:
Handle untuk buffering aliran input untuk pengambilan ini. Buffer mungkin belum digunakan pada saat HAL memanggil process_capture_result(); framework akan menunggu pagar sinkronisasi rilis yang disediakan oleh HAL sebelum menggunakan kembali buffering.
HAL harus menangani pagar sinkronisasi dengan cara yang sama seperti yang dilakukan untuk output_buffers.
Hanya satu buffering input yang diizinkan untuk dikirim per permintaan. Serupa dengan buffer output, pengurutan buffer input yang ditampilkan harus dipertahankan oleh HAL.
Pertimbangan performa:
Buffer input harus ditampilkan sesegera mungkin. Jika mendukung fence sinkronisasi, HAL dapat memanggil process_capture_result untuk mengembalikannya dengan fence sinkronisasi yang ditetapkan dengan benar. Jika pagar sinkronisasi tidak didukung, buffering hanya dapat ditampilkan saat digunakan, yang mungkin memerlukan waktu lama; HAL dapat memilih untuk menyalin buffering input ini agar buffering ditampilkan lebih cepat.
uint32_t num_output_buffers |
Jumlah buffering output yang ditampilkan dalam struktur hasil ini. Harus kurang dari atau sama dengan jumlah permintaan pengambilan yang cocok. Jika kurang dari jumlah buffering dalam permintaan pengambilan, setidaknya satu panggilan lagi ke process_capture_result dengan frame_number yang sama harus dilakukan, untuk menampilkan buffering output yang tersisa ke framework. Nilai ini hanya boleh nol jika struktur menyertakan metadata hasil yang valid atau buffer input ditampilkan dalam hasil ini.
const camera3_stream_buffer_t * output_buffers |
Handle untuk buffering streaming output untuk pengambilan ini. Buffer mungkin belum terisi pada saat HAL memanggil process_capture_result(); framework akan menunggu pagar sinkronisasi rilis yang disediakan oleh HAL sebelum membaca buffering.
HAL harus menetapkan pagar sinkronisasi rilis buffer streaming ke fd sinkronisasi yang valid, atau ke -1 jika buffer telah terisi.
Jika HAL mengalami error saat memproses buffering, dan buffering tidak terisi, kolom status buffering harus disetel ke CAMERA3_BUFFER_STATUS_ERROR. Jika HAL tidak menunggu pagar akuisisi sebelum mengalami error, pagar akuisisi harus disalin ke pagar rilis, untuk memungkinkan framework menunggu pagar sebelum menggunakan kembali buffer.
Pagar akuisisi harus ditetapkan ke -1 untuk semua buffering output. Jika num_output_buffers nol, nilai ini mungkin NULL. Dalam hal ini, setidaknya satu panggilan process_capture_result lagi harus dilakukan oleh HAL untuk menyediakan buffering output.
Saat process_capture_result dipanggil dengan buffering baru untuk frame, semua buffering frame sebelumnya untuk streaming yang sesuai harus sudah dikirim (pagar tidak perlu diberi sinyal).
>= CAMERA_DEVICE_API_VERSION_3_2:
Buffer Gralloc untuk frame dapat dikirim ke framework sebelum notifikasi SHUTTER yang sesuai.
Pertimbangan performa:
Buffer yang dikirim ke framework tidak akan dikirim ke lapisan aplikasi hingga stempel waktu awal eksposur diterima melalui panggilan SHUTTER notify(). Sebaiknya kirim panggilan tersebut sedini mungkin.
uint32_t partial_result |
>= CAMERA_DEVICE_API_VERSION_3_2:
Untuk memanfaatkan hasil sebagian, HAL harus menetapkan metadata statis android.request.partialResultCount ke jumlah hasil sebagian yang akan dikirim untuk setiap frame.
Setiap hasil pengambilan baru dengan hasil parsial harus menetapkan kolom ini (partial_result) ke nilai inklusif yang berbeda antara 1 dan android.request.partialResultCount.
HAL yang tidak ingin memanfaatkan fitur ini tidak boleh menetapkan android.request.partialResultCount atau partial_result ke nilai selain 1.
Nilai ini harus ditetapkan ke 0 jika hasil pengambilan hanya berisi buffering dan tidak ada metadata.
const camera_metadata_t * result |
Metadata hasil untuk pengambilan ini. Ini berisi informasi tentang parameter pengambilan akhir, status hardware pengambilan dan pascapemrosesan, status algoritma 3A, jika diaktifkan, dan output unit statistik yang diaktifkan.
Hanya satu panggilan ke process_capture_result() dengan frame_number tertentu yang dapat menyertakan metadata hasil. Semua panggilan lain untuk frame_number yang sama harus menetapkannya ke NULL.
Jika terjadi error saat menghasilkan metadata hasil, hasil harus berupa buffering metadata kosong, dan notify() harus dipanggil dengan ERROR_RESULT.
>= CAMERA_DEVICE_API_VERSION_3_2:
Beberapa panggilan ke process_capture_result() dengan frame_number tertentu dapat menyertakan metadata hasil.
Metadata parsial yang dikirimkan tidak boleh menyertakan kunci metadata apa pun yang ditampilkan dalam hasil parsial sebelumnya untuk frame tertentu. Setiap hasil parsial baru untuk frame tersebut juga harus menetapkan nilai partial_result yang berbeda.
Jika notify telah dipanggil dengan ERROR_RESULT, semua hasil parsial lebih lanjut untuk frame tersebut akan diabaikan oleh framework.
Dokumentasi untuk struct ini dibuat dari file berikut:
- hardware/libhardware/include/hardware/ camera3.h