Linuxで最強のテレビ録画サーバを目指す【6】-ソフトエンコカード篇-

['05/03/20] アップ忘れ X-<
['04/11/13] 初稿
■はじめに
■ソフトエンコカードに関して
 このページからこのページ までの一連のページで,Linux でキャプチャカードを使うための解説を行ってきました. 最初の頃は『Linuxで手軽に使えるのは Bt878 系のチップを使用したカードのみ』といった 状態であったわけですが,その後 MPEG2ハードウエアエンコードカードも Linux で安定 して動くようになりました.そして,こと『録画』ということに関しては,ハードエンコカード を使用した方が何かと便利であるという認識が,広く多くの人になされるようになって来た ように思います.

 その一方,『ソフトエンコカードは時代遅れ』や,『ソフトエンコカードはハードエンコ カードに駆逐される』といった意見が最近は強く,実際に市場を見てみると,ソフトエンコ カードは低価格を目指した物以外,次第にハードエンコカードに駆逐されつつある様相を呈 しています.

 では,これから新規に購入することを考えた場合,本当にソフトエンコカードを選択する メリットは無いのでしょうか?

 私は『否』であると考えます.コスト的な面もさることながら,ソフトエンコカードは リアルタイムでの視聴用途に対しては適切な選択肢であり,また,MPEG1/2形式以外でリア ルタイムにキャプチャする際にはソフトエンコカードの方が好ましいからです(*).

(*)ハードエンコカーの場合でも,無圧縮形式でキャプチャデータを取り出せる場合が あります.この場合は実質的にソフトエンコカードとしても使えるということを意味 しています.ただし,カード側でのハード的な対応およびドライバの対応が必要となります.

 コンシューマ向けのPCの話を振り返ってみますと,前世紀末(たったの4年程度前ですが :-)) 当時,かなりハイスペックな PC であっても,CPU による MPEG2 デコードは力不足であり, DVD-Video のスムーズな視聴のためには MPEG2 デコーダカードが必要でした.しかし, その後の CPU の高速化はご存じの通り.今では CPU (ビデオチップにサポート回路が 含まれている場合もあります)でデコードするのが『普通』であり,専用ハードウエア を使用することはまずありません.ソフトウエアによるデコードが可能になったことから, そのアルゴリズムの変更や機能拡張も容易に行えるようになり,高画質化等が容易に 行えるようになりました.

 このことから得られる教訓は,『CPUの高速化は劇的』,『専用ハードは何れ 廃れる可能性がある』,『ソフトで一通り処理を行うような仕組みは,後々有利に なる場合がある』と,いった所でしょうか.

 さて,話をキャプチャカードに戻しますと,ソフトエンコカードはリアルタイムでの TVの視聴という意味では,とても廉価にかつ容易&確実に行える環境を構築できます. また,録画という面に関しても,『そこそこ高速な PC を使用しており,録画と同時に 重い処理を行わなければ』という前提付きですが,同じく充分満足の行く環境を構築 できると思います.

 問題は,現在の PC では各種のアルゴリズムを用いた動画のエンコードは処理として 重く,容易にコマ落ち等を発生してしまうことでしょうか.しかし,いずれは時間が解決 するのではないかと思います.しかしその一方で,ハードエンコカードは同時複数 チャンネル録画という荒技が一般的になりつつありますので,いつまで経っても イタチごっこかもしれませんが…

■最近のソフトエンコカードの傾向と対策
 ソフトエンコカードの主力製品は,Bt878チップ搭載の廉価なカードから Philips製 SAA713X チップ搭載のものにシフトしてきました.また,この他にも CX23883 等のConnexant製 チップを搭載したカードも出てきています.では画質はと言いますと,残念ながら私はConnexant製 チップのカードは試したことはないのですが,SAA7133 を搭載したカードに関しては『Bt878と 比較して格段に綺麗』と言えると思います(とは言え,カード設計によって画質は大きく異なること がありますし,色再現性に関しては,好みの問題などもあるかと思いますが).

 そしてソフトエンコカードに対しても,高画質化機能を盛り込む波が大きく押し寄せてきており, ハードエンコカードと同様,ゴーストリデューサーや3次元Y/C分離チップを搭載した物が大半に なりつつあります.ハードエンコカードの台頭により,『ソフトエンコカードは安物カード. 画質もそれなり』といったイメージが醸し出される場合もあるわけですが,実際には,『画質面では ハードエンコカードの高級機種と比較しても遜色ない』と言って良いでしょう.

 そして Linux での対応に関してですが,SAA713X系のチップやCX23883系のドライバは既に開発が かなり進んでおり,それぞれsaa7134 drivercx88 driverとして公開されています. また,比較的新しい Kernel であれば,これらドライバが既に kernel tree に含まれているでしょう. そのため,海外でも広く販売されているカードであれば,特に複雑なことはしなくても,これら ドライバで動作する可能性があります.しかしその一方,高画質化チップ(以下,GRや 3次元YCSチップを総称して呼ぶことにします)を搭載したカードは,海外ではメジャー では無く,そのため,すんなりと動かないことが多いでしょう.この辺りの事情は こちらのページに簡単に触れた内容と同じです.

 では,どうやって Linux で『高画質化チップ』が乗ったカードを動かすのかという話になる わけですが,まずはこちらのページにまとめた手順と同様に, 各チップの初期化シーケンスを追う形で解析を行います.そして元となるドライバ(今回は SAA7134ドライバ)を拡張し,Windows 上で動かしたときと同様のシーケンスでチップを操作 するように変更して,動作するようにするわけです.

 今回は,入手製が良く,かつ安価で,ゴーストリデューサおよび3次元YC分離チップが乗っている 玄人志向 SAA7133GYC-STVLP を対象に作業を行うことにしました.

(実は某掲示板の,『SAA7133GYC-STVLP の時代は来ないかのぉ』という書き込みが切っ掛けで, 『よっしゃ,やったる』となったのは内緒です :-))

