Kamerka pod Linuksem

Żonka ostatnio wspominała, że chciałaby mieć kamerkę internetową. Ja lubię
takie zabawki, więc od razu podchwyciłem pomysł i postanowiłem jej kamerkę
kupić. No to zajrzałem na Allegro co tam mają… cała masa do wyboru… no to
biorę parę z brzegu i Googlam za ich wsparciem w Linuksie. Ciężko to idzie. Nic
na temat wsparcia w Linuksie dokładnie tych urządzeń co znalazłem na Allegro w
Google nie było. Jak
coś znalazłem, co miało wsparcie, to albo tego na Allegro nie było, albo
kosztowało więcej niż byłem w stanie zapłacić. Na Allegro był tak wielki wybór,
że nie sposób było sprawdzić wszystkiego. Podobnie na wygooglanych listach
sprzętu obsługiwanego przez Linuksa. Oczywiście każdy producent chipsetu
zrobił interfejs po swojemu (urządzenia oparte o standard UVC się dopiero
pojawiają i do tych najtańszych nie należą), a który chipset jest w której
kamerce to dopiero po podłączeniu można stwierdzić…

Na Allegro i tak nie chciałem tego kupować (w końcu to kot w worku),
uznałem, że wybiorę się do sklepu. Normalnie wziąłbym ze sobą listę
obsługiwanego sprzętu, żeby porównać z tym co jest na półkach. Ale dostępne
listy są olbrzymie… a i tak niekompletne… Poszedłem więc bez listy, parę
popularniejszych nazw zapamiętałem, a w ogóle, to uznałem, że może trafię. I
umówię się ze sprzedawcą, że jak nie uruchomię tego, to zwrócę…

No więc przyszedłem do sklepu. Przerażanie w oczach – chyba z
dziesięć różnych kamerek na półce, żadna nie przypomina niczego o czym
czytałem… No nic, mówię, że chcę kamerkę i nieśmiało dodaję ale taką,
żeby działała pod Linuksem
. A sprzedawczyni, ku mojemu zaskoczeniu, bierze
jedną kamerkę z półki (i to chyba taką, jakiej żonka oczekuje – na
laptopa, z klipsem) i mówi, że ta będzie na pewno działać. Okazało się, że był
tam już jeden klient z takimi wymaganiami, przyszedł z laptopem i na miejscu
sprawdził. Zapytałem jeszcze o parametry, bo kosztowała mniej niż byłem
przygotowany na to wydać. Pani zaproponowała, że może podłączyć do jakiegoś
laptopa i pokazać. Już brała jednego laptopa, ale stwierdziła: Ale ten ma
zainstalowaną tę kurewską… oj, przepraszam… na nim jest ta Vista
.
Kobieta była rzeczywiście przerażona, że jej się takie słowo wymsknęło. Widać
szczerze. :-D

W końcu dała mi jakiegoś laptopa z Windows XP, żebym sobie podłączył i sprawdził.
Taaa… równie dobrze mogłaby mnie posadzić przed sterami helikoptera, żebym
się przeleciał ;-). Ale jakoś sobie w tym egzotycznym systemie, i
to jeszcze z jakimiś dodatkowymi przeszkadzajkami, poradziłem. Kamerka
zadziałała, obraz był zadowalający (przynajmniej jak na tą cenę). Biorę.

Za sterownikami rozglądałem się wcześniej, więc jakiś miałem już w pracy
skompilowany, dla najnowszego kernela PLD AC. Okazało się, że pasuje do tej
kamerki. Załadował się bez problemu i xawtv pokazało obraz. Ale Ekiga
marudziła, że nie może otworzyć urządzenia. Bałem się, że kamerka z Ekigą
niezgodna (może dlatego, że JPEG)… ale okazało sie, że po prostu ten
sterownik to V4L1, a w Ekidze miałem załadowane tylko V4L2. Doinstalowałem
libpw-vide-v4l i ruszyło!

Teraz trochę danych praktycznych:

  • Kamerka to:
    A4Tech Evo Cam Note
  • Sterownik do niej to: gscpav1
    (wersja: 20070110)
  • Aby ręcznie zbudować ten sterownik na PLD Ac trzeba:
    • Zainstalować pakiet kernel-module-build w wersji zgodnej z
      używanym kernelem (zrobić upgrade kernela i zainstalować najnowszy
      kernel-module-build)
    • Rozpakować źródła sterownika gdzieś w katalogu domowym.
    • Poprawić Makefile:

      Zamienić:

      default:
              $(MAKE) -C $(KERNELDIR) SUBDIRS=$(PWD) CC=$(CC)
      modules

      na (w przypadku używania kernela up, zamienić wszystkie smp na up):

      default:
              mkdir -p o/include/linux
              ln -sf $(KERNELDIR)/config-smp o/.config
              ln -sf $(KERNELDIR)/Module.symvers-smp o/Module.symvers
              ln -sf $(KERNELDIR)/include/linux/autoconf-smp.h
      o/include/linux/autoconf.h
              $(MAKE) SYSSRC=$(KERNELDIR) SYSOUT=$(PWD)/o O=$(PWD)/o -C $(KERNELDIR)
      CC=$(CC) prepare scripts
              $(MAKE) SYSSRC=$(KERNELDIR) SYSOUT=$(PWD)/o O=$(PWD)/o -C $(KERNELDIR)
      SUBDIRS=$(PWD) CC=$(CC) modules
    • Przelogować się na roota, skopiować zbudowany gspca.ko do
      /lib/modules/`uname -r`/misc, zmienić mu właściciela na
      root:root, odpalić depmod -a.

