Dukungan Versi Kamera

Halaman ini merinci perbedaan versi dalam Camera HAL, API, dan pengujian Compatibility Test Suite (CTS) terkait. Panduan ini juga mencakup beberapa perubahan arsitektur yang dilakukan untuk memperkuat dan mengamankan framework kamera di Android 7.0, peralihan ke Treble di Android 8.0, dan pembaruan yang harus dilakukan vendor untuk mendukung perubahan ini dalam implementasi kamera mereka.

Terminologi

Istilah-istilah berikut digunakan di halaman ini:

API Kamera1
Framework kamera tingkat aplikasi pada perangkat Android 4.4 dan yang lebih rendah, diekspos melalui class android.hardware.Camera .
API Kamera2
Framework kamera tingkat aplikasi pada perangkat Android 5.0 dan lebih tinggi, diekspos melalui paket android.hardware.camera2 .
Kamera HAL
Lapisan modul kamera diimplementasikan oleh vendor SoC. Kerangka kerja publik tingkat aplikasi dibangun di atas kamera HAL.
Kamera HAL3.1
Versi perangkat kamera HAL dirilis dengan Android 4.4.
Kamera HAL3.2
Versi perangkat kamera HAL dirilis dengan Android 5.0.
Kamera API1 CTS
Kumpulan pengujian CTS kamera yang dijalankan di atas Camera API1.
Kamera API2 CTS
Kumpulan pengujian CTS kamera tambahan yang dijalankan di atas Camera API2.
Tiga kali lipat
Memisahkan implementasi vendor (perangkat lunak tingkat rendah khusus perangkat yang ditulis oleh produsen silikon) dari framework OS Android melalui antarmuka vendor baru.
TERSEMBUNYI
Bahasa definisi antarmuka HAL diperkenalkan dengan Treble dan digunakan untuk menentukan antarmuka antara HAL dan penggunanya.
VTS
Rangkaian pengujian vendor diperkenalkan bersama Treble.

API Kamera

Android menyertakan API kamera berikut.

API Kamera1

Android 5.0 tidak lagi menggunakan Camera API1, yang terus dihentikan secara bertahap karena pengembangan platform baru berfokus pada Camera API2. Namun, periode penghentiannya akan memakan waktu lama, dan rilis Android akan terus mendukung aplikasi Camera API1 selama beberapa waktu. Secara khusus, dukungan terus berlanjut untuk:

  • Antarmuka Kamera API1 untuk aplikasi. Aplikasi kamera yang dibangun di atas Camera API1 harus berfungsi seperti pada perangkat yang menjalankan versi rilis Android yang lebih rendah.
  • Versi kamera HAL. Termasuk dukungan untuk Kamera HAL1.0.

API Kamera2

Kerangka kerja Camera API2 mengekspos kontrol kamera tingkat rendah ke aplikasi, termasuk aliran burst/streaming zero-copy yang efisien dan kontrol per-frame untuk eksposur, penguatan, perolehan white balance, konversi warna, denoising, penajaman, dan banyak lagi. Untuk detailnya, tonton ikhtisar video Google I/O .

Android 5.0 dan lebih tinggi mencakup Camera API2; namun, perangkat yang menjalankan Android 5.0 dan lebih tinggi mungkin tidak mendukung semua fitur Camera API2. Properti android.info.supportedHardwareLevel yang dapat dikueri oleh aplikasi melalui antarmuka Camera API2 melaporkan salah satu tingkat dukungan berikut:

  • LEGACY : Perangkat ini mengekspos kemampuan ke aplikasi melalui antarmuka Camera API2 yang kira-kira memiliki kemampuan yang sama dengan kemampuan yang diekspos ke aplikasi melalui antarmuka Camera API1. Kode framework lama secara konseptual menerjemahkan panggilan Camera API2 menjadi panggilan Camera API1; perangkat lama tidak mendukung fitur Camera API2 seperti kontrol per-frame.
  • LIMITED : Perangkat ini mendukung beberapa kemampuan Camera API2 (tetapi tidak semua) dan harus menggunakan Camera HAL 3.2 atau lebih tinggi.
  • FULL : Perangkat ini mendukung semua kemampuan utama Camera API2 dan harus menggunakan Camera HAL 3.2 atau lebih tinggi dan Android 5.0 atau lebih tinggi.
  • LEVEL_3 : Perangkat ini mendukung pemrosesan ulang YUV dan pengambilan gambar RAW, serta konfigurasi aliran keluaran tambahan.
  • EXTERNAL : Perangkat ini mirip dengan perangkat LIMITED dengan beberapa pengecualian; misalnya, beberapa informasi sensor atau lensa mungkin tidak dilaporkan atau memiliki kecepatan bingkai yang kurang stabil. Level ini digunakan untuk kamera eksternal seperti webcam USB.

