DirectShow: フィルタグラフのRun/Stop などの状態遷移について

こちらもDirectShowアプリケーションの開発者様からご指摘を頂いた点になります。 DirectShowアプリケーションがフィルタグラフの状態遷移を励起するAPI (Run, Stop, Pause など) を非常に高速かつ連続的にコールした場合、DirectShowアプリケーションが応答を停止してハングすることがあります。 こちらはDirectShow設計上の制限事項となります。DirectShowでは、それらの API はアプリケーションのユーザーインタフェース上のボタン操作に由来することを想定して設計されているため、人間の操作では不可能なくらい高速・連続的にコールするシナリオは想定されておりません。 恐れ入りますが、通常人間の操作で発生するオーダーの間隔を空けてコールいただけますようお願いいたします。 該当するAPIは以下の通りです。 IMediaControl::Run IMediaControl::Pause IMediaControl::Stop IMediaControl::StopWhenReady ご迷惑をおかけして申し訳ありませんが、よろしくお願いいたします。

0

DirectShow: Microsoft DTV-DVD Video Decoder とスケーリング(拡大縮小)について

こちらは DirectShow アプリケーション開発者様からご指摘を頂いた件です。 Windows7 においてMicrosoft DTV-DVD Video Decoder を用いて コンテンツをデコードしている場合に、レンダリング結果が真っ黒のビデオとなることがあります。これは以下の条件がすべて当てはまるシナリオで発生します。 DXVA によるハードウェアデコード支援が有効になっている。 Microsoft DTV-DVD Video Decoder とレンダラとの間にカスタムの変換フィルタが入っている。 その変換フィルタはコンテンツのフレームサイズとは異なるサイズでレンダラとメディアタイプを合意しており、そのサイズのフレームを Microsoft DTV-DVD Video Decoderに要求している。すなわち、スケーリング(拡大縮小)を Microsoft DTV-DVD Video Decoderに要求している。 この現象は下記の方法で回避できます。 変換フィルタにスケーリングを実装する。Microsoft DTV-DVD Video Decoder との間ではコンテンツと同じフレームサイズでメディアタイプを合意する。 ご迷惑をお掛けして申し訳ありませんが、よろしくお願いいたします。  

1

Sleep Away.mp3 に無効なビットストリームが含まれる件

こちらは最近MP3デコーダ開発者のお客様からご指摘をいただいた件です。Windows7 に同梱されている Sleep Away.mp3 にはヘッダに無意味なビットストリーム(いわゆるゴミ)が入っています。 そのようなファイルであっても、MP3 の規格 ISO/IEC 11172-3 には準拠しています。しかしMP3 デコーダの実装によってはこのことが問題となる場合があります。具体的には、ファイルが壊れていると表示されたり、ノイズが発生するなど、が考えられます。 影響を受けるデコーダの実装の例は以下のとおりです: ヘッダの Size フィールドに書かれている値を見てタグサイズを調べ、そのタグサイズ分だけ読み飛ばしたところから開始して最初の同期ワードを以ってフレームとする。 そのような実装になっているデコーダでは、Sleep Away.mp3 のオフセット 0x6ec1 からの同期ワード(と解釈できるワード:赤い枠の部分)から始まる部分をフレームであると認識します。そしてその部分をフレームとして読み出すと複数のフィールドに無効な値が入っているため、エラー状態になります。 問題の部分は、ISO/IEC 11172-3 にてらして考えますと、フレームとは解釈できませんので、単純に読み飛ばすことが期待されます。ここを読み飛ばして同期ワードを探していくと、0x6f54 (青い枠の部分)から始まる部分が候補として見つかります。こちらは仕様に準拠したフレームとなっていますので、この場所からデコードを開始すれば問題は起こりません。 デコーダ開発者の皆様にはご迷惑をおかけしますが、MP3エンコーダの実装によってはこのようなビットストリームが生成されることも一般にありますので、フレームと解釈できないビットストリームは単純に読み飛ばすように実装いただけますよう、よろしくお願い申し上げます。

0

楽しいハック講座 (4) Windows7 オーディオアーキテクチャの概要

