Referensi Struct camera3_device_ops

Referensi Struct camera3_device_ops

#include < camera3.h >

Kolom Data

int(*  initialize )(const struct camera3_device *, const camera3_callback_ops_t *callback_ops)
 
int(*  configure_streams )(const struct camera3_device *, camera3_stream_configuration_t *stream_list)
 
int(*  register_stream_buffers )(const struct camera3_device *, const camera3_stream_buffer_set_t *buffer_set)
 
const camera_metadata_t *(*  construct_default_request_settings )(const struct camera3_device *, int type)
 
int(*  process_capture_request )(const struct camera3_device *, camera3_capture_request_t *request)
 
void(*  get_metadata_vendor_tag_ops )(const struct camera3_device *, vendor_tag_query_ops_t *ops)
 
void(*  dump )(const struct camera3_device *, int fd)
 
int(*  flush )(const struct camera3_device *)
 
void *  reserved [8]
 

Deskripsi Mendetail

Definisi di baris 2509 file camera3.h .

Dokumentasi Bidang

int(* configure_streams)(const struct camera3_device *, camera3_stream_configuration_t *stream_list)

configure_streams:

Khusus CAMERA_DEVICE_API_VERSION_3_0:

Reset pipeline pemrosesan perangkat kamera HAL dan siapkan aliran input dan output baru. Panggilan ini mengganti konfigurasi streaming yang ada dengan streaming yang ditentukan dalam stream_list. Metode ini akan dipanggil setidaknya sekali setelah initialize() sebelum permintaan dikirim dengan process_capture_request() .

stream_list harus berisi minimal satu streaming yang dapat menghasilkan output, dan tidak boleh berisi lebih dari satu streaming yang dapat menghasilkan input.

stream_list dapat berisi streaming yang juga ada dalam kumpulan streaming yang saat ini aktif (dari panggilan sebelumnya ke configure_stream()). Streaming ini akan memiliki nilai yang valid untuk penggunaan, max_buffers, dan pointer pribadi.

Jika buffer stream tersebut telah didaftarkan, register_stream_buffers() tidak akan dipanggil lagi untuk stream, dan buffer dari stream dapat langsung disertakan dalam permintaan input.

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

Framework akan mendeteksi perubahan tersebut, lalu mengalokasikan ulang buffering streaming, dan memanggil register_stream_buffers() lagi sebelum menggunakan buffering dari streaming tersebut dalam permintaan.

Jika streaming yang saat ini aktif tidak disertakan dalam stream_list, HAL dapat menghapus referensi apa pun ke streaming tersebut dengan aman. Buffer ini tidak akan digunakan kembali dalam panggilan configure() berikutnya oleh framework, dan semua buffering gralloc untuk buffer ini akan dibebaskan setelah panggilan configure_streams() ditampilkan.

Struktur stream_list dimiliki oleh framework, dan tidak dapat diakses setelah panggilan ini selesai. Alamat setiap struktur camera3_stream_t akan tetap valid untuk diakses oleh HAL hingga akhir panggilan configure_stream() pertama yang tidak lagi menyertakan camera3_stream_t tersebut dalam argumen stream_list. HAL tidak boleh mengubah nilai dalam struktur streaming di luar pointer pribadi, kecuali untuk anggota penggunaan dan max_buffers selama configure_streams() panggilan itu sendiri.

Jika streaming baru, kolom penggunaan, max_buffer, dan pointer pribadi dari struktur streaming akan ditetapkan ke 0. Perangkat HAL harus menetapkan kolom ini sebelum panggilan configure_streams() ditampilkan. Kolom ini kemudian digunakan oleh framework dan modul gralloc platform untuk mengalokasikan buffering gralloc untuk setiap streaming.

Sebelum buffer streaming baru tersebut dapat disertakan dalam permintaan pengambilan, framework akan memanggil register_stream_buffers() dengan streaming tersebut. Namun, framework tidak diwajibkan untuk mendaftarkan buffering untuk semua streaming sebelum mengirimkan permintaan. Hal ini memungkinkan pengaktifan cepat (misalnya) streaming pratinjau, dengan alokasi untuk streaming lain yang terjadi nanti atau secara serentak.


Khusus CAMERA_DEVICE_API_VERSION_3_1:

