<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>川西 裕幸のブログ : Media Foundation</title><link>http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx</link><description>Tags: Media Foundation</description><dc:language>ja-JP</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>PDC 2009 (Nov.18)</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/11/19/9925153.aspx</link><pubDate>Thu, 19 Nov 2009 07:01:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9925153</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9925153.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9925153</wfw:commentRss><description>&lt;P&gt;PDC09 も本番2日目です（私は3日目ですが）、今日もキーノートがありました。今日、参加したセッションは以下の通りです。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;キーノート&lt;/LI&gt;
&lt;LI&gt;BOF Developers on Better Design, User Experience and Why It Matters&lt;/LI&gt;
&lt;LI&gt;CL34 Media Foundation: Supporting Hardware Codecs and Cameras&lt;/LI&gt;
&lt;LI&gt;CL15 Modern 3D Graphics Using Windows 7 and Direct3D 11 Hardware&lt;/LI&gt;
&lt;LI&gt;FT07 The State of Parallel Programming&lt;/LI&gt;
&lt;LI&gt;CL12 Developing with the Windows API Code Pack for Microsoft .NET Framework&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;&lt;A href="http://microsoftpdc.com/Sessions/KEY02" mce_href="http://microsoftpdc.com/Sessions/KEY02"&gt;キーノート&lt;/A&gt;&lt;/H4&gt;
&lt;P&gt;ウルトラセブンのテーマソングとともに現れたSteven SinofskyがIE9について、HTML5, JavaScriptの高速化、Direct2D・DirectWriteの使用などをアナウンスしましたが、PDC09の参加者（社員は除く）にWindows 7 が乗ったAcerのマルチタッチ ノートPCを&lt;STRONG&gt;無料で配布&lt;/STRONG&gt;するというビッグニュースにかき消されてしまいました（写真は捨てられた箱）。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20022_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20022_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="PDC09 Nov.18 022" border=0 alt="PDC09 Nov.18 022" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20022_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20022_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;次にScott Guthrieが Silverlight 4 Betaのアナウンスをしました。&lt;A href="http://silverlight.net/" mce_href="http://silverlight.net/"&gt;Silverlight.net&lt;/A&gt; からダウンロードできます。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20009_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20009_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="PDC09 Nov.18 009" border=0 alt="PDC09 Nov.18 009" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20009_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20009_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;最後に Kurt DelBene が Office 2010 と Sharepoint 2010 のベータをアナウンスしました。&lt;A title=http://www.microsoft.com/2010/ja href="http://www.microsoft.com/2010/ja" mce_href="http://www.microsoft.com/2010/ja"&gt;http://www.microsoft.com/2010/ja&lt;/A&gt; からダウンロードできます（日本語版）。Sharepoint 2010 は Visual Studio 2010 とちゃんと統合され、F5キーでちゃんとサーバーで実行できると言うと、会場は拍手喝采でした。これまでかなり大変だったんですね。それ以外にも Duet Enteprise for Sharepoint and SAP や Outlook Social Connector もアナウンスされました。最後にMIX10についても言及されていました。&lt;/P&gt;
&lt;H4&gt;Developers on Better Design, User Experience and Why It Matters&lt;/H4&gt;
&lt;P&gt;BOF（Bird of Feather）でした。最初のお題は以下のように書いてありましたが、みんなが意見を言い合うので結局進まず、①だけで終わりました。&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Best and Worst UX Experience? What can we learn?&lt;/LI&gt;
&lt;LI&gt;The UX ROI&lt;/LI&gt;
&lt;LI&gt;Building Better UX Teams)&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;UCD（ユーザー中心設計）や Expression Blend の SketchFlowの話になったのですが、私がペルソナの話が聞きたいと振ったところ、100名くらいの参加者の5・6名がペルソナを使ったことがあると答え、ペルソナで盛り上がりました。そのあと開発者とデザイナーの仕事などの話で終わりました。テーマの割に1時間では時間が少なかったようです。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20012_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20012_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="PDC09 Nov.18 012" border=0 alt="PDC09 Nov.18 012" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20012_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20012_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H4&gt;&lt;A href="http://microsoftpdc.com/Sessions/CL34" mce_href="http://microsoftpdc.com/Sessions/CL34"&gt;Media Foundation: Supporting Hardware Codecs and Cameras&lt;/A&gt;&lt;/H4&gt;
&lt;P&gt;講演者の Stan Pennington は以前からよく知っていたので楽しみだったのですが、広い部屋に参加者が10名程度しかいなくてかわいそうでした。ランチセッションでネイティブWin32の話だから、少ないとは思いましたが...&lt;/P&gt;
&lt;P&gt;Windows のメディア インフラは以下の通り&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Video for Windows&lt;/LI&gt;
&lt;LI&gt;DirectShow&lt;/LI&gt;
&lt;LI&gt;Windows Media Format SDK&lt;/LI&gt;
&lt;LI&gt;Media Foundation&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20013_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20013_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="PDC09 Nov.18 013" border=0 alt="PDC09 Nov.18 013" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20013_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20013_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;MSがMFを使う理由&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ストリームオブジェクト（IStream）&lt;/LI&gt;
&lt;LI&gt;接続性とデータフロー&lt;/LI&gt;
&lt;LI&gt;より良いスレッド制御&lt;/LI&gt;
&lt;LI&gt;制約のあるコンポーネントとトポロジー&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;MFの機能&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;COM&lt;/LI&gt;
&lt;LI&gt;C++&lt;/LI&gt;
&lt;LI&gt;Vista&lt;/LI&gt;
&lt;LI&gt;Windows 7&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Source Reader, Sink Writer, Transcode API, Asynchronous MFT, HW Accerelation&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;ハードウェア コーデック ライセンス プログラム&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ビデオ コーデックとビデオ プロセッサーのみ&lt;/LI&gt;
&lt;LI&gt;WME用のインボックスMDTコーデック&lt;/LI&gt;
&lt;LI&gt;ｗｍａｌ＠ｍｉｃｒｏｓｏｆｔ．ｃｏｍにメールしてください。&lt;/LI&gt;
&lt;LI&gt;2種類のコードタイプ Transcode only, General&lt;/LI&gt;
&lt;LI&gt;正しい ＭＦ属性の設定が必要、ＭＦＴはハードウェアデータフローが使える&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Ｍｅｄｉａ Ｆｏｕｎｄａｔｉｏｎのブログ &lt;A href="http://blogs.msdn.com/mf/" mce_href="http://blogs.msdn.com/mf/"&gt;http://blogs.msdn.com/mf/&lt;/A&gt; &lt;/P&gt;
&lt;H4&gt;&lt;A href="http://microsoftpdc.com/Sessions/CL15" mce_href="http://microsoftpdc.com/Sessions/CL15"&gt;Modern 3D Graphics Using Windows 7 and Direct3D 11 Hardware&lt;/A&gt;&lt;/H4&gt;
&lt;P&gt;Agenda&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows 7 Direct3D レビュー&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Direct3D 10 レビュー&lt;/LI&gt;
&lt;LI&gt;Expanding Reach: D3D10Level9 &amp;amp; WARP&lt;/LI&gt;
&lt;LI&gt;HLSL &amp;amp; Shader&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;D3D11&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;マルチスレッド&lt;/LI&gt;
&lt;LI&gt;テセレーション&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;Direct3D 10 パイプライン&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;入力アセンブリー⇒頂点シェーダー⇒ジオメトリーシェーダー⇒ラスタらいざー⇒ピクセルシェーダー⇒出力合成&lt;/P&gt;
&lt;P&gt;Direct3D10 Level9 フィーチャーレベル Level9_2, Level9_1, Level9_1, WARP&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Direct3D 11 デザインゴール&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;非同期リソース ロード&lt;/LI&gt;
&lt;LI&gt;マルチスレッド 描画と状態変更&lt;/LI&gt;
&lt;LI&gt;デバイスとコンテキスト、3つのコンテキスト：デバイス、直接コンテキスト、繰り延べコンテキスト&lt;/LI&gt;
&lt;LI&gt;状態継承&lt;/LI&gt;
&lt;LI&gt;Direct3D 11 APIは D3D10ハードウェアとドライバでも利用可能&lt;/LI&gt;
&lt;LI&gt;VistaとWinodows 7で利用可能&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20018_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20018_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="PDC09 Nov.18 018" border=0 alt="PDC09 Nov.18 018" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20018_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20018_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Direct3D 11 テセレーションは、Bezier, NURBS, 動的・静的テセレーション、変位、再分割に使える&lt;/P&gt;
&lt;P&gt;FBXフォーマット&lt;/P&gt;
&lt;P&gt;Windows Vistaでの性能更新 &lt;A title=http://support.microsoft.com/kb/971644 href="http://support.microsoft.com/kb/971644" mce_href="http://support.microsoft.com/kb/971644"&gt;http://support.microsoft.com/kb/971644&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4&gt;&lt;A href="http://microsoftpdc.com/Sessions/P09-17" mce_href="http://microsoftpdc.com/Sessions/P09-17"&gt;The State of Parallel Programming&lt;/A&gt;&lt;/H4&gt;
&lt;P&gt;この講演者の Burton Smith は Microsoft のフェローで&lt;A href="http://itpro.nikkeibp.co.jp/article/Interview/20070905/281191/" mce_href="http://itpro.nikkeibp.co.jp/article/Interview/20070905/281191/"&gt;並列コンピューティングの第一人者&lt;/A&gt;として有名な方のようです。大学の授業のようで非常に難しかったです。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20021_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20021_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="PDC09 Nov.18 021" border=0 alt="PDC09 Nov.18 021" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20021_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20021_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;結論&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;関数型言語とトランザクション メモリーはより高いレベルの並列プログラミングを実現する&lt;/LI&gt;
&lt;LI&gt;分離とアトミックの効率的な実装が重要&lt;/LI&gt;
&lt;LI&gt;アーキテクチャがこれらの助けになるはずだ&lt;/LI&gt;
&lt;LI&gt;フォンノイマン モデルは近々置き換えられるだろう&lt;/LI&gt;&lt;/UL&gt;
&lt;H4&gt;&lt;A href="http://microsoftpdc.com/Sessions/CL12" mce_href="http://microsoftpdc.com/Sessions/CL12"&gt;Developing with the Windows API Code Pack for Microsoft .NET Framework&lt;/A&gt;&lt;/H4&gt;
&lt;P&gt;&lt;A href="http://code.msdn.microsoft.com/WindowsAPICodePack" mce_href="http://code.msdn.microsoft.com/WindowsAPICodePack"&gt;Windows API Code Pack&lt;/A&gt;の使い方をサンプルを使って紹介していました、&lt;/P&gt;
&lt;P&gt;アナウンス：バージョン1.0.1 に更新されたそうです&lt;/P&gt;
&lt;H4&gt;Ask the Expert&lt;/H4&gt;
&lt;P&gt;午後6個半から開催された Ask the Expertは、Microsoftの様々なテクノロジーの専門家（講演者など）とテーブルを囲んでディスカッションできる時間です。これも日本人にはちょっと難しいイベントでしたが、ビールと軽食が出ました。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20023_2.jpg" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20023_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="PDC09 Nov.18 023" border=0 alt="PDC09 Nov.18 023" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20023_thumb.jpg" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/PDC2009Nov.18_9FAE/PDC09%20Nov.18%20023_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;【追記】各セッションのビデオへのリンクを追加しました&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9925153" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/User+Experience/default.aspx">User Experience</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Parallel/default.aspx">Parallel</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/PDC+2009/default.aspx">PDC 2009</category></item><item><title>Dolby Digital CODEC @ Windows 7</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/09/15/9895213.aspx</link><pubDate>Tue, 15 Sep 2009 04:50:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9895213</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9895213.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9895213</wfw:commentRss><description>&lt;p&gt;Windows 7 上の &lt;a href="http://ja.wikipedia.org/wiki/%E3%83%89%E3%83%AB%E3%83%93%E3%83%BC%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB"&gt;Dolby Digital&lt;/a&gt; CODEC（AC-3など）には制限があるので、独自のメディア アプリケーションを開発される方は、注意してください。SDK ドキュメント「&lt;a href="http://msdn.microsoft.com/en-us/library/dd390676(VS.85).aspx"&gt;Microsoft MPEG-1/DD/AAC Audio Decoder&lt;/a&gt;」によると、以下のように記述されています。&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;&amp;#160; The Microsoft implementation of the Dolby Digital technology is restricted under terms of the Dolby Digital licensing program to use by Microsoft applications.&lt;/p&gt;  &lt;p&gt;つまり、Windows 7 に搭載されている、マイクロソフトが実装した AC-3 デコーダー（DirectShow フィルター）は、マイクロソフト製品（たとえば Windows Media Player）以外では使うことができません。&lt;/p&gt;  &lt;p&gt;したがって、AC-3 でエンコードされたメディアを再生したいアプリケーション開発者は Dolby Digital からライセンスを取得し、デコーダーを実装する必要があります。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9895213" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>WPF MediaKit @ codeplex</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/17/9836430.aspx</link><pubDate>Fri, 17 Jul 2009 05:39:24 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9836430</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9836430.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9836430</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://wpfmediakit.codeplex.com/"&gt;WPF MediaKit&lt;/a&gt; では、DirectShow や MediaElement を WPF で使えるようにしています。作者は &lt;a href="http://jmorrill.hjtcentral.com/"&gt;Jeremiah Morrill&lt;/a&gt; です。&lt;/p&gt;  &lt;p&gt;例えば DvdPlayerElement 要素とか VideoCaptureElement があり、以下のように使えます。&lt;/p&gt; &lt;form id="aspnetForm" enctype="multipart/form-data" method="post" name="aspnetForm" action="http://wpfmediakit.codeplex.com/" autocomplete="off"&gt;   &lt;table id="CanvasTable" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;       &lt;tr valign="top"&gt;         &lt;td&gt;           &lt;div id="Canvas"&gt;             &lt;div id="CanvasContent"&gt;               &lt;div id="ProjectBody" class="SiteContent"&gt;                 &lt;table class="SiteContentTable" cellspacing="0" cellpadding="0"&gt;&lt;tbody&gt;                     &lt;tr valign="top"&gt;                       &lt;td class="MainContent"&gt;                         &lt;div class="MainContentMinWidthContent"&gt;                           &lt;div id="ctl00_ctl00_MasterContent_ProjectContentPanel" class="ProjectContent"&gt;                             &lt;table cellspacing="0" cellpadding="0" width="100%"&gt;&lt;tbody&gt;                                 &lt;tr&gt;                                   &lt;td valign="top"&gt;                                     &lt;div id="ctl00_ctl00_MasterContent_ContentPanel" class="Content"&gt;                                       &lt;div class="WikiHolder"&gt;                                         &lt;div id="ctl00_ctl00_MasterContent_Content_WikiContent" class="WikiContent"&gt;&lt;span id="ctl00_ctl00_MasterContent_Content_wikiSourceLabel"&gt;                                             &lt;div class="wikidoc"&gt;                                               &lt;div style="background-color: white; color: black"&gt;                                                 &lt;pre&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;WPFMediaKit&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;VideoCaptureElement&lt;/span&gt; &lt;span style="color: red"&gt;x:Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;videoCapElement&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;LoadedBehavior&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;Play&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;DesiredPixelWidth&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;320&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;DesiredPixelHeight&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;240&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;Stretch&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;Fill&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;VideoCaptureSource&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;{Binding Path=CaptureDeviceName}&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;
       &lt;span style="color: red"&gt;FPS&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;30&lt;/span&gt;&lt;span style="color: black"&gt;&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
                                              &lt;/div&gt;
                                            &lt;/div&gt;
                                          &lt;/span&gt;&lt;/div&gt;
                                      &lt;/div&gt;
                                    &lt;/div&gt;
                                  &lt;/td&gt;
                                &lt;/tr&gt;
                              &lt;/tbody&gt;&lt;/table&gt;
                          &lt;/div&gt;
                        &lt;/div&gt;
                      &lt;/td&gt;
                    &lt;/tr&gt;
                  &lt;/tbody&gt;&lt;/table&gt;
              &lt;/div&gt;
            &lt;/div&gt;
          &lt;/div&gt;
        &lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;&lt;/table&gt;
&lt;/form&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9836430" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Media Foundation ⑥ WebCam + WPF XAMLとC#の実装</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/07/9821139.aspx</link><pubDate>Tue, 07 Jul 2009 04:38:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9821139</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9821139.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9821139</wfw:commentRss><description>&lt;P&gt;それでは XAMLとC#を実装しましょう。次のようにビデオ画像と、スライダーで回転・スケールを行うので、XAMLではD3DImageと2つのスライダー（とラベル）を宣言します。一つのスライダーはD3DImageの回転角度に、もう一つはD3DImageのXScaleとYScaleにバインディングします。&lt;/P&gt;
&lt;P&gt;D3DImageはSystem.Windows.Interop名前空間にあるので、名前空間の追加に注意してください。&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPFXAMLC_CC85/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPFXAMLC_CC85/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPFXAMLC_CC85/image_thumb_1.png" width=244 height=184 mce_src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPFXAMLC_CC85/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;H4&gt;C#の実装&lt;/H4&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 8pt; mso-bidi-font-size: 11.0pt" lang=EN-US&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/hiroyuk/archive/2009/03/30/9517928.aspx" mce_href="http://blogs.msdn.com/hiroyuk/archive/2009/03/30/9517928.aspx"&gt;D3DImage チュートリアル&lt;/A&gt;との違いは、初期化時にビデオのサイズを取得していることと、Rendering イベントハンドラーとコールバックを宣言する代わりに、&lt;STRONG&gt;Windows メッセージを処理するためのコールバック&lt;/STRONG&gt;（ここではBltVideo）を HWndSourceクラスのAddHookメソッドを使って宣言することです。そのあとで一回目の非同期サンプリング命令（Sample）を呼び出します。&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: blue"&gt;readonly&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;D3DWrapper&lt;/SPAN&gt; myD3DScene = &lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;D3DWrapper&lt;/SPAN&gt;(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: #2b91af; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt;HwndSource&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt; source;&lt;/STRONG&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;const&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; WM_PAINT = 0x000F; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;int&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; videoWidth = 0; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;int&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; videoHeight = 0;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; mso-layout-grid-align: none" class=MsoNormal align=left&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;... &lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; mso-layout-grid-align: none" class=MsoNormal align=left&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; StartDXRendering() &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;{ &lt;BR&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; (!myD3DImage.IsFrontBufferAvailable) &lt;BR&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;return&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: #2b91af; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;IntPtr&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; scene = myD3DScene.Initialize( &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; new&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: #2b91af"&gt;WindowInteropHelper&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;).Handle, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; ref&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; videoWidth, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; ref&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; videoHeight); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;myD3DImage.Lock(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;myD3DImage.SetBackBuffer( &lt;BR&gt;&lt;SPAN style="COLOR: #2b91af"&gt;D3DResourceType&lt;/SPAN&gt;.IDirect3DSurface9, scene); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; myD3DImage.Unlock(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt;source = &lt;SPAN style="COLOR: #2b91af"&gt;HwndSource&lt;/SPAN&gt;.FromHwnd( &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp; new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;WindowInteropHelper&lt;/SPAN&gt;(&lt;SPAN style="COLOR: blue"&gt;this&lt;/SPAN&gt;).Handle); &lt;BR&gt;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt;source.AddHook(&lt;SPAN style="COLOR: blue"&gt;new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;HwndSourceHook&lt;/SPAN&gt;(BltVideo)); &lt;BR&gt;myD3DScene.Sample();&lt;/STRONG&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;}&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 8pt; mso-bidi-font-size: 11.0pt" lang=EN-US&gt; &lt;/SPAN&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;BltVideo では WM_PAINT メッセージかどうかを確認して、D3DImageの内容を更新します。そのあとで、メッセージの処理完了を示す handled を true にし、次の非同期サンプリング命令を呼び出します。&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; mso-layout-grid-align: none" class=MsoNormal align=left&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;private&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt; BltVideo( &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt; hwnd, &lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; msg, &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt; wParam,&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt; lParam, &lt;SPAN style="COLOR: blue"&gt;ref&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;bool&lt;/SPAN&gt; handled) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;{ &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; (msg == WM_PAINT) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; { &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myD3DImage.Lock(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myD3DImage.AddDirtyRect( &lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; new&lt;/SPAN&gt; &lt;SPAN style="COLOR: #2b91af"&gt;Int32Rect&lt;/SPAN&gt;(0, 0, videoWidth, videoHeight)); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myD3DImage.Unlock(); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; handled = &lt;SPAN style="COLOR: blue"&gt;true&lt;/SPAN&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; myD3DScene.Sample();&lt;/STRONG&gt; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; } &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; COLOR: blue; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;&amp;nbsp; return&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt; &lt;SPAN style="COLOR: #2b91af"&gt;IntPtr&lt;/SPAN&gt;.Zero; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: consolas; FONT-SIZE: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang=EN-US&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;ソリューションを添付するので、WebCam のついた PC でビルド・実行してみてください。動作環境は以下の通りです。&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Windows 7 (RC) &lt;/LI&gt;
&lt;LI&gt;Windows 7 SDK (RC) &lt;/LI&gt;
&lt;LI&gt;Visual Studio 2008 SP1 &lt;/LI&gt;
&lt;LI&gt;DirectX SDK (Mar 2009) &lt;/LI&gt;&lt;/UL&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9821139" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/hiroyuk/attachment/9821139.ashx" length="33973" type="application/x-zip-compressed" /><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Media Foundation ⑤ WebCam + WPF プロジェクトの作成とC++の実装</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/07/06/9818413.aspx</link><pubDate>Mon, 06 Jul 2009 04:14:51 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9818413</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9818413.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9818413</wfw:commentRss><description>&lt;p&gt;以前紹介したMedia Foundation の &lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/06/09/9712615.aspx"&gt;MFCaptureD3D サンプル&lt;/a&gt;を基に、WebCam のビデオ出力を D3DImage 経由で WPF で表示してみましょう。WPF で表示できれば、回転やスケールは思いのままですし、ブラーなどのエフェクトも容易です。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPF1_E9C5/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/MediaFoundationWebCamWPF1_E9C5/image_thumb.png" width="244" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;WPFソリューションの作成と混合アセンブリに変換&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/04/02/9528272.aspx"&gt;D3DImage チュートリアル&lt;/a&gt;を参考にして、WPFソリューションを作成し、MFCaptureD3Dプロジェクトを追加し、&lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/04/06/9533228.aspx"&gt;C++/CLIの混合アセンブリ&lt;/a&gt;に変換します。マニフェストは明示的に追加しなくても、自動生成のもので構いません。ついでに、&lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/04/13/9546623.aspx"&gt;WPFプロジェクトの設定&lt;/a&gt;もしておいてください。&lt;/p&gt;  &lt;h4&gt;C++コードの編集&lt;/h4&gt;  &lt;p&gt;まず、キャプチャしたビデオを表示するウィンドウを生成し、メッセージポンプを定義している winmain.cpp を「プロジェクトから除外」します。次にD3DWrapper.cppを追加します。D3DWrapper.cppの内容は以下の通りです。初期化するときにD3Dサーフェイスとビデオの幅と高さを取得して、呼び出し元（つまりC#側）に返します。あとは、SampleメソッドでのMFReaderの非同期サンプリングの命令と、クリーンアップだけです。非同期サンプリングなので、このSampleメソッドが返っても、サンプリングは終了していません。初期化時にMFStartupを、クリーンアップ時にMFShutdownを呼び出していることにも注意してください。&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;#include&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: #a31515"&gt;&amp;quot;MFcaptureD3D.h&amp;quot;&lt;/span&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;#include&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: #a31515"&gt;&amp;lt;vcclr.h&amp;gt;&lt;/span&gt;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;using&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;span style="color: blue"&gt;namespace&lt;/span&gt; System;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;CPreview* g_pPreview;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;namespace&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; MFCaptureViewer      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;{      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt; &lt;span style="color: blue"&gt;ref&lt;/span&gt; &lt;span style="color: blue"&gt;class&lt;/span&gt; D3DWrapper&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;:&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IntPtr Initialize(IntPtr hwnd, &lt;span style="color: blue"&gt;int&lt;/span&gt;% width, &lt;span style="color: blue"&gt;int&lt;/span&gt;% height)&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; LPDIRECT3DSURFACE9 g_pd3dSurface;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MFStartup(MF_VERSION);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if&lt;/span&gt; (SUCCEEDED(CPreview::CreateInstance((HWND)&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hwnd.ToPointer(),       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (HWND)hwnd.ToPointer(),&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;g_pPreview)))       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Get Surface        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; g_pPreview-&amp;gt;m_draw.m_pSwapChain-&amp;gt;GetBackBuffer      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (0,D3DBACKBUFFER_TYPE_MONO, &amp;amp;g_pd3dSurface);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Video width &amp;amp; height        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; width = g_pPreview-&amp;gt;m_draw.m_width;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; height = g_pPreview-&amp;gt;m_draw.m_height;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return&lt;/span&gt; IntPtr(g_pd3dSurface);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; return&lt;/span&gt; IntPtr::Zero;&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;} &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;VOID Sample()&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;g_pPreview-&amp;gt;m_pReader-&amp;gt;ReadSample(       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;0,&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;NULL, &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;NULL,&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;NULL,&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;NULL&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;VOID Cleanup()&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;g_pPreview-&amp;gt;Release();&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;MFShutdown();       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;}&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;};       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;} &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;h4&gt;device.h と device.cpp&lt;/h4&gt;  &lt;p&gt;device.cppでは主にD3D系の処理を行っています。まずバックバッファのD3DSrufaceとビデオの幅・高さを D3DWrapperで取得できるように、device.hで4つのプロパティをパブリックにします。&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;:      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; UINT&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;m_width;&amp;#160; &lt;span style="color: green"&gt;// moved to public&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;UINT&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;m_height; &lt;span style="color: green"&gt;// moved to public&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IDirect3DSwapChain9&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;*m_pSwapChain; &lt;span style="color: green"&gt;// moved to public&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DrawDevice(); &lt;span style="color: green"&gt;// moved to public&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;virtual ~DrawDevice();&lt;/font&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;device.cpp では、マルチスレッドの解決、およびスワップチェーンのブリットは不要なので、次の2か所を変更します。&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = m_pD3D-&amp;gt;CreateDevice(       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;D3DADAPTER_DEFAULT,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;D3DDEVTYPE_HAL,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hwnd,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;D3DCREATE_HARDWARE_VERTEXPROCESSING |&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; D3DCREATE_FPU_PRESERVE &lt;strong&gt;|        &lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;strong&gt;&lt;span style="mso-tab-count: 2"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;D3DCREATE_MULTITHREADED&lt;/strong&gt;, &lt;font color="#008000"&gt;// Add &lt;/font&gt;&lt;span style="color: green"&gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;pp,       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;m_pDevice       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);&lt;/span&gt;&lt;span style="font-size: 9pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;…&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// Present the frame.        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// Removed        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// hr = m_pDevice-&amp;gt;Present(NULL, NULL, NULL, NULL);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;h4&gt;preview.hと preview.cpp&lt;/h4&gt;  &lt;p&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;preview.cpp では主にMF関連の処理を行っています。まず、D3DWrapperで使えるように preview.h で2つのプロパティをパブリックにします。&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; color: blue; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;public&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;:      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; IMFSourceReader&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;*m_pReader; &lt;span style="color: green"&gt;// moved to public&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DrawDevice&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;m_draw;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// moved to public&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;preview.cpp では、以下の2つのメソッドを変更します。前者で追加しているのは winmain.cppで行われていたWebCamデバイスを取得するコードです。後者では、非同期のコールバック内で次のサンプリングを呼び出していたのを、WM_PAINT メッセージの送付に変更しています（必ずしもWM_PAINTでなければならないわけではありません）。WPFではこのメッセージを基にD3DImageへの書き込みを行います。灰色は変更しないコードです。&lt;/font&gt;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;HRESULT CPreview::Initialize()        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;{        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;HRESULT hr = S_OK;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = m_draw.CreateDevice(m_hwndVideo);&lt;/font&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: green"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: green"&gt;// &lt;/span&gt;&lt;/span&gt;Add to get WebCam         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; IMFActivate **ppDevices;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; UINT32&lt;span style="mso-tab-count: 1"&gt;&amp;#160; &lt;/span&gt;count = 0;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; IMFAttributes *pAttributes=NULL;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; hr = MFCreateAttributes(&amp;amp;pAttributes,1);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; hr = pAttributes-&amp;gt;SetGUID(      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; hr = MFEnumDeviceSources(pAttributes, &amp;amp;ppDevices, &amp;amp;count);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: blue"&gt;&amp;#160;&amp;#160;&amp;#160; if&lt;/span&gt; (count &amp;gt;0)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hr = &lt;span style="color: blue"&gt;this&lt;/span&gt;-&amp;gt;SetDevice(ppDevices[0]);       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160; // done        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;font color="#808080"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;return hr;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;}&lt;/span&gt;&lt;/font&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;…&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;HRESULT CPreview::OnReadSample(        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;HRESULT hrStatus,         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DWORD ,         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;DWORD ,         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;LONGLONG ,         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IMFSample *pSample&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/font&gt;&lt;span style="color: green"&gt;&lt;font color="#808080"&gt;// Can be NULL          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;)         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;{        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;HRESULT hr = S_OK;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IMFMediaBuffer *pBuffer = NULL;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;EnterCriticalSection(&amp;amp;m_critsec);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (FAILED(hrStatus))         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = hrStatus;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;goto done;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (pSample)         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font color="#808080"&gt;// Get the video frame buffer from the sample.          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = pSample-&amp;gt;GetBufferByIndex(0, &amp;amp;pBuffer);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (FAILED(hr)) { goto done; }         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font color="#808080"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font color="#808080"&gt;// Draw the frame.          &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = m_draw.DrawFrame(pBuffer);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (FAILED(hr)) { goto done; }         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}&lt;/font&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="color: green"&gt;&amp;#160;&amp;#160;&amp;#160; // Add        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;hr = SendMessage(m_hwndEvent, WM_PAINT, 0, 0);&lt;/strong&gt;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// Request the next frame.        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; // Removed         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;// hr = m_pReader-&amp;gt;ReadSample(        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;0,         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;// actual         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;// flags         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;// timestamp         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;// sample         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: green"&gt;//&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;done:        &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;if (FAILED(hr))         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NotifyError(hr);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;SafeRelease(&amp;amp;pBuffer);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;font color="#808080"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;LeaveCriticalSection(&amp;amp;m_critsec);         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="#808080"&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;return hr;         &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; font-size: 10pt; mso-font-kerning: 0pt; mso-no-proof: yes; mso-bidi-font-size: 12.0pt" lang="EN-US"&gt;}&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;ここで追加した SendMessage が非同期サンプリング時のC++とC#との同期問題を解決するカギの一つです。&lt;/p&gt;  &lt;p&gt;この時点で、ソリューション エクスプローラーでこのMFCaptureD3Dプロジェクトを右クリックして、[プロジェクトのみ]→[MFCaptureD3Dのみをリビルド]を実行して、エラーが出ないことを確認してください。&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;&lt;/span&gt;&lt;span style="font-size: 8pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;つづく&lt;/span&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9818413" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>H.264 / AVC デコード DXVAの仕様書の更新</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/29/9808088.aspx</link><pubDate>Mon, 29 Jun 2009 05:09:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9808088</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9808088.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9808088</wfw:commentRss><description>&lt;P&gt;DXVAはビデオなどのメディアをGPUでハードウェア デコードするための Win32 API です。ダウンロードセンターに以前からあった&lt;A href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=3d1c290b-310b-4ea2-bf76-714063a6d7a6#filelist" mce_href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=3d1c290b-310b-4ea2-bf76-714063a6d7a6#filelist"&gt;H.264 ハードウェア デコードの仕様書&lt;/A&gt;が少しだけ更新されました（バグフィックス）。&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9808088" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>RDP 7 の変更</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/26/9804555.aspx</link><pubDate>Fri, 26 Jun 2009 03:46:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9804555</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9804555.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9804555</wfw:commentRss><description>&lt;p&gt;Windows 7 の RDP（リモート デスクトップ プロトコル）では、以下のように（PDC 08の資料）多くのテクノロジーがクライアントでレンダリングされる予定でした（RCでは有効です）。&lt;/p&gt;  &lt;p&gt;クライアントでレンダリングできれば、ホストから送られるデータが減らせるためネットワーク帯域の負荷が減らせるとともに、ホスト側の負荷も軽減できます。ホストレンダリングでは、レンダリング結果を毎フレーム 画像として送るので（もちろん何らかの圧縮は掛けますが...）、非効率なため高品質なデスクトップを生成できません。Direct3D や Direct2D のクライアント レンダリング能力は、リモートデスクトップでクライアント側にあるGPU性能がフルに活用できる興味深い仕様でした。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/RDP7RTM_D299/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/RDP7RTM_D299/image_thumb.png" width="484" height="296" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;ところが、&lt;a href="http://blogs.msdn.com/rds/archive/2009/06/19/changes-to-remoting-model-in-rdp-7.aspx"&gt;RDP チームのブログ&lt;/a&gt;によると、Direct2DとDirect3D 10.1 のクライアント レンダリングは Windows 7 RTM 版から取り除かれたそうです（こんな感じ）。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/RDP7RTM_D299/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/RDP7RTM_D299/image_thumb_1.png" width="484" height="300" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;しかし、RDP 7 で Aero Glass は有効ですし、GDIとメディア プレイヤーはクライアント レンダリングなので、クライアント側にある GPU 上のコンポジターはリモートで利用可能なままのようです。&lt;/p&gt;  &lt;p&gt;しかし、RDP チームはクライアント レンダリング機能の強化を続けているので、将来のバージョンアップでは D3D10などもクライアントレンダリング可能になるのでしょう。&lt;/p&gt;  &lt;p&gt;RDPでAero Glassを有効にするには Windows 7 のリモートデスクトップ接続のオプションからデスクトップ コンポジションを有効にする必要があります。Windows Server 2008 R2での設定については、&lt;a href="http://blogs.msdn.com/rds/archive/2009/06/23/aero-glass-remoting-in-windows-server-2008-r2.aspx"&gt;RDPチームのブログ&lt;/a&gt;を参照してください。&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/RDP7RTM_D299/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/hiroyuk/WindowsLiveWriter/RDP7RTM_D299/image_thumb_2.png" width="484" height="438" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9804555" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Direct3D/default.aspx">Direct3D</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category></item><item><title>Media Foundation ③ MFCaptureD3D</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/09/9712615.aspx</link><pubDate>Tue, 09 Jun 2009 07:15:29 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9712615</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9712615.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9712615</wfw:commentRss><description>&lt;p&gt;Windows 7 SDK (RC) 内の Media Foundation のサンプル コードの一つに &lt;a href="http://msdn.microsoft.com/en-us/library/dd743690(VS.85).aspx"&gt;MFCaptureD3D&lt;/a&gt; があります。Windows 7 SDK (RC) がインストールされていれば、C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\MediaFoundation\MFCaptureD3D にプロジェクトはあります。このサンプル コードでは、Media FoundationでキャプチャしたWebCamの「画像」を Direct3D 9 Surface（スワップ チェーンのバックバッファ）にコピーして Direct3D 9 で表示します。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/06/04/9698604.aspx"&gt;MFPlayを使った場合&lt;/a&gt;には、WebCam デバイスからメディア ソースを作成するだけで、1枚1枚の画像をサンプリング必要はありませんでした（MFPlayがやってくれました）。このサンプルではメディア ソースからMFReaderを生成して、画像を1枚1枚サンプリングしています。この作業は preview.cpp に実装されています。&lt;/p&gt;  &lt;p&gt;さらにDirect3D 9 Surfaceにコピーするとき、サンプリング結果をRGB32に変換しています。現在の WebCam ではエンコード動画（ex. VC1やH.264）を出力するデバイスはないと思いますが、エンコード画像（ JPEGなど）を出力するデバイスもありますし（ex. Microsoft LifeCam NX-6000）、YUVを出力するデバイスもあります（Media Foundationでのビデオ フォーマットの詳細は &lt;a href="http://msdn.microsoft.com/en-us/library/aa370819(VS.85).aspx"&gt;Video Subtype GUIDs&lt;/a&gt; を参照してください）。&lt;/p&gt;  &lt;p&gt;いずれにせよDirect3D 9 Surfaceに渡すにはRGBにする必要があります。この作業は device.cpp に実装されています。このサンプル コードではこれをソフトウェアで実装しています。&lt;/p&gt;  &lt;p&gt;ここでは Media Foundation を使って&lt;strong&gt;非同期&lt;/strong&gt;で WebCam から画像をサンプリングする方法を preview.cpp を基に解説します。サンプリングに必要な手順は以下の通りです（CPreview::SetDevice()メソッド）。実際にビルドして、デバッグ実行しながらお読みください。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;font color="#800000"&gt;MFCreateAttribure関数を呼び出しアトリビュートストアを作成 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#800000"&gt;MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE に MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID を指定 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#800000"&gt;MFEnumDeviceSource 関数を呼び出し、デバイスを列挙        &lt;br /&gt;[ここまでは winmain.cpp の OnChooseDeviceメソッドで実装され、SetDeviceを呼び出している]&lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#808000"&gt;IMFActivate::ActivateObjectメソッドを呼び出し、そのアクティベーション オブジェクトからメディア ソース オブジェクトを作成 &lt;/font&gt;&lt;/li&gt;    &lt;li&gt;&lt;font color="#808000"&gt;シンボリック リンクを作成（デバイス消失のチェックに必要）       &lt;br /&gt;[ここまではMFPlayを使ったときと同じ]&lt;/font&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;ol&gt;   &lt;li&gt;再度MFCreateAttributes関数を呼び出し、アトリビュートストアを作成&lt;/li&gt;    &lt;li&gt;そのアトリビュートストアでMF_READWRITE_DISABLE_CONVERTERSをTRUE にする（このサンプルコードではソフトウェアでフォーマット変換するため）。&lt;/li&gt;    &lt;li&gt;そのアトリビュートストアで非同期サンプリングを指定、MF_SOURCE_READER_ASYNC_CALLBACK を this にする。すると、サンプリングが完了したとき、このクラスの OnReadSample コールバックが呼び出される。&lt;/li&gt;    &lt;li&gt;MFCreateSourceReaderFromMediaSource関数にこのアトリビュートストアを渡し、ソースリーダー（m_pReader）を作成。&lt;/li&gt;    &lt;li&gt;ソースリーダーのGetNativeMediaTypeメソッドで取得可能なメディアタイプを取得。&lt;/li&gt;    &lt;li&gt;変換可能なメディアタイプを選び、ソースリーダーのSetCurrentMediaTypeメソッドにそのメディアタイプを渡す。     &lt;br /&gt;[TryMediaTypeで実装]&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;これで準備は終わりで、最後にソースリーダーのReadSampleメソッドを呼び出します。サンプリングが終了すると、前述のようにOnReadSampleコールバックが呼び出されます。&lt;/p&gt;  &lt;p&gt;OnReadSampleではIMFSample型のサンプルが渡されるので、そのサンプルから最初のインデックスのバッファ（IMediaBuffer）をGetBudderByIndexで取得し、device.cppで実装されているDrawFrameメソッドに渡して、バッファの結果をデコード・変換・コピー・表示します（ここでは紹介しません、興味のある方はdevice.cppを参照してください）。このサンプル コードではこのコールバックの中で再度ReadSampleを呼び出し、連続的に画像を取得しています。&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p style="text-align: left; mso-layout-grid-align: none" class="MsoNormal" align="left"&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;HRESULT CPreview::SetDevice(IMFActivate *pActivate)     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;{     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;HRESULT hr = S_OK;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IMFMediaSource&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;*pSource = NULL;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IMFAttributes&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;*pAttributes = NULL;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;IMFMediaType&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;*pType = NULL;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;EnterCriticalSection(&amp;amp;m_critsec);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;font face="Verdana"&gt;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// もしあれば現在のデバイスをリリース&lt;/font&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = CloseDevice();      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr)) { &lt;span style="color: blue"&gt;goto&lt;/span&gt; done; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;font face="Verdana"&gt;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// デバイス用のメディアソースを作成&lt;/font&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = pActivate-&amp;gt;ActivateObject(      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;__uuidof&lt;/span&gt;(IMFMediaSource),&amp;#160; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;(&lt;span style="color: blue"&gt;void&lt;/span&gt;**)&amp;amp;pSource      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr)) { &lt;span style="color: blue"&gt;goto&lt;/span&gt; done; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;font face="メイリオ"&gt; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// シンボリックリンクを取得&lt;/font&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = pActivate-&amp;gt;GetAllocatedString(      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;m_pwszSymbolicLink,     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;m_cchSymbolicLink      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr)) { &lt;span style="color: blue"&gt;goto&lt;/span&gt; done; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;//         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// ①ソースリーダーの作成         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// 初期設定を保持するアトリビュートストアを作成&lt;/font&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = MFCreateAttributes(&amp;amp;pAttributes, 2);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr)) { &lt;span style="color: blue"&gt;goto&lt;/span&gt; done; }&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// ②コンバーター非使用の設定         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = pAttributes-&amp;gt;SetUINT32      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MF_READWRITE_DISABLE_CONVERTERS, TRUE);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr)) { &lt;span style="color: blue"&gt;goto&lt;/span&gt; done; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// ③非同期コールバックを設定&lt;/font&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = pAttributes-&amp;gt;SetUnknown(      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&lt;/span&gt;MF_SOURCE_READER_ASYNC_CALLBACK,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;this       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr)) { &lt;span style="color: blue"&gt;goto&lt;/span&gt; done; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// ④メディア ソースの作成&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = MFCreateSourceReaderFromMediaSource(      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;pSource,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;pAttributes,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;m_pReader      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr)) { &lt;span style="color: blue"&gt;goto&lt;/span&gt; done; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;         &lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;for&lt;/span&gt; (DWORD i = 0; ; i++)      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160; &lt;/span&gt;{      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// ⑤メディアタイプを取得&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = m_pReader-&amp;gt;GetNativeMediaType(      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;i,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&amp;amp;pType      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr)) { &lt;span style="color: blue"&gt;goto&lt;/span&gt; done; }      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = TryMediaType(pType);      &lt;br /&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// ⑤変換可能なメディアタイプを見つける&lt;/font&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;SafeRelease(&amp;amp;pType);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (SUCCEEDED(hr))&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160; &lt;/span&gt;{&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;break&lt;/span&gt;;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;}      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;if&lt;/span&gt; (FAILED(hr))&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;{&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;&lt;span style="color: blue"&gt;goto&lt;/span&gt; done;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt; &lt;/span&gt;}      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&lt;font face="Verdana"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: green"&gt;&lt;font face="Verdana"&gt;// ⑥最初のサンプリング開始&lt;/font&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;hr = m_pReader-&amp;gt;ReadSample(      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;(DWORD)MF_SOURCE_READER_FIRST_VIDEO_STREAM,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;0,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL,      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;NULL      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;done:     &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;SafeRelease(&amp;amp;pSource);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;SafeRelease(&amp;amp;pAttributes);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;SafeRelease(&amp;amp;pType);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;LeaveCriticalSection(&amp;amp;m_critsec);      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;return&lt;/span&gt; hr;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;}&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: consolas; mso-bidi-font-size: 12.0pt; mso-font-kerning: 0pt; mso-no-proof: yes" lang="EN-US"&gt;&lt;/span&gt;&lt;span style="font-size: 9pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;     &lt;p&gt;MFPlayを使う場合に比べて少し複雑になりましたが（実は device.cpp 側はもっと複雑です）、これで WebCamからのビデオ画像を Direct3D 9 Surface にコピーできました。&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size: 9pt; mso-bidi-font-size: 11.0pt" lang="EN-US"&gt;     &lt;p&gt;ということは &lt;strong&gt;D3DImage を使えば WPF でこの WevCam の出力を表示できます&lt;/strong&gt;。WPF で WebCam のビデオ出力が表示できれば、拡大縮小などの加工が楽になるだけではなく、WPFアプリケーションにWebCamの機能を追加できます。次回からは、これに挑戦してみましょう。&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;Media Foundationを使うとき、初めに MFStartup(MF_VERSION) を、最後に MFShutdown() を呼び出す必要があります&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9712615" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Media Foundation ② WebCam キャプチャ</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/04/9698604.aspx</link><pubDate>Thu, 04 Jun 2009 10:08:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9698604</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9698604.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9698604</wfw:commentRss><description>&lt;p&gt;Media Foundation で WebCam からビデオをキャプチャしてMFPlayで表示する方法を &lt;a href="http://msdn.microsoft.com/en-us/library/dd317912(VS.85).aspx"&gt;Audio/Video Capure in Media Foundation&lt;/a&gt; を基に解説します。Windows 7 SDK (RC) がインストールしてあれば、&lt;a href="http://msdn.microsoft.com/en-us/library/dd757925(VS.85).aspx"&gt;サンプルコード&lt;/a&gt;は C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\MediaFoundation\SimpleCapture にあります。&lt;/p&gt;  &lt;p&gt;手順は以下の通りです。&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;MFCreateAttribure関数を呼び出しアトリビュートストアを作成 &lt;/li&gt;    &lt;li&gt;MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE に MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID を指定 &lt;/li&gt;    &lt;li&gt;MFEnumDeviceSource 関数を呼び出し、デバイスを列挙 &lt;/li&gt;    &lt;li&gt;IMFActivate::ActivateObjectメソッドを呼び出し、そのアクティベーション オブジェクトからメディア ソース オブジェクトを作成 &lt;/li&gt;    &lt;li&gt;シンボリック リンクを作成（デバイス ロストのチェックに必要） &lt;/li&gt;    &lt;li&gt;MFPlay プレイヤーを作成 &lt;/li&gt;    &lt;li&gt;4 で作成したメディア ソースを第1引数にして、6 で作成したMFPlayプレイヤーの CreateMediaItemFromObject メソッドを呼び出し、メディア アイテムを作成。 &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;#define CHECK_HR(hr) { if (FAILED(hr)) { goto done; } }&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;HRESULT CreateVideoCaptureDevice()      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; HRESULT hr = S_OK;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; UINT32 count = 0; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&amp;#160;&amp;#160;&amp;#160; IMFAttributes *pConfig = NULL;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; IMFActivate **ppDevices = NULL;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; IMFMediaSource *pSource = NULL; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font face="メイリオ"&gt;// ①アトリビュート ストアを作成&lt;/font&gt;&lt;/font&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CHECK_HR(hr = MFCreateAttributes(&amp;amp;pConfig, 1)); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font face="メイリオ"&gt;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;&amp;#160;&amp;#160; // ②ビデオ キャプチャ デバイスを要求&lt;/font&gt;&lt;/font&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CHECK_HR(hr = pConfig-&amp;gt;SetGUID(       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ));       &lt;br /&gt;&lt;font face="メイリオ"&gt;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;&amp;#160;&amp;#160; // ③デバイスの列挙&lt;/font&gt;&lt;/font&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CHECK_HR(hr = MFEnumDeviceSources(       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; pConfig, &amp;amp;ppDevices, &amp;amp;count)); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font face="メイリオ"&gt;&amp;#160; &lt;font color="#008000"&gt;&amp;#160;&amp;#160;&amp;#160; // ④リスト内の最初のデバイスからメディア ソースを作成&lt;/font&gt;&lt;/font&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (count &amp;gt; 0)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CHECK_HR(hr = ppDevices[0]-&amp;gt;ActivateObject(       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; __uuidof(IMFMediaSource),       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (void**)&amp;amp;pSource       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ));&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; else       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hr = MF_E_NOT_FOUND;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt; &lt;font face="Consolas"&gt;&lt;font color="#008000" face="メイリオ"&gt;// ⑤シンボリックリンクを作成&lt;/font&gt;     &lt;br /&gt;CHECK_HR(hr = pActivate-&amp;gt;GetAllocatedString(&amp;#160;&amp;#160;&amp;#160; MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp;m_pwszSymbolicLink,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp;m_cchSymbolicLink     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; )); &lt;/font&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font color="#008000" face="メイリオ"&gt;// ⑥MFPlayプレイヤーを作成&lt;/font&gt;       &lt;br /&gt;CHECK_HR(hr = MFPCreateMediaPlayer(       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL,&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FALSE,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL,&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_hwnd,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;m_pPlayer       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ));&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;&lt;font color="#008000" face="メイリオ"&gt;// ⑦このメディア ソース用のメディア アイテムを作成&lt;/font&gt;       &lt;br /&gt;CHECK_HR(hr = m_pPlayer-&amp;gt;CreateMediaItemFromObject(       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; pSource,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FALSE,&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 0,       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; NULL       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; )); &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Consolas"&gt;done:      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; for (DWORD i = 0; i &amp;lt; count; i++)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ppDevices[i]-&amp;gt;Release();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; CoTaskMemFree(ppDevices);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; SAFE_RELEASE(pSource);       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; return hr;       &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt;Media Foundationを使うとき、初めに &lt;font face="Consolas"&gt;MFStartup(MF_VERSION)&lt;/font&gt; を、最後に &lt;font face="Consolas"&gt;MFShutdown()&lt;/font&gt; を呼び出す必要があります。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9698604" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Media Foundation ① MFPlay</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/06/01/9674182.aspx</link><pubDate>Mon, 01 Jun 2009 06:41:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9674182</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9674182.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9674182</wfw:commentRss><description>&lt;p&gt;&lt;a href="http://blogs.msdn.com/hiroyuk/archive/2009/05/25/9639698.aspx"&gt;以前&lt;/a&gt;紹介したように、Media Foundation は Windows 7 でかなり使いやすくなりました。今回はメディア再生APIの MFPlay の使い方を&lt;a href="http://msdn.microsoft.com/en-us/library/dd318791(VS.85).aspx"&gt;Getting Started with MFPlay&lt;/a&gt;を基に解説します。&lt;/p&gt;  &lt;p&gt;MFPlayを使うとき、インクルードファイルはmfplay.h、ライブラリはmfplay.libが必要です。また、WINVERは_WIN32_WINNT_WIN7です。&lt;a href="http://msdn.microsoft.com/en-us/library/dd757926(VS.85).aspx"&gt;サンプルコード&lt;/a&gt;は C:\Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\MediaFoundation\SimplePlay にありますので、実際にコードを見て、ビルドしてみてください。&lt;/p&gt;  &lt;h4&gt;メディアファイルの再生&lt;/h4&gt;  &lt;p&gt;メディアを再生するには、以下のようにMFPCreateMediaPlayer関数を呼び出すだけです。&lt;/p&gt;  &lt;p&gt;IMFPMediaPlayer&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; *g_pPlayer = NULL; &lt;/p&gt;  &lt;p&gt;…&lt;/p&gt;  &lt;p&gt;hr = MFPCreateMediaPlayer(    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sURL,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;// ファイル名      &lt;br /&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160; TRUE,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;// 自動的に開始するかどうか&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 0,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;// フラグ      &lt;br /&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160; NULL,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;// コールバック ポインター&lt;/font&gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; hwnd,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#008000"&gt;// 表示ウィンドウ      &lt;br /&gt;&lt;/font&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp;g_pPlayer     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; );&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;第1引数はファイル名（あるいはURL） &lt;/li&gt;    &lt;li&gt;第2引数はファイルロード後自動的に再生を開始するかどうかを指定する真偽値、TRUEが自動再生 &lt;/li&gt;    &lt;li&gt;第3引数はオプションで、デフォルト値は0． &lt;/li&gt;    &lt;li&gt;第4引数はオプションで、コールバック インターフェイスのポインターMFPlayは非同期でメディアを処理するので、多くの場合このコールバック関数を使用 &lt;/li&gt;    &lt;li&gt;第5引数はウィンドウ ハンドル。オーディオのみの場合はNULL &lt;/li&gt;    &lt;li&gt;第6引数は返されるプレイヤー オブジェクトのIMFPlayerインターフェイス、このオブジェクトを使ってスタート、ポーズなどの制御をおこなう &lt;/li&gt; &lt;/ul&gt;  &lt;h4&gt;再生の制御&lt;/h4&gt;  &lt;p&gt;Stop(), Play(), Pause()などの&lt;a href="http://msdn.microsoft.com/en-us/library/dd374329(VS.85).aspx"&gt;IMFPMediaPlayerインターフェイス&lt;/a&gt;のメソッドを使う。現在の状態はGetState()で取得する。&lt;/p&gt;  &lt;p&gt;再生レート（速度）を変更するにはSetRate()メソッドを使う。1.0が標準速度、0.5が0.5倍速、2.0が2倍速です。マイナスにすると巻き戻し再生になります。&lt;/p&gt;  &lt;h4&gt;プレイヤーのイベントを処理&lt;/h4&gt;  &lt;p&gt;以下のようにMFPCreateMediPlayerの第4引数にコールバック インターフェイス ポインターを渡すと、&lt;a href="http://msdn.microsoft.com/en-us/library/dd374331(VS.85).aspx"&gt;MediaPlayerCallback::OnMediaPlayerEvent()&lt;/a&gt;コールバックを実装して、プレイヤーからのイベントに対応できます。&lt;/p&gt;  &lt;p&gt;MediaPlayerCallback&amp;#160;&amp;#160;&amp;#160;&amp;#160; *g_pPlayerCB = NULL;&lt;/p&gt;  &lt;p&gt;…&lt;/p&gt;  &lt;p&gt;g_pPlayerCB = new (std::nothrow) MediaPlayerCallback(); &lt;/p&gt;  &lt;p&gt;hr = MFPCreateMediaPlayer(    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; sURL,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FALSE,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; 0,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;font color="#ff0000"&gt;g_pPlayerCB,&amp;#160; &lt;/font&gt;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; hwnd,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;amp;g_pPlayer     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; );&lt;/p&gt;  &lt;p&gt;...&lt;/p&gt;  &lt;p&gt;void MediaPlayerCallback::OnMediaPlayerEvent(    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MFP_EVENT_HEADER * pEventHeader)     &lt;br /&gt;{     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (FAILED(pEventHeader-&amp;gt;hrEvent))     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShowErrorMessage(L&amp;quot;Playback error&amp;quot;, pEventHeader-&amp;gt;hrEvent);     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; switch (pEventHeader-&amp;gt;eEventType)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ...     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }     &lt;br /&gt;}&lt;/p&gt;  &lt;h4&gt;メディア ファイルの情報を取得&lt;/h4&gt;  &lt;p&gt;MFPlayは渡されたメディアから、&lt;a href="http://msdn.microsoft.com/en-us/library/dd374309(VS.85).aspx"&gt;IMFPMediaItemインターフェイス&lt;/a&gt;を公開するメディア アイテムと呼ばれるオブジェクトを生成します。明示的にCreateMediaItemFromURL()メソッドを呼び出してメディア アイテムを作成することもできます。また、SetMediaItem()メソッドを使うと、同じプレイヤーで別のメディアを再生できます。&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; hr = MFPCreateMediaPlayer(    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; NULL,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; FALSE,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 0,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; g_pPlayerCB,     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; hwnd,&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;amp;g_pPlayer     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; hr = g_pPlayer-&amp;gt;&lt;font color="#ff0000"&gt;CreateMediaItemFromURL&lt;/font&gt;(sURL, FALSE, 0, NULL);&lt;/p&gt;  &lt;p&gt;IMFPMediaItemインターフェイスを使うと、メディアにビデオが含まれているか、オーディオが含まれているか、メディアの尺（時間幅）などの情報を取得できます。&lt;/p&gt;  &lt;h4&gt;MFPlayの制限&lt;/h4&gt;  &lt;ul&gt;   &lt;li&gt;デフォルトではストリーミングに対応していません。rtsp*, mms*, mcastプロトコルには対応していないので、その場合は &lt;a href="http://msdn.microsoft.com/en-us/library/ms700827(VS.85).aspx"&gt;Source Resolver&lt;/a&gt; が必要。 &lt;/li&gt;    &lt;li&gt;DRMで保護されたメディアに対応していません。 &lt;/li&gt;    &lt;li&gt;サーバーサイド プレイリストに対応していません。 &lt;/li&gt;    &lt;li&gt;動作には Windows 7 以降が必要です。 &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9674182" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item><item><title>Media Foundation の更新 @ Windows 7</title><link>http://blogs.msdn.com/hiroyuk/archive/2009/05/25/9639698.aspx</link><pubDate>Mon, 25 May 2009 05:31:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9639698</guid><dc:creator>hiroyuk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/hiroyuk/comments/9639698.aspx</comments><wfw:commentRss>http://blogs.msdn.com/hiroyuk/commentrss.aspx?PostID=9639698</wfw:commentRss><description>&lt;p&gt;Media Foundation は Windows Vistaから新設された新しいメディア用のネイティブAPIです。PMP（Protected Media Path）のようなセキュアなメディア処理に優れています。しかし、DirectShow に比べ対応デコーダも少なく、下位レベルのAPIばかりでプログラミングが簡単ではなく、Windows XP では動作しないので、あまり使われませんでした。&lt;/p&gt;  &lt;p&gt;Windows 7 では改善されて、Media Foundation がかなり使いやすくなったように思います。&lt;a href="http://msdn.microsoft.com/en-us/library/bb970511(VS.85).aspx"&gt;What’s New in Windows 7&lt;/a&gt;は以下の通りです。&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;より多くのフォーマットサポート（MPEG-4を含む）      &lt;ul&gt;       &lt;li&gt;AVI/WAVEソース &lt;/li&gt;        &lt;li&gt;MP4/3GPソース／シンク &lt;/li&gt;        &lt;li&gt;H.264デコーダ &lt;/li&gt;        &lt;li&gt;MJPEGデコーダ &lt;/li&gt;        &lt;li&gt;ASPストリーム シンク &lt;/li&gt;        &lt;li&gt;MP3ファイル シンク &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;キャプチャ デバイスとハードウェア コーデックのサポート      &lt;ul&gt;       &lt;li&gt;UVC（USB Video Class）1.1 ビデオ キャプチャ デバイス &lt;/li&gt;        &lt;li&gt;オーディオ キャプチャ デバイス &lt;/li&gt;        &lt;li&gt;ハードウェア エンコーダ／デコーダ &lt;/li&gt;        &lt;li&gt;ハードウェア ビデオ プロセッサ（ex. 色空間変換） &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;プログラミング モデルの単純化      &lt;ul&gt;       &lt;li&gt;MFPlay &lt;/li&gt;        &lt;li&gt;Source Reader &lt;/li&gt;        &lt;li&gt;Sink Writer &lt;/li&gt;        &lt;li&gt;Fast Transcode &lt;/li&gt;        &lt;li&gt;Caputer device &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;プラットフォームへの改善      &lt;ul&gt;       &lt;li&gt;最適化 &lt;/li&gt;        &lt;li&gt;DXVA-HD &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;とくにキャプチャ デバイス サポートとMF用プレーヤーAPI（MFPlay）のおかげで、最近のノートPCによく付いているWebcamでビデオをキャプチャして、ウィンドウ上で再生するのは、かなり簡単にプログラミングできるようになりました。サンプルコード&lt;a href="http://msdn.microsoft.com/en-us/library/dd757925(VS.85).aspx"&gt;SampleCapure&lt;/a&gt;をビルドして、WebcamをつないだPCで実行してみてください。&lt;/p&gt;  &lt;p&gt;プログラミング モデルが単純化されたのも重要です。&lt;a href="http://msdn.microsoft.com/en-us/library/ms696219(VS.85).aspx"&gt;このページ&lt;/a&gt;のアーキテクチャ図で、左の破線で囲まれた部分しかVistaのときにはなかったのですが、Windows 7では MFPlayだけではなく、右の Source Reader, Sink Writer も追加されたので、プログラミングが容易になりました。&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9639698" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Media+Foundation/default.aspx">Media Foundation</category><category domain="http://blogs.msdn.com/hiroyuk/archive/tags/Win32/default.aspx">Win32</category></item></channel></rss>