Linuxで最強のテレビ録画サーバを目指す【4】-ハードウエアMPEG2キャプチャ2-

['05/03/20] CX23416GYC-STVLPでの上部ノイズおよびGV-MVP/RXの音声多重対応などに関する情報を追加
['05/02/20] 対応カードに関する情報を追加
['04/10/16] 初稿
■はじめに
■商品サイクルの速さとLinux
 さて,こちらのページで解説したように,日本国内で 比較的安価かつ容易に入手可能なMPEG2ハードウエアTVキャプチャカードが Linux でも動く ようになりました.これでしばらくはLinuxでのTV録画システムも安泰と思われ,あとは フロントエンドとして活用されるアプリが充実すれば…と,考えていたのですが, その夢は脆くも崩れ去りました

 玄人志向ブランドは基本的に海外メーカー(主に台湾メーカー)から製品を調達して 販売しているブランドなわけですが(一部オリジナル商品もあります),このような関係 もあるためか,需要がそこそこある製品であっても短期間で終息商品となることが多々 見受けられます.例えば先の ITVC16-STVLP を例に挙げますと,ゴーストリデューサや 3DYC 分離チップを搭載した CX23416GYC-STVLP が玄人志向ブランドから発売され, しばらくの間は併売されると思いきや,前者はあっという間に終息.新製品として発売 された後,半年も待たずに入手出来なくなりました.

 OEMメーカーである YUAN を見てみると,これらカードは共に MPG600 という製品名で 売られており,前者は Rev1.0,後者は Rev1.1 となっているようです.感覚的には リビジョンの切り替え以上の大きな仕様変更であるわけですが,OEM 元の事情により 終息になったということなのかもしれません.

 さて,CX23416GYC-STVLP は MPEG2 エンコードチップが ITVC16-STVLP と同じとは言え, その他の周辺チップが大きく変更になっています.ドライバを少し修正して動く見通しは 皆無であり,先のページにまとめた『情報&ドライバの拡張』の旬の時期は あっと言う間に過ぎ去ってしまったのでした.(注:本家に送ったパッチを元に,別カード への対応も進みましたので,こちらの作業は全くの無駄にはなりませんでした.また, 現在の最新版には取り込まれており,ITVC15/16 は一部不具合も報告されていますが, とりあえずはそのままで動くようです)

■ドライバ開発の茨の道
■CX23416GYC-STVLPの入手と挑戦の開始
 ここから暫くは回顧録 :-) が続きます.飛ばして読みたい方はこちら へどうぞ.

 私の場合は既に ITVC16-STVLP を既に確保しているため,故障などが発生しない限りは今すぐに 録画サーバに不都合を来たすことはありませんでした.しかし,新製品の『高画質化機能』に非常 に心惹かれるものがあり,発表と同時に通販で発注.発売とほぼ同時に手元に届きました.早速 ivtv ドライバを試すも当然のように動作せず.Windowsで動作させてみると,ドライバ&アプリの 不具合と申しますか仕様のため,若干問題はありましたが,画質的にはシャープな印象があり,かなり 綺麗にキャプチャ出来ているように思われました.私の場合は CATV 経由でTVを観ているため, 電波受信状況に起因するゴーストに関する影響は殆どありません.しかし,3DYC分離の効果のためか, クロスカラーが抑制されており,輪郭がキリリと締まった感じがしました

■ゴーストリデューサーと3次元YC分離チップ
 さて,実は物が届く前に玄人志向の Web ページの製品写真を観察し,ゴーストリデューサ(以下GR) としてNEC の uPD64031A,YC分離チップ(以下YCS)として同じく NEC の uPD64083 が使用されている であろうことが 分かっていましたので,情報収集とドライバの開発を前倒しで始めました.ところが案の定, データシートの入手には大きな壁がありました.Web上を探し回ってもドライバソースは無く, 参考となりそうな技術情報も無く,製造メーカーのNECエレクトロニクスにデータシートを頂きたい旨 問い合わせをしたところ,1)扱い(パラメータの調整やプログラムによるコントロール)が難しい 2)データシートは版管理をしていて,一般には出していない とのことで門前払いを食らいました

 お返事を頂けたことに関してはありがたいとは思うのですが,1つ目の理由に関してはちょっとなぁ… といった印象を受けます.私の想像ですが,この手の情報を一般に公開してしまうと サポートが面倒になる場合があることや,細かなチップのリビジョンアップ(やバグフィックス) の際にフォローしきれないといったことを考えているのではなかろうかと思います.

 「NDAを結んで頂いて…」のような話を切り出されればある程度この方針に関しても納得するのですが, (開発者を含む)ユーザーに対する体制としては如何なものかなという気がします.オープンソースの コミュニティのパワーが常に完璧と言えるとは思いませんが,このようなコミュニティを 活用してより製品を魅力的にして行こうという姿勢が無いのですから….

 これで正面からの情報入手の道が絶たれたわけですが,捨てる神あれば拾う神あり.各種チップの データシートを有料で提供するとある会社に,これらチップのデータシートがあるとの話を聞き, 早速入会&検索してみました.すると uPD64031A ,uPD64083よりも一世代前の製品になる uPD64082 の データシートが見つかり,入手できました.ただしこの会社の提供するオンラインサービスの使い方に 慣れておらず,入手の際にキャプチャカードがもう1枚買えるだけの金額がかかったのは秘密です :-). ちなみに現在はこの会社から当該のデータシートは入手できません.おそらく何か問題があり, 削除されたのだと思います(NECエレからクレームが行ったのかな?).

 実機が無いので動作検証は出来ませんが,データシートがあればドライバを書くことは出来ます. uPD64083 のデータシートが入手できなかったので uPD64031A と uPD64083 をデジタルで接続する 方法(詳しくは後述しますが,uPD64083 は uPD64031A とデジタルで接続することにより,映像データ の D/A&A/D変換回数を1回削減することが可能となり,ノイズの混入を防ぐことが できるようになっています)等, YCS側のデータシートで確認したいことが出来ませんでしたが,とりあえず入手できた情報で ドライバを書き始めました.そして実機が届いた時点で試してみたところ,ドライバがチップの 存在を認識し,初期化コードの書き込みにも成功しているようです.試しにゴースト除去信号の検出を 行わせたところ,きちんと反応しました.これで第一関門は突破です.

 その後,とりあえず動かすことを目標とし,当初盛り込んでいた細かなパラメータの調整機能 を省き,後述するI2Cキャプチャしたものと同じ初期化シーケンスを行うものをリリースしました.