Kemampuan individual diekspos melalui properti android.request.availableCapabilities di antarmuka Camera API2. Perangkat FULL memerlukan antara lain kemampuan MANUAL_SENSOR dan MANUAL_POST_PROCESSING . Kemampuan RAW bersifat opsional bahkan untuk perangkat FULL . Perangkat LIMITED dapat mengiklankan sebagian dari kemampuan ini, termasuk tidak satu pun dari kemampuan tersebut. Namun, kemampuan BACKWARD_COMPATIBLE harus selalu ditentukan.

Tingkat perangkat keras yang didukung pada perangkat, serta kemampuan spesifik Camera API2 yang didukungnya, tersedia sebagai tanda fitur berikut untuk memungkinkan Google Play memfilter aplikasi kamera Camera API2.

  • android.hardware.camera.hardware_level.full
  • android.hardware.camera.capability.raw
  • android.hardware.camera.capability.manual_sensor
  • android.hardware.camera.capability.manual_post_processing

persyaratan CTS

Perangkat yang menjalankan Android 5.0 dan lebih tinggi harus lulus pengujian kamera Camera API1 CTS, Camera API2 CTS, dan CTS Verifier.

Perangkat yang tidak dilengkapi implementasi Camera HAL3.2 dan tidak mampu mendukung antarmuka Camera API2 secara penuh masih harus lulus pengujian Camera API2 CTS. Namun, perangkat berjalan dalam mode Camera API2 LEGACY (di mana panggilan Camera API2 secara konseptual dipetakan ke panggilan Camera API1) sehingga pengujian CTS Camera API2 yang terkait dengan fitur atau kemampuan di luar Camera API1 secara otomatis dilewati.

Pada perangkat lama, pengujian CTS Camera API2 yang dijalankan menggunakan antarmuka dan kemampuan Camera API1 publik yang ada tanpa persyaratan baru. Bug yang terungkap (dan menyebabkan kegagalan Camera API2 CTS) adalah bug yang sudah ada di Camera HAL yang ada pada perangkat, dan dengan demikian akan ditemukan oleh aplikasi Camera API1 yang ada. Kami tidak mengharapkan banyak bug seperti ini (namun, bug seperti itu harus diperbaiki agar lulus tes Camera API2 CTS).

Persyaratan VTS

Perangkat yang menjalankan Android 8.0 dan lebih tinggi dengan implementasi HAL yang diikat harus lulus pengujian Camera VTS .

Pengerasan kerangka kamera

Untuk memperketat keamanan kerangka media dan kamera, Android 7.0 memindahkan layanan kamera dari server media. Dimulai dengan Android 8.0, setiap Camera HAL yang dibinder berjalan dalam proses yang terpisah dari layanan kamera. Vendor mungkin perlu melakukan perubahan pada HAL kamera tergantung pada versi API dan HAL yang digunakan. Bagian berikut merinci perubahan arsitektur pada AP1 dan AP2 untuk HAL1 dan HAL3, serta persyaratan umum.

Perubahan arsitektur untuk API1

