HairCAPTURE – Utilizando captura de vídeo em C++ (sem segredos)
Quando iniciei as pesquisas em V4L (Vídeo for Linux), percebi que não faria sentido (em termos comerciais) um profissional estudar todos os conceitos para desenvolver tal aplicações. Sendo assim trabalhei em um projeto paralelo para facilitar os meus futuros projetos de manipulação de vídeo ao vivo e acabei disponibilizando este trabalho para a comunidade.
Parte 3: Compilando e testando os exemplos do pacote de desenvolvimento
No pacote hairCAPTURE-devel inseri alguns exemplos de fácil aprendizado. Neste capítulo encontraremos os comandos passo-a-passo para a compilação dos exemplos.
Em primeiro lugar, mudaremos para a pasta onde se encontram os códigos-fonte de exemplo:
# cd /usr/share/hairCAPTURE
Se você estiver utilizando o pacote a partir do código-fonte, entre na pasta abaixo:
$ cd install/hairCAPTURE/example
Agora, com o comando make, compile os exemplos:
$ make
g++ -c example01.cpp
g++ -c example02.cpp
g++ -c example03.cpp
g++ -c example04.cpp
g++ -c example05.cpp
g++ example01.o -o example01 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
g++ example02.o -o example02 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
g++ example03.o -o example03 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
g++ example04.o -o example04 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
g++ example05.o -o example05 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
Pronto. Agora, basta executar os exemplos:
$ ./example05
Abaixo, a listagem do código-fonte que utilizarei para explicar o conceito lógico de funcionamento. Mais uma vez menciono que críticas e sugestões devem ser enviadas por e-mail.
Em primeiro lugar, mudaremos para a pasta onde se encontram os códigos-fonte de exemplo:
# cd /usr/share/hairCAPTURE
Se você estiver utilizando o pacote a partir do código-fonte, entre na pasta abaixo:
$ cd install/hairCAPTURE/example
Agora, com o comando make, compile os exemplos:
$ make
g++ -c example01.cpp
g++ -c example02.cpp
g++ -c example03.cpp
g++ -c example04.cpp
g++ -c example05.cpp
g++ example01.o -o example01 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
g++ example02.o -o example02 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
g++ example03.o -o example03 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
g++ example04.o -o example04 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
g++ example05.o -o example05 -lSDL -lSDL_ttf -lSDL_gfx -lhairCAPTURE
Pronto. Agora, basta executar os exemplos:
$ ./example05
Fundamentando conceitos de programação
Abaixo, a listagem do código-fonte que utilizarei para explicar o conceito lógico de funcionamento. Mais uma vez menciono que críticas e sugestões devem ser enviadas por e-mail.
# include <stdio.h>
#include <fstream>
#include <sstream>
#include <string>
#include <unistd.h>
#include <funcoesCAPTURE.h>
using namespace std;
extern char **environ;
int main(int argc, char *argv[])
{
std::string texto;
HAIR::CAPTURE video1;
video1.Open();
video1.InitVideo();
video1.LoadBMP("tux.bmp");
video1.Line(20,215,320,215,0,255,0);
video1.WriteText(20,220,"Use the Force, READS THE SOURCE!");
video1.Show();
std::cout<<"Enter a message:"; std::cin>>texto;
video1.WriteText(20,220,"Press (Q) for exit the video");
video1.WaitForVideo();
return 0;
}
#include <fstream>
#include <sstream>
#include <string>
#include <unistd.h>
#include <funcoesCAPTURE.h>
using namespace std;
extern char **environ;
int main(int argc, char *argv[])
{
std::string texto;
HAIR::CAPTURE video1;
video1.Open();
video1.InitVideo();
video1.LoadBMP("tux.bmp");
video1.Line(20,215,320,215,0,255,0);
video1.WriteText(20,220,"Use the Force, READS THE SOURCE!");
video1.Show();
std::cout<<"Enter a message:"; std::cin>>texto;
video1.WriteText(20,220,"Press (Q) for exit the video");
video1.WaitForVideo();
return 0;
}
- HAIR::CAPTURE video1: esta linha instancia a classe de vídeo em memória com o nome de video1;
- video1.Open(): este método inicializa o dispositivo de vídeo captura, define as características como tamanho do buffer, resolução máxima permitida, número de cores e outras propriedades do hardware;
- video1.InitVideo(): nesta linha inicializamos uma janela para exibição do vídeo usando as funções da biblioteca SDL;
- video1.LoadBMP("tux.bmp"): agora carregaremos a imagem tux.bmp. Esta imagem contém o logotipo do tux-jedi. O fundo da imagem de cor rosa é utilizado como transparência da imagem;
- video1.Line(20,215,320,215,0,255,0): Line é um método que desenha uma linha nas coordenadas inicial e final especificadas. Os três últimos argumentos são as cores no formato RGB;
- video1.WriteText(20,220,"Use the Force, READS THE SOURCE!"): já o WriteText escreve um texto nas coordenadas especificadas;
- video1.Show(): o método Show cria uma thread para exibir o vídeo ao vivo;
- video1.WaitForVideo(): agora esta linha aguarda a thread do vídeo ao vivo ser destruída para finalizar a aplicação.
"Conquistas materiais nos proporcionam prazeres momentâneos. Satisfação eterna são para os homens que se tornam o que sonham ser... "
Em vista disto, torne-se um JEDI.
Não use DROGAS, Use LINUX!!!
