Meskipun algoritme 3A sebenarnya masih sesuai dengan 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 hanya melibatkan pengaturan entri pemicu yang relevan dalam pengaturan untuk permintaan berikutnya guna menunjukkan dimulainya 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 dikontrol oleh pengaturan ANDROID_CONTROL_MODE. Ini memilih antara no 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 dikesampingkan oleh rutinitas 3A.
- Dalam mode AUTO, mode AF, AE, dan AWB menjalankan algoritme independennya masing-masing, dan memiliki mode, status, dan entri metadata 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. Di SCENE_MODE selain FACE_PRIORITY, HAL harus mengganti nilai ANDROID_CONTROL_AE/AWB/AF_MODE agar menjadi mode yang disukai untuk SCENE_MODE yang dipilih. Misalnya, HAL mungkin lebih memilih SCENE_MODE_NIGHT untuk menggunakan mode CONTINUOUS_FOCUS AF. Pilihan pengguna apa pun terhadap AE/AWB/AF_MODE saat adegan harus diabaikan untuk mode pemandangan ini.
- Untuk SCENE_MODE_FACE_PRIORITY, kontrol AE/AWB/AFMODE berfungsi seperti pada ANDROID_CONTROL_MODE_AUTO, namun rutinitas 3A harus bias terhadap pengukuran dan pemfokusan pada wajah mana pun yang terdeteksi dalam pemandangan.
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 | Fokus otomatis satu sapuan. Tidak ada pergerakan lensa kecuali AF dipicu. |
AF_MODE_MACRO | Fokus otomatis sapuan tunggal dari jarak dekat. Tidak ada pergerakan lensa kecuali AF dipicu |
AF_MODE_CONTINUOUS_VIDEO | Pemfokusan berkelanjutan yang halus, untuk merekam video. Memicu segera mengunci fokus pada posisi saat ini. Membatalkan akan melanjutkan pemfokusan berkelanjutan. |
AF_MODE_CONTINUOUS_PICTURE | Pemfokusan berkelanjutan yang cepat, untuk pengambilan gambar diam tanpa jeda rana. Memicu fokus kunci setelah sapuan aktif selesai. Membatalkan akan melanjutkan pemfokusan berkelanjutan. |
AF_MODE_EDOF | Kedalaman pemfokusan bidang yang diperluas dan canggih. 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 algoritma AF saat ini, dilaporkan oleh HAL dalam metadata hasil. |
AF_STATE_INAKTIF | Tidak ada pemfokusan yang dilakukan, atau algoritme telah disetel ulang. Lensa tidak bergerak. Selalu status untuk MODE_OFF atau MODE_EDOF. Saat perangkat dibuka, perangkat harus dimulai dalam keadaan ini. |
AF_STATE_PASSIVE_SCAN | Algoritme fokus berkelanjutan saat ini sedang memindai fokus yang baik. Lensanya bergerak. |
AF_STATE_PASSIVE_FOCUSED | Algoritme fokus berkelanjutan meyakini bahwa fokusnya baik. Lensa tidak bergerak. HAL mungkin secara spontan meninggalkan keadaan ini. |
AF_STATE_PASSIVE_UNFOCUSED | Algoritme fokus berkelanjutan meyakini bahwa fokusnya tidak baik. Lensa tidak bergerak. HAL mungkin secara spontan meninggalkan keadaan ini. |
AF_STATE_ACTIVE_SCAN | Pemindaian yang dipicu oleh pengguna sedang berlangsung. |
AF_STATE_FOCUSED_LOCKED | Algoritme AF meyakininya 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 bergantung pada mode dan status. Ditetapkan oleh kerangka kerja dalam pengaturan permintaan. |
AF_TRIGGER_IDLE | Tidak ada pemicu saat ini. |
AF_TRIGGER_START | Memicu dimulainya pemindaian AF. Efeknya bergantung pada mode dan status. |
AF_TRIGGER_BATAL | Batalkan pemindaian AF saat ini jika ada, dan setel ulang algoritma ke default. |
Entri metadata tambahan | |
---|---|
ANDROID_CONTROL_AF_REGIONS | Kontrol untuk memilih wilayah 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 | Eksposur otomatis dinonaktifkan; pengguna mengontrol eksposur, penguatan, durasi bingkai, dan lampu kilat. |
AE_MODE_ON | Eksposur otomatis standar, dengan kontrol lampu kilat dinonaktifkan. Pengguna dapat mengatur flash untuk menyala atau ke mode obor. |
AE_MODE_ON_AUTO_FLASH | Eksposur otomatis standar, dengan lampu kilat menyala sesuai kebijaksanaan HAL untuk pengambilan gambar awal dan pengambilan gambar diam. Kontrol pengguna terhadap flash dinonaktifkan. |
AE_MODE_ON_ALWAYS_FLASH | Eksposur otomatis standar, dengan lampu kilat yang selalu menyala untuk pengambilan gambar, dan sesuai kebijaksanaan HAL untuk pengambilan gambar awal. Kontrol pengguna terhadap flash dinonaktifkan. |
AE_MODE_ON_AUTO_FLASH_REDEYE | Eksposur otomatis standar, dengan lampu kilat menyala sesuai kebijaksanaan HAL untuk pengambilan gambar awal dan pengambilan gambar diam. Gunakan flash burst di akhir urutan pra-pengambilan untuk mengurangi mata merah pada gambar akhir. Kontrol pengguna terhadap flash dinonaktifkan. |
ANDROID_CONTROL_AE_STATE | Metadata dinamis yang menjelaskan status algoritma AE saat ini, dilaporkan oleh HAL dalam metadata hasil. |
AE_STATE_INAKTIF | Status AE awal setelah peralihan mode. Saat perangkat dibuka, perangkat 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 mungkin 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 telah menyatukan eksposur tetapi percaya bahwa flash diperlukan untuk mendapatkan gambar yang cukup terang. Digunakan untuk menentukan apakah frame zero-shutter-lag dapat digunakan. |
AE_STATE_PRECAPTURE | HAL berada di tengah-tengah rangkaian pra-pengambilan. Tergantung pada mode AE, mode ini mungkin melibatkan penyalaan lampu kilat untuk pengukuran atau semburan pulsa lampu kilat 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 pra-pengambilan. HAL harus menggunakan permintaan berikutnya untuk mengukur eksposur/keseimbangan putih yang baik untuk pengambilan 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 algoritma AE. Rutinitas AE tidak dapat mengubah kecepatan bingkai di luar batasan ini. |
ANDROID_CONTROL_AE_REGIONS | Kontrol untuk memilih wilayah FOV yang harus digunakan untuk menentukan tingkat paparan 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 | Memperbaiki pengaturan white balance yang baik untuk pencahayaan pijar (tungsten) dalam ruangan, kira-kira 2700K. |
AWB_MODE_FLUORESCENT | Memperbaiki pengaturan white balance yang baik untuk pencahayaan neon, kira-kira 5000K. |
AWB_MODE_WARM_FLUORESCENT | Memperbaiki pengaturan white balance yang baik untuk pencahayaan neon, kira-kira 3000K. |
AWB_MODE_DAYLIGHT | Memperbaiki pengaturan white balance yang bagus untuk siang hari, kira-kira 5500K. |
AWB_MODE_CLOUDY_DAYLIGHT | Memperbaiki pengaturan white balance yang bagus untuk siang hari yang mendung, kira-kira 6500K. |
AWB_MODE_TWILIGHT | Memperbaiki pengaturan white balance yang baik untuk mendekati matahari terbenam/matahari terbit, kira-kira 15000K. |
AWB_MODE_SHADE | Memperbaiki pengaturan white balance yang baik untuk area yang terkena sinar matahari secara tidak langsung, kira-kira 7500K. |
ANDROID_CONTROL_AWB_STATE | Metadata dinamis yang menjelaskan status algoritma AWB saat ini, dilaporkan oleh HAL dalam metadata hasil. |
AWB_STATE_INAKTIF | Status AWB awal setelah peralihan mode. Saat perangkat dibuka, perangkat 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 mungkin 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 INACTIVE. Demikian pula, beralih antara CONTROL_MODE atau CONTROL_SCENE_MODE jika CONTROL_MODE == USE_SCENE_MODE akan menyetel ulang semua status algoritme ke INACTIVE.
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 | AKTIF_PINDAI | Mulai sapuan AF Lensa sekarang bergerak |
AKTIF_PINDAI | Sapuan AF selesai | FOKUS_TERKUNCI | Jika AF berhasil Lensa sekarang terkunci |
AKTIF_PINDAI | Sapuan AF selesai | NOT_FOCUSED_LOCKED | Jika AF berhasil Lensa sekarang terkunci |
AKTIF_PINDAI | AF_BATAL | TIDAK AKTIF | Batalkan/reset AF Lensa sekarang terkunci |
FOKUS_TERKUNCI | AF_BATAL | TIDAK AKTIF | Batalkan/reset AF |
FOKUS_TERKUNCI | AF_TRIGGER | AKTIF_PINDAI | Mulai sapuan baru Lensa sekarang bergerak |
NOT_FOCUSED_LOCKED | AF_BATAL | TIDAK AKTIF | Batalkan/reset AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | AKTIF_PINDAI | Mulai sapuan baru Lensa sekarang bergerak |
Semua negara bagian | Perubahan modus | TIDAK AKTIF |
modus = AF_MODE_CONTINUOUS_VIDEO | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian baru | PASIF_SCAN | Mulai sapuan AF Lensa sekarang bergerak |
TIDAK AKTIF | AF_TRIGGER | NOT_FOCUSED_LOCKED | Kueri status AF Lensa sekarang terkunci |
PASIF_SCAN | HAL menyelesaikan pemindaian saat ini | PASIF_FOKUS | Akhiri pemindaian AF Lensa sekarang terkunci |
PASIF_SCAN | AF_TRIGGER | FOKUS_TERKUNCI | Transformasi segera jika fokusnya bagus Lensa sekarang terkunci |
PASIF_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi segera jika fokus buruk Lensa sekarang terkunci |
PASIF_SCAN | AF_BATAL | TIDAK AKTIF | Atur ulang posisi lensa Lensa sekarang terkunci |
PASIF_FOKUS | HAL memulai pemindaian baru | PASIF_SCAN | Mulai pemindaian AF Lensa sekarang bergerak |
PASIF_FOKUS | AF_TRIGGER | FOKUS_TERKUNCI | Transformasi segera jika fokusnya bagus Lensa sekarang terkunci |
PASIF_FOKUS | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi segera jika fokus buruk Lensa sekarang terkunci |
FOKUS_TERKUNCI | AF_TRIGGER | FOKUS_TERKUNCI | Tidak berpengaruh |
FOKUS_TERKUNCI | AF_BATAL | TIDAK AKTIF | Mulai ulang pemindaian AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Tidak berpengaruh |
NOT_FOCUSED_LOCKED | AF_BATAL | TIDAK AKTIF | Mulai ulang pemindaian AF |
modus = AF_MODE_CONTINUOUS_PICTURE | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian baru | PASIF_SCAN | Mulai pemindaian AF Lensa sekarang bergerak |
TIDAK AKTIF | AF_TRIGGER | NOT_FOCUSED_LOCKED | Kueri status AF Lensa sekarang terkunci |
PASIF_SCAN | HAL menyelesaikan pemindaian saat ini | PASIF_FOKUS | Akhiri pemindaian AF Lensa sekarang terkunci |
PASIF_SCAN | AF_TRIGGER | FOKUS_TERKUNCI | Transformasi akhirnya fokus dengan baik Lensa sekarang terkunci |
PASIF_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi akhirnya jika tidak bisa fokus Lensa sekarang terkunci |
PASIF_SCAN | AF_BATAL | TIDAK AKTIF | Atur ulang posisi lensa Lensa sekarang terkunci |
PASIF_FOKUS | HAL memulai pemindaian baru | PASIF_SCAN | Mulai pemindaian AF Lensa sekarang bergerak |
PASIF_FOKUS | AF_TRIGGER | FOKUS_TERKUNCI | Transformasi segera jika fokusnya bagus Lensa sekarang terkunci |
PASIF_FOKUS | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi segera jika fokus buruk Lensa sekarang terkunci |
FOKUS_TERKUNCI | AF_TRIGGER | FOKUS_TERKUNCI | Tidak berpengaruh |
FOKUS_TERKUNCI | AF_BATAL | TIDAK AKTIF | Mulai ulang pemindaian AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Tidak berpengaruh |
NOT_FOCUSED_LOCKED | AF_BATAL | 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 mengacu pada kedua status tersebut harus diabaikan untuk mesin status AWB.
mode = mode AE_MODE_OFF / AWB bukan AUTO | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | AE/AWB dinonaktifkan |
modus = AE_MODE_ON_* / AWB_MODE_AUTO | |||
---|---|---|---|
Negara | Penyebab transformasi | negara bagian baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian AE/AWB | PENCARIAN | |
TIDAK AKTIF | AE/AWB_LOCK aktif | TERKUNCI | Nilai terkunci |
PENCARIAN | HAL menyelesaikan pemindaian AE/AWB | KONVERGASI | Nilai-nilai yang baik, tidak berubah |
PENCARIAN | HAL menyelesaikan pemindaian AE | FLASH_REQUIRED | Menyatu tetapi terlalu gelap tanpa flash |
PENCARIAN | AE/AWB_LOCK aktif | TERKUNCI | Nilai terkunci |
KONVERGASI | HAL memulai pemindaian AE/AWB | PENCARIAN | Nilai terkunci |
KONVERGASI | AE/AWB_LOCK aktif | TERKUNCI | Nilai terkunci |
FLASH_REQUIRED | HAL memulai pemindaian AE/AWB | PENCARIAN | Nilai terkunci |
FLASH_REQUIRED | AE/AWB_LOCK aktif | TERKUNCI | Nilai terkunci |
TERKUNCI | AE/AWB_LOCK mati | PENCARIAN | Nilai tidak bagus setelah dibuka |
TERKUNCI | AE/AWB_LOCK mati | KONVERGASI | Nilai bagus setelah dibuka |
TERKUNCI | AE_LOCK mati | FLASH_REQUIRED | Eksposur bagus, tapi terlalu gelap |
Semua negara bagian AE | PRECAPTURE_START | PRATANGKAP | Mulai urutan pra-pengambilan |
PRATANGKAP | Urutan selesai, AE_LOCK nonaktif | KONVERGASI | Siap untuk pengambilan gambar berkualitas tinggi |
PRATANGKAP | Urutan selesai, AE_LOCK aktif | TERKUNCI | Siap untuk pengambilan gambar berkualitas tinggi |
Mengaktifkan kontrol manual
Beberapa kontrol juga terlibat dalam konfigurasi blok 3A perangkat untuk memungkinkan kontrol aplikasi langsung.
Model HAL untuk kontrol 3A adalah untuk setiap permintaan, HAL memeriksa status bidang kontrol 3A. Jika rutin 3A diaktifkan, maka rutin tersebut akan mengambil alih variabel kontrol yang berhubungan dengan rutin 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 kemungkinan bidang flash, bergantung pada mode AE) dari permintaan tersebut. Daftar pengendalian yang relevan adalah:
Nama kontrol | Satuan | Catatan |
---|---|---|
android.kontrol.mode | enum: MATI, OTOMATIS, USE_SCENE_MODE | Kontrol 3A tingkat tinggi. Bila diatur ke OFF, semua kontrol 3A oleh HAL dinonaktifkan. Aplikasi harus menyetel kolom untuk parameter pengambilan itu sendiri. Jika disetel ke AUTO, kontrol algoritme individual di android.control.* akan berlaku, misalnya android.control.afMode. Jika disetel ke USE_SCENE_MODE, kontrol individual di android.control.* sebagian besar dinonaktifkan, dan HAL mengimplementasikan salah satu pengaturan mode pemandangan (seperti ACTION, SUNSET, atau PARTY) sesuai keinginan. |
android.kontrol.afMode | enum | OFF berarti kontrol manual pemfokusan lensa melalui android.lens.focusDistance. |
android.kontrol.aeMode | enum | OFF berarti kontrol manual durasi eksposur/penambahan/bingkai melalui android.sensor.exposureTime / .sensitivity / .frameDuration |
android.control.awbMode | enum | OFF berarti kontrol manual white balance. |