■玄人志向SAA7133GYC-STVLPの解析とドライバの拡張
 繰り返しになりますが,解析方法等に関してはこちらを参照 してください.カードの外観上確認できたことは,ビデオデコーダ兼PCIインターフェイスは Philips製 SAA7133 が使用されており,GR は NEC の uPD64031A,3DYCSは同じく NECのuPD64083 が搭載されていることです.GR,3DYCSに関しては CX23416GYC-STVLP 等用に作成したコードが ありますので,これを使い回しすることにしました(実際に解析した結果,初期化コードは CX23416GYC-STVLP と殆ど変りませんでした).

 次に SAA7133 ですが,こちらは saa7134 ドライバを少し修正する形で対応を行いました. ivtv ドライバと同様,ビデオデコーダの入力ポートの複数入力ラインのシェアリングが考慮 されていないため,その部分の修正がメインです.

 と,ここまでは順調であったのですが,I2C ダンプの結果から, SAA7133GYC-STVLP には 0x70 にぶら下がっている謎のチップがあり,これが Tuner と Composite の切り替えに重要な 役割を果たしていることが明らかになりました.そこでこの得体の知れないチップ用に saa7133gyc_stvlp というドライバをでっち上げ,ドライバ読み込み時に初期化するように しました.ただし,どうもこのチップの初期化はタイミングにシビアなようで,あれこれ 試行錯誤はしましたが,100% 完璧に動くという所にまでは到っていません.詳しくは 使い方の所で後述します.

■玄人志向SAA7133GYC-STVLP/R
■玄人志向SAA7133GYC-STVLP/R
玄人志向 SAA7133GYC-STVLP/R

SAA7133GYC-STVLPにリモコンが付いた現行モデルです.2004年03月に8,870円で購入. ちなみに2004年11月現在は 6千円台で購入可能なようです.

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

説明書き
内容物一覧.ロープロファイル用のブラケットも同梱されています.

ちなみに左下は私の足の親指 :-P

