横ラインずれノイズのナゾ


 互換チップセットをお使いでローコス勇者の皆さんなら、一度は悩んだ事のある「横ラインずれノイズ」(ほんとか?!) さすがに、自分一人の環境のみで解決法を生み出す事など出来ないので、このページでは、このノイズの発生傾向から、低減の方向を探ろう、という位置付けで行きましょう。

とりあえず、サンプルをば。(比較的症状は軽い方です)

作成環境
・AMD Athlon 600MHz(K75)
・MSI MS-6167 (AMD750 Chipset)
・PC100 CL2 128M+PC133 CL3 128M
・Matrox G400SH 32M
・Labway Xwave6000(YAMAHA YM744)
・IBM DPTA352050(On Board IDE)
・I/O DATA GV-BCTV3/PCI(Bt878)

取り込み設定
・取り込みソフト : AviCap.exe
・解像度 : 640x480
・カラーフォーマット : 32Bit RGBA
・圧縮 : PIC Motion JPEG
・その他
24fps化、インタレース解除等のフィルタ処理を一切行っていません。
ノイズが出ていてかつ、フィールドずれの無いフレームを選びました。

横ラインずれノイズの原因(2001-8-8新規追加)
※原因がはっきりしたので、古い記事は下に追いやりました。

 Bt8x8は、PCIのマスタとなってバスマスタ転送をするために、FIFOバッファというのを持っています。で、Bt8x8の場合、640x480、RGBA32Bit、30fpsのとき、仮に他のデバイスがバスマスタ転送中でマスタ権を奪えないとき、10nsでバッファがオーバーフローします。オーバーフローしてしまったデータは、他のデバイスと異なって転送を待ったり、保持しておくことが出来ないため、破棄するしかありません。この欠損したデータが横ラインずれノイズとして現れます。

 PCIバスは理論値33MHzx32bitで133MB/secと言われていますが、それは常に単一のデバイスがマスタ動作したときの値であり、実際にはBt8x8然り、GA然り、サウンドカード然り。。。とたくさんのデバイスがPCIバスにつながっていて、奪い合いのようにマスタ権を要求してきます。そのときの実効値としては、50MB/secも出れば御の字と言われているそうです。

 キャプチャ動作時は、Bt8x8がマスタになり、ホストブリッジをターゲットにしてデータを転送します(ホストブリッジからメモリへ)。そして、メモリ(ホストブリッジ)からIDEコントローラへとデータ転送するわけですから、無圧縮時だと、PCIバスを通るデータ量はキャプチャされたデータの少なくとも2倍流れることになります。無圧縮RGB+音声データはだいたい25MB/secですから、実効値50MB/secはかなり厳しい値であることがわかります。

 すると、チップセットのPCIバス転送能力がもろに効いてくることがわかります。少しでも転送が下手だと、すぐにFIFOバッファがオーバーフローして横ラインずれノイズが発生してしまいます。チップセット依存、BIOS設定依存することが容易に想像つくかと思います。

対処法
 これに関しては過去の記事とほとんど変化はありませんが、ひとつだけ。IDE RAIDボードを導入すると良くなる、という方もいらっしゃいますが、上の原因から推測すると、本質解では無いことが分かります。良くなる環境の方は、おそらくオンボードIDEコントローラがプアで、遅延が大きいのでは無いか、と想像しています。モノによっては高い買い物ですから、ご購入される方は事前に情報を集めておくほうが良いでしょう。

 過去記事の繰り返しになりますが、箇条書きで。

 1)RGB32、24bitを使うくらいなら、16bit相当のYUY2を使う。
 2)プレビューを切る(効果は薄いかな?)
 3)メモリパフォーマンスを煮詰める(ホストブリッジの遅延を少なくする)
 4)最新BIOSへのアップデート(PCI、メモリ周りの設定改善に期待する)
 5)PCI Latency Timerを大きくする(Bt8x8のマスタ権を長く保持できるようにする)
 6)(PCIバス転送の良く無い噂のあるマザーは避ける。。。この方面は疎いです、私)

パワーユーザーの方へ
※訳わからない人はやらないほうが良いです。

 PCI Latency Timerは、PCIの規格で定められており、PCIコンフィグレーションレジスタオフセット0DHに存在します。一般のBIOS設定で出来るLatency Timerは、ホストブリッジがマスタ動作したときのTimerだと思われ、効果が薄いと思います(確証は取れていません)。ですので、大きい効果を得たかったら、intelsat、wpcredit等のツールで直接Bt8x8のコンフィグレーションレジスタをいじったほうが良いです。が、デバイスNo.が環境に依存するので、そこは各自調べてください。

 intelsatの設定例(Autoexec.batに記述)

  c:\dos\intelsat.exe 0D 00 /d:11

 デバイスNo.11(おいらの環境)のレジスタオフセット0DHに00Hを書きこむ例です。このレジスタは、PCI Latency Timer値を8bitで書きこみます。単位は"PCI Clocks"です。また、下位3Bitがリードオンリーになっているそうなので、8Clocks単位で書きこむことになります。一般に64(40H)以上が良いとされていますが、Bt8x8のデータシートにはデフォルト値=0となっていたので、おいらは0にしています。検証の結果、おいらの環境では32(20H)以上、または0で横ラインずれノイズは出ませんでした。ただ、0にすると何かキャプチャが軽かったので。。。0が何を意味するのか不明なのがあれですけど(^-^;;

おまけ── Canopus FAQより ──
 DV Raptorの対処法のなかに、Latency Timer強制変更(iniファイル編集)というのがありますが、恐らくDV Raptorのこのレジスタをいじっているんでしょうね。”システムBIOSの値を強制変更”なんて書かれていますが。。。結果的にはそうだけど、違うよ、それ(^-^;;



以下は、以前の古い記事です。消すのも勿体無いので、残しておくことにします(汗

現時点でわかっている情報
  • INTELチップセットだと出ないらしい。
  • VIAなチップセットだと出やすいらしい。
  • AMD750はその中間程度(=おいら)。
  • オンボードIDEだと駄目らしい。
  • SCSIボード増設して、SCSI HDDに取りこむと出なくなるらしい。
  • 反面、内蔵OK、増設IDEカード経由だと駄目な人もいるらしい。
  • DMA転送をやめると出なくなります。もちろん、コマ落ち多発(ぉ
  • 取りこみ解像度を低くすると良くなる。
  • RGBよりは、YUY2、UYVY、BtYUVなどのYUV系が良いらしい。
  • 情報お待ちしております(ぉ

    ちなみに、「らしい」という表現は、いろいろな掲示板で手に入れた情報で、
    断定調なのは自分の実験結果です。

予想されうる事項
このことから予想されうる事項は、

Bt8x8とチップセットの相性

と、おいらの嫌いな言葉しか出てこないっす(滝涙)

それだけじゃ意味無いので、ちょっとまとめてみます。

・ノイズの出易さは、VIA>AMD>INTEL
これは掲示板情報からもほぼ確実みたいです。もちろん、VIA環境でも出ない方もいらっしゃるので悲観することは無いですが、これからキャプチャーマシンを組む方は極力INTELにしたほうが良いでしょう。AMD750も640x480x24Bitで出ないので、許容範囲です。

・PCIを通るデータの量が多くなると出易い。
これも一致した見解みたいです。キャプチャーは膨大な量のデータをキャプチャボード→メモリ→GA、HDDと、PCIの能力が問われる行為です。なので、640x480よりは320x480、RGB32Bitよりは24Bit、さらにYUV系と、流れるデータそのものを減らすのが得策のようです。また、メモリ→GAを減らす手としてプレビューを切るのも若干効果ありです。PCI GAをお使いの方なら、AGP GAに変えても効果有ります(体験しました)。

他に有効な手立てを見つけられた方がいらっしゃったら、動画なんでも掲示板で情報を教えていただけると助かります(^^;;;

(2001-06-24追記)
 その後、いろいろ情報が集まりまして、この現象は大体回避可能であることが分かってきました。まずはこの現象について新しい情報も含めおさらいしますと、

  • PCIのバス配分能力(広い意味で転送能力も含む)に依存し、能力の低いものはバスビジーが発生しデータ化け(=横ラインずれノイズ)を起こすこと。
  • 何もBt8x8に限った現象ではないこと。PCProや、DV Raptorでも起こるマザーは起こるそうです。
  • これは個人的な感触ですが、VIA KT133チップセットは弱いみたいです(^-^;;

 です。こういうことなので、チップセット依存はもとより、BIOS設定(特にPCIコンフィグレーションレジスタ)にも依存することがわかります。で、対処法ですが、

  • 最新BIOSへのアップデート
  • PCI Latency Timerを大きくする(64以上?・・・DV Raptorと同じ手法)
  • その他PCIパフォーマンス、メモリパフォーマンスに関する設定をいじる

 という対策で改善可能です。さあ、がんばってみよう!

戻る