Es sorprendente la cantidad de documentación que puede encontrar para Video4Linux2, y ninguna explica realmente qué Video4Linux es .
Primero, Video4Linux2 es un controlador de Linux marco . Los controladores de Framework en realidad no controlan los dispositivos directamente. En su lugar, proporcionan un modelo abstracto de alguna clase de dispositivo, en este caso dispositivos de video para uso de aplicaciones. Los marcos de controladores brindan tres beneficios principales:
- Proporcione una API unificada para que las aplicaciones la utilicen con una amplia gama de dispositivos físicos, ya sea que estén conectados por USB, PCIe, MIPI, Ethernet u otro tipo de bus de transporte de datos
- En el núcleo, los marcos contienen el tipo de código que se necesita en casi todos los controladores de dispositivos de una clase en particular, lo que reduce en gran medida el volumen de código dispar
- En el núcleo, los marcos proporcionan un modelo para escribir nuevos controladores de nivel inferior que realmente controlan el hardware, lo que simplifica el desarrollo de controladores.
Entonces, el controlador V4L2 es un controlador de alto nivel que maneja el controlador UVC, que maneja el controlador USB que podría estar manejando un controlador de hardware de nivel aún más bajo.
Este modelo Matryoshka es muy común en el árbol de controladores del kernel de Linux. V4L2 es uno de los ejemplos más complejos porque algunos dispositivos de cámara requieren acceder a grandes grupos de subdispositivos en varias capas que controlan la cámara y enrutan la salida de la cámara entre varios componentes, como procesadores de imágenes.
Todavía puede acceder al controlador UVC directamente desde el espacio de usuario usando un archivo de dispositivo y llamadas al sistema "ioctl", sin pasar por el controlador V4L2, y aún puede acceder al controlador USB subyacente directamente desde el espacio de usuario usando su archivo de dispositivo y "ioctl".
Al ser un marco general que proporciona una funcionalidad común a una amplia gama de dispositivos, V4L2 no le proporciona todas de la funcionalidad que el controlador UVC podría proporcionar (suponiendo que su dispositivo realmente proporcione más funcionalidad UVC de la necesaria para admitir V4L2).
Entonces, si tuviera un dispositivo UVC que proporciona todas las funciones especificadas en la especificación UVC, entonces, para usar algunas de estas funciones, necesitaría acceder al controlador UVC directamente a través de un archivo de dispositivo y un sistema "ioctl". llamadas, suponiendo que el controlador UVC del kernel de Linux de hecho admita todas las especificaciones UVC.
Sin embargo, el significado de
La implementación del controlador uvcvideo solo se adhiere a la API V4L2
es que en el controlador UVC del kernel de Linux actual, de hecho, no proporciona más compatibilidad con la función UVC que la necesaria para V4L2.
La compatibilidad con V4L2 en el kernel por sí sola no proporciona compatibilidad con UVC o USB o compatibilidad con hardware USB de nivel inferior.
La clase de video USB (UVC) es una especificación a las que se supone que deben ajustarse las cámaras web USB, etc. De esta forma, se pueden usar en cualquier sistema que implemente soporte para dispositivos compatibles con UVC.
V4L2 es el subsistema de video del kernel de Linux del que depende la implementación de UVC de Linux. En otras palabras, en el núcleo La compatibilidad con UVC requiere V4L2, pero no al revés.
La API V4L2 hace referencia a un espacio de usuario interfaz de programación, documentada aquí.