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 aliran kamera tunggal yang dikonfigurasi di perangkat kamera dan kombinasi aliran mengacu pada satu atau lebih kumpulan aliran yang dikonfigurasi di perangkat kamera. Untuk informasi selengkapnya tentang fitur ini, lihat konfigurasi aliran yang direkomendasikan dan API untuk mengkueri kombinasi aliran .

Implementasi referensi

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

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

Meskipun StreamConfigurationMap menyediakan informasi konfigurasi streaming yang lengkap untuk klien kamera, StreamConfigurationMap tidak memberikan informasi apa pun tentang efisiensi, daya, atau dampak kinerja dari memilih satu aliran di atas aliran lainnya. Klien kamera dapat dengan bebas memilih dari semua konfigurasi aliran yang mungkin, tetapi dalam banyak kasus, hal ini menyebabkan klien menggunakan konfigurasi kamera dan aplikasi yang kurang optimal yang membuat pencarian lengkap yang memakan waktu.

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

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

Semua pengujian tetap tidak berubah dan tidak santai bergantung pada konfigurasi streaming yang direkomendasikan.

Konfigurasi aliran yang direkomendasikan yang disediakan oleh implementasi kamera adalah opsional dan klien kamera dapat mengabaikannya.

Penerapan

Ikuti langkah-langkah ini untuk menerapkan fitur ini.

Entri metadata

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

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

    Informasi ini disimpan dalam tag metadataRecommendedStreamConfigurations yang availableRecommendedStreamConfigurations .

    Contoh berikut menunjukkan larik untuk konfigurasi streaming yang direkomendasikan untuk perangkat kamera yang hanya mendukung 4K dan 1080p, di mana kedua resolusi lebih disukai untuk perekaman video tetapi 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 disarankan disarankan untuk perangkat kamera ini. Mirip dengan entri metadata di atas, bitmap kasus penggunaan tambahan menunjukkan kasus penggunaan yang disarankan.

    Informasi ini disimpan dalam tag metadataRecommendedInputOutputFormatsMap yang availableRecommendedInputOutputFormatsMap .

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

    Informasi ini disimpan dalam tag metadata RecommendedDepthStreamConfigurations yang availableRecommendedDepthStreamConfigurations .

Informasi ini tersedia untuk klien kamera melalui RecommendedStreamConfigurationMap API.

Kasus penggunaan yang diperlukan

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

Gunakan kasus Persyaratan
PREVIEW Pratinjau hanya boleh menyertakan konfigurasi streaming yang diproses tanpa penundaan dengan format keluaran seperti YUV_420_888 dan IMPLEMENTATION_DEFINED .
RECORD Rekaman video harus menyertakan konfigurasi aliran yang cocok dengan profil media yang didukung yang diiklankan dengan format IMPLEMENTATION_DEFINED .
VIDEO_SNAPSHOT Cuplikan video harus menyertakan konfigurasi aliran yang setidaknya sebesar resolusi RECORD maksimum dan hanya dengan kombinasi format/ruang data BLOB + DATASPACE_JFIF (JPEG). Konfigurasi seharusnya tidak menyebabkan gangguan pratinjau dan harus dapat berjalan pada 30 fps.
SNAPSHOT Konfigurasi streaming cuplikan harus menyertakan setidaknya satu dengan ukuran yang mendekati android.sensor.info.activeArraySize dengan format BLOB + DATASPACE_JFIF/kombinasi ruang data (JPEG). Dengan mempertimbangkan pembatasan rasio aspek, penyelarasan, dan pembatasan khusus vendor lainnya, area ukuran maksimum yang disarankan tidak boleh kurang dari 97% area ukuran array sensor.
ZSL (jika didukung) Jika didukung oleh perangkat kamera, konfigurasi aliran input yang disarankan hanya boleh diiklankan bersama dengan format output lain yang diproses atau terhenti.
RAW (jika didukung) Jika didukung oleh perangkat kamera, konfigurasi aliran mentah yang disarankan hanya boleh menyertakan format output berbasis RAW.

Kasus penggunaan lainnya

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

Validasi

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

API untuk mengkueri kombinasi aliran

Platform Android mendukung API untuk mengkueri kombinasi aliran. Menerapkan API ini memungkinkan klien kamera untuk dengan aman melakukan kueri kombinasi aliran di titik mana pun setelah menerima instance CameraDevice yang valid, menghilangkan overhead untuk menginisialisasi sesi pengambilan kamera dan potensi memiliki pengecualian kamera berikutnya termasuk kerusakan kamera, dan memungkinkan kueri yang lebih cepat.

Fitur ini juga memungkinkan klien kamera untuk menerima daftar kombinasi aliran yang disusun sesuai dengan pedoman untuk CameraDevice dan level 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 HAL Kamera.

Penerapan

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

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

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

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

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

Panggilan ke API tidak boleh memiliki efek samping 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 dapat berhasil mengonfigurasi kombinasi aliran. Untuk menghindari masalah, pastikan implementasi tidak menyimpan informasi apa pun selama kueri kombinasi aliran, mengubah status internalnya, atau terlibat dalam operasi yang memakan waktu.

Validasi

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

Modul kamera CTS:

Kamera VTS:

VtsHalCameraProviderV2_4TargetTest.cpp