プログラマのつれづれなるままにプログラマのつれづれなるままに音宮志久が思ったことなどをネタにします。プログラムネタ・数学ネタがメインです。WindowsMediaPlayer12でハードウェアデコードを使わないようにするには?WindowsMediaPlayer12でハードウェアデコードを使わないようにするには?コメントを残すタグにDirectShowをつけたのはわざとです。CUDAのプログラム用にドライバを変更したことは書きましたが、その影響でハードウェアデコードを使ったときにFullHDでのH.264のデコードが間に合わなくなった、という現象が起きたことはすでに書きましたが・・・。これはさすがに放置しておく訳にいかないので、どうにかしてハードウェアデコードを使わないようにしなければなりません。WindowsMediaPlayer12ではデフォルトの状態では自動的にハードウェアデコードを使用するデコーダが使われてしまいます。Decoderというフィルタ)普通なら「CPUの負荷が下がる」「一定条件で画質が向上する」と言ったメリットの方が大きいのですが、今回の場合に限りそれが逆効果になってしまうというものです。これをどうにかするためにいろいろと細工を行って解決する、という方法を考えました。単純に考えれば次のいずれかを行えばどうにかなるはずです。システムに対してハードウェアデコードの使用を停止させるハードウェアデコードを使用するフィルタを使用させないが、これがかなり面倒なんですね・・・。その理由はつけたタグに連動しています。ちなみに前者は調べた範囲では簡単な方法がなかったので行っていません。今回試した方法は後者です。WMVだけなら簡単な設定でハードウェアデコードの使用を停止させることができるのですが・・・。Windows7のWindowsMediaPlayer12は再生にDirectShowより優先してMediaFoundationを使用するMediaFoundationは、WindowsVistaから導入されたDirectShowに替わる新しいメディアの処理用API群というわけです。自分も知らなかったのですが。これのためにWindows7ではいくらDirectShowの設定を変更してもWindowsMediaPlayerではMediaFoundationで処理できるものはまずそちらで処理が行われるために設定が利かなかったわけです。Windows7+WindowsMediaPlayer12では特殊な設定をしない限りffdshowといえどWindows7標準のデコードフィルタより優先して使用されることがないこれも面倒です。単純にffdshowを導入してH.264のデコードをさせようとしてもそれに割り込んで使用される訳なので。システム標準のフィルタが優先して使用されるとかWindowsMediaPlayerはいろいろと難しい仕様だな~と思います。いうわけで、この問題を突破するために使った方法が以下の通りです。Win7CodecsをインストールしてffdshowおよびWindows7における特殊な設定を可能にするWin7DSFilterTweakerをダウンロードするWin7DSFilterTweakerでWindowsMediaPlayerにおいてMediaFoundationを使ったメディア再生を無効にする(無効にするとWindowsMediaPlayer12はDirectShow経由での再生を試みる)Win7Codecsの設定ツールを使ってH.264での優先フィルタをシステム標準フィルタからffdshowのフィルタに変更この変更でやっとWindowsMediaPlayer12でのH.264のデコードがffdshow経由になる、という目的の結果を得ることができました。なんなんだ?といわれたらそれまでな作業ですが・・・。追記ちなみに、この処理を行うとWindowsMediaPlayer12で音声ラインがマルチトラック時にトラックを選択できなくなります。(正しくはすべての音声ラインが同時に再生状態に陥ります)マルチトラックのmp4を再生させるときに不利になりますのでその点は要注意、ということで・・・。コメントをキャンセルメールアドレスが公開されることはありません。気になるプログラムネタや数学ネタがあったら書き込みたいのだが残業が長すぎて眠気が全くとれず体調があまりよくない。過労などでぶっ倒れるかもしれない。あと、さすがに独り身が寂しいのでなんとかしたいと考えてはいるのだが...。アクセスカウンタアクセス数:スポンサーリンクモバイルバージョンに。