É incrível a quantidade de documentação que você pode encontrar para o Video4Linux2 - e nada explica realmente o que é o Video4Linux .
Primeiro, o Video4Linux2 é uma estrutura de driver Linux . Na verdade, os drivers de estrutura não controlam os dispositivos diretamente. Em vez disso, eles fornecem um modelo abstrato de alguma classe de dispositivo, neste caso, dispositivos de vídeo para uso dos aplicativos. As estruturas de driver fornecem três benefícios principais:
- Forneça uma API unificada para os aplicativos usarem com uma ampla gama de dispositivos físicos, 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 dispositivos de uma classe específica, reduzindo assim muito o volume de códigos díspares.
- No kernel, as estruturas fornecem um plano para escrever novos drivers de nível inferior que realmente controlam o hardware, simplificando 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 executando um driver de hardware de nível ainda mais baixo.
Esse modelo Matryoshka é muito comum na árvore de drivers do kernel do Linux. V4L2 é um dos exemplos mais complexos, porque alguns dispositivos de câmera exigem 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.
Você ainda pode acessar o driver UVC diretamente do espaço do usuário usando um arquivo de dispositivo e chamadas do sistema "ioctl", sem passar pelo driver V4L2, e ainda pode acessar o driver USB subjacente diretamente do espaço do usuário usando seu arquivo de dispositivo e "ioctl" s.
Sendo uma estrutura geral que fornece funcionalidade comum a uma ampla variedade de dispositivos, o V4L2 não fornece toda a funcionalidade que o driver UVC poderia fornecer (supondo que seu dispositivo realmente forneça mais funcionalidade UVC do que o 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 através de um arquivo de dispositivo e sistema "ioctl" chamadas, supondo que o driver UVC do kernel do Linux realmente suporte todas as especificações UVC.
No entanto, o significado de
A implementação do driver uvcvideo é aderente apenas à API V4L2
é que, no atual driver UVC do kernel do Linux, na verdade, não há mais suporte à função UVC do que o necessário para o V4L2.
O suporte à V4L2 no kernel por si só não fornece suporte a UVC ou USB ou suporte a hardware USB de nível inferior.