こんにちは。日本マイクロソフトの我孫子です。今日は Windows7 のオーディオ再生・録音の仕組みについて、ハック講座らしくディープに解説していきます。 Win7 時代に ASIOは必要なのか、いわゆる「ビットパーフェクト」な再生に最適な環境は何か、などなどについて考えていく材料になればと思います。 ■Windows7 のオーディオアーキテクチャ まずは百聞は一見にしかず、ということで、図をご覧下さい。この図は、Win7 におけるオーディオの再生処理の内部動作を示しています。紙面の都合上、ここでは、「理想的な」ドライバが使われている場合のみが描かれており、「理想的でない」場合の内部動作は割愛しています。また、録音処理については大部分の矢印が逆方向になるだけですのでこちらも割愛しています。さらに、ユーザモードが詳細になっている反面、カーネルモードやハードウェアの詳細は割愛されています。それらについてはまた日を改めて取り上げる予定です。 ■理想的なドライバ 「理想的な」ドライバとは、以下のいずれかです。 UAA 準拠 (UAA: Unified Audio Architecture)  USB 接続で Microsoft のドライバ (usbaudio.sys) を使用する場合 IEEE 1394 接続で Microsoft のドライバ (avcaudio.sys) を使用する場合 PCI バス接続でデバイスベンダー提供の HDAudio ドライバを使用し、かつ、そのドライバが Windows7 Certified ロゴを取得している場合 デバイスベンダー提供のWaveRT ミニポートドライバを使用し、かつ、そのドライバが Windows7 Certified ロゴを取得している場合 「理想的でない」ドライバとは、以下のいずれかです。 UAA 準拠 PCI バス接続でデバイスベンダー提供の HDAudio ドライバを使用し、かつ、そのドライバが Windows7 Certified ロゴを取得していない場合 デバイスベンダー提供のWaveRT ミニポートドライバを使用し、かつ、そのドライバが…

0

プログレッシブ ダウンロード のシークとソース フィルタの関係

  こんにちは、はらだんです。本日はプログレッシブダウンロードの挙動についてお話しします。   Windows Media Service(WMS) によるストリーミングサービスではなく、Web サーバーに動画コンテンツを置き、これを再生する場合、WMP はストリーミングではなく、単純にダウンロードを行いながら再生を行います。   この場合コンテンツのビットレートには関係なく、可能な最大の速度でコンテンツを IE のキャッシュにダウンロードしつつ、WMP は先頭から再生を開始いたします。   コンテンツの任意の場所からの再生(シーク)、早送り、巻き戻しなどはできないのがプログレッシブダウンロードの特徴で、ストリーミングとの違いです。ただし、コンテンツが完全に IE のキャッシュに入ると、これはローカルコンテンツの再生となるので上記の制限はなくなります。   実際に使ってみると Windows XP の WMP ではシークができませんが、Windows Vista / Windows 7 の WMP ではシークが可能です。   実はこの違いは WMS が使うコンテンツのソースフィルタが XP と Vista 以降で異なることに起因しています。   XP の WMP では Windows Media Format SDK の WM ASF Reader フィルタが使用され、 Vista…

0

KB 紹介 : DirectShow の脆弱性に関するセキュリティ更新プログラム MS09-028

  こんにちは、はらだんです。今日は先日お伝えしておりましたサポート技術情報 971778 に対応した修正モジュールの公開をお知らせします。(前回の記事)   971778 は QuickTime のデコーダ フィルタの脆弱性の問題でした。今回の修正モジュールはこれに加えて 2 つの脆弱性を修正するものとなります。詳細については以下のセキュリティ情報をご覧ください。   マイクロソフトセキュリティ情報 MS09-028 – 緊急 Microsoft DirectShow の脆弱性により、リモートでコードが実行される (971633) http://www.microsoft.com/japan/technet/security/bulletin/MS09-028.mspx   危険レベルは「緊急」となりますので、お手数ではございますが是非インストールして対策をお願いいたします。

0

KB 紹介:KB971778 DirectShow 脆弱性により、リモートでコードが実行される。

  こんにちははらだんです。しばらく立て込んでいて間が空いてしまいました。申し訳ございません。 本日は前回とはまた別の要因による Quartz.dll の脆弱性に関するサポート技術情報の紹介です。こちらも緊急度の高い内容となります。大変ご迷惑おかけいたしますが、紹介するサポート技術情報をご確認いただき対策をお願いします。   今回のサポート技術情報には現時点で修正モジュールがリリースされていません。すでに限定的な攻撃が始まっていることから当面の回避策を公開させていただくことになりました。現在研究開発部門では修正モジュールの作成を行っています。   回避策はレジストリ操作により、該当機能を使えなくするもので、以下のサポート技術情報内の Microsoft Fix it のアイコンをクリックしていただければ脆弱性の回避策が講じられます。 (元に戻すことも可能です。)     マイクロソフト セキュリティ アドバイザリ: DirectShow 脆弱性により、リモートでコードが実行される. http://support.microsoft.com/kb/971778/ja     概要をご説明します。 ———- 脆弱性の見つかった箇所は DirectShow フィルタの QuickTime パーサー フィルタです。このフィルタは古い QuickTime 2.0 までに対応しています。(現在のバージョンは 7 ですので、実質は現行のコンテンツを視聴することができません。QuickTime Player をご利用頂いていると思います。)   このフィルタは旧来のコンテンツを視聴するために OS の互換性の目的で同梱されていましたが、Vista ではすでに同梱されておりません。このため、今回の脆弱性には Vista 以降の OS は含まれません。対象となる OS はWindows 2000 , Windows XP ,…

