Konfigurasi Aliran

Android 10 memperkenalkan fitur yang memungkinkan klien kamera memilih aliran kamera yang optimal untuk kasus penggunaan tertentu dan untuk memastikan bahwa kombinasi aliran tertentu didukung oleh perangkat kamera. Konfigurasi aliran mengacu pada satu aliran kamera yang dikonfigurasi di perangkat kamera dan kombinasi aliran mengacu pada satu atau lebih kumpulan aliran yang dikonfigurasi di perangkat kamera. Untuk mengetahui lebih lanjut tentang fitur ini, lihat konfigurasi aliran yang direkomendasikan dan API untuk mengkueri kombinasi aliran .

Implementasi referensi

Terdapat implementasi referensi sisi vendor dari aliran konfigurasi yang direkomendasikan dan API untuk mengkueri fitur kombinasi aliran. Anda dapat menemukan implementasi ini di QCamera3HWI.cpp

Vendor kamera dapat mengiklankan konfigurasi streaming yang direkomendasikan untuk kasus penggunaan tertentu kepada klien kamera. Konfigurasi aliran yang direkomendasikan ini, yang merupakan bagian dari StreamConfigurationMap , dapat membantu klien kamera memilih konfigurasi optimal.

Meskipun StreamConfigurationMap memberikan informasi konfigurasi streaming yang lengkap kepada klien kamera, StreamConfigurationMap tidak memberikan informasi apa pun tentang dampak efisiensi, daya, atau performa dalam memilih satu streaming dibandingkan yang lain. Klien kamera dapat dengan bebas memilih dari semua kemungkinan konfigurasi streaming, namun dalam banyak kasus, hal ini menyebabkan klien menggunakan konfigurasi kamera dan aplikasi yang kurang optimal sehingga membuat pencarian menyeluruh memakan waktu.

Misalnya, meskipun beberapa format YUV yang diproses diperlukan dan harus didukung, perangkat kamera mungkin tidak memiliki dukungan asli untuk format tersebut. Hal ini menghasilkan proses tambahan untuk konversi format dan mengurangi efisiensi. Ukuran dan rasio aspek yang sesuai juga dapat memiliki dampak serupa sehingga membuat dimensi tertentu lebih disukai dalam hal daya dan kinerja.

Peta konfigurasi aliran yang Anda rekomendasikan tidak harus lengkap jika dibandingkan dengan StreamConfigurationMap . Peta konfigurasi yang disarankan harus mengikuti persyaratan di bagian implementasi dan dapat menyertakan format, ukuran, atau nilai lain apa pun yang tersedia yang ditemukan di StreamConfigurationMap . Format, ukuran, atau nilai lain yang tersembunyi yang tidak ditemukan di StreamConfigurationMap tidak dapat disertakan dalam peta konfigurasi aliran yang direkomendasikan.

Semua pengujian tetap tidak berubah dan tidak dilonggarkan bergantung pada konfigurasi aliran yang disarankan.

Konfigurasi streaming yang direkomendasikan yang disediakan oleh implementasi kamera bersifat opsional dan klien kamera dapat mengabaikannya.

Penerapan

Ikuti langkah-langkah berikut untuk menerapkan fitur ini.

Entri metadata

Untuk mengaktifkan fitur ini, Camera HAL harus mengisi entri metadata statis berikut:

  • android.scaler.availableRecommendedStreamConfigurations : Subset konfigurasi streaming yang direkomendasikan untuk kasus penggunaan tertentu. Deklarasi ini menggunakan bitmap sederhana yang menunjukkan kasus penggunaan yang disarankan dalam bentuk [1 << PREVIEW | 1 << RECORD..] . Kasus penggunaan memperluas tupel reguler (format, lebar, tinggi, masukan) dengan satu entri tambahan. Kasus penggunaan publik yang belum ada atau bit lain apa pun yang disetel dalam rentang [PUBLIC_END, VENDOR_START] dilarang.

    Informasi ini disimpan dalam tag metadata availableRecommendedStreamConfigurations .

    Contoh berikut menunjukkan susunan konfigurasi streaming yang direkomendasikan untuk perangkat kamera yang hanya mendukung 4K dan 1080p, dengan kedua resolusi tersebut lebih disukai untuk perekaman video namun hanya 1080p yang disarankan untuk pratinjau.

    [3840, 2160, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT),
    1920, 1080, HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED,
    ANDROID_SCALER_AVAILABLE_STREAM_CONFIGURATIONS_OUTPUT,
    (1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_PREVIEW |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_RECORD |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_SNAPSHOT |
    1 << ANDROID_SCALER_AVAILABLE_RECOMMENDED_STREAM_CONFIGURATIONS_VIDEO_SNAPSHOT)]
    
  • android.depth.availableRecommendedDepthStreamConfigurations (hanya tersedia jika didukung oleh perangkat): Konfigurasi aliran ruang data kedalaman yang direkomendasikan untuk perangkat kamera ini. Mirip dengan entri metadata di atas, bitmap kasus penggunaan tambahan menunjukkan kasus penggunaan yang disarankan.

    Informasi ini disimpan dalam tag metadata availableRecommendedInputOutputFormatsMap .

  • android.scaler.availableRecommendedInputOutputFormatsMap (hanya tersedia jika didukung oleh perangkat): Pemetaan format gambar yang disarankan yang disarankan untuk perangkat kamera ini untuk aliran masukan, ke format keluaran yang sesuai.

    Informasi ini disimpan dalam tag metadata availableRecommendedDepthStreamConfigurations .

