2004-01-24

_ kernel-2.4.24 で ELSA EX-VISION 500TV にて mencoder で録画する設定


日経Linux誌に執筆した記事は、2.4.22 を対象に記述したので補足です。

kernel の再構築
# cd /usr/src/
# tar jxvf linux-2.4.24.tar.bz2
# rm linux-2.4
(# rm linux)
# ln -s linux-2.4.24 linux-2.4
# ln -s linux-2.4.24 linux
 
# ln -s /usr/src/linux/include/asm-i386 /usr/include/asm
# ln -s /usr/src/linux/include/linux /usr/include/linux
ここまでが、下準備 として kernel-2.4.24 の展開と symlink の張り直しです。
展開した kernel-2.4.24 に V4L2パッチ(含むsaa7134ドライバ)を適用します。

http://bytesex.org/patches/2.4.24-1/
patch-2.4.24-rc1-kraxel.gz

で動作することを確認できました。以下の手順です。
# gunzip patch-2.4.24-rc1-kraxel.gz
# patch -p0 < patch-2.4.24-rc1-kraxel
 
# cp ./linux-2.4.20-8/configs/kernel-2.4.20-i686.config ./linux/.config
 
# cd ./linux
# make menuconfig
  Loadable module support ---> [ ] Setversion information on all module symbols
  Processor type and features ---> (Pentium4) Processor family
  Multimedia devices ---> Video For Linux ---> [M] SAA7134 Video For Linux (NEW)
kernel を make する前にソースを2箇所、訂正する部分があります。

1) /usr/src/linux/drivers/media/video/tuner.c の 232行目を修正します。
VHFしか表示できないので、UHF帯も表示できるようにします。
	{ "HITACHI V7-J180AT", HITACHI, NTSC,
修正前	  16*170.00, 16*450.00, 0x01,0x02,0x00,0x8e,940 },
	                                      ^^^^
修正後	  16*170.00, 16*450.00, 0x01,0x02,0x08,0x8e,940 },
2) /usr/src/linux/drivers/media/video/saa7134-cards.c 477行目〜496行目 を編集します。
音がでないためです。
変更前
 
	[SAA7134_BOARD_ELSA_500TV] = {
		.name           = "ELSA EX-VISION 500TV",
		.audio_clock    = 0x00187de7,
		.tuner_type     = TUNER_HITACHI_NTSC,
		.inputs         = {{
			.name = name_svideo,
			.vmux = 7,
			.amux = LINE1,
		},{
			.name = name_tv,
			.vmux = 8,
			.amux = TV,
			.tv   = 1,
		},{
			.name = name_tv_mono,
			.vmux = 8,
			.amux = LINE2,
			.tv   = 1,
		}},
        },
変更後
 
	[SAA7134_BOARD_ELSA_500TV] = {
		.name           = "ELSA EX-VISION 500TV",
		.audio_clock    = 0x00187de7,
		.tuner_type     = TUNER_HITACHI_NTSC,
		.inputs         = {{
			.name = name_svideo,
			.vmux = 7,
			.amux = LINE1,
		},{
			.name = name_tv,
			.vmux = 8,
			.amux = LINE2,
			.tv   = 1,
		}},
        },
ここで通常の手順で、kernel の再構築を行います。
# cd /usr/src/linux
# make dep ; make bzImage
# make modules ; make modules_install
# installkernel 2.4.24 ./arch/i386/boot/bzImage System.map
# cd /boot/
# mkinitrd -f initrd-2.4.24.img 2.4.24
lilo や grub の、ブートローダの設定ファイルを編集しておきましょう。

/etc/modules.conf の内容は、サウンド関連のみに限っては、kudzu が検出した設定、
alias sound-slot-0 ymfpci
post-install sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1 || :
pre-remove sound-slot-0 /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1 || :
(これは、YMF724の場合です。)
で構いませんが、/etc/rc.local に以下を追記しないと、必要な module が読み込まれないようです。
# For Sound
insmod /lib/modules/2.4.24/kernel/drivers/sound/soundcore.o
これで再起動できる事を確認します。

_ saa7134.o の読み込み


/etc/rc.local に以下の様に記述します。
# For SAA7130/34
insmod /lib/modules/2.4.24/kernel/drivers/media/video/videodev.o
insmod /lib/modules/2.4.24/kernel/drivers/media/video/ir-common.o
insmod /lib/modules/2.4.24/kernel/drivers/media/video/v4l1-compat.o
insmod /lib/modules/2.4.24/kernel/drivers/media/video/v4l2-common.o
insmod /lib/modules/2.4.24/kernel/drivers/media/video/video-buf.o
insmod /lib/modules/2.4.24/kernel/drivers/media/video/btcx-risc.o
 
