Fitur parameter sesi mengurangi penundaan dengan memungkinkan klien kamera untuk secara aktif mengonfigurasi subset parameter permintaan yang mahal, yaitu sesi parameter, sebagai bagian dari fase inisialisasi sesi pengambilan. Dengan ini implementasi HAL Anda akan menerima parameter klien dalam fase konfigurasi {i>stream <i}alih-alih permintaan pengambilan pertama, dan juga bisa, bergantung pada nilainya, mempersiapkan dan membangun pipeline internal lebih secara efisien.
Di Android 10, Anda dapat meningkatkan performa menggunakan fitur kueri konfigurasi ulang sesi opsional untuk kontrol yang lebih besar atas logika konfigurasi ulang parameter sesi internal. Untuk informasi selengkapnya, lihat Kueri konfigurasi ulang sesi.
Contoh dan sumber
Penerapan parameter sesi referensi sudah menjadi bagian dari CameraHal. HAL ini menggunakan Hal API lama. Class binderized CameraHal yang mengimplementasikan HIDL API kamera harus menggunakan HIDL masing-masing sessionParams entri untuk mengakses parameter sesi masuk baru selama konfigurasi streaming.
Klien kamera dapat mengkueri kunci dari semua parameter sesi yang didukung dengan memanggil
getAvailableSessionKeys()
dan akhirnya menetapkan nilai-nilai awal melalui
setSessionParameters()
.
Implementasi
Implementasi CameraHal Anda harus mengisi
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
dalam metadata kamera statis masing-masing dan menyediakan subset
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
,
yang berisi daftar kunci yang sulit
diterapkan per-bingkai dan dapat
mengakibatkan penundaan tak terduga saat
diubah selama masa aktif sesi pengambilan gambar.
Contoh umumnya meliputi parameter yang membutuhkan perangkat keras yang memakan waktu konfigurasi ulang atau perubahan pipeline kamera internal. Kontrol atas sesi parameter masih dapat diterapkan dalam permintaan pengambilan, tetapi klien harus mengetahui dan memperkirakan adanya penundaan di aplikasi mereka.
Framework memantau semua permintaan yang masuk dan jika mendeteksi perubahan dalam parameter sesi, akan mengonfigurasi ulang kamera secara internal. Yang baru konfigurasi streaming yang diteruskan ke CameraHal, lalu menyertakan sesi yang diperbarui nilai parameter, yang digunakan untuk mengonfigurasi pipeline kamera secara efisien.
Penyesuaian
Anda dapat menentukan tag di daftar parameter sesi tersedia yang diisi pada di sisi CameraHal. Fitur ini tidak aktif jika CameraHal keluar dari daftar parameter sesi yang tersedia kosong.
Validasi
CTS mencakup kasus baru berikut untuk menguji parameter sesi:
CameraDeviceTest#testSessionConfiguration
CameraDeviceTest#testCreateSessionWithParameters
CameraDeviceTest#testSessionParametersStateLeak
NativeCameraDeviceTest#testCameraDevicePreviewWithSessionParameters
Secara umum, setelah parameter tertentu menjadi bagian dari daftar kunci sesi, nilai saat ini disertakan sebagai bagian dari parameter sesi yang diteruskan selama streaming di lapisan HAL.
Parameter sesi harus dipilih dengan cermat. Nilainya tidak boleh berubah sering kali, jika ada, di antara konfigurasi streaming. Parameter yang berubah sering kali, seperti intent menangkap, tidak sesuai dan menambahkannya ke daftar parameter sesi dapat menyebabkan kegagalan CTS karena melakukan konfigurasi ulang.
Kueri konfigurasi ulang sesi
Android 10 memperkenalkan sesi opsional
fitur kueri konfigurasi ulang untuk
meningkatkan performa dengan konfigurasi ulang streaming internal yang dihasilkan dari sesi
modifikasi nilai parameter dapat mengurangi performa. Untuk mengatasi kekhawatiran ini,
HIDL
ICameraDeviceSession
versi 3.5 dan yang lebih baru mendukung
isReconfigurationRequired
, yang memberikan kontrol terperinci atas parameter sesi internal
logika konfigurasi ulang. Dengan menggunakan metode ini, konfigurasi ulang {i>stream<i} dapat terjadi
secara akurat saat diperlukan.
Argumen untuk isReconfigurationRequired
berikan informasi yang diperlukan tentang setiap parameter sesi yang tertunda
modifikasi, memungkinkan berbagai jenis
penyesuaian yang spesifik untuk perangkat.
Fitur ini hanya diterapkan di layanan kamera dan HAL kamera. Ada bukanlah API yang dapat dilihat publik. Jika fitur ini diterapkan, klien kamera harus melihat peningkatan performa saat menggunakan parameter sesi.
Implementasi
Untuk mendukung kueri konfigurasi ulang sesi, Anda harus menerapkan metode
isReconfigurationRequired
untuk memeriksa apakah konfigurasi ulang {i>stream <i}
lengkap diperlukan untuk
nilai parameter sesi.
Jika klien mengubah nilai parameter sesi yang diiklankan, kamera
framework memanggil isReconfigurationRequired
. Tergantung pada nilai spesifik, HAL memutuskan apakah
maka perlu dilakukan konfigurasi ulang streaming. Jika HAL menampilkan false
, kamera
kerangka kerja mengabaikan
konfigurasi ulang internal. Jika HAL menampilkan true
,
framework mengonfigurasi ulang streaming dan meneruskan nilai parameter sesi baru
sebagaimana mestinya.
Metode isReconfigurationRequired
dapat dipanggil oleh framework beberapa saat
sebelum permintaan dengan parameter baru
dikirimkan ke HAL, dan permintaan
dapat dibatalkan sebelum dikirimkan. Oleh karena itu, HAL tidak boleh menggunakan
untuk mengubah perilakunya dengan cara apa pun.
Implementasi HAL harus memenuhi persyaratan berikut:
- Framework harus dapat memanggil metode
isReconfigurationRequired
kapan saja setelah konfigurasi sesi aktif. - Tidak boleh ada dampak terhadap performa permintaan kamera yang tertunda. Di beberapa secara khusus, tidak boleh ada gangguan atau penundaan selama kamera normal melakukan streaming.
Implementasi perangkat dan HAL harus memenuhi performa berikut persyaratan:
- Setelan kamera hardware dan software tidak boleh diubah.
- Tidak boleh ada dampak yang terlihat oleh pengguna pada performa kamera.
isReconfigurationRequired
mengambil argumen berikut:
oldSessionParams
: Parameter sesi dari sesi sebelumnya. Biasanya parameter sesi yang ada.newSessionParams
: Parameter sesi baru yang ditetapkan oleh klien.
Kode status pengembalian yang diharapkan adalah:
OK
: Kueri diperlukan konfigurasi ulang berhasil.METHOD_NOT_SUPPORTED
: Perangkat kamera tidak mendukung dan konfigurasi ulang.INTERNAL_ERROR
: Kueri konfigurasi ulang tidak dapat diselesaikan karena error internal.
Nilai yang ditampilkan adalah:
true
: Konfigurasi ulang streaming diperlukan.false
: Konfigurasi ulang streaming tidak diperlukan.
Untuk mengabaikan kueri konfigurasi ulang sesi, HAL akan mengembalikan
METHOD_NOT_SUPPORTED
atau false
. Ini menghasilkan layanan kamera {i>default<i}
perilaku saat konfigurasi ulang streaming dipicu di setiap parameter sesi
berubah.
Validasi
Fitur kueri konfigurasi ulang sesi dapat divalidasi menggunakan uji VTS
huruf besar/kecil
CameraHidlTest#configureStreamsWithSessionParameters