Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Dukungan Versi Kamera

Halaman ini menjelaskan perbedaan versi dalam HAL Kamera, API, dan tes Compatibility Test Suite (CTS) terkait . Ini juga mencakup beberapa perubahan arsitektur yang dilakukan 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:

API Kamera 1
Kerangka kerja kamera level aplikasi pada perangkat Android 4.4 dan lebih rendah, diekspos melalui kelas android.hardware.Camera .
API Kamera2
Kerangka kerja kamera level 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.
Camera API1 CTS
Kumpulan tes CTS kamera yang berjalan di atas Camera API1.
Camera API2 CTS
Kumpulan tes CTS kamera tambahan yang berjalan di atas Camera API2.
Tiga kali lipat
Memisahkan penerapan vendor (khusus perangkat, perangkat lunak tingkat lebih 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
Paket pengujian vendor diperkenalkan bersama Treble.

API Kamera

Android menyertakan API kamera berikut.

API Kamera 1

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

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

API Kamera2

Framework Camera API2 memperlihatkan kontrol kamera tingkat rendah ke aplikasi, termasuk aliran burst / streaming nol salinan yang efisien dan kontrol eksposur per frame, penguatan, penambahan white balance, konversi warna, denoising, penajaman, dan banyak lagi. Untuk detailnya, tonton ikhtisar video Google I / O.

Android 5.0 dan lebih tinggi menyertakan Camera API2; namun, perangkat yang menjalankan Android 5.0 dan lebih tinggi mungkin tidak mendukung semua fitur Camera API2. Properti android.info.supportedHardwareLevel yang bisa dibuat kueri oleh aplikasi melalui antarmuka Camera API2 melaporkan salah satu dari 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 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 yang 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 membutuhkan antara lain kemampuan MANUAL_SENSOR dan MANUAL_POST_PROCESSING . Kemampuan RAW adalah opsional bahkan untuk perangkat FULL . Perangkat LIMITED dapat mengiklankan subkumpulan apa pun dari kemampuan ini, termasuk tidak satu pun dari mereka. Namun, kemampuan BACKWARD_COMPATIBLE harus selalu ditentukan.

Tingkat perangkat keras yang didukung perangkat, serta kemampuan API2 Kamera tertentu yang didukungnya, tersedia sebagai tanda fitur berikut untuk memungkinkan pemfilteran Google Play dari aplikasi kamera API2 Kamera.

  • 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 Camera API2 penuh harus tetap lulus tes Camera API2 CTS. Namun, perangkat berjalan dalam mode Camera API2 LEGACY (di mana panggilan Camera API2 secara konseptual dipetakan ke panggilan Camera API1) sehingga semua pengujian Camera API2 CTS yang terkait dengan fitur atau kemampuan di luar Camera API1 secara otomatis dilewati.

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

Persyaratan VTS

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

Pengerasan kerangka kamera

Untuk memperkuat keamanan media dan framework kamera, Android 7.0 mengeluarkan layanan kamera dari mediaserver. Dimulai dengan Android 8.0, setiap Camera HAL yang diikat berjalan dalam proses yang terpisah dari layanan kamera. Vendor mungkin perlu melakukan perubahan pada kamera HAL tergantung pada API dan versi HAL yang digunakan. Bagian berikut merinci perubahan arsitektural pada AP1 dan AP2 untuk HAL1 dan HAL3, serta persyaratan umum.

Perubahan arsitektur untuk API1

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

  • HAL3, di mana layanan kamera menggunakan BufferQueue untuk meneruskan buffer antar 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 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.)

    Kamera Android 7.0 dan tumpukan media di API1 di HAL1

    Gambar 2. Kamera Android 7.0 dan tumpukan media 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 di:

  • HAL1 tidak terpengaruh oleh perpindahan layanan kamera, dan tidak diperlukan pembaruan vendor .
  • HAL3 adalah terpengaruh, tapi tidak ada update vendor yang 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 media pengerasan 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 membutuhkan sedikit RAM tambahan untuk membuat proses baru.
  • Teruskan metadata di buffer video (khusus HAL1 ). Jika HAL1 menyimpan metadata, 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 , kamera dan kerangka kerja media dapat meneruskan buffer video di antara proses dengan membuat serial dan deserialisasi pegangan asli dengan benar.
  • Alamat pegangan buffer tidak selalu menyimpan buffer yang sama ( hanya HAL3 ). Untuk setiap permintaan pengambilan, HAL3 mendapatkan alamat dari 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 tuas 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.
  • Perbarui kebijakan SELinux untuk kameraserver. Jika kebijakan SELinux khusus perangkat memberikan izin mediaserver untuk menjalankan kamera, Anda harus memperbarui kebijakan SELinux untuk memberikan izin yang tepat untuk cameraserver. Kami tidak menyarankan untuk mereplikasi kebijakan SELinux mediaserver untuk cameraserver (karena mediaserver dan cameraserver 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 mediaserver harus dihapus.
  • Pemisahan antara Camera HAL dan kameraserver. Android 8.0 dan yang lebih tinggi juga memisahkan Camera HAL yang diikat 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 penerapan dengan menjalankan Android 7.0 CTS. Meskipun Android 7.0 tidak menyertakan tes CTS baru yang memverifikasi perubahan layanan kamera, tes CTS yang ada gagal jika Anda belum melakukan pembaruan yang ditunjukkan di atas.

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

Sejarah versi Camera 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 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 permintaan klien jika konfigurasi sesi didukung. Lihat API untuk menanyakan kombinasi aliran .

ICameraDeviceSession

  • isReconfigurationNeeded : Metode yang memberi tahu framework kamera apakah konfigurasi ulang streaming lengkap diperlukan untuk kemungkinan nilai parameter sesi baru. Ini membantu menghindari penundaan konfigurasi ulang kamera yang tidak perlu. Lihat Kueri konfigurasi ulang sesi .
  • HAL buffer management API : API ini memungkinkan kamera HAL meminta buffer dari framework kamera hanya saat diperlukan, bukan menggabungkan setiap permintaan pengambilan dengan buffer terkait di seluruh pipeline kamera, sehingga berpotensi menghemat memori.
    • signalStreamFlush : signalStreamFlush sinyal ke HAL bahwa layanan kamera akan melakukan configureStreams_3_5 dan bahwa HAL harus mengembalikan semua buffer aliran 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 : Callback sinkron yang dipanggil HAL kamera untuk meminta requestStreamBuffers pada server kamera. LihatrequestStreamBuffers .
  • returnStreamBuffers : Callback sinkron untuk HAL kamera 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
  • Tersedia konfigurasi aliran kedalaman dinamis
    • 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 saat 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 untuk antarmuka API2 dan HAL kamera.

API Kamera

  • Memperkenalkan API multi-kamera untuk mendukung perangkat yang lebih baik dengan beberapa kamera menghadap ke arah yang sama, mengaktifkan 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 individu yang dicakup oleh satu kamera logis. Lihat Dukungan Multi-Kamera .
  • Memperkenalkan parameter sesi. Parameter sesi adalah bagian dari parameter tangkapan yang tersedia yang dapat menyebabkan penundaan pemrosesan yang parah saat diubah. Biaya ini dapat dikurangi jika klien memberikan nilai awal mereka 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 gerak 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 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 Camera HAL vendor harus diikat . Android 8.0 juga berisi penyempurnaan utama berikut untuk layanan Kamera:

  • Permukaan bersama: Aktifkan beberapa permukaan yang berbagi OutputConfiguration 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 encoding video, yang menurunkan konsumsi daya dan memori. Untuk mendukung fitur ini, produsen perangkat perlu memastikan kamera mereka HAL dan implementasi HAL gralloc dapat membuat buffer gralloc yang digunakan oleh banyak konsumen yang berbeda (seperti komposer hardware / GPU dan encoder video), bukan hanya satu konsumen. Layanan kamera meneruskan bendera 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 dibatasi paling banyak pada dua keluaran tertentu sekaligus. Berbagai OEM telah menyatakan minatnya untuk menentukan mode kustom lainnya untuk kemampuan khusus perangkat keras. Di balik terpal, mode ini hanya berupa 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 dengan 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, yang dipicu oleh bilangan bulat ini yang diteruskan ke HAL di configure_streams, lalu meminta aplikasi kamera khusus mereka menggunakan API sistem.

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

onCaptureQueueEmpty

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. Aplikasi yang ingin memanfaatkannya perlu menambahkan listener ke callback tersebut dan merespons dengan tepat. Umumnya itu dengan mengirimkan permintaan pengambilan lain ke perangkat kamera.

Antarmuka HIDL kamera

Antarmuka Camera HIDL adalah perombakan lengkap antarmuka Camera HAL yang menggunakan API yang ditentukan HIDL yang stabil. Semua fitur dan kemampuan kamera yang diperkenalkan di versi lama 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 format RAW didukung.
  • Alihkan bidang camera3_stream_t data_space ke definisi yang lebih fleksibel, menggunakan definisi encoding 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 kemampuan yang diperluas:

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

3.2

Revisi kecil dari HAL kemampuan yang diperluas:

  • get_metadata_vendor_tag_ops . Gunakan get_vendor_tag_ops di camera_common.h sebagai gantinya.
  • Menghentikan penggunaan register_stream_buffers . Semua buffer gralloc yang disediakan oleh framework untuk 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 template manual ke camera3_request_template . Aplikasi dapat menggunakan template ini untuk mengontrol pengaturan pengambilan secara langsung.
  • Mengolah kembali spesifikasi aliran dua arah dan masukan.
  • Ubah jalur pengembalian buffer input. Buffer dikembalikan dalam process_capture_result alih-alih process_capture_request .

3.1

Revisi kecil dari HAL kemampuan yang diperluas:

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

3.0

Revisi pertama dari HAL dengan kapabilitas yang diperluas:

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

2.0

Rilis awal HAL berkemampuan diperluas (Android 4.2) [camera2.h]:

  • Cukup untuk mengimplementasikan API android.hardware.Camera ada.
  • Memungkinkan untuk 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 CameraHardwareInterface C ++.
  • Mendukung android.hardware.Camera API.

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 paling signifikan mewakili versi minor.

2.4

Versi modul kamera ini menambahkan perubahan API berikut:

  1. Dukungan mode senter. Kerangka kerja dapat mengaktifkan mode senter untuk perangkat kamera apa pun yang memiliki unit flash, tanpa membuka perangkat kamera. Perangkat kamera memiliki prioritas lebih tinggi dalam 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 senter bahwa mode senter 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 tidak valid saat status kamera bukan CAMERA_DEVICE_STATUS_PRESENT . Kerangka kerja 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 dan conflicting_devices harus selalu disetel dalam struktur camera_info yang camera_info oleh panggilan get_camera_info .
  4. Metode inisialisasi modul. Dipanggil oleh layanan kamera setelah modul HAL dimuat untuk memungkinkan inisialisasi HAL satu kali. Ini dipanggil sebelum metode modul lainnya dipanggil.

2.3

Versi modul kamera ini menambahkan dukungan perangkat HAL kamera warisan terbuka. Kerangka kerja dapat menggunakannya untuk membuka perangkat kamera sebagai perangkat yang lebih rendah versi HAL perangkat HAL 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 callback asinkron ke framework dari modul HAL kamera, yang digunakan untuk memberi tahu framework tentang perubahan status modul kamera. Modul yang menyediakan metode set_callbacks() valid harus melaporkan setidaknya nomor versi ini.

2.0

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

1.0

Modul kamera yang melaporkan nomor versi ini menerapkan antarmuka HAL modul kamera awal. Semua perangkat kamera yang dapat dibuka melalui modul ini hanya mendukung perangkat kamera HAL versi 1. 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.