Reset pipeline pemrosesan perangkat kamera HAL dan siapkan aliran input dan output baru. Panggilan ini mengganti konfigurasi streaming yang ada dengan streaming yang ditentukan dalam stream_list. Metode ini akan dipanggil setidaknya sekali setelah initialize() sebelum permintaan dikirim dengan process_capture_request() .

stream_list harus berisi minimal satu streaming yang dapat menghasilkan output, dan tidak boleh berisi lebih dari satu streaming yang dapat menghasilkan input.

stream_list dapat berisi streaming yang juga ada dalam kumpulan streaming yang saat ini aktif (dari panggilan sebelumnya ke configure_stream()). Streaming ini akan memiliki nilai yang valid untuk penggunaan, max_buffers, dan pointer pribadi.

Jika buffer stream tersebut telah didaftarkan, register_stream_buffers() tidak akan dipanggil lagi untuk stream, dan buffer dari stream dapat langsung disertakan dalam permintaan input.

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

Framework akan mendeteksi perubahan tersebut, lalu mengalokasikan ulang buffering streaming, dan memanggil register_stream_buffers() lagi sebelum menggunakan buffering dari streaming tersebut dalam permintaan.

Jika streaming yang saat ini aktif tidak disertakan dalam stream_list, HAL dapat menghapus referensi apa pun ke streaming tersebut dengan aman. Buffer ini tidak akan digunakan kembali dalam panggilan configure() berikutnya oleh framework, dan semua buffering gralloc untuk buffer ini akan dibebaskan setelah panggilan configure_streams() ditampilkan.

Struktur stream_list dimiliki oleh framework, dan tidak dapat diakses setelah panggilan ini selesai. Alamat setiap struktur camera3_stream_t akan tetap valid untuk diakses oleh HAL hingga akhir panggilan configure_stream() pertama yang tidak lagi menyertakan camera3_stream_t tersebut dalam argumen stream_list. HAL tidak boleh mengubah nilai dalam struktur streaming di luar pointer pribadi, kecuali untuk anggota penggunaan dan max_buffers selama configure_streams() panggilan itu sendiri.

Jika streaming baru, kolom max_buffer, dan pointer pribadi dari struktur streaming akan disetel ke 0. Penggunaan akan ditetapkan ke flag penggunaan konsumen. Perangkat HAL harus menetapkan kolom ini sebelum panggilan configure_streams() ditampilkan. Kolom ini kemudian digunakan oleh framework dan modul gralloc platform untuk mengalokasikan buffering gralloc untuk setiap streaming.

Sebelum buffer streaming baru tersebut dapat disertakan dalam permintaan pengambilan, framework akan memanggil register_stream_buffers() dengan streaming tersebut. Namun, framework tidak diwajibkan untuk mendaftarkan buffering untuk semua streaming sebelum mengirimkan permintaan. Hal ini memungkinkan pengaktifan cepat (misalnya) streaming pratinjau, dengan alokasi untuk streaming lain yang terjadi nanti atau secara serentak.


>= CAMERA_DEVICE_API_VERSION_3_2:

Reset pipeline pemrosesan perangkat kamera HAL dan siapkan aliran input dan output baru. Panggilan ini mengganti konfigurasi streaming yang ada dengan streaming yang ditentukan dalam stream_list. Metode ini akan dipanggil setidaknya sekali setelah initialize() sebelum permintaan dikirim dengan process_capture_request() .

stream_list harus berisi minimal satu streaming yang dapat menghasilkan output, dan tidak boleh berisi lebih dari satu streaming yang dapat menghasilkan input.

stream_list dapat berisi streaming yang juga ada dalam kumpulan streaming yang saat ini aktif (dari panggilan sebelumnya ke configure_stream()). Streaming ini akan memiliki nilai yang valid untuk penggunaan, max_buffers, dan pointer pribadi.

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

Framework akan mendeteksi perubahan tersebut, lalu dapat mengalokasikan ulang buffering streaming sebelum menggunakan buffering dari streaming tersebut dalam permintaan.

Jika streaming yang saat ini aktif tidak disertakan dalam stream_list, HAL dapat menghapus referensi apa pun ke streaming tersebut dengan aman. Buffer ini tidak akan digunakan kembali dalam panggilan configure() berikutnya oleh framework, dan semua buffering gralloc untuk buffer ini akan dibebaskan setelah panggilan configure_streams() ditampilkan.

