ELECT 39: VIDEO. estereografia amb shutter glasses (ulleres 3D)
VLC media player. Compilar des de les fonts
La idea que es persegueix és fer video 3D. És la mateixa idea que la presentació de fotos en 3D, on les shutter glasses es sincronitzen amb un programa fet amb SDL. La mateixa idea, però portada al video. La idea és que he de fer un video (posem per cas amb un frame rate de 40 fps), i que intercali a cada fotograma una imatge per l'ull esquerre i una d'altra per a l'ull dret. He de controlar el codi font, doncs a cada frame he de llençar l'ordre a l'arduino de canvi de polarització en les ulleres 3D, de manera que s'aconsegueixi l'efecte 3D, però ara amb video.
em descarrego la última versió estable: vlc-2.0.6.tar
$ ./configure configure: error: Could not find lua. Lua is needed for some interfaces (rc, telnet, http) as well as many other custom scripts. Use --disable-lua to ignore this error.
$ ./configure --disable-lua
i així anar fent, hi ha diverses llibreries que en principi jo no necessitaré, i que per tant he de deshabilitar. Jo el que cerco és una funcionalitat mínima.
./configure --disable-lua --disable-mad --disable-avcodec --disable-swscale --disable-postproc --disable-a52 configure: error: Package requirements (xcb-shm) were not met: No package 'xcb-shm' found checking for XCB_SHM... no configure: error: Package requirements (xcb-shm) were not met:
$ sudo apt-get install libxcb-shm0-dev checking for XCB_COMPOSITE... no configure: error: Package requirements (xcb-composite) were not met: No package 'xcb-composite' found $ sudo apt-get install libxcb-composite0-dev $ sudo apt-get install libxcb-xv0-dev
Finalment,
$ ./make
El binari es troba dins la carpeta bin/
ls ~/Baixades/vlc-2.0.6/bin ... -rwxrwxr-x 1 joan joan 7853 jul 12 17:28 vlc ...
però diu que no troba plugins. Ho farem d'una altra manera. Primer instal.lo vlc des dels repositoris (no cal, veure més avall), que m'assegura que se m'instal.laran diverses llibreries importants. I després ho configuraré.
sudo apt-get install libavcodec-dev libavformat-dev etc...
$ ./configure --disable-lua --disable-a52 $ make $ cd bin/ $ ./vlc main libvlc error: No plugins found! Check your VLC installation
i la solució no estava en instal.lar paquets que segurament no necessito, ni tampoc instal.lar el paquet Debian. Els plugins sí que els tinc, el que s'ha de fer és:
$ export VLC_PLUGIN_PATH=/usr/lib/v/plugins/
i ara ja puc:
$ ./vlc o bé $ ./vlc /home/joan/arthropoda/videosarthropoda/per_revisar/MVI_3615.MOV
libvlc tutorial
El projecte VLC és gran, i a mi el que m'interessa és la programació del nucli del projecte, la llibreria libvlc. Hi ha un fòrum, hi ha documentació...
tots els fòrums de VLC:
fòrum de libvlc:
documentació i exemples:
Concretament m'interessa el LivVLC_Tutorial:
$ sudo apt-get install libvlc-dev
$ cc example.c -lvlc -o example $ ./example
Compila bé i s'executa bé, però el video http://mycool.movie.com/test.mov no existeix, s'hauria de trobar un exemple.
LibVLC SampleCode SDL
I ara un exemple que funciona. Es tracta d'enviar els frames del video a SDL. Per tal de compilar també he d'incloure la llibreria SDL (Rendering into a custom surface).
$ cc example2.c -lvlc -o example2 `sdl-config --cflags --libs` $ ./example2 ~/arthropoda/videosarthropoda/per_revisar/MVI_3723.MOV $ ./example2 /home/joan/arthropoda/videosarthropoda/Xylocopa_violacea/Xylocopa_violacea/Xylocopa_violacea.mp4
I efectivament es visualitza el video de l'abella. Potser aquest codi ja és un bon punt de partida. El so també funciona, s'ha de comentar la línia "--no-audio", /* skip any audio track */ l Però recordem que això és streaming, i per tant tota la funcionalitat de gestionar i llegir els frames queda oculta dins la funció
libvlc_media_player_play(mp);
i per tant s'haurà de programar a nivell de libvlc per fer el que vull fer, és a dir, llegir la documentació:
Missatge al forum de libvlc:
libvlc and 3D video system I'm a beginner with libvlc. I compiled VLC from source, but I prefer to code around this little piece: http://wiki.videolan.org/LibVLC_SampleCode_SDL (LibVLC SampleCode SDL). I want to drive shutter glasses interfacing my C code with an arduino. I used to do this with a SDL code, but no video, just for viewing my stereo pictures. Now I want to try with video 3D. I have a video interlaced with left and right frames, suppose at 40 fps. In every change of frame I want to trigger a signal to arduino (suppose at this moment just a printf...). I understant that I need to add some lines in the libvlc core and recompile... But before reading all the libvlc documentation some help will be appreciated. Thanks Joan
creat per Joan Quintana Compte, juliol 2013