Informasi ini tersedia untuk klien kamera melalui API RekomendasiStreamConfigurationMap .

Kasus penggunaan yang diperlukan

Konfigurasi aliran yang direkomendasikan harus disediakan untuk kasus penggunaan berikut dan memenuhi persyaratan yang sesuai:

Kasus penggunaan Persyaratan
PREVIEW Pratinjau hanya boleh menyertakan konfigurasi aliran proses yang tidak terhenti dengan format keluaran seperti YUV_420_888 dan IMPLEMENTATION_DEFINED .
RECORD Rekaman video harus menyertakan konfigurasi streaming yang cocok dengan profil media yang didukung yang diiklankan dengan format IMPLEMENTATION_DEFINED .
VIDEO_SNAPSHOT Cuplikan video harus menyertakan konfigurasi streaming yang setidaknya sama besar dengan resolusi RECORD maksimum dan hanya dengan format BLOB + DATASPACE_JFIF/kombinasi ruang data (JPEG). Konfigurasinya tidak boleh menyebabkan gangguan pratinjau dan harus dapat berjalan pada 30 fps.
SNAPSHOT Konfigurasi aliran snapshot harus menyertakan setidaknya satu dengan ukuran yang mendekati android.sensor.info.activeArraySize dengan format BLOB + DATASPACE_JFIF/kombinasi ruang data (JPEG). Dengan mempertimbangkan batasan pada rasio aspek, penyelarasan, dan batasan spesifik vendor lainnya, area ukuran maksimum yang disarankan tidak boleh kurang dari 97% area ukuran susunan sensor.
ZSL (jika didukung) Jika didukung oleh perangkat kamera, konfigurasi aliran masukan yang direkomendasikan hanya boleh diumumkan bersama dengan format keluaran lain yang diproses atau terhenti.
RAW (jika didukung) Jika didukung oleh perangkat kamera, konfigurasi aliran mentah yang disarankan hanya boleh menyertakan format keluaran berbasis RAW.

Kasus penggunaan lainnya

Anda dapat memberikan aliran konfigurasi tambahan yang direkomendasikan untuk kasus penggunaan khusus untuk implementasi Anda.

Validasi

Untuk menguji penerapan aliran konfigurasi yang direkomendasikan, jalankan pengujian CTS dan VTS berikut:

API untuk menanyakan kombinasi aliran

Platform Android mendukung API untuk menanyakan kombinasi aliran. Penerapan API ini memungkinkan klien kamera untuk menanyakan kombinasi aliran dengan aman kapan saja setelah menerima instance CameraDevice yang valid, menghilangkan biaya inisialisasi sesi pengambilan kamera dan potensi pengecualian kamera berikutnya termasuk kerusakan kamera, dan memungkinkan kueri yang lebih cepat.

Fitur ini juga memungkinkan klien kamera menerima daftar kombinasi aliran yang disusun berdasarkan pedoman CameraDevice dan tingkat HW yang didukung. Tes CTS tersedia untuk menegakkan kebenaran hasil kueri sebanyak mungkin yang mencakup sebagian kecil dari kombinasi aliran yang paling umum.

Anda dapat memilih untuk mendukung fitur ini dengan menerapkan satu panggilan API HIDL tambahan di Camera HAL.

Penerapan

Untuk mendukung API untuk mengkueri kombinasi aliran, Camera HAL harus menyediakan implementasi untuk antarmuka HIDL API isStreamCombinationSupported . Antarmuka ini memeriksa apakah perangkat kamera mendukung kombinasi aliran kamera tertentu.

Saat dipanggil, API harus mengembalikan salah satu kode status berikut:

  • OK : Permintaan kombinasi aliran berhasil.
  • METHOD_NOT_SUPPORTED : Perangkat kamera tidak mendukung permintaan kombinasi aliran.
  • INTERNAL_ERROR : Kueri kombinasi aliran tidak dapat diselesaikan karena kesalahan internal.

API mengembalikan nilai true jika kombinasi aliran didukung. Jika tidak, ia akan mengembalikan nilai salah.

Kerangka kerja ini menggunakan API publik isSessionConfigurationSupported untuk memeriksa apakah konfigurasi sesi tertentu didukung oleh perangkat kamera.

Panggilan ke API tidak boleh menimbulkan efek samping apa pun pada pengoperasian kamera normal. Panggilan API tidak boleh mengubah status internal apa pun atau memperlambat kinerja kamera. Pastikan bahwa setelah Camera HAL berhasil memvalidasi kombinasi aliran, klien kamera berhasil mengonfigurasi kombinasi aliran. Untuk menghindari masalah, pastikan implementasi tidak menyimpan informasi apa pun selama kueri kombinasi aliran, mengubah status internalnya, atau melakukan operasi yang memakan waktu.

Validasi

Untuk memvalidasi fitur ini, jalankan kasus uji kamera CTS dan VTS berikut:

Modul kamera CTS:

Kamera VTS:

VtsHalCameraProviderV2_4TargetTest.cpp