Referensi Struktur camera3_device_ops

Referensi Struktur camera3_device_ops

#include < camera3.h >

Bidang Data

ke dalam(* inisialisasi )(const struct camera3_device *, const camera3_callback_ops_t *callback_ops)
ke dalam(* konfigurasi_streams )(const struct camera3_device *, camera3_stream_configuration_t *stream_list)
ke dalam(* register_stream_buffers )(konstruk kamera3_perangkat *, kamera konst3_stream_buffer_set_t *buffer_set)
const kamera_metadata_t *(* konstruk_default_request_settings )(const struct camera3_device *, tipe int)
ke dalam(* proses_capture_request )(const struct camera3_device *, camera3_capture_request_t *permintaan)
ruang kosong(* get_metadata_vendor_tag_ops )(const struct camera3_device *, vendor_tag_query_ops_t *ops)
ruang kosong(* membuang )(const struct camera3_device *, int fd)
ke dalam(* siram )(const struct camera3_device *)
ruang kosong * dilindungi undang-undang [8]

Detil Deskripsi

Definisi pada baris 2509 file camera3.h .

Dokumentasi Lapangan

int(* konfigurasi_streams)(konstruk kamera3_perangkat *, kamera3_stream_konfigurasi_t *daftar_aliran)

konfigurasi_streams:

CAMERA_DEVICE_API_VERSION_3_0 saja:

Setel ulang jalur pemrosesan perangkat kamera HAL dan siapkan aliran input dan output baru. Panggilan ini menggantikan konfigurasi aliran yang ada dengan aliran yang ditentukan dalam stream_list. Metode ini akan dipanggil setidaknya sekali setelah inisialisasi() sebelum permintaan dikirimkan dengan process_capture_request() .

Stream_list harus berisi setidaknya satu aliran berkemampuan keluaran, dan tidak boleh berisi lebih dari satu aliran berkemampuan masukan.

stream_list mungkin berisi aliran yang juga berada dalam kumpulan aliran yang sedang aktif (dari panggilan sebelumnya ke konfigurasi_stream()). Aliran ini sudah memiliki nilai yang valid untuk penggunaan, max_buffers, dan penunjuk pribadi.

Jika buffer pada aliran tersebut sudah terdaftar, register_stream_buffers() tidak akan dipanggil lagi untuk aliran tersebut, dan buffer dari aliran tersebut dapat segera disertakan dalam permintaan masukan.

Jika HAL perlu mengubah konfigurasi aliran untuk aliran yang ada karena konfigurasi baru, HAL dapat menulis ulang nilai penggunaan dan/atau max_buffers selama panggilan konfigurasi.

Kerangka kerja akan mendeteksi perubahan tersebut, dan kemudian akan mengalokasikan kembali buffer aliran, dan memanggil register_stream_buffers() lagi sebelum menggunakan buffer dari aliran tersebut dalam permintaan.

Jika aliran yang sedang aktif tidak disertakan dalam stream_list, HAL dapat dengan aman menghapus referensi apa pun ke aliran tersebut. Ini tidak akan digunakan kembali dalam panggilan konfigurasi() selanjutnya oleh kerangka kerja, dan semua buffer gralloc untuk itu akan dibebaskan setelah panggilan konfigurasi_streams() kembali.

Struktur stream_list dimiliki oleh kerangka kerja, dan tidak dapat diakses setelah panggilan ini selesai. Alamat struktur camera3_stream_t individual akan tetap valid untuk diakses oleh HAL hingga akhir panggilan konfigurasi_stream() pertama yang tidak lagi menyertakan camera3_stream_t tersebut dalam argumen stream_list. HAL tidak boleh mengubah nilai dalam struktur aliran di luar penunjuk pribadi, kecuali untuk anggota penggunaan dan max_buffers selama panggilan konfigurasi_streams() itu sendiri.

Jika aliran baru, bidang penggunaan, max_buffer, dan penunjuk pribadi dari struktur aliran akan disetel ke 0. Perangkat HAL harus menyetel bidang ini sebelum panggilan konfigurasi_streams() kembali. Bidang ini kemudian digunakan oleh kerangka kerja dan modul platform gralloc untuk mengalokasikan buffer gralloc untuk setiap aliran.

Sebelum aliran baru tersebut dapat menyertakan buffernya dalam permintaan penangkapan, kerangka kerja akan memanggil register_stream_buffers() dengan aliran tersebut. Namun, kerangka kerja tidak diharuskan mendaftarkan buffer untuk semua aliran sebelum mengirimkan permintaan. Hal ini memungkinkan permulaan yang cepat (misalnya) aliran pratinjau, dengan alokasi untuk aliran lain terjadi kemudian atau secara bersamaan.


CAMERA_DEVICE_API_VERSION_3_1 saja:

Setel ulang jalur pemrosesan perangkat kamera HAL dan siapkan aliran input dan output baru. Panggilan ini menggantikan konfigurasi aliran yang ada dengan aliran yang ditentukan dalam stream_list. Metode ini akan dipanggil setidaknya sekali setelah inisialisasi() sebelum permintaan dikirimkan dengan process_capture_request() .

Stream_list harus berisi setidaknya satu aliran berkemampuan keluaran, dan tidak boleh berisi lebih dari satu aliran berkemampuan masukan.

stream_list mungkin berisi aliran yang juga berada dalam kumpulan aliran yang sedang aktif (dari panggilan sebelumnya ke konfigurasi_stream()). Aliran ini sudah memiliki nilai yang valid untuk penggunaan, max_buffers, dan penunjuk pribadi.

Jika buffer pada aliran tersebut sudah terdaftar, register_stream_buffers() tidak akan dipanggil lagi untuk aliran tersebut, dan buffer dari aliran tersebut dapat segera disertakan dalam permintaan masukan.

Jika HAL perlu mengubah konfigurasi aliran untuk aliran yang ada karena konfigurasi baru, HAL dapat menulis ulang nilai penggunaan dan/atau max_buffers selama panggilan konfigurasi.

Kerangka kerja akan mendeteksi perubahan tersebut, dan kemudian akan mengalokasikan kembali buffer aliran, dan memanggil register_stream_buffers() lagi sebelum menggunakan buffer dari aliran tersebut dalam permintaan.

Jika aliran yang sedang aktif tidak disertakan dalam stream_list, HAL dapat dengan aman menghapus referensi apa pun ke aliran tersebut. Ini tidak akan digunakan kembali dalam panggilan konfigurasi() selanjutnya oleh kerangka kerja, dan semua buffer gralloc untuk itu akan dibebaskan setelah panggilan konfigurasi_streams() kembali.

Struktur stream_list dimiliki oleh kerangka kerja, dan tidak dapat diakses setelah panggilan ini selesai. Alamat struktur camera3_stream_t individual akan tetap valid untuk diakses oleh HAL hingga akhir panggilan konfigurasi_stream() pertama yang tidak lagi menyertakan camera3_stream_t tersebut dalam argumen stream_list. HAL tidak boleh mengubah nilai dalam struktur aliran di luar penunjuk pribadi, kecuali untuk anggota penggunaan dan max_buffers selama panggilan konfigurasi_streams() itu sendiri.

Jika alirannya baru, max_buffer, dan bidang penunjuk pribadi dari struktur aliran semuanya akan disetel ke 0. Penggunaannya akan disetel ke tanda penggunaan konsumen. Perangkat HAL harus menyetel kolom ini sebelum panggilan konfigurasi_streams() kembali. Bidang ini kemudian digunakan oleh kerangka kerja dan modul platform gralloc untuk mengalokasikan buffer gralloc untuk setiap aliran.

Sebelum aliran baru tersebut dapat menyertakan buffernya dalam permintaan penangkapan, kerangka kerja akan memanggil register_stream_buffers() dengan aliran tersebut. Namun, kerangka kerja tidak diharuskan mendaftarkan buffer untuk semua aliran sebelum mengirimkan permintaan. Hal ini memungkinkan permulaan yang cepat (misalnya) aliran pratinjau, dengan alokasi untuk aliran lain terjadi kemudian atau secara bersamaan.


>= KAMERA_DEVICE_API_VERSION_3_2:

Setel ulang jalur pemrosesan perangkat kamera HAL dan siapkan aliran input dan output baru. Panggilan ini menggantikan konfigurasi aliran yang ada dengan aliran yang ditentukan dalam stream_list. Metode ini akan dipanggil setidaknya sekali setelah inisialisasi() sebelum permintaan dikirimkan dengan process_capture_request() .

Stream_list harus berisi setidaknya satu aliran berkemampuan keluaran, dan tidak boleh berisi lebih dari satu aliran berkemampuan masukan.

stream_list mungkin berisi aliran yang juga berada dalam kumpulan aliran yang sedang aktif (dari panggilan sebelumnya ke konfigurasi_stream()). Aliran ini sudah memiliki nilai yang valid untuk penggunaan, max_buffers, dan penunjuk pribadi.

Jika HAL perlu mengubah konfigurasi aliran untuk aliran yang ada karena konfigurasi baru, HAL dapat menulis ulang nilai penggunaan dan/atau max_buffers selama panggilan konfigurasi.

Kerangka kerja akan mendeteksi perubahan tersebut, dan kemudian dapat mengalokasikan kembali buffer aliran sebelum menggunakan buffer dari aliran tersebut dalam permintaan.

Jika aliran yang sedang aktif tidak disertakan dalam stream_list, HAL dapat dengan aman menghapus referensi apa pun ke aliran tersebut. Ini tidak akan digunakan kembali dalam panggilan konfigurasi() selanjutnya oleh kerangka kerja, dan semua buffer gralloc untuk itu akan dibebaskan setelah panggilan konfigurasi_streams() kembali.

Struktur stream_list dimiliki oleh kerangka kerja, dan tidak dapat diakses setelah panggilan ini selesai. Alamat struktur camera3_stream_t individual akan tetap valid untuk diakses oleh HAL hingga akhir panggilan konfigurasi_stream() pertama yang tidak lagi menyertakan camera3_stream_t tersebut dalam argumen stream_list. HAL tidak boleh mengubah nilai dalam struktur aliran di luar penunjuk pribadi, kecuali untuk anggota penggunaan dan max_buffers selama panggilan konfigurasi_streams() itu sendiri.

Jika alirannya baru, max_buffer, dan bidang penunjuk pribadi dari struktur aliran semuanya akan disetel ke 0. Penggunaannya akan disetel ke tanda penggunaan konsumen. Perangkat HAL harus menyetel kolom ini sebelum panggilan konfigurasi_streams() kembali. Bidang ini kemudian digunakan oleh kerangka kerja dan modul platform gralloc untuk mengalokasikan buffer gralloc untuk setiap aliran.

Buffer yang baru dialokasikan dapat disertakan dalam permintaan penangkapan kapan saja oleh kerangka kerja. Setelah buffer gralloc dikembalikan ke kerangka kerja dengan process_capture_result (dan masing-masing rilis_fence telah diberi sinyal), kerangka kerja dapat membebaskan atau menggunakannya kembali kapan saja.


Prasyarat:

Kerangka kerja hanya akan memanggil metode ini ketika tidak ada tangkapan yang diproses. Artinya, semua hasil telah dikembalikan ke kerangka kerja, dan semua buffer input dan output dalam penerbangan telah dikembalikan dan pagar sinkronisasi rilisnya telah diberi sinyal oleh HAL. Kerangka kerja ini tidak akan mengirimkan permintaan penangkapan baru saat panggilan konfigurasi_streams() sedang berlangsung.

Kondisi pasca:

Perangkat HAL harus mengonfigurasi dirinya sendiri untuk memberikan kecepatan bingkai keluaran maksimum berdasarkan ukuran dan format aliran keluaran, seperti yang didokumentasikan dalam metadata statis perangkat kamera.

Persyaratan kinerja:

Panggilan ini diperkirakan bersifat berat dan mungkin memerlukan waktu beberapa ratus milidetik untuk menyelesaikannya, karena mungkin memerlukan pengaturan ulang dan konfigurasi ulang sensor gambar dan jalur pemrosesan kamera. Meskipun demikian, perangkat HAL harus berupaya meminimalkan penundaan konfigurasi ulang untuk meminimalkan jeda yang terlihat oleh pengguna selama perubahan mode operasional aplikasi (seperti beralih dari pengambilan gambar diam ke perekaman video).

HAL akan kembali dari panggilan ini dalam 500 md, dan harus kembali dari panggilan ini dalam 1000 md.

Nilai pengembalian:

0: Pada konfigurasi streaming yang berhasil

-EINVAL: Jika konfigurasi aliran yang diminta tidak valid. Beberapa contoh konfigurasi aliran yang tidak valid meliputi:

  • Menyertakan lebih dari 1 aliran berkemampuan input (INPUT atau BIDIRECTIONAL)
  • Tidak termasuk aliran berkemampuan keluaran (OUTPUT atau BIDIRECTIONAL)
  • Termasuk streaming dengan format yang tidak didukung, atau ukuran yang tidak didukung untuk format tersebut.
  • Menyertakan terlalu banyak aliran keluaran dalam format tertentu.
  • Konfigurasi rotasi tidak didukung (hanya berlaku untuk perangkat dengan versi >= CAMERA_DEVICE_API_VERSION_3_3)
  • Ukuran/format aliran tidak memenuhi persyaratan camera3_stream_configuration_t->operation_mode untuk mode non-NORMAL, atau mode_operasi yang diminta tidak didukung oleh HAL. (hanya berlaku untuk perangkat dengan versi >= CAMERA_DEVICE_API_VERSION_3_3)

Perhatikan bahwa kerangka kerja yang mengirimkan konfigurasi aliran yang tidak valid bukanlah operasi normal, karena konfigurasi aliran diperiksa sebelum dikonfigurasi. Konfigurasi yang tidak valid berarti ada bug dalam kode kerangka kerja, atau ada ketidakcocokan antara metadata statis HAL dan persyaratan pada aliran.

-ENODEV: Jika terjadi kesalahan fatal dan perangkat tidak lagi beroperasi. Hanya close() yang berhasil dipanggil oleh kerangka kerja setelah kesalahan ini dikembalikan.

Definisi pada baris 2769 file camera3.h .

const camera_metadata_t *(* konstruk_default_request_settings)(const struct kamera3_device *, tipe int)

konstruk_default_request_settings:

Buat pengaturan pengambilan untuk kasus penggunaan kamera standar.

Perangkat harus mengembalikan buffer pengaturan yang dikonfigurasi untuk memenuhi kasus penggunaan yang diminta, yang harus berupa salah satu enum CAMERA3_TEMPLATE_*. Semua bidang kontrol permintaan harus disertakan.

HAL mempertahankan kepemilikan atas struktur ini, tetapi penunjuk ke struktur tersebut harus valid hingga perangkat ditutup. Kerangka kerja dan HAL tidak boleh mengubah buffer setelah dikembalikan oleh panggilan ini. Buffer yang sama dapat dikembalikan untuk panggilan berikutnya untuk template yang sama, atau untuk template lainnya.

Persyaratan kinerja:

Ini harus menjadi panggilan yang tidak menghalangi. HAL akan kembali dari panggilan ini dalam 1 md, dan harus kembali dari panggilan ini dalam 5 md.

Nilai pengembalian:

Metadata yang valid: Saat berhasil membuat buffer pengaturan default.

NULL: Jika terjadi kesalahan fatal. Setelah ini dikembalikan, hanya metode close() yang dapat dipanggil dengan sukses oleh kerangka kerja.

Definisi pada baris 2859 file camera3.h .

batal(* dump)(const struct camera3_device *, int fd)

membuang:

Cetak status debug untuk perangkat kamera. Ini akan dipanggil oleh framework ketika layanan kamera diminta untuk melakukan debug dump, yang terjadi saat menggunakan alat dumpsys, atau saat menangkap laporan bug.

Deskriptor file yang diteruskan dapat digunakan untuk menulis teks debug menggunakan dprintf() atau write(). Teks harus dalam pengkodean ASCII saja.

Persyaratan kinerja:

Ini harus berupa panggilan yang tidak memblokir. HAL akan kembali dari panggilan ini dalam 1 md, harus kembali dari panggilan ini dalam 10 md. Panggilan ini harus menghindari kebuntuan, karena panggilan ini dapat dilakukan kapan saja selama pengoperasian kamera. Primitif sinkronisasi apa pun yang digunakan (seperti kunci mutex atau semafor) harus diperoleh dengan batas waktu.

Definisi pada baris 2971 file camera3.h .

int(*flush)(const struct camera3_device *)

menyiram:

Hapus semua pengambilan yang sedang dalam proses dan semua buffer dalam alur pada perangkat tertentu. Kerangka kerja akan menggunakan ini untuk membuang semua status secepat mungkin guna mempersiapkan panggilan konfigurasi_streams() .

Tidak ada buffer yang diperlukan agar berhasil dikembalikan, jadi setiap buffer yang ditahan pada saat flush() (baik berhasil diisi atau tidak) dapat dikembalikan dengan CAMERA3_BUFFER_STATUS_ERROR. Perhatikan bahwa HAL masih diperbolehkan untuk mengembalikan buffer yang valid (CAMERA3_BUFFER_STATUS_OK) selama panggilan ini, asalkan buffer tersebut berhasil diisi.

Semua permintaan yang saat ini ada di HAL diharapkan dapat dikembalikan sesegera mungkin. Permintaan yang tidak dalam proses akan segera mengembalikan kesalahan. Blok perangkat keras apa pun yang dapat diinterupsi harus dihentikan, dan blok apa pun yang tidak dapat diinterupsi harus ditunggu.