Struktur stream_list dimiliki oleh framework, dan tidak dapat diakses setelah panggilan ini selesai. Alamat setiap struktur camera3_stream_t akan tetap valid untuk diakses oleh HAL hingga akhir panggilan configure_stream() pertama yang tidak lagi menyertakan camera3_stream_t tersebut dalam argumen stream_list. HAL tidak boleh mengubah nilai dalam struktur streaming di luar pointer pribadi, kecuali untuk anggota penggunaan dan max_buffers selama configure_streams() panggilan itu sendiri.

Jika streaming baru, kolom max_buffer, dan pointer pribadi dari struktur streaming akan disetel ke 0. Penggunaan akan ditetapkan ke flag penggunaan konsumen. Perangkat HAL harus menetapkan kolom ini sebelum panggilan configure_streams() ditampilkan. Kolom ini kemudian digunakan oleh framework dan modul gralloc platform untuk mengalokasikan buffering gralloc untuk setiap streaming.

Buffer yang baru dialokasikan dapat disertakan dalam permintaan pengambilan kapan saja oleh framework. Setelah buffer gralloc ditampilkan ke framework dengan process_capture_result (dan release_fence-nya telah diberi sinyal), framework dapat mengosongkan atau menggunakannya kembali kapan saja.


Prasyarat:

Framework hanya akan memanggil metode ini jika tidak ada pengambilan yang sedang diproses. Artinya, semua hasil telah ditampilkan ke framework, dan semua buffering input dan output yang sedang berlangsung telah ditampilkan dan pagar sinkronisasi rilisnya telah diberi sinyal oleh HAL. Framework tidak akan mengirimkan permintaan baru untuk pengambilan saat panggilan configure_streams() sedang berlangsung.

Postconditions:

Perangkat HAL harus mengonfigurasi dirinya sendiri untuk memberikan kecepatan frame output maksimum yang mungkin mengingat ukuran dan format aliran output, seperti yang didokumentasikan dalam metadata statis perangkat kamera.

Persyaratan performa:

Panggilan ini diperkirakan akan berat dan mungkin memerlukan waktu beberapa ratus milidetik untuk diselesaikan, karena mungkin perlu mereset dan mengonfigurasi ulang sensor gambar dan pipeline pemrosesan kamera. Namun, perangkat HAL harus mencoba meminimalkan penundaan konfigurasi ulang untuk meminimalkan jeda yang terlihat pengguna selama perubahan mode operasional aplikasi (seperti beralih dari pengambilan gambar diam ke perekaman video).

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

Nilai kembalian:

0: Saat konfigurasi streaming berhasil

-EINVAL: Jika konfigurasi streaming yang diminta tidak valid. Beberapa contoh konfigurasi streaming yang tidak valid mencakup:

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

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

-ENODEV: Jika terjadi error fatal dan perangkat tidak lagi beroperasi. Hanya close() yang dapat dipanggil dengan sukses oleh framework setelah error ini ditampilkan.

Definisi di baris 2769 dari file camera3.h .

const camera_metadata_t *(* construct_default_request_settings)(const struct camera3_device *, int type)

construct_default_request_settings:

Buat setelan pengambilan untuk kasus penggunaan kamera standar.

Perangkat harus menampilkan buffering setelan yang dikonfigurasi untuk memenuhi kasus penggunaan yang diminta, yang harus merupakan salah satu enum CAMERA3_TEMPLATE_*. Semua kolom kontrol permintaan harus disertakan.

HAL mempertahankan kepemilikan struktur ini, tetapi pointer ke struktur harus valid hingga perangkat ditutup. Framework dan HAL tidak boleh mengubah buffering setelah ditampilkan oleh panggilan ini. Buffer yang sama dapat ditampilkan untuk panggilan berikutnya untuk template yang sama, atau untuk template lainnya.

Persyaratan performa:

Panggilan ini harus berupa panggilan non-pemblokiran. HAL harus kembali dari panggilan ini dalam 1 md, dan harus kembali dari panggilan ini dalam 5 md.

Nilai kembalian:

Metadata yang valid: Setelah buffer setelan default berhasil dibuat.

NULL: Jika terjadi error fatal. Setelah ini ditampilkan, hanya metode close() yang dapat berhasil dipanggil oleh framework.

Definisi di baris 2859 dari file camera3.h .

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

dump:

