É incrível a quantidade de documentação que você pode encontrar para Video4Linux2 - e nada disso realmente explica o que Video4Linux é .
Primeiro, o Video4Linux2 é um driver framework do Linux. Os drivers do Framework não controlam dispositivos diretamente. Em vez disso, eles fornecem um modelo abstrato de alguma classe de dispositivo, neste caso, dispositivos de vídeo para aplicativos a serem usados. Os frameworks de drivers fornecem três benefícios principais:
- Fornece uma API unificada para aplicativos para uso com uma ampla variedade de dispositivos físicos, sejam conectados por USB, PCIe, MIPI, Ethernet ou outro tipo de barramento de transporte de dados
- No kernel, as estruturas contêm o tipo de código necessário em quase todos os drivers de dispositivo de uma determinada classe, reduzindo assim bastante o volume de código diferente
- No kernel, os frameworks fornecem um plano para escrever novos drivers de baixo nível que realmente controlam o hardware, simplificando assim o desenvolvimento do driver.
Portanto, o driver V4L2 é um driver de alto nível que aciona o driver UVC, que aciona o driver USB que pode estar acionando um driver de hardware de nível ainda menor.
Este modelo Matryoshka é muito comum na árvore de drivers do kernel do Linux. A V4L2 é um dos exemplos mais complexos porque alguns dispositivos de câmera requerem acesso a grandes grupos de sub-dispositivos em várias camadas que controlam a câmera e direcionam a saída da câmera entre vários componentes, como processadores de imagem. / p>
Ainda é possível acessar o driver UVC diretamente do userspace usando um arquivo de dispositivo e chamadas de sistema "ioctl", sem passar pelo driver V4L2, e ainda é possível acessar o driver USB subjacente diretamente do userspace usando seu arquivo de dispositivo e "ioctl "s.
Sendo uma estrutura geral que fornece funcionalidade comum a uma ampla gama de dispositivos, a V4L2 não oferece a todas a funcionalidade que o driver UVC poderia fornecer (supondo que o seu dispositivo realmente forneça mais funcionalidade UVC do que é necessário para suportar o V4L2).
Portanto, se você tiver um dispositivo UVC que forneça todas as funções especificadas na especificação UVC, para usar algumas dessas funções, será necessário acessar o driver UVC diretamente por meio de um arquivo de dispositivo e " ioctl "chamadas de sistema, assumindo que o driver UVC do kernel Linux na verdade suporta toda a especificação UVC.
No entanto, o significado de
The uvcvideo driver implementation is adherent only to the V4L2 API
é que, no atual driver UVC do kernel Linux, na verdade, não há mais suporte à função UVC do que o necessário para a V4L2.
O suporte a V4L2 no kernel, por si só, não fornece suporte a UVC ou USB ou suporte a hardware USB de nível inferior.