Perekaman video API1 mungkin mengasumsikan kamera dan pembuat enkode video hidup dalam proses yang sama. Saat menggunakan API1 pada:

  • HAL3, di mana layanan kamera menggunakan BufferQueue untuk meneruskan buffer antar proses, tidak diperlukan pembaruan vendor .

    Kamera dan tumpukan media Android 7.0 di API1 di HAL3

    Gambar 1. Kamera dan tumpukan media Android 7.0 di API1 di HAL3

  • HAL1, yang mendukung penerusan metadata dalam buffer video, vendor harus memperbarui HAL untuk menggunakan kMetadataBufferTypeNativeHandleSource . ( kMetadataBufferTypeCameraSource tidak lagi didukung di Android 7.0.)

    Tumpukan kamera dan media Android 7.0 di API1 di HAL1

    Gambar 2. Kamera dan tumpukan media Android 7.0 di API1 di HAL1

Perubahan arsitektur untuk API2

Untuk API2 di HAL1 atau HAL3, BufferQueue meneruskan buffer sehingga jalur tersebut terus berfungsi. Arsitektur Android 7.0 untuk API2 pada:

  • HAL1 tidak terpengaruh oleh perpindahan layanan kamera, dan tidak diperlukan pembaruan vendor .
  • HAL3 terpengaruh , tetapi pembaruan vendor tidak diperlukan:

    Kamera dan tumpukan media Android 7.0 di API2 di HAL3

    Gambar 3. Kamera dan tumpukan media Android 7.0 di API2 di HAL3

Persyaratan tambahan

Perubahan arsitektur yang dilakukan untuk memperkuat media dan keamanan kerangka kamera mencakup persyaratan perangkat tambahan berikut.

  • Umum. Perangkat memerlukan bandwidth tambahan karena IPC, yang dapat memengaruhi kasus penggunaan kamera yang sensitif terhadap waktu seperti perekaman video kecepatan tinggi. Vendor dapat mengukur dampak sebenarnya dengan menjalankan android.hardware.camera2.cts.PerformanceTest dan aplikasi Google Kamera untuk perekaman video kecepatan tinggi 120/240 FPS. Perangkat juga memerlukan sejumlah kecil RAM tambahan untuk membuat proses baru.
  • Melewati metadata dalam buffer video ( hanya HAL1 ). Jika HAL1 menyimpan metadata dan bukan data bingkai YUV asli di buffer video, HAL harus menggunakan kMetadataBufferTypeNativeHandleSource sebagai jenis buffer metadata dan meneruskan VideoNativeHandleMetadata di buffer video. ( kMetadataBufferTypeCameraSource tidak lagi didukung di Android 7.0.) Dengan VideoNativeHandleMetadata , kerangka kerja kamera dan media dapat meneruskan buffering video antar proses dengan membuat serialisasi dan deserialisasi pegangan asli dengan benar.
  • Alamat pegangan buffer tidak selalu menyimpan buffer yang sama ( hanya HAL3 ). Untuk setiap permintaan penangkapan, HAL3 mendapatkan alamat pegangan buffer. HAL tidak dapat menggunakan alamat untuk mengidentifikasi buffer karena alamat tersebut mungkin menyimpan pegangan buffer lain setelah HAL mengembalikan buffer. Anda harus memperbarui HAL untuk menggunakan pegangan buffer untuk mengidentifikasi buffer. Misalnya, HAL menerima alamat pegangan buffer A, yang menyimpan pegangan buffer A. Setelah HAL mengembalikan pegangan buffer A, alamat pegangan buffer A dapat menyimpan pegangan buffer B saat HAL menerimanya lagi.
  • Perbarui kebijakan SELinux untuk server kamera. Jika kebijakan SELinux khusus perangkat memberikan izin server media untuk menjalankan kamera, Anda harus memperbarui kebijakan SELinux untuk memberikan izin yang tepat kepada server kamera. Kami tidak menyarankan mereplikasi kebijakan SELinux server media untuk server kamera (karena server media dan server kamera umumnya memerlukan sumber daya yang berbeda dalam sistem). Server kamera seharusnya hanya memiliki izin yang diperlukan untuk menjalankan fungsi kamera dan izin terkait kamera yang tidak perlu di server media harus dihapus.
  • Pemisahan antara Camera HAL dan server kamera. Android 8.0 dan lebih tinggi juga memisahkan Camera HAL yang diikat dalam proses yang berbeda dari server kamera. IPC melewati antarmuka yang ditentukan HIDL .

Validasi

