Sementara algoritme 3A aktual hingga implementasi HAL, deskripsi mesin status tingkat tinggi ditentukan oleh antarmuka HAL untuk memungkinkan perangkat HAL dan kerangka kerja berkomunikasi tentang status 3A saat ini dan memicu peristiwa 3A.
Saat perangkat dibuka, semua status 3A individual harus STATE_INACTIVE. Konfigurasi aliran tidak mengatur ulang 3A. Misalnya, fokus terkunci harus dipertahankan di seluruh panggilan configure()
.
Memicu tindakan 3A cukup dengan menyetel entri pemicu yang relevan dalam setelan untuk permintaan berikutnya guna menunjukkan awal pemicu. Misalnya, pemicu untuk memulai pemindaian fokus otomatis adalah menyetel entri ANDROID_CONTROL_AF_TRIGGER ke ANDROID_CONTROL_AF_TRIGGER_START untuk satu permintaan; dan membatalkan pemindaian fokus otomatis dipicu dengan menyetel ANDROID_CONTROL_AF_TRIGGER ke ANDROID_CONTRL_AF_TRIGGER_CANCEL. Jika tidak, entri tidak akan ada atau disetel ke ANDROID_CONTROL_AF_TRIGGER_IDLE. Setiap permintaan dengan entri pemicu yang disetel ke nilai non-IDLE akan diperlakukan sebagai peristiwa pemicu independen.
Di tingkat atas, 3A dikendalikan oleh setelan ANDROID_CONTROL_MODE. Ini memilih antara tidak ada 3A (ANDROID_CONTROL_MODE_OFF), mode AUTO normal (ANDROID_CONTROL_MODE_AUTO), dan menggunakan pengaturan mode pemandangan (ANDROID_CONTROL_USE_SCENE_MODE):
- Dalam mode OFF, masing-masing mode auto-focus (AF), auto-exposure (AE), dan auto-whitebalance (AWB) secara efektif OFF, dan tidak ada kontrol pengambilan yang dapat ditimpa oleh rutinitas 3A.
- Dalam mode AUTO, mode AF, AE, dan AWB semuanya menjalankan algoritme independennya sendiri, dan memiliki entri metadata mode, status, dan pemicunya sendiri, seperti yang tercantum di bagian berikutnya.
- Dalam USE_SCENE_MODE, nilai entri ANDROID_CONTROL_SCENE_MODE harus digunakan untuk menentukan perilaku rutinitas 3A. Dalam SCENE_MODE selain FACE_PRIORITY, HAL harus mengganti nilai ANDROID_CONTROL_AE/AWB/AF_MODE menjadi mode yang diinginkan untuk SCENE_MODE yang dipilih. Misalnya, HAL mungkin lebih memilih SCENE_MODE_NIGHT untuk menggunakan mode CONTINUOUS_FOCUS AF. Pilihan pengguna AE/AWB/AF_MODE saat adegan harus diabaikan untuk mode pemandangan ini.
- Untuk SCENE_MODE_FACE_PRIORITY, kontrol AE/AWB/AFMODE bekerja seperti pada ANDROID_CONTROL_MODE_AUTO, tetapi rutinitas 3A harus bias terhadap pengukuran dan pemfokusan pada setiap wajah yang terdeteksi dalam adegan.
Pengaturan fokus otomatis dan entri hasil
Entri metadata utama | |
---|---|
ANDROID_CONTROL_AF_MODE | Kontrol untuk memilih mode fokus otomatis saat ini. Ditetapkan oleh kerangka kerja dalam pengaturan permintaan. |
AF_MODE_OFF | AF dinonaktifkan; kerangka/aplikasi secara langsung mengontrol posisi lensa. |
AF_MODE_AUTO | Autofokus sapuan tunggal. Tidak ada pergerakan lensa kecuali AF dipicu. |
AF_MODE_MACRO | Autofokus jarak dekat sapuan tunggal. Tidak ada pergerakan lensa kecuali AF dipicu |
AF_MODE_CONTINUOUS_VIDEO | Pemfokusan kontinu yang mulus, untuk merekam video. Pemicu segera mengunci fokus di posisi saat ini. Membatalkan melanjutkan pemfokusan berkelanjutan. |
AF_MODE_CONTINUOUS_PICTURE | Pemfokusan kontinu cepat, untuk pengambilan gambar diam tanpa rana-lag. Memicu kunci fokus setelah sapuan aktif saat ini selesai. Membatalkan melanjutkan pemfokusan berkelanjutan. |
AF_MODE_EDOF | Pemfokusan kedalaman bidang lanjutan yang diperluas. Tidak ada pemindaian fokus otomatis, jadi memicu atau membatalkannya tidak akan berpengaruh. Gambar difokuskan secara otomatis oleh HAL. |
ANDROID_CONTROL_AF_STATE | Metadata dinamis yang menjelaskan status algoritme AF saat ini, dilaporkan oleh HAL dalam metadata hasil. |
AF_STATE_INACTIVE | Tidak ada pemfokusan yang dilakukan, atau algoritme disetel ulang. Lensa tidak bergerak. Selalu status untuk MODE_OFF atau MODE_EDOF. Ketika perangkat dibuka, itu harus dimulai dalam keadaan ini. |
AF_STATE_PASSIVE_SCAN | Algoritme fokus berkelanjutan sedang memindai fokus yang baik. Lensa bergerak. |
AF_STATE_PASSIVE_FOCUSED | Sebuah algoritma fokus terus menerus percaya itu terfokus dengan baik. Lensa tidak bergerak. HAL dapat secara spontan meninggalkan keadaan ini. |
AF_STATE_PASSIVE_UNFOCUSED | Sebuah algoritma fokus terus menerus percaya itu tidak terfokus dengan baik. Lensa tidak bergerak. HAL dapat secara spontan meninggalkan keadaan ini. |
AF_STATE_ACTIVE_SCAN | Pemindaian yang dipicu oleh pengguna sedang berlangsung. |
AF_STATE_FOCUSED_LOCKED | Algoritma AF percaya itu terfokus. Lensa tidak bergerak. |
AF_STATE_NOT_FOCUSED_LOCKED | Algoritme AF tidak dapat fokus. Lensa tidak bergerak. |
ANDROID_CONTROL_AF_TRIGGER | Kontrol untuk memulai pemindaian fokus otomatis, yang artinya tergantung pada mode dan status. Ditetapkan oleh kerangka kerja dalam pengaturan permintaan. |
AF_TRIGGER_IDLE | Tidak ada pemicu saat ini. |
AF_TRIGGER_START | Pemicu dimulainya pemindaian AF. Efek tergantung pada mode dan status. |
AF_TRIGGER_CANCEL | Batalkan pemindaian AF saat ini jika ada, dan setel ulang algoritme ke default. |
Entri metadata tambahan | |
---|---|
ANDROID_CONTROL_AF_REGIONS | Kontrol untuk memilih bidang bidang pandang (FOV) yang harus digunakan untuk menentukan fokus yang baik. Ini berlaku untuk semua mode AF yang memindai fokus. Ditetapkan oleh kerangka kerja dalam pengaturan permintaan. |
Pengaturan eksposur otomatis dan entri hasil
Entri metadata utama | |
---|---|
ANDROID_CONTROL_AE_MODE | Kontrol untuk memilih mode eksposur otomatis saat ini. Ditetapkan oleh kerangka kerja dalam pengaturan permintaan. |
AE_MODE_OFF | Autoexposure dinonaktifkan; pengguna mengontrol eksposur, penguatan, durasi bingkai, dan lampu kilat. |
AE_MODE_ON | Autoexposure standar, dengan kontrol flash dinonaktifkan. Pengguna dapat mengatur flash ke api atau ke mode obor. |
AE_MODE_ON_AUTO_FLASH | Autoexposure standar, dengan flash pada kebijaksanaan HAL untuk precapture dan still capture. Kontrol pengguna flash dinonaktifkan. |
AE_MODE_ON_ALWAYS_FLASH | Autoexposure standar, dengan flash selalu diaktifkan untuk pengambilan gambar, dan atas kebijaksanaan HAL untuk pengambilan gambar sebelumnya. Kontrol pengguna flash dinonaktifkan. |
AE_MODE_ON_AUTO_FLASH_REDEYE | Autoexposure standar, dengan flash pada kebijaksanaan HAL untuk precapture dan still capture. Gunakan flash burst di akhir urutan pra-pengambilan untuk mengurangi mata merah di gambar akhir. Kontrol pengguna flash dinonaktifkan. |
ANDROID_CONTROL_AE_STATE | Metadata dinamis yang menjelaskan status algoritme AE saat ini, dilaporkan oleh HAL dalam metadata hasil. |
AE_STATE_INACTIVE | Status AE awal setelah sakelar mode. Ketika perangkat dibuka, itu harus dimulai dalam keadaan ini. |
AE_STATE_SEARCHING | AE tidak terkonvergensi ke nilai yang baik dan sedang menyesuaikan parameter eksposur. |
AE_STATE_CONVERGED | AE telah menemukan nilai eksposur yang baik untuk pemandangan saat ini, dan parameter eksposur tidak berubah. HAL dapat secara spontan meninggalkan keadaan ini untuk mencari solusi yang lebih baik. |
AE_STATE_LOCKED | AE telah dikunci dengan kontrol AE_LOCK. Nilai eksposur tidak berubah. |
AE_STATE_FLASH_REQUIRED | HAL memiliki eksposur konvergen tetapi percaya bahwa flash diperlukan untuk gambar yang cukup terang. Digunakan untuk menentukan apakah frame zero-shutter-lag dapat digunakan. |
AE_STATE_PRECAPTURE | HAL berada di tengah urutan precapture. Tergantung pada mode AE, mode ini mungkin melibatkan penembakan blitz untuk pengukuran atau ledakan pulsa blitz untuk pengurangan mata merah. |
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER | Kontrol untuk memulai urutan pengukuran sebelum mengambil gambar berkualitas tinggi. Ditetapkan oleh kerangka kerja dalam pengaturan permintaan. |
PRECAPTURE_TRIGGER_IDLE | Tidak ada pemicu saat ini. |
PRECAPTURE_TRIGGER_START | Mulai urutan precapture. HAL harus menggunakan permintaan berikutnya untuk mengukur eksposur/keseimbangan putih yang baik untuk pengambilan gambar resolusi tinggi yang akan datang. |
Entri metadata tambahan | |
---|---|
ANDROID_CONTROL_AE_LOCK | Kontrol untuk mengunci kontrol AE ke nilainya saat ini. |
ANDROID_CONTROL_AE_EXPOSURE_COMPENSATION | Kontrol untuk menyesuaikan titik kecerahan target algoritma AE. |
ANDROID_CONTROL_AE_TARGET_FPS_RANGE | Kontrol untuk memilih rentang kecepatan bingkai target untuk algoritme AE. Rutinitas AE tidak dapat mengubah kecepatan bingkai menjadi di luar batas ini. |
ANDROID_CONTROL_AE_REGIONS | Kontrol untuk memilih wilayah FOV yang harus digunakan untuk menentukan tingkat eksposur yang baik. Ini berlaku untuk semua mode AE selain OFF. |
Pengaturan whitebalance otomatis dan entri hasil
Entri metadata utama | |
---|---|
ANDROID_CONTROL_AWB_MODE | Kontrol untuk memilih mode keseimbangan putih saat ini. |
AWB_MODE_OFF | Keseimbangan putih otomatis dinonaktifkan. Pengguna mengontrol matriks warna. |
AWB_MODE_AUTO | Keseimbangan putih otomatis diaktifkan; 3A mengontrol transformasi warna, mungkin menggunakan transformasi yang lebih kompleks daripada matriks sederhana. |
AWB_MODE_INCANDESCENT | Pengaturan white balance tetap baik untuk pencahayaan pijar dalam ruangan (tungsten), kira-kira 2700K. |
AWB_MODE_FLUORESCENT | Pengaturan white balance tetap baik untuk pencahayaan fluorescent, kira-kira 5000K. |
AWB_MODE_WARM_FLUORESCENT | Pengaturan white balance tetap baik untuk pencahayaan fluorescent, kira-kira 3000K. |
AWB_MODE_DAYLIGHT | Pengaturan white balance tetap baik untuk siang hari, kira-kira 5500K. |
AWB_MODE_CLOUDY_DAYLIGHT | Pengaturan keseimbangan putih tetap baik untuk siang hari yang mendung, kira-kira 6500K. |
AWB_MODE_TWILIGHT | Pengaturan white balance tetap baik untuk mendekati matahari terbenam/terbit, kira-kira 15000K. |
AWB_MODE_SHADE | Pengaturan white balance tetap baik untuk area yang diterangi matahari secara tidak langsung, kira-kira 7500K. |
ANDROID_CONTROL_AWB_STATE | Metadata dinamis yang menjelaskan status algoritme AWB saat ini, dilaporkan oleh HAL dalam metadata hasil. |
AWB_STATE_INACTIVE | Status AWB awal setelah sakelar mode. Ketika perangkat dibuka, itu harus dimulai dalam keadaan ini. |
AWB_STATE_SEARCHING | AWB tidak terkonvergensi ke nilai yang baik dan mengubah parameter penyesuaian warna. |
AWB_STATE_CONVERGED | AWB telah menemukan nilai penyesuaian warna yang baik untuk pemandangan saat ini, dan parameternya tidak berubah. HAL dapat secara spontan meninggalkan keadaan ini untuk mencari solusi yang lebih baik. |
AWB_STATE_LOCKED | AWB telah dikunci dengan kontrol AWB_LOCK. Nilai penyesuaian warna tidak berubah. |
Entri metadata tambahan | |
---|---|
ANDROID_CONTROL_AWB_LOCK | Kontrol untuk mengunci penyesuaian warna AWB ke nilainya saat ini. |
ANDROID_CONTROL_AWB_REGIONS | Kontrol untuk memilih wilayah FOV yang harus digunakan untuk menentukan keseimbangan warna yang baik. Ini hanya berlaku untuk mode keseimbangan putih otomatis. |
Catatan transisi mesin keadaan umum
Beralih antara mode AF, AE, atau AWB selalu menyetel ulang status algoritme ke TIDAK AKTIF. Demikian pula, beralih antara CONTROL_MODE atau CONTROL_SCENE_MODE jika CONTROL_MODE == USE_SCENE_MODE menyetel ulang semua status algoritme ke TIDAK AKTIF.
Tabel di bawah ini adalah per-mode.
Mesin status AF
mode = AF_MODE_OFF atau AF_MODE_EDOF | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | AF dinonaktifkan |
mode = AF_MODE_AUTO atau AF_MODE_MACRO | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | AF_TRIGGER | ACTIVE_SCAN | Mulai sapuan AF Lensa sekarang bergerak |
ACTIVE_SCAN | Sapuan AF selesai | FOCUSED_LOCKED | Jika AF berhasil Lensa sekarang terkunci |
ACTIVE_SCAN | Sapuan AF selesai | NOT_FOCUSED_LOCKED | Jika AF berhasil Lensa sekarang terkunci |
ACTIVE_SCAN | AF_CANCEL | TIDAK AKTIF | Batalkan/setel ulang AF Lensa sekarang terkunci |
FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Batalkan/setel ulang AF |
FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Mulai sapuan baru Lensa sekarang bergerak |
NOT_FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Batalkan/setel ulang AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Mulai sapuan baru Lensa sekarang bergerak |
Semua negara bagian | Perubahan mode | TIDAK AKTIF |
mode = AF_MODE_CONTINUOUS_VIDEO | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian baru | PASSIVE_SCAN | Mulai sapuan AF Lensa sekarang bergerak |
TIDAK AKTIF | AF_TRIGGER | NOT_FOCUSED_LOCKED | Permintaan status AF Lensa sekarang terkunci |
PASSIVE_SCAN | HAL menyelesaikan pemindaian saat ini | PASSIVE_FOCUSED | Akhiri pemindaian AF Lensa sekarang terkunci |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Transformasi langsung jika fokusnya bagus Lensa sekarang terkunci |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi langsung jika fokus buruk Lensa sekarang terkunci |
PASSIVE_SCAN | AF_CANCEL | TIDAK AKTIF | Atur ulang posisi lensa Lensa sekarang terkunci |
PASSIVE_FOCUSED | HAL memulai pemindaian baru | PASSIVE_SCAN | Mulai pemindaian AF Lensa sekarang bergerak |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Transformasi langsung jika fokusnya bagus Lensa sekarang terkunci |
PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi langsung jika fokus buruk Lensa sekarang terkunci |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Tidak berpengaruh |
FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Mulai ulang pemindaian AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Tidak berpengaruh |
NOT_FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Mulai ulang pemindaian AF |
mode = AF_MODE_CONTINUOUS_PICTURE | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian baru | PASSIVE_SCAN | Mulai pemindaian AF Lensa sekarang bergerak |
TIDAK AKTIF | AF_TRIGGER | NOT_FOCUSED_LOCKED | Permintaan status AF Lensa sekarang terkunci |
PASSIVE_SCAN | HAL menyelesaikan pemindaian saat ini | PASSIVE_FOCUSED | Akhiri pemindaian AF Lensa sekarang terkunci |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Transformasi akhirnya setelah fokus baik Lensa sekarang terkunci |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi akhirnya jika tidak bisa fokus Lensa sekarang terkunci |
PASSIVE_SCAN | AF_CANCEL | TIDAK AKTIF | Atur ulang posisi lensa Lensa sekarang terkunci |
PASSIVE_FOCUSED | HAL memulai pemindaian baru | PASSIVE_SCAN | Mulai pemindaian AF Lensa sekarang bergerak |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Transformasi langsung jika fokusnya bagus Lensa sekarang terkunci |
PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi langsung jika fokus buruk Lensa sekarang terkunci |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Tidak berpengaruh |
FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Mulai ulang pemindaian AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Tidak berpengaruh |
NOT_FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Mulai ulang pemindaian AF |
Mesin status AE dan AWB
Mesin negara AE dan AWB sebagian besar identik. AE memiliki status FLASH_REQUIRED dan PRECAPTURE tambahan. Jadi baris di bawah yang merujuk ke dua status tersebut harus diabaikan untuk mesin status AWB.
mode = AE_MODE_OFF / mode AWB bukan AUTO | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | AE/AWB dinonaktifkan |
mode = AE_MODE_ON_* / AWB_MODE_AUTO | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian AE/AWB | MENCARI | |
TIDAK AKTIF | AE/AWB_LOCK aktif | TERKUNCI | Nilai terkunci |
MENCARI | HAL menyelesaikan pemindaian AE/AWB | KONVERSI | Nilai bagus, tidak berubah |
MENCARI | HAL menyelesaikan pemindaian AE | FLASH_REQUIRED | Konvergen tapi terlalu gelap tanpa flash |
MENCARI | AE/AWB_LOCK aktif | TERKUNCI | Nilai terkunci |
KONVERSI | HAL memulai pemindaian AE/AWB | MENCARI | Nilai terkunci |
KONVERSI | AE/AWB_LOCK aktif | TERKUNCI | Nilai terkunci |
FLASH_REQUIRED | HAL memulai pemindaian AE/AWB | MENCARI | Nilai terkunci |
FLASH_REQUIRED | AE/AWB_LOCK aktif | TERKUNCI | Nilai terkunci |
TERKUNCI | AE/AWB_LOCK nonaktif | MENCARI | Nilai tidak bagus setelah dibuka |
TERKUNCI | AE/AWB_LOCK nonaktif | KONVERSI | Nilai bagus setelah membuka kunci |
TERKUNCI | AE_LOCK mati | FLASH_REQUIRED | Eksposur bagus, tapi terlalu gelap |
Semua negara bagian AE | PRECAPTURE_START | PRECAPTURE | Mulai urutan precapture |
PRECAPTURE | Urutan selesai, AE_LOCK off | KONVERSI | Siap untuk tangkapan berkualitas tinggi |
PRECAPTURE | Urutan selesai, AE_LOCK aktif | TERKUNCI | Siap untuk tangkapan berkualitas tinggi |
Mengaktifkan kontrol manual
Beberapa kontrol juga terlibat dalam mengonfigurasi blok 3A perangkat untuk memungkinkan kontrol aplikasi langsung.
Model HAL untuk kontrol 3A adalah bahwa untuk setiap permintaan, HAL memeriksa keadaan bidang kontrol 3A. Jika ada rutin 3A yang diaktifkan, maka rutin tersebut akan menimpa variabel kontrol yang terkait dengan rutinitas tersebut, dan nilai penggantian ini kemudian tersedia dalam metadata hasil untuk pengambilan tersebut. Jadi misalnya, jika eksposur otomatis diaktifkan dalam permintaan, HAL harus menimpa bidang eksposur, penguatan, dan durasi bingkai (dan berpotensi bidang flash, tergantung pada mode AE) dari permintaan. Daftar kontrol yang relevan adalah:
Nama kontrol | Satuan | Catatan |
---|---|---|
android.control.mode | enum: OFF, AUTO, USE_SCENE_MODE | Kontrol 3A tingkat tinggi. Saat diatur ke OFF, semua kontrol 3A oleh HAL dinonaktifkan. Aplikasi harus mengatur bidang untuk parameter pengambilan itu sendiri. Jika disetel ke AUTO, kontrol algoritme individual di android.control.* akan berlaku, seperti android.control.afMode. Saat diatur ke USE_SCENE_MODE, kontrol individu di android.control.* sebagian besar dinonaktifkan, dan HAL mengimplementasikan salah satu pengaturan mode pemandangan (seperti ACTION, SUNSET, atau PARTY) sesuai keinginan. |
android.control.afMode | enum | OFF berarti kontrol manual pemfokusan lensa melalui android.lens.focusDistance. |
android.control.aeMode | enum | OFF berarti kontrol manual dari eksposur/perolehan/durasi frame melalui android.sensor.exposureTime / .sensitivity / .frameDuration |
android.control.awbMode | enum | OFF berarti kontrol manual white balance. |