Dukungan Versi Kamera

Halaman ini merinci perbedaan versi di Camera HALs, API, dan pengujian Compatibility Test Suite (CTS) terkait. Ini juga mencakup beberapa perubahan arsitektur yang dibuat untuk memperkuat dan mengamankan kerangka kerja 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 berikut digunakan di halaman ini:

Kamera API1
Kerangka kerja kamera tingkat aplikasi pada Android 4.4 dan perangkat yang lebih rendah, diekspos melalui kelas android.hardware.Camera .
Kamera API2
Kerangka kerja kamera tingkat aplikasi pada perangkat Android 5.0 dan yang 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 tes CTS kamera yang dijalankan di atas Camera API1.
Kamera API2 CTS
Kumpulan tes CTS kamera tambahan yang berjalan di atas Camera API2.
Tiga kali lipat
Memisahkan implementasi vendor (khusus perangkat, perangkat lunak tingkat rendah yang ditulis oleh produsen silikon) dari kerangka kerja OS Android melalui antarmuka vendor baru.
HIDL
Bahasa definisi antarmuka HAL diperkenalkan dengan Treble dan digunakan untuk menentukan antarmuka antara HAL dan penggunanya.
VTS
Suite uji vendor diperkenalkan bersama Treble.

API Kamera

Android menyertakan API kamera berikut.

Kamera API1

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

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

Kamera API2

Kerangka kerja Camera API2 memaparkan kontrol kamera tingkat rendah ke aplikasi, termasuk aliran burst/streaming nol-salinan yang efisien dan kontrol per-bingkai dari eksposur, penguatan, peningkatan keseimbangan putih, konversi warna, denoising, penajaman, dan banyak lagi. Untuk detailnya, tonton ikhtisar video Google I/O .

Android 5.0 dan lebih tinggi termasuk 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 level dukungan berikut:

  • LEGACY : Perangkat ini mengekspos kemampuan ke aplikasi melalui antarmuka Camera API2 yang kira-kira memiliki kemampuan yang sama dengan yang diekspos ke aplikasi melalui antarmuka Camera API1. Kode kerangka kerja lama secara konseptual menerjemahkan panggilan Camera API2 menjadi panggilan Camera API1; perangkat lawas tidak mendukung fitur Camera API2 seperti kontrol per-bingkai.
  • 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, bersama dengan 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 individu diekspos melalui properti android.request.availableCapabilities di antarmuka Camera API2. Perangkat FULL memerlukan kemampuan MANUAL_SENSOR dan MANUAL_POST_PROCESSING , antara lain. Kemampuan RAW adalah opsional bahkan untuk perangkat FULL . Perangkat LIMITED dapat mengiklankan subset dari kemampuan ini, termasuk tidak satupun dari mereka. Namun, kemampuan BACKWARD_COMPATIBLE harus selalu ditentukan.

Tingkat perangkat keras yang didukung dari perangkat, serta kemampuan khusus Camera API2 yang didukungnya, tersedia sebagai tanda fitur berikut untuk memungkinkan pemfilteran Google Play dari 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 uji kamera Camera API1 CTS, Camera API2 CTS, dan CTS Verifier.

Perangkat yang tidak menampilkan implementasi Camera HAL3.2 dan tidak mampu mendukung antarmuka penuh Camera API2 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 setiap pengujian Camera API2 CTS yang terkait dengan fitur atau kemampuan di luar Camera API1 secara otomatis dilewati.

Pada perangkat lawas, pengujian Camera API2 CTS yang dijalankan menggunakan antarmuka dan kemampuan Camera API1 publik yang ada tanpa persyaratan baru. Bug yang terpapar (dan yang menyebabkan kegagalan Camera API2 CTS) adalah bug yang sudah ada di HAL Kamera yang ada di 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 untuk lulus tes Camera API2 CTS).

Persyaratan VTS

Perangkat yang menjalankan Android 8.0 dan lebih tinggi dengan implementasi HAL yang di-binder harus lulus uji VTS Kamera .

Pengerasan kerangka kamera

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

Perubahan arsitektur untuk API1

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

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

    Kamera Android 7.0 dan tumpukan media di API1 di HAL3

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

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

    Kamera Android 7.0 dan tumpukan media di API1 di HAL1

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

Perubahan arsitektur untuk API2

Untuk API2 pada HAL1 atau HAL3, BufferQueue melewati buffer sehingga jalur tersebut terus bekerja. Arsitektur Android 7.0 untuk API2 pada:

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

    Kamera Android 7.0 dan tumpukan media di API2 di HAL3

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

Persyaratan tambahan