Untuk semua perangkat yang dilengkapi kamera dan menjalankan Android 7.0, verifikasi penerapannya dengan menjalankan Android 7.0 CTS. Meskipun Android 7.0 tidak menyertakan pengujian CTS baru yang memverifikasi perubahan layanan kamera, pengujian CTS yang ada akan gagal jika Anda belum melakukan pembaruan yang disebutkan di atas.

Untuk semua perangkat yang dilengkapi kamera dan menjalankan Android 8.0 dan lebih tinggi, verifikasi implementasi vendor dengan menjalankan VTS.

Riwayat versi Kamera HAL

Untuk daftar pengujian yang tersedia untuk mengevaluasi Kamera HAL Android, lihat Daftar Periksa Pengujian HAL Kamera .

Android 10

Android 10 memperkenalkan pembaruan berikut.

API Kamera

Kamera HAL

Versi Camera HAL berikut diperbarui di Android 10.

3.5

ICameraDevice

  • getPhysicalCameraCharacteristics : Informasi kamera statis untuk ID kamera fisik yang mendukung perangkat kamera logis. Lihat Dukungan Multi-Kamera .
  • isStreamCombinationSupported : Metode ini mendukung API publik yang membantu klien menanyakan apakah konfigurasi sesi didukung. Lihat API untuk mengkueri kombinasi aliran .

ICameraDeviceSession

  • isReconfigurationNeeded : Metode yang memberi tahu kerangka kamera apakah konfigurasi ulang aliran lengkap diperlukan untuk kemungkinan nilai parameter sesi baru. Ini membantu menghindari penundaan konfigurasi ulang kamera yang tidak perlu. Lihat Kueri konfigurasi ulang sesi .
  • API pengelolaan buffer HAL : API ini memungkinkan HAL kamera meminta buffer dari kerangka kamera hanya jika diperlukan, alih-alih menggabungkan setiap permintaan pengambilan dengan buffer terkait di seluruh pipeline kamera, yang berpotensi menghasilkan penghematan memori yang signifikan.
    • signalStreamFlush : Memberi sinyal ke HAL bahwa layanan kamera akan melakukan configureStreams_3_5 dan HAL harus mengembalikan semua buffer aliran yang ditentukan.
    • configureStreams_3_5 : Mirip dengan ICameraDevice3.4.configureStreams , namun sebagai tambahan, penghitung streamConfigCounter disediakan untuk memeriksa kondisi balapan antara panggilan configureStreams_3_5 dan signalStreamFlush .

Pembaruan pada ICameraDeviceCallback :

  • requestStreamBuffers : Panggilan balik sinkron yang dipanggil HAL kamera untuk meminta buffer ke server kamera. Lihat requestStreamBuffers .
  • returnStreamBuffers : Panggilan balik sinkron untuk kamera HAL untuk mengembalikan buffer keluaran ke server kamera. Lihat returnStreamBuffers .

3.4

Kunci berikut ditambahkan ke metadata kamera di Android 10.

  • Format gambar
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW10
    • ANDROID_SCALER_AVAILABLE_FORMATS_RAW12
    • ANDROID_SCALER_AVAILABLE_FORMATS_Y8
  • Tag metadata kamera
    • ANDROID_REQUEST_CHARACTERISTIC_KEYS_NEEDING_PERMISSION
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS
    • ANDROID_SCALER_AVAILABLE_RECOMMENDED_INPUT_OUTPUT_FORMATS_MAP
    • ANDROID_INFO_SUPPORTED_BUFFER_MANAGEMENT_VERSION
    • ANDROID_DEPTH_AVAILABLE_RECOMMENDED_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_MIN_FRAME_DURATIONS
    • ANDROID_LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_MIN_FRAME_DURATIONS
    • ANDROID_HEIC_AVAILABLE_HEIC_STALL_DURATIONS
    • ANDROID_HEIC_INFO_SUPPORTED
    • ANDROID_HEIC_INFO_MAX_JPEG_APP_SEGMENTS_COUNT
  • Kemampuan
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_SECURE_IMAGE_DATA
  • Nilai untuk kunci ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_MONO
    • ANDROID_SENSOR_INFO_COLOR_FILTER_ARRANGEMENT_NIR
  • Konfigurasi aliran kedalaman dinamis yang tersedia
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_DEPTH_AVAILABLE_DYNAMIC_DEPTH_STREAM_CONFIGURATIONS_INPUT
  • Konfigurasi aliran HEIC yang tersedia
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_OUTPUT
    • ANDROID_HEIC_AVAILABLE_HEIC_STREAM_CONFIGURATIONS_INPUT