■ビデオ&オーディオデコーダ
 次なる壁は,今回新たにビデオデコーダ(兼オーディオでコーダ)として採用されたSAA7173です. これは Philips の新製品であり,情報は皆無.正確には Philips の Web サイトにその機能概要が 書かれたカタログがアップされているだけです.Philips に問い合わせを行いますが,こちらは返事が 頂けませんでした.他の方にも問い合わせをお願いしていたところ,『代理店に聞いてくれ』との 返事が届いたとのこと.早速 Philips の国内代理店数社に問い合わせてみたところ,お返事を 頂いた所からは,『新製品であり,チップのサンプルもデータシートもまだ届いていない』とのこと. データシートが入手可能になった際に連絡をするという話を頂きましたが,実は未だに 連絡はいただけていません :-<

 某掲示板での話によると,基本的な部分は SAA7134 とコンパチ(ただし,PCIインターフェイスは 無し)なのではなかろうかとのことなので,この情報を信じて調査を開始します.また,Komoriya氏が Windowsで動かした際の I2C 通信をキャプチャして下さったので,これも参考にしてみます.が,当初は 全く動作せず,前途多難な様相を呈してきました.そして一時は敗色濃厚な気配さえ漂いました….

 Komoriya氏は CX23416GYC-STVLP よりも動く可能性が高い(ビデオでコーダがSAA7115)と考えられる I/O DataのGV-MVP/RXを入手したとのこと.私はさらに難易度の低そうなTRANSGEAR 5000TVAOpen VA2000MAX-SNT6を調達しました.そしてその後,GV-MVP/RX も購入することになるわけですが, これらは比較的容易に対応することが出来ました.

 話は前後しますが,CX23416GYC-STVLP 用の新しい Windows 用ドライバで動作させた際の I2C キャプチャを 私の方でも行い,そしてその結果を元に一通りのチップの初期化シーケンスを見直し,何とか SAA7173 を 動かすことが出来ました.トライ&エラーの繰り返しで,最初に同期がズレまくり,コマ落ちもしまくって いましたが,それでも『それっぽい』画像が出力され始めたときには小躍りして喜んだものです.そしてその 後 Step by Step で初期化シーケンスを見直し,映像が取り込めるようになり,また,音声も同期して 取り込めるようになり,細かな不具合を1つ1つ潰し,何とか実用に耐えうるレベルになりました. そして音声多重対応等の付加機能に関しては,仕様的に近いと考えられる SAA7134 の仕様と動作を 比較しながら使える機能を拡張し,現在に至ります.

 ただし,現時点でいくつかの不具合は FIX 出来ていません.最も大きい物は,SAA7173 を色々と操作 するも,VBI のエリアを取り込んでいるようであり,上部4ライン程度の所にノイズが乗ること.その他に 気になる物は,チャンネルや入力の切り替えの際に,切り替え直後の先頭1秒くらいの間,ブチッとノイズ が乗ることです.前者は全く対策の目処が立っていないのですが,後者に関しては,映像&音声の出力 開始から1秒間程度,その出力を停止しておき,信号が安定した頃を見計らって出力を開始するように実装 しました.そのため,その他の部分も含めて都合,2秒程度キャプチャ開始の指示を出してから実際の録画 開始までのタイムラグが発生します(CX23416GYC-STVLP以外のカードでも,1秒近くタイムラグがある).

 この辺りは運用でカバーしてみて下さい.

['05/03/20]追記
 鈴木さんが新ドライバで I2C キャプチャをして下さいまして,CX23416GYC-STVLP を使用する上での 問題であった上部のチラチラノイズを無くすことが出来ました. ぱ研ivtv-0.2.0-rc3e-paken.050125.tar.gzには, この修正が含まれています.ただし,海外で販売されている「3DYCS分離チップのみ」, 「ゴーストリデューサと3DYC分離チップ共に無し」のタイプの MPG600GR では,従来動いていた機能が うまく動作しなくなってしまったようなので,これらに関しては現在調査を進めている所です.

■チューナー
 チューナーに関しては,CX23416GYC-STVLP に使用されている Philips FQ1236/F は Philips NTSC MK3 と 制御パラメータが同じであるという情報が早々に得られましたので問題ありませんでした.問題は TRANSGEAR 5000TV に使用されている Philips FQ1286 と GV-MVP/RX に使用されている Panasonic VP27s/ENGE4324D です.後者は鈴木氏から FreeBSD 用のドライバの情報を提供頂きまして, これに UHF のバンドコードを修正する形で完全対応.前者は I2C キャプチャを行い,その結果から パラメータを導き出しました(UHF バンドコードは私の環境では試せていないので,本当に動いているか に関して不安が残ります…).
■オーディオデコーダ
 VA2000MAX-SNT6 は MSP34XX を使用しているので,オリジナルの ivtv 同梱のドライバを使用する ことにし,CX23416GYC-STVLP は SAA7173 がオーディオコントロールも行うのでそちらで行いました. GV-MVP/RX は XWM8739 がボリューム等の音声のコントロールを行っているわけですが,こちらは鈴木氏 のサンプルコードおよびメーカーがデータシートを公開していたため,容易に実装が行えました.
■開発全般に関して・謝辞
 と,書いてしまうと私一人で作業をしてきたと勘違いされてしまう方もおられると思いますので 一応書いておきますと,本ドライバのベースとなっている ivtv ドライバは こちら(以下,『本家』)で有志によって開発が 進められていた物です.また,CX23416GYC-STVLP への対応などは, 『ぱ研』でグループとして行っています.ご協力 頂いている方お名前を全て挙げることは出来ませんが,開発やテスト,情報提供など,本当に多くの 方のご協力を頂いております

 きっと誰か一人がクローズドな環境でやっていたとしたら,きっとここまでハイペースで解析が 行われ,完成度の高い物は出来ていないと思います.ある意味,オープンソース開発スタイルならで はのメリットとも言えましょう

■解析と開発
■最終手段の I2C キャプチャ
 Linux 用ドライバを開発する上で光明が見える点は,『Windows で動作している』という点です.

 一見逆説的な考え方かもしれませんが,これは『Windows で動かしたときと同じシーケンスで各チップ を初期化すれば,基本的に動作する』ということを意味します.また,今回対象となったキャプチャ カードは全て,MPEG2 ハードウエアエンコードチップである CX23416 が PCI インターフェイスを持ち, 周辺チップは CX23416 を介し,I2C バスを使用した通信を用いてコントロールしています.即ちこの I2C バスを流れるデータをキャプチャし,それと同じ初期化シーケンスを行えば,『周辺チップに 関しては』最低限動作する状態に出来ることが可能ということになります(とは言え,複数 パラメータのコンビネーションにより特定の機能を実現している場合,どこをどのように操作したら 当該の機能を実現出来るかを突き詰めるのは非常に骨な作業です).この手法を用いれば, 例えデータシートが入手出来ない場合であっても,大まかな事柄に関しては解明かつコントロールする ことが可能になります.

 この最終手段とも言える I2C キャプチャには,ローコストかつ手軽に利用できる Cheapi2cを用いました. チップのドライブ 能力が足りないときちんとキャプチャ出来ない場合もあるのですが(その場合にはバッファ回路を 作成して接続する必要がある),大抵のものであれば問題なくキャプチャ出来ます.

 用意するものは Windows の動作しているマシン,そして LinuxBox,25pinのパラレルポート接続用 のコネクタ,そして若干の線材のみです.I2C バスは DATA,CLK,GNDの3本を接続するだけで流れて いるデータをキャプチャすることが出来ますので,半田付けの手間も大してかかりません.

懐かしの EasyHard(*) ケーブルを押入の中から引っ張り出して加工しました.

(*)昔々,SCSIもUSBも搭載していないノート型 PC に Linux 等をインストールする際に, SCSI 接続の CD-ROM ドライブをパラレルポート経由で接続して利用することを可能とした ケーブル.ドライバを用意する必要はあるものの,特殊な回路は全く必要なく,ケーブルの 結線だけで動作した.DOS用のドライバが公開されていたほか,一部の Linux ディストリ ビューションには EasyHard 用のブートFDイメージが提供されていた.

プローブをチューナーBOXに接続した状態.このように3本接続するだけでOK.どこに 接続すれば良いかはチューナーによって異なるが,Philips 製チューナーであればある程度 規則性があるので取り出すポイントを特定しやすい.

 プローブを接続したキャプチャカードを Windows マシンに取り付け,lmilk を インストールした LinuxBox のパラレルポートにプローブのコネクタを接続すれば 準備は完了です.LinuxBox 側で "lmilk -2 > dump.txt" と実行してキャプチャを 開始し,Windows マシンで何らかの操作をします.

 LinuxBox 側で何かキーを押すことによりキャプチャが終了しますので,上記の例で言うと "dump.txt" にキャプチャ結果が記録されていますので,内容を確認します.

■チューナーの解析
 ここでは,チューナーの制御コードの解析を例に挙げ,ダンプした結果の読み方を 説明します.

 下記の内容は,CX23416GYC-STVLP で実際にキャプチャした内容の一例です.先頭から 6行目以降が実際に I2C バス上を流れたデータです.1カラム目が時間,2カラム目が I2C アドレス,3カラム目が読み込み/書き込み(r/W),4カラム目以降が流れたデータを 表します(後の方は数値ではなく,ASCII文字で表したもの).例えば 9,10行目を説明すると, 0x5C アドレスに 0x80 を書き込み,その直後に同じく 0x5C アドレスからデータを読み込み, 0xFF が返ったことを示しています.


Milksop GPL Reflasher - 0.14 - (c)2002 andy@warmcat.com

CheapI2C on printer port at 0x378
Starting realtime...
Entering capture mode, your PC will appear frozen - press any key to end
      0uS: 60 r
    389uS: 63 r
    412uS: 62 r
    384uS: 61 r 34
  1.796mS: 5C W 80
    533uS: 5C r FF
    605uS: 21 W 0A AA   .
    922uS: 21 W 0A
…

 それでは,CX23416GYC-STVLP で VHF の 1ch を表示し,その後で 8ch を表示した際に キャプチャされたデータの例を見てみましょう.チューナーは 0x61 アドレスに ぶら下がっていることが分かってい ますので(どこに何かがあるかの解析方法に関しては割愛します.i2cdetect 等を使用して 解析してみて下さい),0x61 に書き込む動作をした部分のみを抜き出して見てみましょう.

…
  1.468mS: 61 W 08 90 8E 01   . . .
…
 87.044mS: 61 W 0E F0 8E 02   . . .
…

 うまい具合に,丁度2回だけチューナーにデータを書き込む動作をしています.これで 1対1の対応が取れますので,時系列で見て1つ目が 1ch へのチューニング,2つ目が 8ch へのチューニングのアクションと見て問題ないでしょう.

 bttvドライバ付属の tuner.c を見ると,チューナー操作に必要なパラメータは 10個. そして最初の3つは名前等であり,適当でも良いので :-),チューナーをコントロールする 上で重要となってくるパラメータは後の7つということになります.要素名で言うと, thresh1〜IFPCoffです.これらの値を適切な 値に設定してやれば,tuner.c でコントロール可能になると言うことが出来ます.

 thresh1,thresh2 はコメントにもありますように,それぞれVHF帯(低と高),VHF帯(高)と UHF帯の内部的な回路の切り替え周波数を意味しています.そして後続するVHF_L, VHF_H, UHF はそれぞれの周波数帯にチューニングする際にチューナーに渡すコード,そしてconfigは チューナー固有のコード,最後の IFPCoff はチューナの IF*16 の値になります.

 では再び実際にキャプチャ出力の説明に戻りましょう.

 例えば I2C通信でのコントロールがほぼ同じであると考えられる Philips FM1236の データシートを読むと,操作時には, アドレス,Program divider byte1, byte2,Control information byte1, byte2の順でデータ をセットすることになっています.つまり,I2Cキャプチャの結果からは,1chの場合は それぞれ 0x61, 0x08, 0x90, 0x8E, 0x01 であることが分かります.

 簡単なものから説明すると,ここで言う 0x8E が config, 0x01 が VHF_L を意味しています.8ch にチューニングした場合の結果を見ると,最後の 1バイトが 0x02 になっています.つまり,VHF_Hは 0x02 ということになります.UHF はここでは調べていませんが,同様の手法でコードを見付けることが出来ます.

 次に thresh1, thresh2 ですが,これは IFPCoff にも関係してきます.まず IFPCoff について 先に説明すると,基本的に日本国内で使用されているチューナーの場合は 732 または 940 の2種類が考えられ,このうちの何れかの値を取ります.NTSC-J 製品の場合は後者なの ですが,前者(NTSCi)でも視聴できないというわけではなく,実際に広く使われています (たしか 2ch か 7ch の映りが悪くなるんだったかな?).

 そして後は計算です. NTSC-J での映像は, 1ch は 91.25MHz, 8ch は 193.25MHz です.そしてこれらを 16倍すると それぞれ 1460(A1), 3092(B1) という数値になります.そしてダンプ結果の Program divider の byte1 を上位,byte2を下位として見た場合,1ch, 8ch はそれぞれ 0x0890,0x0EF0 となり,これらを 10進数に直すと 2192(A2),3824(B2) となります.

 ここで IFPCoff の登場になるわけですが,(A2), (B2) の値から(IFPCoff が NTSCi だと 仮定して導き出される)732 を引いてみてください.するとそれぞれが(A1),(B1) と同じに なることが分かると思います.これが日本国内向けのチューナの場合は IFPCoff が 940 となり,(A2),(B2)からこの値を引いた際に(A1),(B1)と合致する値になります.

 と,ここまでの検証で未知の 7個のパラメータのうち,5個までが明らかになりました. 後は thresh1, thresh2 の2つですが,これら値はどの周波数をセットしたタイミングで Control information byte2 が切り替わるかを調べれば大まかな所は確認することができます. 同一メーカーの別チューナの設定を拝借し,あれこれ試してみるのも良いでしょう.

 以上の結果から,Philips FQ1236/F は下記のようなパラメータとなり,Philips NTSC MK3 と同じであることがデータの上からも 再確認できます.