Mencetak status proses debug untuk perangkat kamera. Ini akan dipanggil oleh framework saat layanan kamera diminta untuk melakukan dump debug, yang terjadi saat menggunakan alat dumpsys, atau saat mengambil bugreport.

Deskripsi file yang diteruskan dapat digunakan untuk menulis teks proses debug menggunakan dprintf() atau write(). Teks hanya boleh dalam encoding ASCII.

Persyaratan performa:

Panggilan ini harus berupa panggilan non-pemblokiran. HAL harus kembali dari panggilan ini dalam 1 md, harus kembali dari panggilan ini dalam 10 md. Panggilan ini harus menghindari deadlock, karena dapat dipanggil kapan saja selama operasi kamera. Setiap primitif sinkronisasi yang digunakan (seperti kunci mutex atau semaphore) harus diperoleh dengan waktu tunggu.

Definisi di baris 2971 dari file camera3.h .

int(* flush)(const struct camera3_device *)

flush:

Menghapus semua rekaman yang sedang diproses dan semua buffer dalam pipeline di perangkat tertentu. Framework akan menggunakannya untuk membuang semua status secepat mungkin untuk mempersiapkan panggilan configure_streams() .

Tidak ada buffering yang diperlukan agar berhasil ditampilkan, sehingga setiap buffering yang disimpan pada saat flush() (baik berhasil diisi maupun tidak) dapat ditampilkan dengan CAMERA3_BUFFER_STATUS_ERROR. Perhatikan bahwa HAL masih diizinkan untuk menampilkan buffering yang valid (CAMERA3_BUFFER_STATUS_OK) selama panggilan ini, asalkan berhasil diisi.

Semua permintaan yang saat ini ada di HAL diharapkan akan ditampilkan sesegera mungkin. Permintaan yang tidak sedang diproses harus segera menampilkan error. Setiap blok hardware yang dapat diinterupsi harus dihentikan, dan setiap blok yang tidak dapat diinterupsi harus ditunggu.