0

KB 紹介:KB961373 ~ Quartz.dll の脆弱性によりリモートでコードが実行される。

こんにちは、はらだんです。本日は DirectShow の脆弱性のセキュリティ更新プログラムが公開されたことをお知らせします。   緊急度が高い内容となります。ご迷惑おかけいたして申し訳ございません。この更新プログラムをインストールしてください。   対象となる OS は、Windows XP , Windows 2000 , Windows Server 2003 の各エディションです。詳細なパッケージのリストについては以下のサポート技術情報に記載があります。   サポート技術情報(KB961373) [MS09-011] Microsoft DirectShow の脆弱性により、リモートでコードが実行される   細工された Motion JPEG のファイルを再生しようとした場合にリモートでコードを実行される可能性がある脆弱性で、対象のコンポーネントは quartz.dll です。   何らかの理由で新しいモジュールがインストールできない縛りのある環境では quartz.dll を使用できなくする方法で当面はしのげます。 しかしこれは DirectShow にとって滅びの言葉です。「バルス」なみに非・推奨いたします。 副作用としてほぼすべての DirectShow アプリケーションが動かなくなります。Windows Media Player も例外ではありません。サポート技術情報にも記載がありますが、コマンド プロンプトにて regsvr32 /u quartz.dll を実行します。     脆弱性の技術的な詳細はご紹介できないのですが、深刻な脆弱性ですので、しつこいようですが修正モジュールのインストールをよろしくお願いいたします。   はらだんでした。  

1

DirectShow フィルタ機能紹介 ~ 知っておくと便利なフィルタ

こんにちははらだんです。今回は DirectShow のフィルタの種類を紹介します。これまでに GraphEdit にてフィルタを構成する方法をお話ししましたが、実際フィルタ一覧を見ると、そのフィルタの名称から、わかりやすいものもあればさっぱりわからないものもあるのではないかと思います。これらについて DirectX9 SDK のドキュメントに表がありますのでご紹介します。その中から知っておくとよいと思うフィルタをいくつかピックアップします。レンダラ フィルタに関する小ネタも紹介します。   まずはドキュメントの紹介です。   Microsoft DirectX 9.0 DirectShow のフィルタ   GraphEdit で追加することのできるフィルタにはこのリストにない物ももちろんあります。Windows Media Player が使用しているフィルタや、サード パーティ製のフィルタなどです。さらには、キャプチャ フィルタ、ハードウェア デコーダ フィルタなどデバイスに強く依存するフィルタもある場合が環境によりあります。それらについては残念ながら情報がありません。トライ アンド エラーで試すという状況になります。   また Vista 以降で追加されたフィルタなどは日本語のドキュメントにはありませんのでこちらを参考にしてください。   DirectShow Filters     折角ですので、その中からいくつかピック アップしてコメントをさせていただきます。   ・ Color Space Converter  カラー フォーマットの変換(色空間の変換)をします。ビデオ デコーダの   後続のエフェクト関連フィルタやレンダラにうまくピンが繋がらない時に   間に入れると接続ができるようになることが多いので、覚えておくと便利です。   ・ File Writer  データをファイルに書き出すフィルタです。エンコードしたデータの出力や、   デコードしたデータの出力などファイルに書き出すフィルタです。   テストには重宝します。…

1

GraphEdit の使い方 (2) – Media Sub Type の確認方法および GraphEdit を使ったファイル コンバータの作成

こんにちははらだんです。前回の GraphEdit の使い方 (1) に引き続き GraphEdit の使い方です。今回は Media Sub Type の確認、フィルタ プロパティの設定と、GraphEdit を使ったファイル コンバートをやってみたいと思います。   目次(前回の続き) 3. Media Sub Type の確認~フィルタ プロパティの設定   -1.  proppage.dll の登録   -2.  Media Sub Type の確認   -3.  フィルタ プロパティ 4. ファイルの変換   -1.  フィルタ グラフ作成     3. Media Sub Type の確認~フィルタ プロパティの設定 ———- GraphEdit にてフィルタを右クリックするとポップアップメニューに Filter Properties… とか Pin Properties… という項目があると思います。しかし、選択すると無情にも…

1