/* KUROUTO SHIKOU CX23416GYC-STVLP*/
{ "Philips FQ1236/F", Philips, NTSC,
  16*160.00,16*442.00,0x01,0x02,0x04,0x8e,732},

 以上,一例ではありますが,このように I2C キャプチャの結果の結果から 様々な情報を確認することが出来,例えデータシートが得られない場合でも, その大まかな事柄に関しては,ここから 解析することが可能であることがお分かりになったかと思います.

■カードの動作原理とドライバ側の対応
 MPEG2ハードウエアエンコードチップである CX23416 は A/D 変換済みの映像データと 音声データを入力することにより,指定された形式のストリーム(例えば映像はMPEG2, 音声はMPEG1 Layer2形式でエンコードしたストリーム)を出力します.この基本動作は 今回調達した全てのカードで同じですが,その前段階の処理がカード毎に異なります.

 まず映像信号に関して簡単に解説すると,一連のカードは全て, TV Tuner からの 出力,Composite,S-Video の3種類の入力をハンドリング可能になっています. YC分離を行わないカード(Win PVR-250,ITVC16-STVLP等)においては,これら映像信号は 全て直接ビデオデコーダに入力されていました.そしてビデオデコーダ側で『Tuner入力を A/D 変換し,出力しろ』のようにコントロールすることにより,入力された映像データ を切り替えることが可能でした.

 ここで若干補足説明ですが,『Composite』は何をコンポジットしているかと言うと, Y信号(輝度信号)とC信号(色信号)です.そしてこれらを予めセパレートして伝送する仕様 になっているのが『S-Video』です.一般にPhilips製ビデオデコーダは論理的には Composite用の入力端子5本とS-Video用の入力端子5本を持ちます(物理的には S-Video 用の入力端子は Composite 用の端子を併用し,Composite用の端子側を輝度信号用の端子 として使用します.そのため,S-Video 入力のつもりで Composite 入力を使用すると, ビデオデコーダによって出力される映像はモノクロになるわけです).

 さて,このような構成になっているため,従来のカードでは,ビデオデコーダに対して Composite 形式の入力として Tuner, Composite 入力を接続し,S-Video 形式の入力として S-Video 入力を接続するようになっており,各入力の切り替を行っていました.しかし, 今回調達したカードでは,Tuner, Composite入力は直接,もしくは GR(uPD64031A)を介してYCS(uPD64083またはuPD64084) へ接続されています.そしてYCSは文字通りYC分離を行い,Y, S 信号をセパレート した状態のままで出力します.つまり,ビデオデコーダから見た場合,S-Video 形式で入力 される信号が2系統あり,片方は S-Video 入力端子からダイレクトに接続されているのに 対し,片方は Tuner と Composite 入力で併用する信号線ということになります.

 これがどのような影響をドライバに及ぼすかと言いますと,オリジナルの ivtv ドライバ は基本的にビデオデコーダでの入力信号の切り替えにしか対応しておらず,1つの信号線が 共用されている場合が想定されていません.つまり,当該のコードを抜本的に書き換えない と,素直な方法で実装できないということです.書き換えはかなり骨なので,仮想的な信号 入力線番号を作り,ドライバ内でトリッキーな方法で切り替えることにしました.

 ここで再び若干補足説明.GR,YCSの乗ったキャプチャカードはビデオデコーダに信号が 入るまでに,A/D,D/A変換を繰り返します.具体的には,Tunerから出力されたアナログ 信号は GR に入ってA/D変換され,デジタルで処理されます.そして出力される際に,再び D/A 変換されてアナログに戻されます.そして YCS で再びA/D変換し,デジタル処理された後に またまた D/A 変換され,Y/C分離された状態でビデオデコーダに出力され,そして最後のA/D 変換が行われます.つまり,ビデオデコーダを含めると,都合3回もA/D変換され,2回D/A変換 されることになります.これはちょっとあんまりですよね.

 そこで YCS チップの uPD64083 以降では,GR として uPD64031A が使用されている場合, GR と YCS 間をデジタルでリンク出来るようになっています.つまり,ここで D/A,A/D 変換の回数をそれぞれ1回ずつ押さえることが出来ます.また,uPD64083 はデジタル入力の他に アナログ入力も可能であり,切り替えることも可能となっているため,GRT動作の不要な Composite 入力は直接YCSチップ に接続され,デジタル端子に切り替えた際には GR 経由の Tuner 出力,アナログ端子に 切り替えた場合は Composite 入力を処理という形に出来ます.そして YCS チップの出力は そのままビデオデコーダに直結していますので,TunerとCompositeを切り替える際には, YCS の入力を切り替えるようにドライバを書けば良いことになります.

 ここで注意が必要なのですが,この『TunerとCompositeの信号線の併用』はカードに よってその後の結線状況が異なります.例えばGV-MVP/RXは素直にTunerとCompositeで 共用しているのですが,CX23416GYC-STVLPやTRANSGEAR 5000TVはTunerとS-Videoで共用 しているようです.マルチプレクサをGPIOでコントロールしているのかな…

 と,ざっと簡単に今回対応したカードのドライバ側の対応に関する大きな変更点に関して 説明しました.実際にはこの他にもGRやYCSのコントロール,その他チップに関しても説明 しなければなりませんが,これはまたの機会に.

 今後さらなる高画質化を図るとしたら,上記のような A/DしてD/Aして…を繰り返すより, GR,YCS,ビデオデコーダをワンチップ化したり,場合によっては MPEG2エンコーダまで ワンチップ化することが考えられます.このようにすることにより製品のコストダウン も図れると思われるので,今後はこういった方向に行くのでしょうね.しかし,益々持って LSI のブラックボックス化が進み,NDA の壁に阻まれてオープンソースでドライバが 書きにくいことになるのでしょう…

■ハードエンコキャプチャカード
■用意したカード
 それでは,今回『ivtvドライバを拡張することによって動作するであろう』との 目星を付けて調達し,実際に動作するようになったカードのスペックを以下に示します.

表:用意したキャプチャカードのスペック
項目 玄人志向 CX23416GYC-STVLP I/O Data GV-MVP/RX 長瀬産業 TRANGSEAR 5000TV AOpen VA2000MAX-SNT6
MPEG2エンコーダ CX23416 CX23416 CX23416 CX23416
チューナ FQ1236/F H-3 ENGE4324D FQ1286/G H-3 FI1236 MK2/PH
ビデオデコーダ SAA7173HL SAA7115HL SAA7114H SAA7114H
ゴーストリデューサー μPD64031A μPD64031A μPD64031A 無し
Y/C分離 μPD64083 μPD64084 μPD64083 μPD64083

 全てのカードがivtvドライバでサポートしているCX23416を使用しており,その周辺チップ 構成のみ異なります.ビデオデコーダはPhilips製の製品が使用されておりますが,SAA7114/7115 は動作実績があるため,SAA7173を除いて難易度はそれほど高くありません.GR およびYCSに関しても,ある程度のデータが得られていますので,完璧とまでは言えない ものの,後は力業で何とかなりそうな構成になっています.

■玄人志向 CX23416GYC-STVLP
玄人志向 CX23416GYC-STVLP (リモコン付きモデルに切り替わっているため(後述),現在は旧製品扱い).2003/10に14,800円で購入

お馴染みの玄人志向ブランドの箱

内容物一覧.ドライバとアプリは CD-ROM からインストールせず, YUAN のサイトから最新版をダウンロードして 使用した方が良いでしょう.
カード表面.ロープロファイル対応のため,高さがかなり低くなっています.
ブラケット側.オーディオの外部入力はステレオミニピンプラグになっています.なお, 標準的な PCI ブラケットも同梱されているため,普通のケースに取り付ける場合はブラケット を交換する必要があります.
カード裏側.こちらにも部品がビッチリ実装されています.
今回ドライバ作成の大きな壁として立ちふさがったビデオ&オーディオデコーダの Philips SAA7173HL

■I/O Data GV-MVP/RX
I/O Data GV-MVP/RX .2004/03に17,799円で購入.

玄人志向のような怪しげなパッケージではなく :-),綺麗な化粧箱に入っています.