flush() dapat dipanggil secara serentak ke process_capture_request() , dengan harapan bahwa process_capture_request akan ditampilkan dengan cepat dan permintaan yang dikirim dalam panggilan process_capture_request tersebut diperlakukan seperti semua permintaan lainnya yang sedang berlangsung. Karena masalah serentak, mungkin dari sudut pandang HAL, panggilan process_capture_request() dapat dimulai setelah flush dipanggil, tetapi belum ditampilkan. Jika panggilan tersebut terjadi sebelum flush() ditampilkan, HAL harus memperlakukan permintaan pengambilan baru seperti permintaan tertunda lainnya yang sedang berlangsung (lihat #4 di bawah).

Lebih khusus lagi, HAL harus mengikuti persyaratan di bawah 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 serta buffer seperti biasa.
  2. Untuk permintaan tertunda yang belum melakukan pemrosesan apa pun, HAL harus memanggil notifikasi CAMERA3_MSG_ERROR_REQUEST, dan menampilkan semua buffering output dengan process_capture_result dalam status error (CAMERA3_BUFFER_STATUS_ERROR). HAL tidak boleh menempatkan pagar rilis ke dalam status error. Sebagai gantinya, pagar rilis harus ditetapkan ke pagar akuisisi yang diteruskan oleh framework, atau -1 jika sudah ditunggu oleh HAL. Ini juga merupakan jalur yang harus diikuti untuk pengambilan apa pun yang HAL-nya telah memanggil 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 buffering di CAMERA3_BUFFER_STATUS_ERROR yang diizinkan. Notifikasi atau process_capture_result lebih lanjut dengan metadata non-null tidak diizinkan.
  3. Untuk permintaan tertunda yang telah selesai sebagian yang tidak akan memiliki semua buffering output atau mungkin tidak memiliki metadata, HAL harus mengikuti hal berikut:

    3.1. Panggil pemberitahuan dengan CAMERA3_MSG_ERROR_RESULT jika beberapa metadata hasil yang diharapkan (yaitu satu atau beberapa metadata parsial) tidak akan tersedia untuk pengambilan.

    3.2. Panggil notifikasi dengan CAMERA3_MSG_ERROR_BUFFER untuk setiap buffering yang tidak akan dihasilkan untuk pengambilan.

    3.3 Panggil notifikasi dengan CAMERA3_MSG_SHUTTER dengan stempel waktu pengambilan sebelum buffer/metadata ditampilkan dengan process_capture_result.

    3.4 Untuk pengambilan yang akan menghasilkan beberapa hasil, HAL tidak boleh memanggil CAMERA3_MSG_ERROR_REQUEST, karena hal itu menunjukkan kegagalan total.

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

    3.6. Buffer yang gagal harus dikembalikan ke framework seperti yang dijelaskan untuk kasus 2. Namun, buffering yang gagal tidak harus mengikuti pengurutan ketat yang dilakukan buffering yang valid, dan mungkin tidak berurutan sehubungan dengan buffering yang valid. Misalnya, jika buffer A, B, C, D, E dikirim, D dan E gagal, maka A, E, B, D, C adalah urutan pengembalian yang dapat diterima.

    3.7. Untuk metadata yang sepenuhnya tidak ada, 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 proses_capture_request() aktif, panggilan proses tersebut harus ditampilkan sesegera mungkin. Selain itu, jika panggilan process_capture_request() dilakukan setelah flush() dipanggil, tetapi sebelum flush() ditampilkan, permintaan pengambilan yang diberikan oleh panggilan process_capture_request yang terlambat harus diperlakukan seperti permintaan yang tertunda dalam kasus #2 di atas.

flush() hanya boleh ditampilkan jika tidak ada lagi buffering atau permintaan yang tertunda di HAL. Framework dapat memanggil configure_streams (karena status HAL kini dihentikan) atau dapat mengeluarkan permintaan baru.

Perhatikan bahwa cukup dengan hanya mendukung kasus hasil yang sepenuhnya berhasil dan sepenuhnya gagal. Namun, sebaiknya dukung juga kasus kegagalan sebagian, karena dapat membantu meningkatkan performa keseluruhan panggilan flush.

Persyaratan performa:

HAL harus kembali dari panggilan ini dalam 100 md, dan harus kembali dari panggilan ini dalam 1000 md. Selain itu, panggilan ini tidak boleh diblokir lebih lama dari latensi pipeline (lihat S7 untuk mengetahui definisinya).

Informasi versi:

hanya tersedia jika versi perangkat >= CAMERA_DEVICE_API_VERSION_3_1.

Nilai kembalian:

0: Saat berhasil menghapus HAL kamera.

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

-ENODEV: Jika perangkat kamera mengalami error serius. Setelah error ini ditampilkan, hanya metode close() yang berhasil dipanggil oleh framework.

Definisi di baris 3077 dari file camera3.h .

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

get_metadata_vendor_tag_ops:

Mendapatkan metode untuk membuat kueri 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 tidak digunakan lagi dan harus ditetapkan ke NULL oleh HAL. Sebagai gantinya, terapkan get_vendor_tag_ops di camera_common.h .

Definisi di baris 2950 dari file camera3.h .

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

initialize:

Inisialisasi satu kali untuk meneruskan pointer fungsi callback framework ke HAL. Akan dipanggil satu kali setelah panggilan open() berhasil, sebelum fungsi lain dipanggil pada struktur camera3_device_ops .

Persyaratan performa:

Panggilan ini harus berupa panggilan non-pemblokiran. HAL harus kembali dari panggilan ini dalam 5 md, dan harus kembali dari panggilan ini dalam 10 md.

Nilai kembalian:

0: Saat inisialisasi berhasil

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

Definisi di baris 2530 dari file camera3.h .

int(* process_capture_request)(const struct camera3_device *, camera3_capture_request_t *request)

process_capture_request:

Kirim permintaan pengambilan baru ke HAL. HAL tidak boleh kembali dari panggilan ini hingga siap menerima permintaan berikutnya untuk diproses. Hanya satu panggilan ke process_capture_request() yang akan dibuat dalam satu waktu oleh framework, 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 akan dipanggil lagi oleh framework hampir seketika.

Pemrosesan permintaan yang sebenarnya bersifat asinkron, dengan hasil pengambilan yang ditampilkan oleh HAL melalui panggilan process_capture_result(). Panggilan ini memerlukan metadata hasil yang tersedia, tetapi buffering output mungkin hanya menyediakan pagar sinkronisasi untuk menunggu. Beberapa permintaan diharapkan akan berjalan sekaligus, untuk mempertahankan kecepatan frame output penuh.

Framework mempertahankan kepemilikan struktur permintaan. Nilai ini hanya dijamin valid selama panggilan ini. Perangkat HAL harus membuat salinan informasi yang perlu disimpan untuk pemrosesan pengambilan. HAL bertanggung jawab untuk menunggu dan menutup pagar buffer serta menampilkan handle buffer ke framework.

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

>= CAMERA_DEVICE_API_VERSION_3_2:

Buffer input/output yang disediakan oleh framework dalam setiap permintaan mungkin baru (belum pernah dilihat oleh HAL).


Pertimbangan performa:

Penanganan buffering baru harus sangat ringan dan tidak boleh ada degradasi kecepatan frame atau jitter frame yang diperkenalkan.

Panggilan ini harus ditampilkan cukup cepat untuk memastikan kecepatan frame yang diminta dapat dipertahankan, terutama untuk kasus streaming (setelan kualitas pascapemrosesan ditetapkan ke CEPAT). HAL harus menampilkan panggilan ini dalam interval 1 frame, dan harus kembali dari panggilan ini dalam interval 4 frame.

Nilai kembalian:

0: Saat berhasil memulai pemrosesan permintaan pengambilan

-EINVAL: Jika input salah format (setelan NULL jika tidak diizinkan, ada 0 buffering output, dll.) dan pemrosesan pengambilan tidak dapat dimulai. Kegagalan selama pemrosesan permintaan harus ditangani dengan memanggil camera3_callback_ops_t.notify() . Jika terjadi error ini, framework akan mempertahankan tanggung jawab atas pagar buffer streaming dan pengendali buffer; HAL tidak boleh menutup pagar atau menampilkan buffer ini dengan process_capture_result.

-ENODEV: Jika perangkat kamera mengalami error serius. Setelah error ini ditampilkan, hanya metode close() yang berhasil dipanggil oleh framework.

Definisi di baris 2928 dari file camera3.h .

int(* register_stream_buffers)(const struct camera3_device *, const camera3_stream_buffer_set_t *buffer_set)

register_stream_buffers:

>= CAMERA_DEVICE_API_VERSION_3_2:

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

<= CAMERA_DEVICE_API_VERSION_3_1:

Mendaftarkan buffering untuk streaming tertentu dengan perangkat HAL. Metode ini dipanggil oleh framework setelah streaming baru ditentukan oleh configure_streams, dan sebelum buffering dari streaming tersebut disertakan dalam permintaan pengambilan. Jika streaming yang sama tercantum dalam panggilan configure_streams() berikutnya, register_stream_buffers akan tidak dipanggil lagi untuk streaming tersebut.

Framework tidak perlu mendaftarkan buffering untuk semua streaming yang dikonfigurasi sebelum mengirimkan permintaan pengambilan pertama. Hal ini memungkinkan pengaktifan cepat untuk pratinjau (atau kasus penggunaan serupa) saat streaming lain masih dialokasikan.

Metode ini dimaksudkan untuk memungkinkan perangkat HAL memetakan atau menyiapkan buffering untuk digunakan nanti. Buffer yang diteruskan akan dikunci untuk digunakan. Di akhir panggilan, semua buffering harus siap ditampilkan ke streaming. Argumen buffer_set hanya valid selama durasi panggilan ini.

Jika format streaming ditetapkan ke HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED, HAL kamera harus memeriksa buffering yang diteruskan di sini untuk menentukan informasi format piksel khusus platform.

Persyaratan performa:

Panggilan ini harus berupa panggilan non-pemblokiran. HAL harus kembali dari panggilan ini dalam 1 md, dan harus kembali dari panggilan ini dalam 5 md.

Nilai kembalian:

0: Saat pendaftaran buffering streaming baru berhasil

-EINVAL: Jika stream_buffer_set tidak merujuk ke streaming aktif yang valid, atau jika array buffering tidak valid.

-ENOMEM: Jika terjadi kegagalan dalam mendaftarkan buffering. Framework harus menganggap semua buffering streaming tidak terdaftar, dan dapat mencoba mendaftar lagi nanti.

-ENODEV: Jika terjadi error fatal, dan perangkat tidak lagi beroperasi. Hanya close() yang dapat dipanggil dengan sukses oleh framework setelah error ini ditampilkan.

Definisi di baris 2823 dari file camera3.h .

void* reserved[8]

Definisi di baris 3080 dari file camera3.h .


Dokumentasi untuk struct ini dibuat dari file berikut: