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?

Que tal no Pinterest?

Ou talvez nos encontrar no Twitter para receber as ultimas noticias quentinhas: @SEmbarcados

E não esqueça que também tem o email, [email protected]

Conheça também nossos grupos do Facebook:

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

Related Post