カードの表面.チューナー横のチップは SAA7133
カードの裏面.uPD64031A,uPD64083は裏側に実装されています.
ブラケットのアップ.左からオーディオアウト(同梱されているケーブルで,サウンドカードの Line-in に接続します),リモコン受光部用ピン,アンテナ端子,S端子, オーディオ入力(mini-pin ジャック).ちなみにブラケットにはS端子しかついていません. コンポジット信号を入力する際には,RCA<->S端子変換ケーブルが同梱されていますので,それを 使います
お馴染みのゴーストリデューサチップ.NECのuPD64031A
同じくお馴染みの3次元YC分離チップ.NECのuPD64083
PCIインターフェイスも持つビデオデコーダである Philips SAA7133
CX23416GYC-STVLPと同様,チューナーは Philips の FQ1236/F
その他数点の周辺チップ
CX23416GYC-STVLPとの比較.上がSAA7133GYC-STVLP/R.とても小型です.cube型ベアボーン でスロット周りにスペースがない場合は大変助かるでしょう.
 ivtvドライバで対応しているCX23416を使用したハードエンコードカードは,次々と生産中止 の憂き目に遭っていますが,SAA7133GYC-STVLP/Rはとりあえずまだ現行商品として入手可能な ようです['06/12].
■玄人志向SAA7133GYC-STVLPをLinuxで使う
 SAA7133GYC-STVLPを動かすためのドライバは,SAA7134 driver へのパッチという形で作成 しました.ドライバはこちらから(2004/06/19版) ダウンロードして下さい.古い版は こちら(2004/04/09版)に残してあります.

 なお,2004/04/09版は kernel-2.4.25 用に作成した物であり,2004/06/19版はこれの若干 修正したものと kernel 2.6.x 用のパッチを同梱しています.インストール方法や使い方に関する 詳しい説明は,同梱されている README_ja.txt を読んでみて下さい.なお,kernel 2.6 はコロコロ と仕様が変更になっていますので,バージョンによってはパッチ当てに手間取るかもしれません. テストしている環境は kernel 2.4.25と FedoraCore1 の kernel 2.6.5-1.327 です.

 ドライバは以下のように読み込ませます.なお,SAA7133GYC-STVLP/R の場合は自動認識されますが, リモコン付きでない SAA7133GYC-STVLP の場合は subvendor および subdevice が異なりますので, 自動認識に失敗します.saa7134-cards.c の所を見て頂くと分かると思いますが,リモコン無し タイプの設定をコメントアウトしてありますので,これを有効にしてみて下さい

 modprobe upd64031a card=6
 modprobe upd64083 card=6
 modprobe saa7133gyc_stvlp debug=1
 modprobe saa7134 oss=1

 ちなみに太字で示している『debug=1』はとても重要です.これが前述した『得体の知れないチップ』 をコントロールするためのドライバなのですが,何故かこのオプションを付けないと初期化に失敗する ことが多いようです…

 なお,この一連のドライバは Vine3.0以降(と,言っても確認しているのは Vine3.0用と Vine3.1用 だけですが)の Vine の kernel には含まれていますので,ドライバを改めてインストールしなくても 利用できます.

 TV等の視聴は,ドライバがきちんと動作していれば, xawtv や tvtime で行えます.ただし tvtime を利用する場合は『tvtime --input=2』のようにオプションを付けて起動するか,saa7134-cards.c で tuner 入力を一番上に持ってこないといけないようです.これは,tvtime は起動時に接続されていない 入力ラインが選択された場合,エラーで落ちることに起因しています.

■ToDo
    ・二ヶ国語放送時への対応
    二ヶ国語放送を視聴すると,言語を選択しても,左右のチャンネルに副音声,主音声が再生される
    ・Tuner音声の左右入れ替え
    どうもSAA7133GYC-STVLPでは,外部入力音声は左右チャンネルが正しく入力されるようだが, Tuner(TV)の音声は逆になっているらしい.要調査.

 修正の仕方の見当は付いており,『近々直してみるね〜』と,宣言していたのですが,時間が無くって 手が回っていません…ivtvのコードの修正の方も手が回っていません….気長にお待ち頂ければ助かります…

■まとめ
 今回久々にソフトエンコカードを触ってみたわけですが,正直言いまして,侮り難しという 印象を持ちました.使用している PC の CPUパワーが有り余っており,DivX や XviD 等に落と したものしか残さないのであれば,ソフトエンコカード1枚で満足出来る環境が出来るのではな いかと思います.画質に関してさらに言及すると,ソフトエンコカードで直接視聴した方が, ハードエンコカードを使用したものよりも,充分分かる程度に高画質であるように思います.

 そういった意味で,『録画』用にハードエンコカード,『視聴』用にソフトエンコカード を1台の PC に組み込むというのも良い方法かなと思います.特に CX23416GYC-STVLP と SAA7173GYC-STVLP は使用している周辺チップがほぼ同じであり,初期化シーケンスも同じです ので,共存させた際の親和性は高いと思います(ただし,私の所では動作検証していません. 問題が起きましたら教えて頂けると助かります).

 とは言え,私の場合は,3クールくらい前の連続ドラマの最終回を録画していなかったことに 今頃気が付くほどTVを見る時間が確保できていないので,当分はハードエンコカード ばかりにお世話になりそうです.


『Asus Terminator 活用メモ』 へ戻る