Dopiero teraz zobaczyłem, że w repozytorium PLD jest gspca.spec i
się nawet buduje, więc można zapomnieć o tym, co napisałem wyżej i po prostu
zbudować sobie pakiet. Wersja w specu jakby trochę inna, jeszcze nie sprawdzałem czy
działa, najwyżej trzeba by speca nieco poprawić.

Update: Nagrałem mały testowy filmik, żeby pokazać co kamerka może. No, nie do końca pokazuje on co chciałem – podczas nagrywania obraz stracił nieco na jakości, bo nie znalazłem jeszcze sposobu na nagrywanie z tego w optymalnej jakości. Na bezpośrednim podglądzie w spcaview/xawtv/mplayer obraz jest odrobinę lepszy.

25 uwag do wpisu “Kamerka pod Linuksem

  1. Ech, nasuwa mi się taka konstatacja: że jeśli na user-friendly dystrybucjach Linuksa trzeba by było robić takie hocki-klocki jakie opisałeś, żeby kamerka działała, to nadal wiele osób będzie to odstraszało od Linuksa.

    Polubienie

  2. Krystek: chyba coś przespałem, ale czy PLD kiedykolwiek miało być userfriendly?

    W takim ubuntu pewnie by poszło od kliknięcia, ostatnio podłączyłem aparat i ku mojemu zaskoczeniu było jak w windowsie 🙂

    Polubienie

  3. To było ogólne spostrzeżenie: chodziło mi o dystrybucje dla przeciętnego użytkownika. Wcale bym się nie zdziwił, gdyby dla takiej kamerki dla Linuksa sterowniki trzeba by było napisać sobie samemu 😉

    Polubienie

  4. Krystek: Sterownik, którego użyłem, nie jest jakiś wyszukany. Nie jest włączony do źródeł kernela którego używam, ale bez problemowo z nim działa. Nie widziałem też żadnych dziwnych ograniczeń licencyjnych. Więc sądzę, że w dystrybucjach nastawionych na użytkownika ten sterownik już jest. A jak jest to po prostu działa.
    Do tego widziałem, że sporo sterowników jest już dołączona do źródeł nowszych kerneli. Więc zapewne duża ilość kamerek „po prostu zadziała” w user-friendly dystrybucjach. Oczywiście pozostaje dużo innych, które nie zadziałają — taka polityka producenta. Mam nadzieję, że USB Video Class (coś do kamerek, jak USB Storage do dysków) to w końcu zmieni.
    A druga część mojego wpisu jest skierowani do tych, którzy z różnych powodów będą chcieli lub musieli sami nad tym zapanować. Przy okazji pokazałem jak w środowisku PLD Ac budować ręcznie dodatkowe moduły kernela.

    Polubienie

  5. Ekiga sobie radzi jeśli jej się zachce – ustawiłem wszystkie suwaki na zero po czym zacząłem się bawić jasnością – tylko trzeba przytrzymać kliknięty suwak nad miejscem i czasem delikatnie masować ;>

    Polubienie

  6. A możecie podrzucić jakiś krótki film nagrany tą kamerką? Ciekawi mnie czy rzeczywiście wyciąga te 640×480 i robi to płynnie.

    Chciałbym sobie zrobić przenośny rejestrator do motocykla i najtańsze na co wpadłem to jakiś zajechany laptop bez matrycy i baterii i do tego kamera na USB 🙂

    Polubienie

  7. AlchemyX: spróbuję coś przygotować.

    Ale do motocykla to Ci się raczej nie nada, ze względu na ten ograniczony zakres czułości: w słoneczny dzień zarejestrujesz jedynie wielkie białe plamy.

    Polubienie

  8. Mnie to wygląda na kwestie sprzętową. Sterowniki mają regulację jasności kontrastu (które jednak działają tylko w niektórych aplikacjach, jak spcaview), ale przyciemnienie obrazu w ten sposób nie ukazuje detali w prześwietlonych fragmentach obrazu. Wydaje mi się, że parametry ekspozycji są ustawione na sztywno, przy założeniu, że oświetlenie jest dość kiepskie (myślę że to rozsądne założenie dla webcama). No cóż… kupiłem tanie badziewie, ale wiedziałem o tym. 🙂

    Polubienie

  9. Mam wrażenie, że obraz zwalnia i przyspiesza co chwila, albo może po prostu pora spać ;-). Jakość ogólnie jest zadowalająca.

    PS. Widzę, że jak na Paskudę przystało to i ogon jej wyrósł 😛

    Polubienie

Co o tym sądzisz?