SDV Media: usar câmeras

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-rs para Rust (recomendado)
  • libv4l2 para 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:

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.