flush() dapat dipanggil secara bersamaan ke process_capture_request() , dengan harapan bahwa process_capture_request akan kembali dengan cepat dan permintaan yang dikirimkan dalam panggilan process_capture_request tersebut diperlakukan seperti semua permintaan dalam penerbangan lainnya. Karena masalah konkurensi, ada kemungkinan bahwa dari sudut pandang HAL, panggilan process_capture_request() dapat dimulai setelah flush dipanggil tetapi belum dikembalikan. Jika panggilan seperti itu terjadi sebelum flush() kembali, HAL harus memperlakukan permintaan penangkapan baru seperti permintaan lain yang tertunda dalam penerbangan (lihat #4 di bawah).

Lebih khusus lagi, HAL harus mengikuti persyaratan di bawah ini untuk berbagai kasus:

  1. Untuk pengambilan yang terlambat untuk dibatalkan/dihentikan oleh HAL, dan akan diselesaikan secara normal oleh HAL; yaitu HAL dapat mengirim shutter/notify dan process_capture_result dan buffer seperti biasa.
  2. Untuk permintaan tertunda yang belum melakukan pemrosesan apa pun, HAL harus memanggil notify CAMERA3_MSG_ERROR_REQUEST, dan mengembalikan semua buffer output dengan process_capture_result dalam status kesalahan (CAMERA3_BUFFER_STATUS_ERROR). HAL tidak boleh menempatkan pagar pelepasan ke dalam status kesalahan, sebaliknya, pagar pelepasan harus diatur ke pagar perolehan yang dilewati oleh kerangka kerja, atau -1 jika sudah ditunggu oleh HAL. Ini juga merupakan jalur yang harus diikuti untuk setiap pengambilan yang telah dipanggil oleh HAL notify() dengan CAMERA3_MSG_SHUTTER tetapi tidak akan menghasilkan metadata/buffer yang valid. Setelah CAMERA3_MSG_ERROR_REQUEST, untuk frame tertentu, hanya process_capture_results dengan buffer di CAMERA3_BUFFER_STATUS_ERROR yang diperbolehkan. Pemberitahuan lebih lanjut atau process_capture_result dengan metadata bukan nol tidak diperbolehkan.
  3. Untuk permintaan tertunda yang diselesaikan sebagian dan tidak memiliki semua buffer keluaran atau mungkin metadatanya hilang, HAL harus mengikuti di bawah ini:

    3.1. Hubungi pemberitahuan dengan CAMERA3_MSG_ERROR_RESULT jika beberapa metadata hasil yang diharapkan (yaitu satu atau lebih metadata parsial) tidak tersedia untuk diambil.

    3.2. Panggil notifikasi dengan CAMERA3_MSG_ERROR_BUFFER untuk setiap buffer yang tidak akan diproduksi untuk pengambilan.

    3.3 Panggilan pemberitahuan dengan CAMERA3_MSG_SHUTTER dengan stempel waktu pengambilan sebelum buffer/metadata dikembalikan dengan process_capture_result.

    3.4 Untuk pengambilan yang memberikan hasil tertentu, HAL tidak boleh memanggil CAMERA3_MSG_ERROR_REQUEST, karena ini menunjukkan kegagalan total.

    3.5. Buffer/metadata yang valid harus diteruskan ke kerangka kerja seperti biasa.

    3.6. Buffer yang gagal harus dikembalikan ke kerangka kerja seperti yang dijelaskan pada kasus 2. Namun buffer yang gagal tidak harus mengikuti urutan ketat yang dilakukan buffer yang valid, dan mungkin rusak sehubungan dengan buffer yang valid. Misalnya, jika buffer A, B, C, D, E terkirim, D dan E gagal, maka A, E, B, D, C adalah pesanan pengembalian yang dapat diterima.

    3.7. Untuk metadata yang hilang sepenuhnya, memanggil CAMERA3_MSG_ERROR_RESULT sudah cukup, tidak perlu memanggil process_capture_result dengan metadata NULL atau yang setara.

  4. Jika flush() dipanggil saat pemanggilan process_capture_request() aktif, pemanggilan proses tersebut harus kembali sesegera mungkin. Selain itu, jika panggilan process_capture_request() dibuat setelah flush() dipanggil tetapi sebelum flush() kembali, permintaan penangkapan yang diberikan oleh panggilan process_capture_request yang terakhir harus diperlakukan seperti permintaan yang tertunda dalam kasus #2 di atas.

flush() hanya akan kembali ketika tidak ada lagi buffer atau permintaan yang tersisa di HAL. Kerangka kerja ini dapat memanggil konfigurasi_streams (karena status HAL sekarang tidak aktif) atau dapat mengeluarkan permintaan baru.

Perhatikan bahwa cukup hanya mendukung kasus hasil yang berhasil sepenuhnya dan gagal sepenuhnya. Namun, sangat disarankan untuk mendukung kasus kegagalan parsial juga, karena dapat membantu meningkatkan kinerja panggilan flush secara keseluruhan.

Persyaratan kinerja:

HAL akan kembali dari panggilan ini dalam 100 md, dan harus kembali dari panggilan ini dalam 1000 md. Dan panggilan ini tidak boleh diblokir lebih lama dari latensi saluran pipa (lihat S7 untuk definisinya).

Informasi versi:

hanya tersedia jika versi perangkat >= CAMERA_DEVICE_API_VERSION_3_1.

Nilai pengembalian:

0: Pada flush kamera yang berhasil HAL.

-EINVAL: Jika input salah (perangkat tidak valid).

-ENODEV: Jika perangkat kamera mengalami kesalahan serius. Setelah kesalahan ini dikembalikan, hanya metode close() yang berhasil dipanggil oleh kerangka kerja.

Definisi pada baris 3077 file camera3.h .

batal(* get_metadata_vendor_tag_ops)(const struct camera3_device *, vendor_tag_query_ops_t *ops)

dapatkan_metadata_vendor_tag_ops:

Dapatkan metode untuk menanyakan informasi tag metadata ekstensi vendor. HAL harus mengisi semua metode operasi tag vendor, atau membiarkan operasi tidak berubah jika tidak ada tag vendor yang ditentukan.

Definisi vendor_tag_query_ops_t dapat ditemukan di system/media/camera/include/system/camera_metadata.h.

>= CAMERA_DEVICE_API_VERSION_3_2: TIDAK DIGUNAKAN LAGI. Fungsi ini sudah tidak digunakan lagi dan harus disetel ke NULL oleh HAL. Harap terapkan get_vendor_tag_ops di camera_common.h sebagai gantinya.

Definisi pada baris 2950 file camera3.h .

int(* inisialisasi)(const struct camera3_device *, const camera3_callback_ops_t *callback_ops)

inisialisasi:

Inisialisasi satu kali untuk meneruskan penunjuk fungsi panggilan balik kerangka kerja ke HAL. Akan dipanggil satu kali setelah panggilan open() berhasil, sebelum fungsi lainnya dipanggil pada struktur camera3_device_ops .

Persyaratan kinerja:

Ini harus menjadi panggilan yang tidak menghalangi. HAL akan kembali dari panggilan ini dalam 5 md, dan harus kembali dari panggilan ini dalam 10 md.

Nilai pengembalian:

0: Pada inisialisasi berhasil

-ENODEV: Jika inisialisasi gagal. Hanya close() yang berhasil dipanggil oleh framework setelah ini.

Definisi pada baris 2530 file camera3.h .

int(* proses_capture_request)(konstruksi struktur kamera3_perangkat *, kamera3_capture_request_t *permintaan)

proses_capture_request:

Kirim permintaan penangkapan baru ke HAL. HAL tidak boleh kembali dari panggilan ini sampai siap menerima permintaan berikutnya untuk diproses. Hanya satu panggilan ke process_capture_request() yang akan dilakukan pada satu waktu oleh kerangka kerja, dan semua panggilan akan berasal dari thread yang sama. Panggilan berikutnya ke process_capture_request() akan dilakukan segera setelah permintaan baru dan buffer terkait tersedia. Dalam skenario pratinjau normal, ini berarti fungsi tersebut akan dipanggil lagi oleh framework hampir seketika.

Pemrosesan permintaan sebenarnya bersifat asinkron, dengan hasil penangkapan dikembalikan oleh HAL melalui panggilan process_capture_result(). Panggilan ini memerlukan metadata hasil agar tersedia, namun buffer keluaran mungkin hanya menyediakan pagar sinkronisasi untuk menunggu. Beberapa permintaan diharapkan dapat dijalankan secara bersamaan, untuk mempertahankan kecepatan frame output penuh.

Kerangka kerja ini mempertahankan kepemilikan struktur permintaan. Ini hanya dijamin valid selama panggilan ini. Perangkat HAL harus membuat salinan informasi yang perlu disimpan untuk pemrosesan penangkapan. HAL bertanggung jawab untuk menunggu dan menutup pagar buffer dan mengembalikan pegangan buffer ke kerangka kerja.

HAL harus menulis deskriptor file untuk pagar sinkronisasi rilis buffer input ke input_buffer->release_fence, jika input_buffer bukan NULL. Jika HAL mengembalikan -1 untuk pagar sinkronisasi pelepasan buffer input, kerangka kerja bebas untuk segera menggunakan kembali buffer input. Jika tidak, framework akan menunggu di pagar sinkronisasi sebelum mengisi ulang dan menggunakan kembali buffer input.

>= KAMERA_DEVICE_API_VERSION_3_2:

Buffer input/output yang disediakan oleh kerangka kerja di setiap permintaan mungkin baru (belum pernah dilihat oleh HAL).


Pertimbangan kinerja:

Menangani buffer baru harus sangat ringan dan tidak boleh ada penurunan kecepatan frame atau jitter frame yang terjadi.

Panggilan ini harus kembali cukup cepat untuk memastikan bahwa frame rate yang diminta dapat dipertahankan, terutama untuk kasus streaming (pengaturan kualitas pasca-pemrosesan diatur ke FAST). HAL harus mengembalikan panggilan ini dalam 1 interval frame, dan harus kembali dari panggilan ini dalam 4 interval frame.

Nilai pengembalian:

0: Berhasil memulai memproses permintaan penangkapan

-EINVAL: Jika format input salah (pengaturannya NULL jika tidak diizinkan, ada 0 buffer output, dll) dan pemrosesan pengambilan tidak dapat dimulai. Kegagalan selama pemrosesan permintaan harus ditangani dengan memanggil camera3_callback_ops_t.notify() . Jika terjadi kesalahan ini, kerangka kerja akan tetap bertanggung jawab atas pagar buffer aliran dan pegangan buffer; HAL tidak boleh menutup pagar atau mengembalikan buffer ini dengan process_capture_result.

-ENODEV: Jika perangkat kamera mengalami kesalahan serius. Setelah kesalahan ini dikembalikan, hanya metode close() yang berhasil dipanggil oleh kerangka kerja.

Definisi pada baris 2928 file camera3.h .

int(* register_stream_buffers)(konstruk kamera3_perangkat *, kamera konst3_stream_buffer_set_t *buffer_set)

daftar_stream_buffer:

>= KAMERA_DEVICE_API_VERSION_3_2:

TIDAK DIGUNAKAN lagi. Ini tidak akan dipanggil dan harus disetel ke NULL.

<= KAMERA_DEVICE_API_VERSION_3_1:

Daftarkan buffer untuk aliran tertentu dengan perangkat HAL. Metode ini dipanggil oleh kerangka kerja setelah aliran baru ditentukan oleh konfigurasi_streams, dan sebelum buffer dari aliran tersebut disertakan dalam permintaan penangkapan. Jika aliran yang sama tercantum dalam panggilan konfigurasi_streams() berikutnya, register_stream_buffers tidak akan dipanggil lagi untuk aliran tersebut.

Kerangka kerja ini tidak perlu mendaftarkan buffer untuk semua aliran yang dikonfigurasi sebelum mengirimkan permintaan penangkapan pertama. Hal ini memungkinkan pengaktifan cepat untuk pratinjau (atau kasus penggunaan serupa) sementara streaming lainnya masih dialokasikan.

Metode ini dimaksudkan untuk memungkinkan perangkat HAL memetakan atau menyiapkan buffer untuk digunakan nanti. Buffer yang diteruskan sudah dikunci untuk digunakan. Di akhir panggilan, semua buffer harus siap untuk dikembalikan ke aliran. Argumen buffer_set hanya valid selama durasi panggilan ini.

Jika format streaming diatur ke HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, kamera HAL harus memeriksa buffer yang diteruskan di sini untuk menentukan informasi format piksel platform-pribadi.

Persyaratan kinerja:

Ini harus menjadi panggilan yang tidak menghalangi. HAL akan kembali dari panggilan ini dalam 1 md, dan harus kembali dari panggilan ini dalam 5 md.

Nilai pengembalian:

0: Pada pendaftaran buffer aliran baru yang berhasil

-EINVAL: Jika stream_buffer_set tidak mengacu pada aliran aktif yang valid, atau jika array buffer tidak valid.

-ENOMEM: Jika terjadi kegagalan dalam mendaftarkan buffer. Kerangka kerja harus menganggap semua buffer aliran tidak terdaftar, dan dapat mencoba mendaftar lagi nanti.

-ENODEV : Jika terjadi kesalahan fatal, dan perangkat tidak dapat beroperasi lagi. Hanya close() yang berhasil dipanggil oleh kerangka kerja setelah kesalahan ini dikembalikan.

Definisi pada baris 2823 file camera3.h .

batal* dicadangkan[8]

Definisi pada baris 3080 file camera3.h .


Dokumentasi untuk struct ini dihasilkan dari file berikut:
  • perangkat keras/libhardware/termasuk/perangkat keras/ kamera3.h