Linux OVCam Drivers の カーネル2.6.27用パッチ(自家製)

Last-modified: 2010-05-21 (金) 01:52:51
初出 2010-5-4
最終更新 2010-5-4
サポートするチップが古くなったことと、Video for Linux 1がobsoleteになってしまったことで、
Linux OVCam Drivers」は数年間更新されず、殆ど忘れ去られた状態になっています。
 

私は2001年に、ov511+チップが入った「ノバック USB CATCH TV」を購入しました。製造元Animation Technologiesでの製品名は「Lifeview USB Life TV」だと思います。
たしか2005年くらいまではLinux OVCam Driversを使ってLinux上でTVを視聴(ちょい視程度ですが)していたのですが、その後はコンパイルが通らなくなったことと、元々画質が非常に低いことから、全く使用していませんでした。

 

このほど、捨てようかなとも思ったのですが、思い返し、最新カーネル用のパッチを作成してみることにしました。これでテレビを視たいとはあまり思わないのですが、古いデジカメからQVGAの映像を入力して何らかの警報システム等を作ることもできると思ったからです。

 

まだ同一ハードを持っていてこのページの情報が直接役立つ方はほんの一握りだと思いますが、その他の古いマルチメディア・デバイス用のドライバを最近のカーネルで利用したい方にとっても参考として少しは役立つかもしれません。

 

実際にパッチの作成をやってみると、予想していたことですが、ほんとうの最新カーネル用のパッチは作成できませんでした。
2.6.27あたり(※)がLinux OVCam Driversを利用可能な限界です
※:2.6.28,2.6.29は確認していません。

 

2.6.30ではVideo 4 Linux 1のサポートが縮小されています。(CONFIG_VIDEO_V4L1_COMPATをyにすると自動的に__MIN_V4L1がdefineされる仕様となっています。)
2.6.31ではi2cのレガシーサポートが縮小されています。(i2c_adapter構造体が簡素化されて以前との互換性がなくなりました。)

 

作成したパッチ(openSUSE 11.1上で作成したもの)
ダウンロード fileov511-2.32-for-2.6.27.45-0.1-default.patch
※tuner.cはノバック USB CATCH TV専用のカスタマイズをおこなっていてチューナーの自動認識をオフっています。

 

パッチをあてる対象のドライバ・ソース(Linux OVCam Driversのサイトから)
ダウンロード ov511-2.32.tar.bz2

 

環境構築(openSUSE 11.1の場合)

ドライバのコンパイル

ドライバをコンパイルする為にはカーネルソースが必要です。標準の環境にも一部のカーネルヘッダファイルがインストールされていますが、それでは足りません。ただしディストリのカーネル本体に手を加える必要はありませんのでカーネルを再コンパイルする必要はありません。prepareまではおこなう必要があります。

ドライバのmakeが通ってもすぐにmake installしないで下さい。
カーネルソースのパスなどは適宜合わせて下さい。

同名ドライバモジュールの事前退避(もしくは削除)

ov511.ko, ovcamchip.ko, tuner.koの3つのドライバファイルについてはディストリのカーネルにも同名のファイルが存在します。
元々インストールされている3つのファイルは退避しておくべきです。

ダウンロード filemove.sh
[move.sh]

#!/bin/sh
cd /lib/modules
mkdir -p taihi.`uname -r`/kernel/drivers/media/video/ovcamchip/
mv `uname -r`/kernel/drivers/media/video/ovcamchip/ovcamchip.ko \
taihi.`uname -r`/kernel/drivers/media/video/ovcamchip/
mv `uname -r`/kernel/drivers/media/video/ov511.ko \
taihi.`uname -r`/kernel/drivers/media/video/
mv `uname -r`/kernel/drivers/media/video/tuner.ko \
taihi.`uname -r`/kernel/drivers/media/video/

ドライバモジュールのインストール

# make install

するだけです。

ドライバモジュール関係の設定

Lifeview USB Life TVを対象とする場合の一例です。
openSUSEでの設定例です。

 

[/etc/init.d/after.local]

#!/bin/sh
# for lifeview CATCH TV
modprobe ov511       # USB Bridge
modprobe saa7111-new # Video Input
modprobe tda7313     # Audio
modprobe tuner       # Tuner

[/etc/modprobe.conf.local]

#
# please add local extensions to this file
#
# for lifeview CATCH TV
options ov511 compress=1

tuner.cにはノバック USB CATCH TV専用のカスタマイズを加えているのでUSB CATCH TVの場合にはtunerドライバにオプションを与える必要はありません。その代わりtunerの自動認識はオフになっています。