Modul kamera

Versi modul kamera berikut diperbarui di Android 10.

2.5

  • Menambahkan metode notifyDeviceStateChange bagi perangkat untuk memberi tahu kamera HAL ketika ada perubahan fisik, seperti melipat, memengaruhi kamera dan perutean.

2.4

  • Perangkat yang diluncurkan dengan API level 29 atau lebih tinggi HARUS dilaporkan true untuk isTorchModeSupported .

Android 9

Rilis Android 9 memperkenalkan pembaruan berikut pada API2 kamera dan antarmuka HAL.

API Kamera

  • Memperkenalkan API multi-kamera untuk mendukung perangkat dengan lebih baik dengan beberapa kamera menghadap ke arah yang sama, memungkinkan fitur seperti bokeh dan zoom tanpa batas. Hal ini memungkinkan aplikasi melihat beberapa kamera pada perangkat sebagai satu unit logis (kamera logis). Permintaan pengambilan juga dapat dikirim ke perangkat kamera individual yang dicakup oleh satu kamera logis. Lihat Dukungan Multi-Kamera .
  • Memperkenalkan parameter sesi. Parameter sesi adalah bagian dari parameter pengambilan yang tersedia yang dapat menyebabkan penundaan pemrosesan yang parah saat diubah. Biaya ini dapat dikurangi jika klien meneruskan nilai awalnya selama inisialisasi sesi pengambilan. Lihat Parameter Sesi .
  • Menambahkan kunci data stabilisasi optik (OIS) untuk stabilisasi dan efek tingkat aplikasi. Lihat STATISTICS_OIS_SAMPLES .
  • Menambahkan dukungan flash eksternal. Lihat CONTROL_AE_MODE_ON_EXTERNAL_FLASH .
  • Menambahkan maksud pelacakan gerakan di CAPTURE_INTENT . Lihat CONTROL_CAPTURE_INTENT_MOTION_TRACKING .
  • Menghentikan penggunaan LENS_RADIAL_DISTORTION dan menambahkan LENS_DISTORTION sebagai gantinya.
  • Menambahkan mode koreksi distorsi di CaptureRequest . Lihat DISTORTION_CORRECTION_MODE .
  • Menambahkan dukungan untuk kamera USB/UVC eksternal pada perangkat yang didukung. Lihat INFO_SUPPORTED_HARDWARE_LEVEL_EXTERNAL .

Kamera HAL

3.4

Pembaruan pada ICameraDeviceSession

Pembaruan pada ICameraDeviceCallback

3.3

Kunci berikut ditambahkan ke metadata kamera di Android 9.

  • Kemampuan
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_LOGICAL_MULTI_CAMERA
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MOTION_TRACKING
    • ANDROID_REQUEST_AVAILABLE_CAPABILITIES_MONOCHROME
  • Tag metadata kamera
    • ANDROID_LOGICAL_MULTI_CAMERA_PHYSICAL_IDS
    • ANDROID_LOGICAL_MULTI_CAMERA_SENSOR_SYNC_TYPE
    • ANDROID_DISTORTION_CORRECTION_AVAILABLE_MODES
    • ANDROID_LENS_POSE_REFERENCE
    • ANDROID_LENS_DISTORTION
    • ANDROID_REQUEST_AVAILABLE_SESSION_KEYS
    • ANDROID_REQUEST_AVAILABLE_PHYSICAL_CAMERA_REQUEST_KEYS
    • ANDROID_STATISTICS_OIS_DATA_MODE
    • ANDROID_STATISTICS_OIS_TIMESTAMPS
    • ANDROID_STATISTICS_OIS_X_SHIFTS
    • ANDROID_STATISTICS_OIS_Y_SHIFTS

