Halaman ini menjelaskan mode 3A dan mesin status untuk perangkat Android. Antarmuka HAL kamera, yang menentukan mesin status pada tingkat tinggi, memungkinkan implementasi HAL dan framework Android mengomunikasikan status 3A saat ini dan memicu peristiwa 3A. Implementasi HAL bertanggung jawab atas algoritma 3A yang mengontrol setelan mode 3A dan transisi status.
Saat perangkat dibuka, semua status 3A individual harus
STATE_INACTIVE.
Konfigurasi streaming tidak mereset 3A. Misalnya, fokus terkunci harus
dipertahankan di seluruh panggilan configure()
.
Memicu tindakan 3A hanya melibatkan penetapan entri pemicu yang relevan di setelan untuk permintaan berikutnya guna menunjukkan awal pemicu. Misalnya, pemicu untuk memulai pemindaian fokus otomatis menetapkan entri ANDROID_CONTROL_AF_TRIGGER ke ANDROID_CONTROL_AF_TRIGGER_START untuk satu permintaan; dan membatalkan pemindaian fokus otomatis dipicu dengan menetapkan ANDROID_CONTROL_AF_TRIGGER ke ANDROID_CONTRL_AF_TRIGGER_CANCEL. Jika tidak, entri tidak akan ada atau ditetapkan ke ANDROID_CONTROL_AF_TRIGGER_IDLE. Setiap permintaan dengan entri pemicu yang ditetapkan ke nilai non-IDLE akan diperlakukan sebagai peristiwa pemicu independen.
Di tingkat teratas, 3A dikontrol oleh setelan ANDROID_CONTROL_MODE. Mode ini memilih antara tidak ada 3A (ANDROID_CONTROL_MODE_OFF), mode AUTO normal (ANDROID_CONTROL_MODE_AUTO), dan menggunakan setelan mode scene (ANDROID_CONTROL_USE_SCENE_MODE):
- Dalam mode NONAKTIF, setiap mode fokus otomatis (AF), eksposur otomatis (AE), dan white balance otomatis (AWB) secara efektif NONAKTIF, dan tidak ada kontrol pengambilan yang dapat diganti oleh rutinitas 3A.
- Dalam mode AUTO, mode AF, AE, dan AWB semuanya menjalankan algoritma independennya sendiri, dan memiliki entri metadata mode, status, dan pemicunya sendiri, seperti yang tercantum di bagian berikutnya.
- Di 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 AF CONTINUOUS_FOCUS. Setiap pilihan pengguna AE/AWB/AF_MODE saat scene harus diabaikan untuk mode scene ini.
- Untuk SCENE_MODE_FACE_PRIORITY, kontrol AE/AWB/AFMODE berfungsi seperti dalam ANDROID_CONTROL_MODE_AUTO, tetapi rutinitas 3A harus bias terhadap pengukuran dan fokus pada wajah yang terdeteksi di dalam scene.
Setelan fokus otomatis dan entri hasil
Entri metadata utama | |
---|---|
ANDROID_CONTROL_AF_MODE | Kontrol untuk memilih mode fokus otomatis saat ini. Ditetapkan oleh framework dalam setelan permintaan. |
AF_MODE_OFF | AF dinonaktifkan; framework/aplikasi secara langsung mengontrol posisi lensa. |
AF_MODE_AUTO | Fokus otomatis sekali geser. Tidak ada gerakan lensa kecuali jika AF dipicu. |
AF_MODE_MACRO | Fokus otomatis dekat dengan sekali geser. Tidak ada gerakan lensa kecuali jika AF dipicu |
AF_MODE_CONTINUOUS_VIDEO | Fokus berkelanjutan yang lancar, untuk merekam video. Pemicu akan langsung mengunci fokus di posisi saat ini. Pembatalan akan melanjutkan fokus berkelanjutan. |
AF_MODE_CONTINUOUS_PICTURE | Fokus berkelanjutan yang cepat, untuk pengambilan gambar diam tanpa jeda shutter. Memicu kunci fokus setelah pembersihan yang saat ini aktif selesai. Membatalkan akan melanjutkan fokus berkelanjutan. |
AF_MODE_EDOF | Fokus kedalaman bidang yang diperluas dan canggih. Tidak ada pemindaian fokus otomatis, sehingga memicu atau membatalkan pemindaian tidak akan berpengaruh. Gambar difokuskan secara otomatis oleh HAL. |
ANDROID_CONTROL_AF_STATE | Metadata dinamis yang menjelaskan status algoritma AF saat ini, yang dilaporkan oleh HAL dalam metadata hasil. |
AF_STATE_INACTIVE | Tidak ada pemfokusan yang dilakukan, atau algoritma direset. Lensa tidak bergerak. Selalu status untuk MODE_OFF atau MODE_EDOF. Saat dibuka, perangkat harus dimulai dalam status ini. |
AF_STATE_PASSIVE_SCAN | Algoritma fokus kontinu saat ini memindai untuk mendapatkan fokus yang baik. Lensa bergerak. |
AF_STATE_PASSIVE_FOCUSED | Algoritma fokus berkelanjutan yakin bahwa fokusnya sudah baik. Lensa tidak bergerak. HAL dapat secara spontan keluar dari status ini. |
AF_STATE_PASSIVE_UNFOCUSED | Algoritma fokus berkelanjutan yakin bahwa fokusnya tidak baik. Lensa tidak bergerak. HAL dapat secara spontan keluar dari status ini. |
AF_STATE_ACTIVE_SCAN | Pemindaian yang dipicu oleh pengguna sedang berlangsung. |
AF_STATE_FOCUSED_LOCKED | Algoritma AF yakin bahwa fokusnya sudah tepat. Lensa tidak bergerak. |
AF_STATE_NOT_FOCUSED_LOCKED | Algoritma AF tidak dapat memfokuskan. Lensa tidak bergerak. |
ANDROID_CONTROL_AF_TRIGGER | Kontrol untuk memulai pemindaian fokus otomatis, yang artinya bergantung pada mode dan status. Ditetapkan oleh framework di setelan permintaan. |
AF_TRIGGER_IDLE | Tidak ada pemicu saat ini. |
AF_TRIGGER_START | Memicu awal pemindaian AF. Efek bergantung pada mode dan status. |
AF_TRIGGER_CANCEL | Batalkan pemindaian AF saat ini jika ada, dan reset algoritma ke default. |
Entri metadata tambahan | |
---|---|
ANDROID_CONTROL_AF_REGIONS | Kontrol untuk memilih area bidang pandang (FOV) yang harus digunakan untuk menentukan fokus yang baik. Hal ini berlaku untuk semua mode AF yang memindai fokus. Ditetapkan oleh framework di setelan permintaan. |
Setelan eksposur otomatis dan entri hasil
Entri metadata utama | |
---|---|
ANDROID_CONTROL_AE_MODE | Kontrol untuk memilih mode eksposur otomatis saat ini. Ditetapkan oleh framework dalam setelan permintaan. |
AE_MODE_OFF | Eksposur otomatis dinonaktifkan; pengguna mengontrol eksposur, gain, durasi frame, dan flash. |
AE_MODE_ON | Eksposur otomatis standar, dengan kontrol flash dinonaktifkan. Pengguna dapat menyetel flash ke mode tembak atau senter. |
AE_MODE_ON_AUTO_FLASH | Eksposur otomatis standar, dengan flash aktif sesuai kebijaksanaan HAL untuk pra-perekaman dan perekaman diam. Kontrol flash pengguna dinonaktifkan. |
AE_MODE_ON_ALWAYS_FLASH | Eksposur otomatis standar, dengan flash yang selalu diaktifkan untuk pengambilan gambar, dan atas pertimbangan HAL untuk pra-pengambilan gambar. Kontrol flash pengguna dinonaktifkan. |
AE_MODE_ON_AUTO_FLASH_REDEYE | Eksposur otomatis standar, dengan flash aktif sesuai kebijaksanaan HAL untuk pra-perekaman dan perekaman diam. Gunakan flash burst di akhir urutan pra-ambilan untuk mengurangi efek mata merah pada gambar akhir. Kontrol flash pengguna dinonaktifkan. |
AE_MODE_ON_LOW_LIGHT_BOOST_BRIGHTNESS_PRIORITY | Peningkatan Cahaya Redup akan otomatis menyesuaikan kecerahan streaming Pratinjau dalam kondisi cahaya redup. Hal ini dapat menyebabkan peningkatan blur gerakan dan derau dalam kondisi cahaya redup. Produsen perangkat harus memastikan kecepatan frame tidak turun di bawah 10 fps. |
ANDROID_CONTROL_AE_STATE | Metadata dinamis yang menjelaskan status algoritma AE saat ini, yang dilaporkan oleh HAL dalam metadata hasil. |
AE_STATE_INACTIVE | Status AE awal setelah mode beralih. Saat dibuka, perangkat harus dimulai dalam status ini. |
AE_STATE_SEARCHING | AE tidak dikonvergensikan ke nilai yang baik dan menyesuaikan parameter eksposur. |
AE_STATE_CONVERGED | AE telah menemukan nilai eksposur yang baik untuk scene saat ini, dan parameter eksposur tidak berubah. HAL dapat secara spontan keluar dari status 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 mengonvergensi eksposur, tetapi yakin 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 pra-perekaman. Bergantung pada mode AE, mode ini dapat melibatkan pengaktifan flash untuk pengukuran atau serangkaian pulsa flash untuk pengurangan mata merah. |
ANDROID_CONTROL_AE_PRECAPTURE_TRIGGER | Kontrol untuk memulai urutan pengukuran sebelum mengambil gambar berkualitas tinggi. Ditetapkan oleh framework di setelan permintaan. |
PRECAPTURE_TRIGGER_IDLE | Tidak ada pemicu saat ini. |
PRECAPTURE_TRIGGER_START | Mulai urutan pra-perekaman. HAL harus menggunakan permintaan berikutnya untuk mengukur eksposur/white balance yang baik untuk pengambilan beresolusi tinggi mendatang. |
Entri metadata tambahan | |
---|---|
ANDROID_CONTROL_AE_LOCK | Kontrol untuk mengunci kontrol AE ke nilai 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 frame target untuk algoritma AE. Rutinitas AE tidak dapat mengubah kecepatan frame agar berada di luar batas ini. |
ANDROID_CONTROL_AE_REGIONS | Kontrol untuk memilih area FOV yang harus digunakan untuk menentukan tingkat eksposur yang baik. Hal ini berlaku untuk semua mode AE selain NONAKTIF. |
Setelan dan entri hasil autowhitebalance
Entri metadata utama | |
---|---|
ANDROID_CONTROL_AWB_MODE | Kontrol untuk memilih mode white balance 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 | Setelan white balance tetap yang cocok untuk pencahayaan pijar (tungsten) dalam ruangan, sekitar 2700K. |
AWB_MODE_FLUORESCENT | Setelan white balance tetap yang cocok untuk pencahayaan fluorescent, sekitar 5.000 K. |
AWB_MODE_WARM_FLUORESCENT | Setelan white balance tetap yang cocok untuk pencahayaan fluorescent, sekitar 3000K. |
AWB_MODE_DAYLIGHT | Setelan white balance tetap yang cocok untuk cahaya siang hari, sekitar 5500K. |
AWB_MODE_CLOUDY_DAYLIGHT | Setelan white balance tetap yang cocok untuk cahaya siang hari yang mendung, sekitar 6500K. |
AWB_MODE_TWILIGHT | Setelan white balance tetap yang cocok untuk saat mendekati matahari terbenam/terbit, sekitar 15.000 K. |
AWB_MODE_SHADE | Setelan white balance tetap yang cocok untuk area yang diterangi matahari secara tidak langsung, sekitar 7500K. |
ANDROID_CONTROL_AWB_STATE | Metadata dinamis yang menjelaskan status algoritma AWB saat ini, yang dilaporkan oleh HAL dalam metadata hasil. |
AWB_STATE_INACTIVE | Status AWB awal setelah tombol mode ditekan. Saat dibuka, perangkat harus dimulai dalam status ini. |
AWB_STATE_SEARCHING | AWB tidak dikonvergensikan ke nilai yang baik dan mengubah parameter penyesuaian warna. |
AWB_STATE_CONVERGED | AWB telah menemukan nilai penyesuaian warna yang baik untuk scene saat ini, dan parameter tidak berubah. HAL dapat secara spontan keluar dari status 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 nilai saat ini. |
ANDROID_CONTROL_AWB_REGIONS | Kontrol untuk memilih area FOV yang harus digunakan untuk menentukan keseimbangan warna yang baik. Hal ini hanya berlaku untuk mode autowhitebalance. |
Catatan transisi mesin status umum
Beralih antarmode AF, AE, atau AWB selalu mereset status algoritma ke TIDAK AKTIF. Demikian pula, beralih antara CONTROL_MODE atau CONTROL_SCENE_MODE jika CONTROL_MODE == USE_SCENE_MODE mereset semua status algoritma ke INACTIVE.
Tabel di bawah adalah per mode.
Mesin status AF
mode = AF_MODE_OFF atau AF_MODE_EDOF | |||
---|---|---|---|
Status | Penyebab transformasi | Status baru | Catatan |
TIDAK AKTIF | AF dinonaktifkan |
mode = AF_MODE_AUTO atau AF_MODE_MACRO | |||
---|---|---|---|
Status | Penyebab transformasi | Status baru | Catatan |
TIDAK AKTIF | AF_TRIGGER | ACTIVE_SCAN | Mulai sapuan AF Lensa sekarang bergerak |
ACTIVE_SCAN | Pemindaian AF selesai | FOCUSED_LOCKED | Jika AF berhasil Lensa kini terkunci |
ACTIVE_SCAN | Pemindaian AF selesai | NOT_FOCUSED_LOCKED | Jika AF berhasil Lensa kini terkunci |
ACTIVE_SCAN | AF_CANCEL | TIDAK AKTIF | Membatalkan/mereset AF Lensa kini terkunci |
FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Membatalkan/mereset AF |
FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Mulai pemindaian baru Lensa sekarang bergerak |
NOT_FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Membatalkan/mereset AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | ACTIVE_SCAN | Mulai pemindaian baru Lensa sekarang bergerak |
Semua negara bagian | Ganti mode | TIDAK AKTIF |
mode = AF_MODE_CONTINUOUS_VIDEO | |||
---|---|---|---|
Status | Penyebab transformasi | Status baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian baru | PASSIVE_SCAN | Mulai sapuan AF Lensa sekarang bergerak |
TIDAK AKTIF | AF_TRIGGER | NOT_FOCUSED_LOCKED | Kueri status AF Lensa kini terkunci |
PASSIVE_SCAN | HAL menyelesaikan pemindaian saat ini | PASSIVE_FOCUSED | Mengakhiri pemindaian AF Lensa kini terkunci |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Transformasi langsung jika fokus bagus Lensa kini terkunci |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi langsung jika fokus buruk Lensa kini terkunci |
PASSIVE_SCAN | AF_CANCEL | TIDAK AKTIF | Mereset posisi lensa Lensa kini terkunci |
PASSIVE_FOCUSED | HAL memulai pemindaian baru | PASSIVE_SCAN | Mulai pemindaian AF Lensa sekarang bergerak |
PASSIVE_FOCUSED | AF_TRIGGER | FOCUSED_LOCKED | Transformasi langsung jika fokus bagus Lensa kini terkunci |
PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi langsung
jika fokus buruk
Lensa kini terkunci |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Tanpa efek |
FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Memulai ulang pemindaian AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Tanpa efek |
NOT_FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Memulai ulang pemindaian AF |
mode = AF_MODE_CONTINUOUS_PICTURE | |||
---|---|---|---|
Status | Penyebab transformasi | Status baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian baru | PASSIVE_SCAN | Mulai pemindaian AF Lensa sekarang bergerak |
TIDAK AKTIF | AF_TRIGGER | NOT_FOCUSED_LOCKED | Kueri status AF Lensa kini terkunci |
PASSIVE_SCAN | HAL menyelesaikan pemindaian saat ini | PASSIVE_FOCUSED | Mengakhiri pemindaian AF
Lensa kini terkunci |
PASSIVE_SCAN | AF_TRIGGER | FOCUSED_LOCKED | Transformasi yang akan terjadi setelah fokus bagus Lensa kini terkunci |
PASSIVE_SCAN | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi akhir jika tidak dapat difokuskan Lensa kini terkunci |
PASSIVE_SCAN | AF_CANCEL | TIDAK AKTIF | Mereset posisi lensa Lensa kini 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 kini terkunci |
PASSIVE_FOCUSED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Transformasi langsung jika fokus buruk Lensa kini terkunci |
FOCUSED_LOCKED | AF_TRIGGER | FOCUSED_LOCKED | Tanpa efek |
FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Memulai ulang pemindaian AF |
NOT_FOCUSED_LOCKED | AF_TRIGGER | NOT_FOCUSED_LOCKED | Tanpa efek |
NOT_FOCUSED_LOCKED | AF_CANCEL | TIDAK AKTIF | Memulai ulang pemindaian AF |
Mesin status AE dan AWB
Mesin status 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 | |||
---|---|---|---|
Status | Penyebab transformasi | Status baru | Catatan |
TIDAK AKTIF | AE/AWB dinonaktifkan |
mode = AE_MODE_ON_* / AWB_MODE_AUTO | |||
---|---|---|---|
Status | Penyebab transformasi | Status baru | Catatan |
TIDAK AKTIF | HAL memulai pemindaian AE/AWB | MENELUSURI | |
TIDAK AKTIF | AE/AWB_LOCK aktif | TERKUNCI | Nilai dikunci |
MENELUSURI | HAL menyelesaikan pemindaian AE/AWB | CONVERGED | Nilai yang baik, tidak berubah |
MENELUSURI | HAL menyelesaikan pemindaian AE | FLASH_REQUIRED | Terfokus, tetapi terlalu gelap tanpa flash |
MENELUSURI | AE/AWB_LOCK aktif | TERKUNCI | Nilai dikunci |
CONVERGED | HAL memulai pemindaian AE/AWB | MENELUSURI | Nilai dikunci |
CONVERGED | AE/AWB_LOCK aktif | TERKUNCI | Nilai dikunci |
FLASH_REQUIRED | HAL memulai pemindaian AE/AWB | MENELUSURI | Nilai dikunci |
FLASH_REQUIRED | AE/AWB_LOCK aktif | TERKUNCI | Nilai dikunci |
TERKUNCI | AE/AWB_LOCK nonaktif | MENELUSURI | Nilai tidak bagus setelah unlock |
TERKUNCI | AE/AWB_LOCK nonaktif | CONVERGED | Nilai bagus setelah membuka kunci |
TERKUNCI | AE_LOCK nonaktif | FLASH_REQUIRED | Eksposur bagus, tetapi terlalu gelap |
Semua status AE | PRECAPTURE_START | PRA-PENANGKAPAN | Memulai urutan pra-perekaman |
PRA-PENANGKAPAN | Urutan selesai, AE_LOCK nonaktif | CONVERGED | Siap untuk perekaman berkualitas tinggi |
PRA-PENANGKAPAN | Urutan selesai, AE_LOCK aktif | TERKUNCI | Siap untuk perekaman berkualitas tinggi |
Mengaktifkan kontrol manual
Beberapa kontrol juga terlibat dalam mengonfigurasi blok 3A perangkat untuk mengizinkan kontrol aplikasi langsung.
Model HAL untuk kontrol 3A adalah bahwa untuk setiap permintaan, HAL memeriksa status kolom kontrol 3A. Jika rutinitas 3A diaktifkan, rutinitas tersebut akan mengganti variabel kontrol yang terkait dengan rutinitas tersebut, dan nilai penggantian ini kemudian tersedia di metadata hasil untuk pengambilan tersebut. Jadi, misalnya, jika eksposur otomatis diaktifkan dalam permintaan, HAL harus menimpa kolom eksposur, gain, dan durasi frame (dan kemungkinan kolom flash, bergantung pada mode AE) permintaan. Daftar kontrol yang relevan adalah:
Nama kontrol | Unit | Catatan |
---|---|---|
android.control.mode | enum: OFF, AUTO, USE_SCENE_MODE | Kontrol 3A tingkat tinggi. Jika disetel ke NONAKTIF, semua kontrol 3A oleh HAL akan dinonaktifkan. Aplikasi harus menetapkan kolom untuk parameter pengambilan itu sendiri. Jika disetel ke AUTO, setiap kontrol algoritma di android.control.* akan diterapkan, seperti android.control.afMode. Jika ditetapkan ke USE_SCENE_MODE, setiap kontrol di android.control.* sebagian besar dinonaktifkan, dan HAL menerapkan salah satu setelan mode scene (seperti ACTION, SUNSET, atau PARTY) sesuai keinginan. |
android.control.afMode | enum | NON aktif berarti kontrol manual fokus lensa melalui android.lens.focusDistance. |
android.control.aeMode | enum | NON aktif berarti kontrol manual durasi eksposur/gain/frame melalui android.sensor.exposureTime / .sensitivity / .frameDuration |
android.control.awbMode | enum | NONAKTIF berarti kontrol manual terhadap keseimbangan putih. |