カード表側.基盤は2段重ねになっており,奥行きが短い形状になっています.その反面, 横幅と高さがややあり,小型のPCケースによっては取り付けにくいかもしれません.
ブラケット写真.オーディオ外部入力はRCAのピンジャックになっています.
カード裏面はかなり余裕のあるレイアウト
2階建て基盤を横から見たところ.CX23416はかなり発熱しますが,隙間が殆ど無いため, エアフローが充分に確保できていない PC で使用する場合は何らかの対策が必要になるでしょう.
基盤を分離した所
チューナーは日本国内向けの Panasonic ENGE4324D
Y/C分離は uPD64084
入力された音声信号を A/D変換し,I2S バスで CX23416 にデータを送る XWM8739
■長瀬産業 TRANSGEAR 5000TV
長瀬産業 TRANSGEAR 5000TV. 直販のみ.2004/01に19,800円で購入.白箱に入って届きます.
内容物一覧.カードとドライバCDのみでマニュアルなどの印刷物無し
カード表面(手ぶれごめん).『リファレンス通り作りました』的なレイアウト.
ブラケット.音声外部入力はRCAピンジャック
カード裏面.シルク印刷から,AVerMedia M175-C (M175-Bも?)の OEM と思われる
■AOpen VA2000MAX-SNT6
AOpen VA2000MAX-SNT6. 2004/02 14,980円で購入

今回調達したカードの中で最も廉価な部類であったにも関わらず,最も豪華な化粧箱 (その後他カードの方が値下がりしていますが)

カード,リモコン,盛り沢山の付属ソフト
カード表面.CX23416 の放熱対策のためか,薄手のヒートシンクが一面に貼られています. ただし,同一製品にも関わらず,ヒートシンクが貼られていないカードも出回っているようです.
ブラケット面.音声外部入力はステレオミニピンジャック
カード裏面
ヒートシンクを横から見た所.高さもとらず,とても良い感じでチップに貼り付いています.
■一連のカードをを使ってみる
 最新ドライバの入手は,ぱ研の 『CX23416GYC-STVLPの解析』から行って下さい.ページ下に『添付ファイル』として貼り付けて あります.現時点での最新は,『ivtv-0.1.9_GPIO_k26_040820-1.tar.gz』です.また,Vine3.0 を 利用している場合,現在 VineSeed からコンパイル済みのドライバ&必要なソフト一式をダウンロード することが出来ます.ただしこの場合は,Tuner番号が変更になっていたり,ツールのインストール先が /usr/bin/になっていたりしますので,その点は気を付けて下さい.


 Vine3.0ユーザーが VineSeed から落とし,インストールする必要のあるファイルは以下の通りです. インストール後,/usr/share/doc/kernel-doc-2.4.27/video4linux/ivtv/ivtv-vine.txt を参考に 設定を行って下さい.

○VineSeed

  • kernel-doc-2.4.27-0vl4.i386.rpm
  • kernel-2.4.27-0vl4.CPUのタイプ.rpm
○VineSeedPlus
  • ivtv-utils-0.1.9.GPIO.k26.20040820.1-0vl1.i386.rpm
  • perl-Config-IniFiles-2.38-0vl1.noarch.rpm
  • perl-Video-Capture-V4l-0.224-0vl1.noarch.rpm
  • perl-Video-Frequencies-0.03-0vl1.noarch.rpm
  • perl-Video-ivtv-0.12-0vl1.noarch.rpm
  • perl-Tk-804.026-0vl1.noarch.rpm

 なお,Vine3.1 が出た際には,これらの一部は予めインストール済みになっているかもしれません.


 インストール方法や使い方に関しては,ドライバパッケージの中に日本語で書かかれた ドキュメントを同梱していますので,本ページでの説明は割愛します.

 一連のカードを使用してみての結果ですが,画質その他に関しては以下のような印象を持ちました. なお,電波状況や利用環境によっても画質は変ってきます.以下はあくまでも私の環境での主観的な 意見ということでご了承ください.

    ○CX23416GYC-STVLP
    黒が締まり,色が綺麗で輪郭も比較的シャープ.ただし,前述の画面上部の4 line目にのるノイズが あるほか,録画開始時に2秒近いタイムラグが出る.音声多重には今のところ一番対応が進んでいる
    ○GV-MVP/RX
    素直に動作し,画質も優秀.ただし若干精細さが劣る(やや全体的にボケたようなシャープでない感じ. Windows ドライバ&アプリでも同様の声はよく聞く).画質の調整や音声多重への対応は今後の課題
    ○TRANGSEAR 5000TV
    素直に動作する.画質は平均的.輪郭がシャキッとしていない.GRの効きが悪いかも.今後パラメータ を調整すれば改善する余地有り.
    ○VA2000MAX-SNT6
    画質関してはあまりお勧め出来ない.デフォルト状態で使用すると全体的に白飛びしたような画質 になる.コントラストやブライトネスを調整すれば一応使える画質にはなる.なお,Composite や S-Video 入力に現在対応していないが,I2Cキャプチャがうまく行えなかったほか,私が見切りを付けて手放して しまったため :-),今後どのような扱いになるかは不明.『俺がVA2000MAX周りのドライバをメンテする!』 というガッツのある方求む

['05/03/20]追記
GV-MVP/RX(RX2,RX2W含む)における画質修正,音声多重対応に関しては, ぱ研にパッチが上がっています.

 本ページを読み,Linux でこれらカードが動作するという情報を得,これからキャプチャカードを 購入しようと思われた方もおられるかと思います.そういった方に『お勧めのカードは何?』と, 率直な意見を求められると非常に困るわけですが,個人的には,『GV-MVP/RX にしておけば大きく外れる ことは無い.少しチャレンジャーな気概のある方は,CX23416GYC-STVLP をお勧めする』といった感じ でしょうか.価格のことを考えますと,CX23416GYC-STVLP/R が現在 12千円前後で購入できるので 良いかと思います.GV-MVP/RX に関しては,現在生産中止の噂も飛び交っています.

 また,現在 ITVC16-STVLP を使っている方から,新しいカードに乗り換えるべきかという 質問も聞くのですが,これはかなり微妙だと思います.電波状況が良い場合は ITVC16-STVLP でも充分な画質が得られますし,ドライバの完成度という意味では ITVC16-STVLP の方が こなれています.確かに 3次元Y/C分離 はクロスカラーが除去でき,画質向上に非常に大きく 寄与しますが,現在の画質でそれほど不満を抱えていないのであれば,あえて乗り換える必要は 無いようにも思います(とは言え,私は録画のメインカードを CX23416GYC-STVLP に乗り換えましたが :-) ).