insmod /lib/modules/2.4.24/kernel/drivers/i2c/i2c-core.o
insmod /lib/modules/2.4.24/kernel/drivers/i2c/i2c-dev.o
insmod /lib/modules/2.4.24/kernel/drivers/i2c/i2c-algo-bit.o
insmod /lib/modules/2.4.24/kernel/drivers/i2c/i2c-algo-pcf.o
insmod /lib/modules/2.4.24/kernel/drivers/i2c/i2c-proc.o
 
insmod  /lib/modules/2.4.24/kernel/drivers/media/video/tuner.o type=40
insmod  /lib/modules/2.4.24/kernel/drivers/media/video/tvaudio.o tda9840=0 ta8874z=1
insmod  /lib/modules/2.4.24/kernel/drivers/media/video/saa7134.o card=15
 
# For HDD Recording
chown video:video /dev/video /dev/video0 /dev/video1 /dev/audio /dev/dsp /dev/mixer
chmod 666 /dev/video /dev/video0 /dev/video1 /dev/audio /dev/dsp /dev/mixer
もう一度、再起動すれば ELSA EX-VISION 500TV が使用可能になっています。

_ テレビを観よう


何度も長いコマンドを打つのは面倒なので、シェルスクリプトを用意してみましょう。

/home/video/bin/tv.sh
#! /bin/sh
v4lctl -c /dev/video0 setnorm NTSC
mplayer -vo x11 -tv driver=v4l:width=640:height=480:norm=ntsc:input=1:amode=1:chanlist=japan-bcast:channel=$1 tv://
としました。XV(X Video Extension)が有効なビデオカードであれば -vo x11 は不要で、しかも全画面表示が可能です。
$ chmod 755 bin/tv.sh
で実行権を与えます。40チャンネルを観たいのあれば、
$ ./bin/tv.sh 40
とします。終了後に音声だけが残ってしまうので、
/home/video/bin/stop_snd.sh
#! /bin/sh
sudo /sbin/rmmod saa7134
sudo /sbin/insmod  /lib/modules/2.4.24/kernel/drivers/media/video/saa7134.o card=15
をラウンチャに登録してクリックで消すようにしています。
録画鯖用途であれば、これでも不自由しないのです。

_ 録画します。


/home/video/bin/saa_rec.sh
#!/bin/sh
v4lctl -c /dev/video setnorm NTSC
/usr/bin/mencoder -tv driver=v4l:input=1:width=640:height=480:norm=NTSC:forceaudio:amode=1:chanlist=japan-bcast:audiorate=48000:channel=$1
-ovc lavc -lavcopts vcodec=mpeg4:vbitrate=8000 -oac mp3lame -lameopts cbr:br=128:vol=5:aq=0 -endpos 00:$2:00 tv:// -o /home/video/$3
sudo /sbin/rmmod saa7134
sudo /sbin/insmod  /lib/modules/2.4.24/kernel/drivers/media/video/saa7134.o card=15
というスクリプトで、とりあえず録画ができます。
実行時に与えるパラメータは チャンネル, 録画時間(分), ファイル名 の3つです。
40チャンネルを、30分間であれば、
$ ./bin/saa_rec.sh 40 30 test.avi
で録画できます。
映像と音声のずれも起きない指定になっています。
再生には、
$ gmplayer test.avi
などとしましょう。Fusion878A よりもくっきりした綺麗な映像です。

玄人志向の SAA7130-TVPCI も使用できますが、モノラルチューナなので注意しましょう。
Linux で使用できる、SAA7130/34 で、ステレオチューナ搭載品は、ELSA 500TV が現状ではベストです。

録画ツール、[ webmencoder ]で、Fusion878A ともども、サポートしていますので、よろしく。
;; と、さりげなく宣伝させてくださいな (w

_ tdiary テーマ一覧 HTML版


from ふぇみにん日記

便利です :-)
かずひこさんには、お世話になりっぱなしです。感謝しております m(__)m

_ 静音キューブ系PC Fur Fusion


おぉ、カッコいいじゃない。
ユニークなデザインの静音キューブ系PCが2モデル展示中
Socket478 な これが(・∀・)イイ!

本日のツッコミ(全1件) [ツッコミを入れる]
# すずき (2004-01-29 00:05)

[1/28補足] ELSA EX-VISON 500TV で audiorate=48000 を指定すると、映像と音声の同期が狂う模様です。削除してください。
cbr 指定はそのままで構いません。
;; Fusion878A では、audiorate=48000, cbr ともに必要です。
いじょ。

[]