Até onde eu sei, o driver de dispositivo é uma parte do SW capaz de se comunicar com um tipo específico de dispositivo conectado a um computador.
No caso de uma webcam USB, o driver responsável é o UVC que suporta qualquer dispositivo compatível com UVC. Isso significa que permite que o SO ou outro programa de computador acesse as funções de hardware sem precisar saber detalhes precisos do hardware que está sendo usado.
Por esse motivo, instalei o driver de dispositivo UVC Linux executando:
opkg install kernel-module-uvcvideo
Webcam tem sido reconhecida por kernel do Linux: dev/video0
. No entanto, eu ainda não era capaz de executar streaming de vídeo com o FFmpeg, pois estava sentindo falta da API V4L2. Eu instalei o V4L2, configurando o kernel.
Minhas consultas são:
- Como o driver UVC e o V4L2 estão ligados?
- Qual é o objetivo da API V4L2?
- Se eu não tivesse instalado o UVC primeiro, ele seria instalado com o V4L2?
LinuxTV refere-se: A implementação do driver uvcvideo é aderente apenas à API V4L2 . Isso significa que o UVC faz parte da API V4L2?
É 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:
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
é 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.
fonte