■利用時のITVC16-STVLPとの相違点
 内部的にガラリと変っているわけですが,モジュールを読み込ませ終わった後は,基本的に 従来のカードと同じように利用できます.ただし,非常に大きな違いとして,1点だけ注意が 必要です.

 新しく対応したカードでは,Tuner, Composite, S-Video の入力端子番号がカード毎に 異なります.そのため,record-v4l2.pl 等を用いて録画をしている場合,番号を用いて 入力端子を設定する際には,必ず inputnum の番号を確認してから利用して下さい. "record-v4l2.pl --list-inputs" を実行し,それぞれの入力と番号との対応付けを確認 するようにして下さい.

 なお,record-v4l2.plを使用する場合は,inputnum を使用せず,inputname を使用する ことをお勧めします.例えば『record-v4l2.pl --inputname "Tuner 0" ....』のように 選択する入力を名前で明示的に指定した方が良いでしょう.

■録画のフロントエンドに関して
 コンソールからrecord-v4l2.pl 等のコマンドを組み合わせることにより,録画や録画予約を 行うことが出来ますが,できれば少しでも楽をしたい所.また,Web インターフェイス等を 利用可能であれば,よりグラフィカルに,かつ,便利に使えることは明白です.

 このページを書いた後,Linux のTV録画環境は劇的に改善 されつつあり,多くのフロントエンドが利用可能になってきています.例えば代表的な ものとしては,以下のようなものが公開されています.

 また,私も『MythTV ほど高機能でなくても良いので,手軽に使えるのを作ろうかな〜』などと 考えまして,簡単な Web を利用したフロントエンドを作ってみました…が,実質2日くらい で作ったもののため,現状かなりヘタレなコードになっています.動かすための環境整備に 若干手間がかかるのですが(ffmpeg,transcode,mplayer等のインストール),それでも試してみたい という方はこちらのページをご覧下さい. ただし,今後のメンテナンス等に関しては,あまり期待しないで下さい.
■玄人志向 CX23416GYC-STVLP/R
 そうこうしている内に,CX23416GYC-STVLP は旧製品&生産中止になりました.そしてそれに 変って,リモコン付きの CX23416GYC-STVLP/R が発売になりました.両者はリモコンの有無のみが 異なるようです.

 『あぁ,またもやドライバを書き換えないといけないかも…』と,一時陰鬱な気分でしたが, 実際に調達してチェックしたところ,リモコンは利用できませんでしたが,本ドライバで そのまま動作しました.

玄人志向 CX23416GYC-STVLP/R 2004/07に12,800円で購入

パッケージは同じ.製品名の『/R』に注目.

同梱品.リモコン関係のパーツが追加になっています
ブラケット面.リモコン受光器用のジャックが追加になっています(リモコン無しのタイプ では,穴が空いていただけだった)
リモコン
リモコンの受光器
カードレイアウトは同じです
CX23416 が自らの発熱で熱暴走し,マシンがハングすることが度々あったため, メモリモジュール用のヒートシンクを CX23416 に貼り付けました.この対策を行って からは,安定して動いています.
横から見るとこんな感じです

■まとめ
 さて,駆け足で紹介して来ましたが,このように日本国内での MPEG2 ハードエンコーダ搭載の TV キャプチャカードの Linux での対応状況は現在も改善しつつあります.今後も 現行製品の終息と新製品へのモデルチェンジという流れは止まらないと思いますので, ドライバ開発に関してはイタチごっこの様相を呈することになると思います.しかし, オープンソースでの開発スタイルを取っているため,今後,開発が全く停滞してマトモに 使えるカードが存在しないということにはならないのではないかと個人的には思っています.

 ある意味,2011年に予定されている地上デジタルへの移行がCPRM対応も含めて 1つのターニングポイントになるのではないかと予想されます.しかし,少なくとも 地上デジタル放送に対応した外部チューナーBOXを利用することにより,当分の間は 現行カードを現役で使うことが出来るのではないかと思います.(そういう意味 では,Linux で動作する現行商品が終息する前に調達しておいた方がイロイロな 意味で良いかも :-) )

 ともあれ,昔は『Linux はマルチメディア系の環境がイマイチ』との声があった わけですが,現在はそういう声があまり上がってこなくなりました.逆に最近は Linux のキラーコンテンツとして位置付けても良いと考えられるソフト/環境が 登場しています.そのため, Windows 用ドライバやアプリの不出来や不具合に嫌気がさし,ivtv+MythTV を使いたいがため に Linux を使い始めたという人も何人か知っています.

 こういった流れは Windows アプリを開発しているメーカーに対しても大いにプレッシャーになり,より完成度の 高いソフトが市場に出てくることに繋がると考えられます.即ち,Linux 用の環境を 整備することは,Linux コミュニティのみならず,PC ユーザー全体にとって非常に 良い循環が構成されるのではないかということです.例えば,MythTV では iEPG に 対応し,複数枚のカードを利用した多チャンネル同時録画が可能になっていたわけ ですが,最近になってようやく,各社が Windows 用の同等機能を持ったアプリや ドライバを提供し始めました.(MythTV の存在が直接的に影響していたかは不明ですが)

 さて,最後になりますが,オープンソースという形で無償で開発に携わることに 関して.やはり自分の成果が何らかの形で他人の役に立ち,そしてそれがダイレクトに 自分の所に『声として』返ってくるというのは非常に嬉しいものです.

 確かに本業が別にあるの で労力的にキツく,時間的な制約もキツイのですが,そのやり甲斐は言葉で表現 しきれないほどあります.実は私は(少なくとも仕事の上では)専門のプログラマ ではないのですが,それでもこれだけの参加ができました.巷には私なんぞ比較に ならないくらい凄いスキルを持ったプログラマが沢山いると思います.そういった 方々には是非,こういったプロジェクトに参加する喜びを知って欲しいなと思います. 参加することにより,明日の糧になるものも得られると思います.

 また,『私はプログラムは書けないし』という人も,色々な方法で協力が出来ます.

 なお,ユーザーに徹したい人が大半だと思いますが,それを否定しているわけでは ありません.実はオープンソースはこういった人達に色々な面で支えられているわけですから.