Android 8.0

Rilis Android 8.0 memperkenalkan Treble. Dengan Treble, implementasi HAL Kamera vendor harus diikat . Android 8.0 juga berisi penyempurnaan utama berikut pada layanan Kamera:

  • Permukaan bersama: Mengaktifkan beberapa permukaan yang berbagi OutputConfiguration yang sama
  • API Sistem untuk mode kamera khusus
  • onCaptureQueueEmpty

Lihat bagian di bawah untuk informasi lebih lanjut tentang fitur-fitur ini.

Permukaan bersama

Fitur ini memungkinkan hanya satu set buffer untuk menggerakkan dua output, seperti pratinjau dan pengkodean video, sehingga menurunkan konsumsi daya dan memori. Untuk mendukung fitur ini, produsen perangkat perlu memastikan implementasi HAL kamera dan gralloc HAL mereka dapat membuat buffer gralloc yang digunakan oleh banyak konsumen berbeda (seperti komposer perangkat keras/GPU dan encoder video), bukan hanya satu konsumen. Layanan kamera meneruskan tanda penggunaan konsumen ke kamera HAL dan gralloc HAL; mereka perlu mengalokasikan jenis buffer yang tepat, atau kamera HAL perlu mengembalikan kesalahan yang tidak didukung oleh kombinasi konsumen ini.

Lihat dokumentasi pengembang enableSurfaceSharing untuk detail tambahan.

API Sistem untuk mode kamera khusus

API kamera publik mendefinisikan dua mode operasi: perekaman kecepatan tinggi normal dan terbatas. Mereka mempunyai semantik yang cukup berbeda; misalnya, mode kecepatan tinggi dibatasi paling banyak pada dua output tertentu sekaligus. Berbagai OEM telah menyatakan minatnya untuk mendefinisikan mode kustom lainnya untuk kemampuan khusus perangkat keras. Di balik terpal, mode ini hanyalah bilangan bulat yang diteruskan configure_streams . Lihat: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams .

Fitur ini mencakup panggilan API sistem yang dapat digunakan oleh aplikasi kamera OEM untuk mengaktifkan mode kustom. Mode ini harus dimulai pada nilai integer 0x8000 untuk menghindari konflik dengan mode mendatang yang ditambahkan ke API publik.

Untuk mendukung fitur ini, OEM hanya perlu menambahkan mode baru ke HAL mereka, dipicu oleh bilangan bulat yang diteruskan ke HAL pada konfigurasi_streams, dan kemudian aplikasi kamera khusus mereka menggunakan API sistem.

Nama metodenya adalah android.hardware.camera2.CameraDevice#createCustomCaptureSession . Lihat: frameworks/base/core/java/android/hardware/camera2/CameraDevice .

padaCaptureQueueEmpty

Tujuan API ini adalah untuk mengurangi latensi perubahan kontrol seperti zoom dengan menjaga antrian permintaan sekosong mungkin. onCaptureQueueEmpty tidak memerlukan pekerjaan HAL; itu murni tambahan dari sisi kerangka kerja. Aplikasi yang ingin memanfaatkannya perlu menambahkan pendengar ke panggilan balik tersebut dan merespons dengan tepat. Umumnya itu dengan mengirimkan permintaan pengambilan lain ke perangkat kamera.

Antarmuka kamera HIDL

Antarmuka Camera HIDL adalah perombakan menyeluruh dari antarmuka Camera HAL yang menggunakan API stabil yang ditentukan HIDL. Semua fitur dan kemampuan kamera yang diperkenalkan pada versi terbaru 3.4 dan 2.4 (untuk modul kamera) juga merupakan bagian dari definisi HIDL.

3.4