Perubahan arsitektur yang dibuat untuk pengerasan 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 aktual dengan menjalankan android.hardware.camera2.cts.PerformanceTest dan aplikasi Google Kamera untuk perekaman video berkecepatan tinggi 120/240 FPS. Perangkat juga memerlukan sedikit RAM tambahan untuk membuat proses baru.
  • Lewati metadata dalam buffer video ( hanya HAL1 ). Jika HAL1 menyimpan metadata alih-alih data bingkai YUV nyata dalam buffer video, HAL harus menggunakan kMetadataBufferTypeNativeHandleSource sebagai jenis buffer metadata dan meneruskan VideoNativeHandleMetadata dalam buffer video. ( kMetadataBufferTypeCameraSource tidak lagi didukung di Android 7.0.) Dengan VideoNativeHandleMetadata , kerangka kerja kamera dan media dapat meneruskan buffer video di antara proses dengan membuat serial dan deserializing handle asli dengan benar.
  • Alamat pegangan buffer tidak selalu menyimpan buffer yang sama ( hanya HAL3 ). Untuk setiap permintaan pengambilan, HAL3 mendapatkan alamat pegangan buffer. HAL tidak dapat menggunakan alamat untuk mengidentifikasi buffer karena alamat dapat 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 berikutnya HAL menerimanya.
  • 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). Cameraserver 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 cameraserver. Android 8.0 dan lebih tinggi juga memisahkan Camera HAL yang di-binder dalam proses yang berbeda dari cameraserver. IPC melewati antarmuka yang ditentukan HIDL .

Validasi

Untuk semua perangkat yang menyertakan 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 tidak melakukan pembaruan yang ditunjukkan di atas.

Untuk semua perangkat yang menyertakan 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 HAL Kamera Android, lihat Daftar Periksa Pengujian HAL Kamera .

Android 10

Android 10 memperkenalkan pembaruan berikut.

API Kamera

Kamera HAL

Versi Kamera 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 permintaan klien jika konfigurasi sesi didukung. Lihat API untuk mengkueri kombinasi aliran .

ICameraDeviceSession

  • isReconfigurationNeeded : Metode yang memberi tahu kerangka kerja 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 manajemen buffer HAL : API ini memungkinkan HAL kamera untuk meminta buffer dari kerangka kamera hanya jika diperlukan, bukan menggabungkan setiap permintaan pengambilan dengan buffer terkait di seluruh pipeline kamera, sehingga berpotensi menghemat memori yang signifikan.
    • signalStreamFlush : Memberi sinyal ke HAL bahwa layanan kamera akan melakukan configureStreams_3_5 dan bahwa HAL harus mengembalikan semua buffer stream yang ditentukan.
    • configureStreams_3_5 : Mirip dengan ICameraDevice3.4.configureStreams , tetapi sebagai tambahan, penghitung streamConfigCounter disediakan untuk memeriksa kondisi balapan antara panggilan configureStreams_3_5 dan signalStreamFlush .

Pembaruan untuk ICameraDeviceCallback :

  • requestStreamBuffers : Panggilan balik sinkron yang dipanggil oleh kamera HAL untuk meminta buffer pada server kamera. Lihat requestStreamBuffers .
  • returnStreamBuffers : Panggilan balik sinkron untuk kamera HAL untuk mengembalikan buffer output 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 untuk perangkat agar memberi tahu kamera HAL saat perubahan fisik, seperti melipat, memengaruhi kamera, dan perutean.

2.4

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