■Buffalo PC-MV51XR/PCI
['05/02/20追記]  玄人志向とBaffalo(旧メルコ)は母体が一緒であるということは広く知られていますが, 玄人志向ブランドは基本的に技術サポートが無く,Baffaloブランドはサポートがある という違いがあります.また,前者は「きわものシリーズ」の存在があること からも分かるように,『分かっている人向け』であるのに対し,後者は『初心者も ターゲット』と言うことが出来ると思います.

 そしてBaffaloの戦略として面白いのは,まずは玄人志向ブランドで (この書き方は少々語弊があるかもしれませんが)OEM製品をそのまま の形で販売し,ある程度ドライバやアプリの熟成が進んだ段階でパッケージングし直し, Baffaloブランドで販売することがあるということです.ある意味,玄人志向ブランド ユーザーは,有償でβテスターとして使われている :-) とも言えるかも.

 前振りはこれくらいにして本題に移りますと,玄人志向 CX23416GYC-STVLP/R が Baffalo PC-MV51XR/PCI として2004/12から販売開始になりました.その売りは,熟成 の進んだドライバと,完成度の高いフロントエンドソフトである PCastのバンドルです. Windows ユーザーであれば,CX23416GYC-STVLP/R にバンドルされているソフトの使い にくさや不安定さに泣かされた方が多いかと思いますが,これが解決された形になりま すので,新規ユーザーには歓迎されているようです.

 とは言え,Linux で利用する場合には,Windows用のソフトとして何がバンドルされ ているかは関心が無く,それよりも安く買える玄人志向ブランドの方が魅力的でしょう. しかし,玄人志向ブランドとBaffaloブランドは販路が異なるようで,街の電器屋に よっては『玄人志向の製品は扱えない』といった店もあると思います.

 そんなニーズもあるかと思い,PC-MV51XR/PCI 調達して動作検証をしてみました. 実際に手にして分かったのですが,ハード的な構成はCX23416GYC-STVLP/Rと全く同じ なのですが,PCI subdeviceIDが変更になっており,異なるカードとして認識されます. また,電解コンデンサーなどが良い物に変更になっているため,あるいは画質的にも 若干向上しているのかも :-)

 なお,pakenにアップされている現行の最新のドライバでは,自動認識するように ソースを修正してありますので,挿せば使える状態になっています.

BAFFALO PC-MV51XR/PCI.2004/12に 15,019円で通販で購入.
今時のカードらしく,MCE2005対応
内容物一覧
Windows ユーザーにとっては,このCD-ROMに収められているソフトがBAFFALO製を選ぶ何よりのメリット
表面
裏面
シールを剥がすとCX23416GYC-STVLPから型番が変更になり,"GOTVIEW PCI DVI"となっているのが分かります.

電解コンデンサーが一通り変更になってます.
上がCX23416GYC-STVLP,下がPC-MV51XR/PCI.
■I/O Data GV-MVP/RX2W
['05/02/20追記]  ivtvドライバで対応した I/O Data 製の GV-MVP/RX は生産中止になり,現行製品は GV-MVP/RX2になりました.基本的にこれらの差異はバンドルソフトの違いだけですので, Linux からは同じように使えます.

 そして今回調達した物は,デュアル/ダブルチューナー,即ち,1枚のPCIカードで2番組 同時録画出来るカードである GV-MVP/RX2Wです.これまでは2番組同時録画を行おうとした 場合,キャプチャカードを2枚搭載しなければいけませんでした.しかし,この場合 PCIスロットを2つ消費してしまうため,小型PCを録画サーバとして動かしている向きには 導入困難でした.そのため,手軽に同時録画出来るカードとして昨年末の発表から発売が 心待ちにされていたカードがこのカードです.ハード的には,GV-MVP/RX 2枚が1枚のPCI カードに乗っているという感じになっています.  このカードも,既にivtvドライバのソースは修正済であり,pakenにアップしている最新 ドライバで対応しています.

I/O Data GV-MVP/RX2W.2005/01に25,800円で購入
内容物一覧
カード表面.GV-MVP/RXと比較し,少々長さが長くなっています.
ブラケットに出ている端子は同じです.
カード上で,チューナーが2つ直結されています.ブースターを介しているわけではなく, 分岐されているのみですので,受信状態の悪い所では画質低下があるかもしれません
カード裏面.スッキリしています.
基盤は2階建て構成になっており,従来と同じようにコネクタ直結

それぞれに2枚分のチップが乗っています
PCI Bridgeチップ.
機能的には,このチップの下に2つのチューナーカードがぶら下がっている構成になります. そして Linux からは2枚のカードを挿したのと同様に,/dev/video0,/dev/video1 として 使えるようになります.ちなみに SubsystemID は GV-MVP/RX と異なり,また,チューナー1 とチューナー2は異なるIDになっています.

『Asus Terminator 活用メモ』 へ戻る