Fitur parameter sesi mengurangi penundaan dengan memungkinkan klien kamera mengonfigurasi subset parameter permintaan yang mahal secara aktif, yaitu parameter sesi, sebagai bagian dari fase inisialisasi sesi pengambilan. Dengan fitur ini, implementasi HAL Anda menerima parameter klien selama fase konfigurasi streaming, bukan permintaan pengambilan pertama, dan dapat, bergantung pada nilainya, menyiapkan dan mem-build pipeline internal secara lebih efisien.
Di Android 10, Anda dapat meningkatkan performa dengan 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. CameraHal binderized yang mengimplementasikan HIDL API kamera harus menggunakan entri sessionParams HIDL masing-masing untuk mengakses parameter sesi baru yang masuk selama konfigurasi streaming.
Klien kamera dapat membuat kueri kunci dari semua parameter sesi yang didukung dengan memanggil
getAvailableSessionKeys()
dan pada akhirnya menetapkan nilai awalnya melalui
setSessionParameters()
.
Implementasi
Implementasi CameraHal Anda harus mengisi
ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
dalam metadata kamera statis masing-masing dan memberikan subset
ANDROID_REQUEST_AVAILABLE_REQUEST_KEYS
,
yang berisi daftar kunci yang sulit diterapkan per frame dan dapat
menyebabkan penundaan yang tidak terduga saat diubah selama masa aktif sesi pengambilan gambar.
Contoh umumnya mencakup parameter yang memerlukan konfigurasi ulang hardware yang memakan waktu atau perubahan pipeline kamera internal. Kontrol atas parameter sesi masih dapat diterapkan dalam permintaan pengambilan, tetapi klien harus mengetahui dan mengharapkan penundaan di aplikasi mereka.
Framework memantau semua permintaan yang masuk dan jika mendeteksi perubahan nilai parameter sesi, framework akan mengonfigurasi ulang kamera secara internal. Konfigurasi streaming baru yang diteruskan ke CameraHal kemudian menyertakan parameter value sesi yang diperbarui, yang digunakan untuk mengonfigurasi pipeline kamera secara lebih efisien.
Penyesuaian
Anda dapat menentukan tag dalam daftar parameter sesi yang tersedia dan diisi di sisi CameraHal. Fitur ini tidak aktif jika CameraHal membiarkan daftar parameter sesi yang tersedia kosong.
Validasi
CTS menyertakan 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 konfigurasi aliran di lapisan HAL.
Parameter sesi harus dipilih dengan cermat. Nilai tidak boleh sering berubah, jika ada, di antara konfigurasi streaming. Parameter yang sering berubah, seperti intent pengambilan, tidak sesuai dan menambahkannya ke daftar parameter sesi dapat menyebabkan kegagalan CTS karena konfigurasi ulang internal yang berlebihan.
Kueri konfigurasi ulang sesi
Android 10 memperkenalkan fitur kueri
konfigurasi ulang sesi opsional untuk
meningkatkan performa karena konfigurasi ulang streaming internal yang dihasilkan dari modikasi
nilai parameter sesi dapat mengurangi performa. Untuk mengatasi masalah ini,
ICameraDeviceSession
HIDL
versi 3.5 dan yang lebih tinggi mendukung
metode
isReconfigurationRequired
, yang memberikan kontrol terperinci atas logika re-konfigurasi
parameter sesi internal. Dengan menggunakan metode ini, konfigurasi ulang streaming dapat terjadi
secara akurat saat diperlukan.
Argumen untuk isReconfigurationRequired
memberikan informasi yang diperlukan tentang setiap perubahan parameter sesi
yang tertunda, sehingga memungkinkan berbagai jenis penyesuaian khusus perangkat.
Fitur ini hanya diterapkan di layanan kamera dan HAL kamera. Tidak ada API yang ditampilkan kepada publik. Jika fitur ini diterapkan, klien kamera akan melihat peningkatan performa saat menggunakan parameter sesi.
Implementasi
Untuk mendukung kueri konfigurasi ulang sesi, Anda harus menerapkan metode
isReconfigurationRequired
untuk memeriksa apakah konfigurasi ulang streaming lengkap diperlukan untuk parameter value sesi
baru.
Jika klien mengubah nilai parameter sesi yang diiklankan, framework
kamera akan memanggil metode
isReconfigurationRequired
. Bergantung pada nilai tertentu, HAL akan memutuskan apakah konfigurasi ulang
streaming lengkap diperlukan. Jika HAL menampilkan false
, framework
kamera akan melewati konfigurasi ulang internal. Jika HAL menampilkan true
, framework akan mengonfigurasi ulang streaming dan meneruskan parameter value sesi baru
sesuai kebutuhan.
Metode isReconfigurationRequired
dapat dipanggil oleh framework beberapa waktu
sebelum permintaan dengan parameter baru dikirim ke HAL, dan permintaan
dapat dibatalkan sebelum dikirim. Oleh karena itu, HAL tidak boleh menggunakan
panggilan metode ini 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 pada performa permintaan kamera yang tertunda. Secara khusus, tidak boleh ada gangguan atau penundaan selama streaming kamera normal.
Implementasi perangkat dan HAL harus memenuhi persyaratan performa berikut:
- Setelan kamera hardware dan software tidak boleh diubah.
- Tidak boleh ada dampak yang terlihat oleh pengguna pada performa kamera.
Metode isReconfigurationRequired
menggunakan 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
: Konfigurasi ulang yang berhasil memerlukan kueri.METHOD_NOT_SUPPORTED
: Perangkat kamera tidak mendukung kueri 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 menampilkan
METHOD_NOT_SUPPORTED
atau false
. Hal ini menghasilkan perilaku layanan kamera
default saat konfigurasi ulang streaming dipicu pada setiap perubahan parameter
sesi.
Validasi
Fitur kueri konfigurasi ulang sesi dapat divalidasi menggunakan kasus
pengujian VTS di
CameraHidlTest#configureStreamsWithSessionParameters
.