Sungguh menakjubkan berapa banyak dokumentasi yang dapat Anda temukan untuk Video4Linux2 - dan tidak ada yang benar-benar menjelaskan apa Video4Linux adalah .
Pertama, Video4Linux2 adalah kerangka kerja driver Linux . Driver framework sebenarnya tidak mengontrol perangkat secara langsung. Sebagai gantinya, mereka menyediakan model abstrak dari beberapa kelas perangkat, dalam hal ini perangkat video untuk digunakan aplikasi. Framework driver memberikan tiga manfaat utama:
- Menyediakan API terpadu untuk digunakan aplikasi dengan berbagai perangkat fisik, baik yang terhubung dengan USB, PCIe, MIPI, Ethernet, atau jenis bus transportasi data lainnya
- Dalam kernel, kerangka kerja berisi jenis kode yang diperlukan di hampir semua driver perangkat dari kelas tertentu, sehingga sangat mengurangi volume kode yang berbeda
- Dalam kernel, kerangka kerja menyediakan cetak biru untuk menulis driver tingkat rendah baru yang benar-benar mengontrol perangkat keras, sehingga menyederhanakan pengembangan driver.
Jadi, driver V4L2 adalah driver tingkat tinggi yang menggerakkan driver UVC, yang menggerakkan driver USB yang mungkin menggerakkan driver perangkat keras tingkat lebih rendah.
Model Matryoshka ini sangat umum di pohon driver kernel Linux. V4L2 adalah salah satu contoh yang lebih kompleks karena beberapa perangkat kamera memerlukan akses grup besar sub-perangkat dalam beberapa lapisan yang mengontrol kamera dan merutekan keluaran kamera di antara berbagai komponen seperti pemroses gambar.
Anda masih dapat mengakses driver UVC langsung dari ruang pengguna menggunakan file perangkat dan panggilan sistem "ioctl", tanpa melalui driver V4L2, dan Anda masih dapat mengakses driver USB yang mendasarinya langsung dari ruang pengguna menggunakan file perangkat dan "ioctl".
Menjadi kerangka kerja umum yang menyediakan fungsionalitas umum untuk berbagai perangkat, V4L2 tidak memberi Anda semua fungsionalitas yang bisa driver UVC sediakan (dengan asumsi bahwa perangkat Anda benar-benar menyediakan lebih banyak fungsi UVC daripada yang diperlukan untuk mendukung V4L2).
Jadi jika Anda memiliki perangkat UVC yang menyediakan semua fungsi yang ditentukan dalam spesifikasi UVC, maka untuk benar-benar menggunakan beberapa fungsi ini, Anda perlu mengakses driver UVC secara langsung melalui file perangkat dan sistem "ioctl". panggilan, dengan asumsi bahwa driver UVC kernel Linux sebenarnya mendukung semua spesifikasi UVC.
Namun, arti dari
Implementasi driver uvcvideo hanya mengikuti API V4L2
adalah bahwa driver UVC kernel Linux saat ini sebenarnya tidak memberikan dukungan fungsi UVC lebih dari yang diperlukan untuk V4L2.
Dukungan V4L2 di kernel tidak dengan sendirinya memberikan dukungan UVC atau USB atau dukungan perangkat keras USB tingkat rendah.
Kelas video USB (UVC) adalah spesifikasi yang harus disesuaikan dengan webcam USB, dll. Dengan cara ini, mereka dapat digunakan pada sistem apa pun yang mengimplementasikan dukungan untuk perangkat yang sesuai dengan UVC.
V4L2 adalah subsistem video kernel linux yang menjadi dasar penerapan UVC linux. Dengan kata lain, di dalam kernel Dukungan UVC memerlukan V4L2, tetapi tidak sebaliknya.
V4L2 API mengacu pada userspace antarmuka pemrograman, didokumentasikan di sini.