Lifeview USB Life TVの視聴の方法

Lifeview USB Life TVは、その外部入力にTVチューナーからの出力を入れるという少し特殊な仕様なので、tvtimeやxawtvでTV視聴することはできないと思います(詳しくは調べていません)。
以前から私はmplayerで視聴していました。
以下のようなスクリプトを使えば使い勝手が良くなると思います。
ちなみにopenSUSE 11.1標準のzenityは最前面にならないので私はopenSUSE 11.2用のzenityを入れました。
ダウンロード filechannel-select.sh
[channel-select.sh]

#!/bin/bash
tvwatch_bcast()
{
killall mplayer
sleep 0.1
mplayer -monitoraspect 4:3 -x 640 -y 480 -vo xv -tv forcechan=2:driver=v4l:\
width=320:height=240:outfmt=i420:norm=NTSC:input=2:chanlist=japan-bcast:\
volume=60000 -vc rawi420  tv://$1 &
}
tvwatch_cable()
{
killall mplayer
sleep 0.1
mplayer -monitoraspect 4:3 -x 640 -y 480 -vo xv -tv forcechan=2:driver=v4l:\
width=320:height=240:outfmt=i420:norm=NTSC:input=2:chanlist=japan-cable:\
volume=60000 -vc rawi420  tv://$1 &
}
tvwatch_mute_and_stop()
{
killall mplayer
sleep 0.3
mplayer -vo null -tv forcechan=2:driver=v4l:\
width=320:height=240:outfmt=i420:norm=NTSC:input=2:chanlist=japan-cable:\
volume=0 -vc rawi420  tv://0 &
sleep 0.3
killall mplayer
}
tvwatch_unmute_and_restore()
{
killall mplayer
sleep 0.1
mplayer -monitoraspect 4:3 -x 640 -y 480 -vo xv -tv forcechan=2:driver=v4l:\
width=320:height=240:outfmt=i420:norm=NTSC:input=2:chanlist=japan-cable:\
volume=60000 -vc rawi420 tv://0 &
}
while true
do
ret=$(zenity --list --title "TV視聴" --text "チャンネルを選んで下さい" --column\
 "チャンネル" "mute & 視聴stop" "unmute & 画面復帰" "2ch" "3ch" "4ch" "5ch" \
"6ch" "8ch" "10ch" "11ch" "12ch" "51ch" "54ch" "56ch" "57ch" "59ch" "60ch")
case "${ret}" in
	mute\ \&\ 視聴stop)tvwatch_mute_and_stop;exit;;
	unmute\ \&\ 画面復帰)tvwatch_unmute_and_restore;continue;;
	2ch)tvwatch_bcast 2;continue;;
	3ch)tvwatch_bcast 3;continue;;
	4ch)tvwatch_bcast 4;continue;;
	5ch)tvwatch_bcast 5;continue;;
	6ch)tvwatch_bcast 6;continue;;
	8ch)tvwatch_bcast 8;continue;;
	10ch)tvwatch_bcast 10;continue;;
	11ch)tvwatch_bcast 11;continue;;
	12ch)tvwatch_bcast 12;continue;;
	51ch)tvwatch_cable 51;continue;;
	54ch)tvwatch_cable 54;continue;;
	56ch)tvwatch_cable 56;continue;;
	57ch)tvwatch_cable 57;continue;;
	59ch)tvwatch_cable 59;continue;;
	60ch)tvwatch_cable 60;continue;;
	*)exit;;
esac
done

Lifeview USB Life TVのLinux上での画質

Windows上での画質よりも悪いです。Windows上だと多少汚いもののQVGAの画質がちゃんと出ているんですが、Linux上だと形式的にはQVGAでも、テロップが全く読めないくらいなので実質的にはQQVGA(160x120)の画質も怪しいというところです。原因はもちろんLinux OVCam Driversにあります。Windows用のドライバのソースが公開されていれば、その真似が出来たのでしょうが...

 

上で少し触れましたが、ディストリ標準のカーネルにもov511用のドライバが含まれています。でもそのソースのバージョンは1.65あたりで、かなり古いです。そのドライバでLifeview USB TVを試用すると、当然TVチューナーは利用できないものの、デジカメの映像をコンポジット端子から"一応は"入力できました。しかしモノクロだし、ちゃんと同期していないし、全然駄目な画質でした。

 

ご要望、ご意見、質問を下のフォームにどうぞ
(でもここより、掲示板書き込みフォームのページに書いて頂いた方が気づき易いと思います。)