2008/09/01


Cruzando a janela

Hoje fiz um negócio legal que meus melhores leitores vão saber apreciar!

No meu último trabalho de uma disciplina aqui na Poli (que vou botar no meu site mais cedo ou mais tarde), tínhamos que fazer um par de programas pra rodar no console mesmo (algo que qualquer um tem que concordar comigo que é absolutamente alien no mundo wirdnws desde o XP, senão o 95). Um programa apenas abre um vídeo de entrada e insere uma marca d'água. O outro detecta ela no vídeo gerado.

Fiz tudo usando a FFmpeg. Terminei os programas, funcionou tudo legal. Mas tinha um probleminha: meu professor parece que não usa muito Linux, e queria códigos fonte de quem usou outros esquemas pra programar...

Como o FFmpeg é uma biblioteca pequena, relativamente independente de outra coisas (bem como o programa que eu fiz) então tinha boa chance de que eu conseguisse compilar tudo no widlows sem mudar o código... Mas eu fiz até melhor (agora vem a coisa legal). Resolvi tentar fazer uma compilação cruzada! Gerar o binário pra ele usar na plataforma estranha que ele usa, mas sem eu precisar instalar aquele sistema operacional bizarro nas minhas máquinas: compilar pro uíndious direto do meu Linux!...

Como fazer? Não tem mistério, é só pegar o Mingw32, o que no Debian é apenas questão de dar um apt-get. Aí pega o código fonte do ffmpeg (lá no SVN...), e dá o configure certo, algo como

./configure --disable-ffplay --disable-ffserver --enable-gpl --enable-cross-compile --enable-memalign-hack --target-os=windows --prefix=/usr/local/ffmpeg-mingw32 --cross-prefix=i586-mingw32msvc-


Na hora que vc der o make, ele deve chamar o mingw32 lá pra tudo, e pronto, vc vai instalar as bibliotecas do ffmpeg na versão da plataforma alien num diretório lá num /usr/local da vida. Aí é só compilar o seu programa com o mingw32 tb, e dar os -I e -L certos da vida. No meu caso tive uma dificuldade só lá, deu uns erros assim quando fui compilar:

/usr/local/ffmpeg-mingw32/lib//libavformat.a(rtsp.o): In function `udp_read_packet':
/home/nwerneck/src/ffmpeg/ffmpeg/libavformat/rtsp.c:1251: undefined reference to `_select@20'
/home/nwerneck/src/ffmpeg/ffmpeg/libavformat/rtsp.c:1256: undefined reference to `___WSAFDIsSet@8'
(...)


Mas era só mandar linkar tb uma tal -lw2_32. E aí pronto, gerei as versões binárias pro meu professor rodar meu trabalho na arquitetura estranha que ele usa!... Ah, mas não acabou ainda gente. Tem um detalhe muuuito importante que não pode esquecer. Nesse sistema operacional bizarro existe uma coisa que não pode ser omitida. Algo que é até intuitivo, como tudo que a micoshoft faz, não sei como esqueci de fazer isso.

Seu programa executável nesse tal sistema PRECISA ser um arquivo que o nome termine com a string ".exe". Por exemplo, meu programa chamava "insere", aí tem que mudar o nome pra "insere.exe", por exemplo. Se você não fizer isso o programa SIMPLESMENTE NÃO FUNCIONA. O sistema vai dizer que ele "não soube detectar o formato do programa" uma mensagem de erro super trágica assim.

É só isso, se vc se lembrar de mudar o nome, deve dar tudo certo. Sugere-se tb que o nome não tenha mais de 14 caracteres, contando com a extensão, ou seja, 8 de nome + '.' + 3 de extensão. Não sei porque isso... Vai saber o que esse povo inventa nesses sistema propriatas.

Ah, eu compilei o programa com ligação estática tb, pra ter certeza de que tudo ia funcionar... Isso parece tb que é algo bem comum pra quem trabalha nesse outro sistema aí, então não foi feio.


***
DIGRESSÃO:
A propósito, aprendi algo sobre a FFmpeg muito legal, é a primeira biblioteca que eu vejo que simplesmente abandonou a idéia de fazer "releases", eles mandam você pegar direto o SVN e pronto.

FFmpeg has always been a very experimental and developer-driven project. It is a key component in many multimedia projects and has new features added constantly. New, official "releases" are few and far between. In short, if you want to work with FFmpeg, you are advised to go along with SVN development rather than relying on formal releases. SVN snapshots work really well 99% of the time so people are not afraid to use them.


Traduzindo pra ser legal:
FFmpeg sempre foi um projeto muito experimental, e conduzido pelos desenvolvedores. Ela é um componente chave em muitos projetos de multimídia e tem novidades adicionadas contantemente. Lançamentos oficiais novos são poucos e distantes um do outro. Resumindo, se você quiser trabalhar com a FFmpeg, é aconselhável que você siga o desenvolvimento no SVN ao invés de contar com lançamentos formais. Snapshots do SVN funcionam muito bem 99% do tempo, então as pessoa snão tem medo de utilizá-los.


Isso é muito bacana, por faz algum tempo que o desenvolvimento de software livre vinha desafiando essa visão do mundo dos propriatas (praticante da propriataria de software) de que software é desenvolvido num beco escuro na Zona Fantasma por engenheiros ignotos Lovecraftianos, e empacotados quando eles ficam "prontos".


(Engenheiros na zona fantasma)

Ora, os melhores softwares nunca ficam prontos... Eles estão em constante desenvolvimento e novas características vão sendo incorporadas aos poucos. Essa é a realidade da coisa. Encarar tudo como uma escultura, ou construção de uma casa, é um absurdo. (Aliás, quem já fez uma escultura ou saca, sabe que elas nunca ficam realmente prontas tb... É tudo igual, a diferença é que é tão fácil reformar um programa de computador, que fica mais fácil sucumbir à tentação de dar mais e mais umas mexidinhas...)

Os propriatas de software precisam fazer isso pra ganhar dinheiro, e pra fazer marketing, pra vender aquela ilusão do "software garantido", "com a qualidaaaade do fulano". No mundo livre isso não existe. O que existe é a percepção da realidade que software seguro, é o software velho. Ou você escolhe usar um velho que é comprovado mas menos estribado, ou você vive no avant garde, mas se arriscando a tomar uma cacetada de vez em quando. É por isso que vários projetos criam a idéia do "pacote estável" e o "pacote em testes", e ainda a "distribuição de desenvolviemnto", que é o código no SVN do servidor central onde se gerencia o projeto... No Debian isso é bem claro, existem as diferentes fontes de pacotes em que você pode tentar manter o seu sistema (eventulamente você sempre resolve que precisa de um certo pacote do unstable, ou precisa votlar pra uma certa versão antiga de algum outro pacote...)

O FFmpeg aí jogou no lixo isso tudo. É pegar do svn e pronto!... Você consegue imaginar algo parecido sendo feito por propriatas?? Algo como cobrar uma mensalidade pra você acessar lá a versão SVN do Altokod, ou do C0rreu dal? Duvido que rolasse.

O que os propriatas fazem é manter a versão de desenvolvimento deles em segredo, bem escondida na Zona Fantasma (wikipédia se vc ainda não sabe do que se trata). Aí dá essa ilusão de que "não interessa" aos usuários mundanos. No mundo livre todas versões de tudo tão sempre à disposição. Aí o que acontece? As pessoas vivem angustiadas por se depararem com o comprometimento entre o novo e o seguro... Aí eu pergunto, você realmente prefere viver na alienação?... Ignorance is bliss??...

No comments: