2016年2月10日水曜日

webcam C500をv4l2で動かそうにも/dev/video0が表示されない

webcamをLinuxで制御することに興味のない方は読み飛ばしてください.

UVC webcamの制御プログラムというと、libusbだとかlibuvcを使うのが今日的なのではないかと思います.それに比較するとやや旧聞に属するのではないかと思うのが、v4l2というVideo for LinuxというAPIを使うやり方です.

libusbやlibuvcだとAPIに隠蔽されてioctl()が奥の方にあって何をやっているのかが判りにくいのですが、v4l2だとioctl()をcallするのがミエミエだとか、バッファを操作するのがミエミエだったりするので動作を知るには適しているかもしれないと思い、物は試しとサンプルプログラムを動かしてみました.

【サンプルプログラム】
こちらのcapture.cというソースコードは、私の環境(kona-linux3.0)では下記コマンドで一発でコンパイルできました.オプションのstd=c99は必須です.
https://gist.github.com/bellbind/6813905
gcc -std=c99 capture.c -ljpeg -o capture
capture.cの中でincludeしている、videodev2.h、jpeglib.h は私の環境(kona-linux3.0)ではデフォルトでinstallされていました.

ただし一つ問題が.
このプログラムがopenしようとする/dev/video0が私の環境では存在せず、作らなければいけませんでした.ちなみに私の環境では、/dev/bus/usb/...にUSBデバイスが見えるようになっていますが、これをopenしてもioctl()が不正でcaptureは動きませんでした.

【/dev/video0の作成】
こちらのページを参考にしました.
http://www.tldp.org/HOWTO/Webcam-HOWTO/dev-intro.html
やったことはぶっちゃけこれだけだと思います.
mknod /dev/video0 c 81 0
chmod 666 /dev/video0
chown root.video /dev/video0
その後にwebcam C500を挿せば/dev/video0 が存在するようになりました.

試行錯誤の過程で
rm /dev/video0
modprobe -a uvcvideo
などもやったけれど、これらが奏功した気はしません.上手く行かなかったら試してちょうだい.

【captureを動かす】
captureを走らせると、result.jpgというファイルが出来ます.これはwebcamが撮影したスチル画像です.

【v4l-utils】
こちらのページで解説されているv4l-utilsは、webcamを操作したり情報をゲットするのになにかと便利です.
http://thr3a.hatenablog.com/entry/20150820/1440075703

かしこ


人気ブログランキングへ

0 件のコメント:

コメントを投稿