【ALSA】サウンドドライバ総合スレ 2【OSS】
HD Audioの音が出ねーよ!問題の始まりは、蟹(RealTek)がLinuxに提供した
ドライバがダメダメだったことなんだよな。
どこがダメダメかというと、HD Audioの規格上、自動認識でベンダーや
コーデックの種類を問わずに解決できるし、そうすべきだったはずの部分を
コーデックの種類別に決め打ちで記述してあった。
そのせいで、ALSAの人達が、他のベンダーのコーデック、例えばSigmaTel
社のコーデックのモジュールを書くときに、蟹のドライバをうっかり参考
にしてしまい、ベンダー別のモジュールにコーデック別の処理が延々と
記述されることになってしまった。
で、問題は何故蟹がそんなことをしたか?なんだが、同じ型番のチップの
リビジョン違いで、HD Audio 0.9準拠とHD Audio 1.0準拠のチップが混在
してたのが原因じゃないかって言われてる。
何でも、HD Audio 0.9なコーデックだと、トポロジーパーサがベンダー依存
の特殊な機能を持ったwidgetの使用を強いられるケースがあるらしい。
HD Audio 1.0ではトポロジーパーサがベンダー依存のwidgetを使わずに解決
できなくてはいけないことになっているので問題ない。
蟹のコーデックの仕様書では、この辺が上手に誤摩化されていて、この
ノードIDのwidgetはこういう機能を持つとは書いてあるけど、その
widgetの種類を問い合わせた時に、何が返ってくるかはどこにも書いて
ない。だから、実際にトポロジパーサがwidgetの種類を問い合わせると、
同じ型番のコーデックでもリビジョンによって違う結果が返ってくるわけだ。
そんなこんなで蟹はLinux向けのドライバを提供する時に、ノードID別に
widgetの種類を静的に記述して、widgetの種類を直接コーデックに問い合わ
せなくても済むようなコードを書いた。
で、巡り巡って世界中で「音声出ねーよ!」の怨嗟が満ちあふれることに
なったわけだ。
もちろん、これだけが音が出ない原因じゃないけどね。
ちなみに、今だとHD Audio 0.9準拠のコーデックを探す方が難しい。
理由はDesigned for WindowsXXXロゴを取得する時に、HD Audio 1.0準拠の
コーデックじゃないといけなくなったから。