kategorie:

menu:


Kamera m5602 a Skype

15.09.2008   ::    téma: Linux

…aneb už mě uvidíte!

Posledně jsem psal o ošlivé kameře a krásném driveru pro ní. Hlavním důvodem proč jsem se do vývojového procesu driveru zapojoval bylo, že jsem chtěl kameru používat při kecání přes Skype. Ten totiž od verze 2.0 beta pro Linux podporuje video rozhovory.

V ideálním světě by stačilo zavést modul pro kameru, zapnout Skype a kecat. Jenže ten náš svět má do toho ideálního hodně daleko… Z kamery m5602 tečou data v bayer formátu ale Skype akceptuje (tuším) pouze formát rgb24.

Konverze formátů v uživatelském prostoru pomocí libv4l

Převádět video formáty přímo v modulu, tedy v jádře, není příliš žádoucí. Takové věci je lepší dělat mimo jádro, v uživatelském prostoru. K tomu se přímo nabízí knihovna libv4l, která poskytuje standardizovanou vrstvu aplikacím pro komunikaci s video 4 linux kompatibilními ovladači v jádře (možná jsem to nepopsal přesně…).

Tímto problémem se naštěstí už zabýval Hans de Goede a implementoval konverzi z rozličných video formátů, včetně různých variant bayer-u, do rgb24 nebo yuv420. Jeho libv4l knihovnu si můžete stáhnout z http://people.atrpms.net/~hdegoede/. Pár slov o její funkci a budoucnosti sepsal Hans do slidů (pdf) prezentovaných na Linux Plumbers Conference 2008 (LPC/2008).

Jak knihovnu zkompilovat a použít je popsáno ve wiki projektu ALi m560× Linux Driver.

Já zde popíšu svůj postup pro amd64 a 32bit Skype:

Nejdříve zkompilovat knihovnu jako 32 bit:

make clean
make CFLAGS="-m32" LDFLAGS="-shared -m32"

poté nainstalovat (Já ji instaluji do odděleného adresáře v home složce. Přeci jen, je to vývojová záležitost.)

make install PREFIX=~/lib/libv4l_32

Poté nainstalovat Skype verze 2.0.0.27 ! Nejnovější Skype mi nechtěl s kamerou pracovat.

A nakonec vytvořit si speciální script na spouštění Skypu s použitím knihovny pro konverzi video formátů. Já ten script mám pojmenován skype-camera v adresáři ~/bin. Jeho obsah:

export LD_PRELOAD=~/lib/libv4l_32/lib/libv4l/v4l1compat.so
export LD_LIBRARY_PATH=~/lib/libv4l_32/lib/libv4l/:~/lib/libv4l_32/lib/:

skype

Poté už jen stačí spustit script skype-camera a někomu zavolat…

Nastavení videa v Linuxovém Skypu

Nastavování jasu a zisku

Protože driver m5602 nemá (se senzorem s5k83a) automatickou úpravu jasu a Skype v Linuxu nemá pro video žádné ovládání, vždy před hovorem si jas upravím ručně. K tomu jsem si napsal script po použití mplayeru s libv4l knihovnou (zkompilovanou jako 64bit).

#!/bin/bash

if [ $# -lt 2 ] ; then
    echo "pouzij dva parametry:"
    echo "   prvni je svetlost v rozsahu -100 do 100"
    echo "   to druhy je zisk v rozsahu 0 az 100"
    exit
fi


export LD_PRELOAD=~/lib/libv4l_64/lib/libv4l/v4l1compat.so
export LD_LIBRARY_PATH=~/lib/libv4l_64/lib/libv4l/:~/lib/libv4l_64/lib/:

exec="mplayer tv:// -tv driver=v4l2:device=/dev/video0:brightness=$1:gain=$2 -fps 30 "

echo $exec
`echo $exec`