Android 9

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

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. Ini memungkinkan aplikasi untuk 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 dimodifikasi. Biaya ini dapat dikurangi jika klien melewati nilai awal mereka selama inisialisasi sesi pengambilan. Lihat Parameter Sesi .
  • Menambahkan kunci data optical stabilization (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 .
  • 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 untuk ICameraDeviceSession

Pembaruan untuk 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 Camera HAL vendor harus di- binder . Android 8.0 juga berisi peningkatan utama ini untuk layanan Kamera:

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

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

Permukaan bersama

Fitur ini memungkinkan hanya satu set buffer untuk menggerakkan dua output, seperti pratinjau dan encoding video, yang 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 beberapa konsumen yang berbeda (seperti komposer perangkat keras/GPU dan encoder video), bukan hanya satu konsumen. Layanan kamera meneruskan flag penggunaan konsumen ke kamera HAL dan gralloc HAL; mereka perlu mengalokasikan jenis buffer yang tepat, atau kamera HAL perlu mengembalikan kesalahan bahwa kombinasi konsumen ini tidak didukung.

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 memiliki semantik yang cukup berbeda; misalnya, mode kecepatan tinggi terbatas pada paling banyak dua keluaran tertentu sekaligus. Berbagai OEM telah menyatakan minatnya untuk mendefinisikan mode kustom lainnya untuk kemampuan khusus perangkat keras. Di bawah tenda, mode hanyalah bilangan bulat yang diteruskan ke configure_streams . Lihat: hardware/camera/device/3.2/ICameraDeviceSession#configurestreams .

Fitur ini mencakup panggilan API sistem yang dapat digunakan 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 configure_streams, dan kemudian aplikasi kamera kustom mereka menggunakan API sistem.

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

diCaptureQueueEmpty

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

Antarmuka kamera HIDL

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

3.4

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

  • Tambahkan ANDROID_SENSOR_OPAQUE_RAW_SIZE metadata statis sebagai wajib jika format RAW_OPAQUE didukung.
  • Tambahkan ANDROID_CONTROL_POST_RAW_SENSITIVITY_BOOST_RANGE metadata statis sebagai wajib jika ada format RAW yang 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 untuk 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:

  • Pembaruan API pemrosesan ulang OPAQUE dan YUV.
  • 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:

  • get_metadata_vendor_tag_ops . Gunakan get_vendor_tag_ops di camera_common.h sebagai gantinya.
  • Menghentikan register_stream_buffers . Semua buffer gralloc yang disediakan oleh framework ke HAL di process_capture_request mungkin baru setiap saat.
  • 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 template ini untuk mengontrol pengaturan pengambilan secara langsung.
  • Kerjakan 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 flag penggunaan konsumen ke HAL.
  • panggilan flush untuk membatalkan semua permintaan/buffer dalam penerbangan secepat mungkin.

3.0

Revisi pertama dari HAL dengan kemampuan yang diperluas:

  • Perubahan versi utama sejak ABI benar-benar berbeda. Tidak ada perubahan pada kemampuan perangkat keras yang diperlukan atau model operasional dari 2.0.
  • Permintaan input yang dikerjakan ulang dan antarmuka antrian streaming: Panggilan kerangka kerja ke HAL dengan permintaan berikutnya dan buffer aliran sudah di-dequeued. Dukungan kerangka kerja sinkronisasi disertakan, yang diperlukan untuk implementasi yang efisien.
  • Memindahkan pemicu ke permintaan, sebagian besar notifikasi ke hasil.
  • Menggabungkan semua panggilan balik ke dalam kerangka kerja menjadi satu struktur, dan semua metode penyiapan menjadi satu panggilan initialize() .
  • Membuat konfigurasi streaming menjadi satu panggilan untuk menyederhanakan manajemen streaming. Aliran dua arah menggantikan konstruksi STREAM_FROM_STREAM .
  • Semantik mode terbatas untuk perangkat keras 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 Bayer RAW, pemrosesan ulang data RAW, dll.

1.0

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

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

Riwayat versi modul kamera

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

2.4

Versi modul kamera ini menambahkan perubahan API berikut:

  1. Dukungan mode obor. Kerangka kerja dapat mengaktifkan mode obor untuk perangkat kamera apa pun yang memiliki unit lampu kilat, tanpa membuka perangkat kamera. Perangkat kamera memiliki prioritas yang lebih tinggi untuk mengakses unit lampu kilat daripada modul kamera; membuka perangkat kamera 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 bahwa info statis kamera hanya tersedia saat kamera terhubung dan siap digunakan untuk kamera hot-plug eksternal. Panggilan untuk mendapatkan info statis adalah panggilan yang tidak valid jika status kamera bukan CAMERA_DEVICE_STATUS_PRESENT . Kerangka kerja hanya mengandalkan panggilan balik 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, bidang resource_cost dan 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 lain dipanggil.

2.3

Versi modul kamera ini menambahkan dukungan perangkat HAL kamera warisan terbuka. Kerangka kerja dapat menggunakannya untuk membuka perangkat kamera sebagai perangkat HAL versi perangkat 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 tercantum di camera_info_t.device_version .

2.2

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

2.1

Versi modul kamera ini menambahkan dukungan untuk panggilan balik 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 dari antarmuka HAL modul kamera. Perangkat kamera yang dapat dibuka melalui modul ini dapat mendukung versi 1.0 atau versi 2.0 dari antarmuka HAL perangkat kamera. Bidang device_version dari camera_info selalu valid; bidang static_camera_characteristics dari camera_info valid jika bidang device_version 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 versi 1 perangkat kamera HAL. Bidang device_version dan static_camera_characteristics dari camera_info tidak valid. Hanya android.hardware.Camera API yang dapat didukung oleh modul ini dan perangkatnya.