O SDV Media permite o uso de câmeras de vídeo pela API Linux V4L2. É possível usar as APIs V4L2 diretamente, mas os desenvolvedores de aplicativos são incentivados a usar bibliotecas auxiliares do espaço do usuário. Exemplo:
- Crate
libv4l-rspara Rust (recomendado) libv4l2para C++. Essa biblioteca não é fornecida por padrão no SDV Media.
Modos de buffer compatíveis
O modo de buffer USERPTR é considerado descontinuado pelos mantenedores upstream do V4L2 e, portanto, não é compatível com a SDV Media. Use o modo MMAP ou DMABUF.
Usar câmeras
Cada dispositivo de vídeo (câmeras, codificadores e decodificadores) exposto pelo hipervisor
aparecerá como um dispositivo separado chamado /dev/videoN (com um valor numérico de
N).
Os aplicativos podem usar ioctl VIDIOC_QUERYCAP para consultar os recursos dos dispositivos de vídeo. Os dispositivos de câmera informam o suporte para V4L2_CAP_VIDEO_CAPTURE ou V4L2_CAP_VIDEO_CAPTURE_MPLANE.
Para detalhes sobre o fluxo de captura de vídeo, consulte API Video for Linux: entrada/saída.
Considere estes exemplos de código:
- Rust: exemplo de
libv4l-rsstream_capture_mmap, - C/C++: classe
VideoCapturedo AAOS ou exemplo de captura de vídeo do kernel do Linux.
Configurar dispositivos de loopback de vídeo
Para testes, o SDV Media fornece um módulo de kernel v4l2loopback, que pode ser usado para emular câmeras de vídeo totalmente na VM convidada. Por padrão, ele inicializa um único dispositivo de câmera virtual. Para adicionar mais, transmita os parâmetros de configuração ao módulo pela linha de comando do kernel. Por exemplo, para inicializar quatro dispositivos, adicione:
v4l2loopback.devices=4
Para conferir uma lista completa de opções de módulos disponíveis, consulte o README do v4l2loopback ou as origens do módulo no repositório do kernel do Android.