Orange Pi Câmera com v4l2loopback e vidcopy

Orange Pi Câmera com v4l2loopback e vidcopy

Orange Pi cãmera

Orange Pi Câmera com v4l2loopback e vidcopy

Diferentemente das câmeras usbs, a gc2035 da Orange Pi, trabalha em conjunto com o módulo vfe_v4l2 simulando um dispositivo v4l2 real.

Programas como v4l2-ctrl e ffmpeg não estavam funcionando, então decidi investigar e resolver a questão. Em minhas pesquisas, descobri o motivo do erro ao definir o formato de imagem; alguns programas não definem o index do input corrente (VIDIOC_S_INPUT). Então cheguei no pulo do gato: a solução é definir o index do input corrente. Eis que me aparece outro problema: alterar os códigos originais de cada programa que utiliza v4l2… Não ficou tranquilo, e muito menos favorável.

Para resolver este problema, escrevi o vidcopy.

O vidcopy tem as seguintes funcionalidades:

  • Definir o input corrente.
  • Resolução da imagem.
  • Ler o dispositivo da cãmera e escrever em uma saída/dispositivo (por padrão stdout)

utilizei o v4l2loopback que cria um dispositivo de vídeo virtual, o vidcopy captura da câmera e escreve no mesmo.

Combinação matadora; todos os programas que utilizo funcionaram corretamente! Problema resolvido.

Lembrando que o vidcopy não é apenas para Orange Pi; funciona com qualquer câmera com suporte a v4l2 e tem a opção de escrever no stdout, possibilitando trabalhar junto com ffmpeg.

Instalando v4l2loopback (necessário o kernel source)

Instalando vidcopy

Carregando os módulos necessários

Iniciando a cópia dos frames

Com a cãmera da orange pi, testei com os seguintes formatos: UYVY/YV12/YU12/NV12/NV21

Pronto, dispositivo /dev/video1 pronto para uso!

Testado na Orange Pi One/PC/Plus

Opencv e ffmpeg funcionando graciosamente.

Bônus

Fiz algumas modificações no kernel 3.4.39-02-lobo:

  • gc2035: de 8fps para ~20fps e melhorias na questão de luminosidade.
  • O driver original aceita apenas 800×600, adicionei as seguintes resoluções: 800×600 / 640×480 / 320×240
  • sunxi_wdt: troca de built-in para module (maior flexibilidade para alterar as opções do módulo) / algumas funções pr_info, causando flood no kern.log (troquei para pr_debug)
  • CONFIG_CMDLINE=”earlyprintk=ttyS0,115200 loglevel=5 initcall_debug=0 console=ttyS0,115200 console=tty0 fsck.mode=force fsck.repair=yes init=/init ipv6.disable=1
  • Tamanho do kernel ~59mb

Quem estiver interessado, clique aqui.

Que tal nos encontrar no SeuTubo para ver dicas, tutoriais e Reviews de placas? Canal Sistemas Embarcados

Que tal na página do Facebook?

Ou Instagram?

Quem sabe Google Plus?

Conheça também nossos grupos do Facebook:

Forte abraço e até o próximo embarcado.

Related Post