Tambahan kecil pada metadata yang didukung dan perubahan pada dukungan data_space:

  • Tambahkan metadata statis ANDROID_SENSOR_OPAQUE_RAW_SIZE sebagai wajib jika format RAW_OPAQUE didukung.
  • Tambahkan metadata statis ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE sebagai wajib jika format RAW apa pun didukung.
  • Alihkan bidang camera3_stream_t data_space ke definisi yang lebih fleksibel, menggunakan definisi pengkodean ruang data versi 0.
  • Penambahan metadata umum yang tersedia untuk digunakan pada HALv3.2 atau yang lebih baru:
    • ANDROID_INFO_SUPPORTED_HARDWARE_LEVEL_3
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST
    • ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE
    • ANDROID_SENSOR_DYNAMIC_BLACK_LEVEL
    • ANDROID_SENSOR_DYNAMIC_WHITE_LEVEL
    • ANDROID_SENSOR_OPAQUE_RAW_SIZE
    • ANDROID_SENSOR_OPTICAL_BLACK_REGIONS

3.3

Revisi kecil dari HAL dengan kemampuan yang diperluas:

  • OPAQUE dan YUV memproses ulang pembaruan API.
  • Dukungan dasar untuk buffer keluaran kedalaman.
  • Penambahan bidang data_space ke camera3_stream_t .
  • Penambahan bidang rotasi ke camera3_stream_t .
  • Penambahan mode operasi konfigurasi aliran camera3 ke camera3_stream_configuration_t .

3.2

Revisi kecil dari HAL dengan kemampuan yang diperluas:

  • Tidak berlaku lagi get_metadata_vendor_tag_ops . Gunakan get_vendor_tag_ops di camera_common.h sebagai gantinya.
  • Tidak berlaku lagi register_stream_buffers . Semua buffer gralloc yang disediakan oleh kerangka kerja ke HAL di process_capture_request mungkin baru kapan saja.
  • Tambahkan dukungan hasil parsial. process_capture_result dapat dipanggil beberapa kali dengan subset dari hasil yang tersedia sebelum hasil lengkap tersedia.
  • Tambahkan templat manual ke camera3_request_template . Aplikasi dapat menggunakan templat ini untuk mengontrol pengaturan pengambilan secara langsung.
  • Mengolah ulang spesifikasi aliran dua arah dan input.
  • Ubah jalur pengembalian buffer input. Buffer dikembalikan dalam process_capture_result alih-alih process_capture_request .

3.1

Revisi kecil dari HAL dengan kemampuan yang diperluas:

  • configure_streams meneruskan tanda penggunaan konsumen ke HAL.
  • panggilan siram untuk membatalkan semua permintaan/buffer dalam penerbangan secepat mungkin.

3.0

Revisi pertama HAL dengan kemampuan yang diperluas:

  • Perubahan versi utama karena ABI benar-benar berbeda. Tidak ada perubahan pada kemampuan perangkat keras atau model operasional yang diperlukan dari 2.0.
  • Permintaan input yang dikerjakan ulang dan antarmuka antrian aliran: Kerangka kerja memanggil HAL dengan permintaan berikutnya dan buffer aliran sudah di-dequeued. Dukungan kerangka sinkronisasi disertakan, diperlukan untuk implementasi yang efisien.
  • Memindahkan pemicu ke dalam permintaan, sebagian besar notifikasi ke dalam hasil.
  • Menggabungkan semua callback ke dalam kerangka kerja ke dalam satu struktur, dan semua metode penyiapan ke dalam satu panggilan initialize() .
  • Membuat konfigurasi aliran menjadi satu panggilan untuk menyederhanakan pengelolaan aliran. Aliran dua arah menggantikan konstruksi STREAM_FROM_STREAM .
  • Semantik mode terbatas untuk perangkat keras yang lebih lama/terbatas.

2.0

Rilis awal HAL dengan kemampuan yang diperluas (Android 4.2) [camera2.h]:

  • Cukup untuk mengimplementasikan android.hardware.Camera API yang ada.
  • Memungkinkan antrian ZSL di lapisan layanan kamera.
  • Tidak diuji untuk fitur baru apa pun seperti kontrol pengambilan manual, pengambilan RAW Bayer, pemrosesan ulang data RAW, dll.

1.0

Kamera Android awal HAL (Android 4.0) [camera.h]:

  • Dikonversi dari lapisan abstraksi C++ CameraHardwareInterface.
  • Mendukung API android.hardware.Camera .

Riwayat versi modul kamera

Bagian ini berisi informasi pembuatan versi modul untuk modul perangkat keras Kamera, berdasarkan camera_module_t.common.module_api_version . Dua digit hex paling signifikan mewakili versi mayor, dan dua digit hex paling signifikan mewakili versi minor.

2.4

Versi modul kamera ini menambahkan perubahan API berikut:

  1. Dukungan mode obor. Kerangka kerja ini dapat mengaktifkan mode obor untuk perangkat kamera apa pun yang memiliki unit lampu kilat, tanpa membuka perangkat kamera. Perangkat kamera memiliki prioritas lebih tinggi dalam mengakses unit lampu kilat dibandingkan modul kamera; membuka perangkat kamera akan mematikan obor jika telah diaktifkan melalui antarmuka modul. Ketika ada konflik sumber daya, seperti open() dipanggil untuk membuka perangkat kamera, modul HAL kamera harus memberi tahu kerangka kerja melalui panggilan balik status mode obor bahwa mode obor telah dimatikan.
  2. Dukungan kamera eksternal (misalnya, kamera hot-plug USB). Pembaruan API menentukan informasi statis kamera hanya tersedia ketika kamera terhubung dan siap digunakan untuk kamera hot-plug eksternal. Panggilan untuk mendapatkan info statis adalah panggilan tidak valid bila status kamera tidak CAMERA_DEVICE_STATUS_PRESENT . Kerangka kerja ini hanya mengandalkan callback perubahan status perangkat untuk mengelola daftar kamera eksternal yang tersedia.
  3. Petunjuk arbitrase kamera. Menambahkan dukungan untuk secara eksplisit menunjukkan jumlah perangkat kamera yang dapat dibuka dan digunakan secara bersamaan. Untuk menentukan kombinasi perangkat yang valid, kolom resource_cost conflicting_devices harus selalu disetel dalam struktur camera_info yang dikembalikan oleh panggilan get_camera_info .
  4. Metode inisialisasi modul. Dipanggil oleh layanan kamera setelah modul HAL dimuat untuk memungkinkan inisialisasi HAL satu kali. Itu dipanggil sebelum metode modul lainnya dipanggil.

2.3

Versi modul kamera ini menambahkan dukungan perangkat HAL kamera lama yang terbuka. Kerangka kerja dapat menggunakannya untuk membuka perangkat kamera sebagai perangkat HAL versi HAL yang lebih rendah jika perangkat yang sama dapat mendukung beberapa versi API perangkat. Panggilan terbuka modul perangkat keras standar ( common.methods->open ) terus membuka perangkat kamera dengan versi terbaru yang didukung, yang juga merupakan versi yang terdaftar di camera_info_t.device_version .

2.2

Versi modul kamera ini menambahkan dukungan tag vendor dari modul, dan tidak lagi menggunakan vendor_tag_query_ops lama yang sebelumnya hanya dapat diakses dengan perangkat terbuka.

2.1

Versi modul kamera ini menambahkan dukungan untuk callback asinkron ke kerangka kerja dari modul HAL kamera, yang digunakan untuk memberi tahu kerangka kerja tentang perubahan status modul kamera. Modul yang menyediakan metode set_callbacks() yang valid harus melaporkan setidaknya nomor versi ini.

2.0

Modul kamera yang melaporkan nomor versi ini mengimplementasikan versi kedua antarmuka HAL modul kamera. Perangkat kamera yang dapat dibuka melalui modul ini mungkin mendukung antarmuka HAL perangkat kamera versi 1.0 atau versi 2.0. Bidang device_version pada camera_info selalu valid; bidang static_camera_characteristics pada camera_info valid jika bidang device_version adalah 2.0 atau lebih tinggi.

1.0

Modul kamera yang melaporkan nomor versi ini mengimplementasikan antarmuka HAL modul kamera awal. Semua perangkat kamera yang dapat dibuka melalui modul ini hanya mendukung HAL perangkat kamera versi 1. Bidang device_version dan static_camera_characteristics pada camera_info tidak valid. Hanya android.hardware.Camera API yang dapat didukung oleh modul ini dan perangkatnya.