#freeze
TITLE: Linux OVCam Drivers の カーネル2.6.27用パッチ(自家製)
RIGHT:初出 2010-5-4
RIGHT:最終更新 2010-5-4
LEFT:
サポートするチップが古くなったことと、Video for Linux 1がobsoleteになってしまったことで、
「[[Linux OVCam Drivers:http://ovcam.org/ov511/]]」は数年間更新されず、殆ど忘れ去られた状態になっています。
#br
私は2001年に、ov511+チップが入った「[[ノバック USB CATCH TV:http://www.novac.co.jp/products/hw-discon/nv-ut/nv-us130h/index.html]]」を購入しました。製造元[[Animation Technologies:http://www.lifeview.com.tw/]]での製品名は「Lifeview USB Life TV」だと思います。
たしか2005年くらいまでは[[Linux OVCam Drivers:http://ovcam.org/ov511/]]を使ってLinux上でTVを視聴(ちょい視程度ですが)していたのですが、その後はコンパイルが通らなくなったことと、元々画質が非常に低いことから、全く使用していませんでした。
#br
このほど、捨てようかなとも思ったのですが、思い返し、最新カーネル用のパッチを作成してみることにしました。これでテレビを視たいとはあまり思わないのですが、古いデジカメからQVGAの映像を入力して何らかの警報システム等を作ることもできると思ったからです。
#br
まだ同一ハードを持っていてこのページの情報が直接役立つ方はほんの一握りだと思いますが、その他の古いマルチメディア・デバイス用のドライバを最近のカーネルで利用したい方にとっても参考として少しは役立つかもしれません。
#br
実際にパッチの作成をやってみると、予想していたことですが、''ほんとうの最新カーネル''用のパッチは作成できませんでした。
''2.6.27''あたり''(※)が[[''Linux OVCam Drivers'':http://ovcam.org/ov511/]]を利用可能な限界です''。
※:2.6.28,2.6.29は確認していません。
#br
2.6.30ではVideo 4 Linux 1のサポートが縮小されています。(CONFIG_VIDEO_V4L1_COMPATをyにすると自動的に__MIN_V4L1がdefineされる仕様となっています。)
2.6.31ではi2cのレガシーサポートが縮小されています。(i2c_adapter構造体が簡素化されて以前との互換性がなくなりました。)
#br
''作成したパッチ''(openSUSE 11.1上で作成したもの)
''ダウンロード'' &ref(ov511-2.32-for-2.6.27.45-0.1-default.patch,nolink);
※tuner.cは[[ノバック USB CATCH TV:http://www.novac.co.jp/products/hw-discon/nv-ut/nv-us130h/index.html]]専用のカスタマイズをおこなっていてチューナーの自動認識をオフっています。
#br
''パッチをあてる対象のドライバ・ソース''(Linux OVCam Driversのサイトから)
''ダウンロード'' [[ov511-2.32.tar.bz2:http://ovcam.org/ov511/download/2.xx/distros/ov511-2.32.tar.bz2]]
#br
#contents
* 環境構築(openSUSE 11.1の場合) [#mb5c16d3]
** ドライバのコンパイル [#h21f34da]
ドライバをコンパイルする為にはカーネルソースが必要です。標準の環境にも一部のカーネルヘッダファイルがインストールされていますが、それでは足りません。ただしディストリのカーネル本体に手を加える必要はありませんのでカーネルを再コンパイルする必要はありません。prepareまではおこなう必要があります。

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

** 同名ドライバモジュールの事前退避(もしくは削除) [#medd1cfc]
ov511.ko, ovcamchip.ko, tuner.koの3つのドライバファイルについてはディストリのカーネルにも同名のファイルが存在します。
元々インストールされている3つのファイルは退避しておくべきです。

''ダウンロード'' &ref(move.sh,nolink);
[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/

** ドライバモジュールのインストール [#bc1e9eb5]
 # make install
するだけです。

** ドライバモジュール関係の設定 [#wffb92e2]
Lifeview USB Life TVを対象とする場合の一例です。
openSUSEでの設定例です。
#br
[/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:http://www.novac.co.jp/products/hw-discon/nv-ut/nv-us130h/index.html]]専用のカスタマイズを加えているのでUSB CATCH TVの場合にはtunerドライバにオプションを与える必要はありません。その代わりtunerの自動認識はオフになっています。

* Lifeview USB Life TVの視聴の方法 [#jedff219]
Lifeview USB Life TVは、その外部入力にTVチューナーからの出力を入れるという少し特殊な仕様なので、tvtimeやxawtvでTV視聴することはできないと思います(詳しくは調べていません)。
以前から私はmplayerで視聴していました。
以下のようなスクリプトを使えば使い勝手が良くなると思います。
ちなみにopenSUSE 11.1標準のzenityは最前面にならないので私はopenSUSE 11.2用のzenityを入れました。
''ダウンロード'' &ref(channel-select.sh,nolink);
[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上での画質 [#j0cea4b0]
Windows上での画質よりも悪いです。Windows上だと多少汚いもののQVGAの画質がちゃんと出ているんですが、Linux上だと形式的にはQVGAでも、テロップが全く読めないくらいなので実質的にはQQVGA(160x120)の画質も怪しいというところです。原因はもちろんLinux OVCam Driversにあります。Windows用のドライバのソースが公開されていれば、その真似が出来たのでしょうが...
#br
上で少し触れましたが、ディストリ標準のカーネルにもov511用のドライバが含まれています。でもそのソースのバージョンは1.65あたりで、かなり古いです。そのドライバでLifeview USB TVを試用すると、当然TVチューナーは利用できないものの、デジカメの映像をコンポジット端子から"一応は"入力できました。しかしモノクロだし、ちゃんと同期していないし、全然駄目な画質でした。

#br
* ご要望、ご意見、質問を下のフォームにどうぞ&br;(でもここより、[[掲示板>board]]や[[書き込みフォーム>form]]のページに書いて頂いた方が気づき易いと思います。) [#x095389a]
#areaedit(nofreeze,noauth,btn:[修正(書き間違った場合にご利用下さい)])
#comment
#areaedit(end)