2006年8月21日月曜日

Managed DirectX の AudioVideoPlayBack がおかしい

Managed DirectX の AudioVideoPlayBack 名前空間の Video がいろいろとおかしい。ここ一週間ほど、DXPresentationでビデオの再生を実現させるため、いろいろ作業したのだが、いちばん悩んだのはターゲットをテクスチャにしている場合、Dispose()するとよくわからないタイミングで停止バグが発生することだ。ターゲットをコントロールにしている場合は停止はしないが、プロパティが謎の値を示す。調べた結果これは、Managed DirectX のバグであると結論した。直してほしいが直るのだろうか。


Web上で参考になるリンクを以下に示す。


Problems in the AudioVideoPlayback namespace of managed DirectX9
http://www.codeproject.com/cs/media/DirectX9_media_playback.asp


コントロールに対して AudioVideoPlayback でビデオを再生するとこんなに問題がありますよ、という投稿。コントロールに対する描画の場合はここに書いてある対処法でなんとかなる。


Fun with AudioVideoPlayback
http://blogs.msdn.com/toub/archive/2004/04/16/114630.aspx



AudioVideoPlayback のさまざまなおかしなところを指摘する記事。


Wrapping up Managed DirectX AudioVideoPlayback
http://www.codeproject.com/useritems/AudioDX.asp



ここにあるサンプルでは、ムービーテクスチャをポリゴンに張っている。Dispose時の問題は、なんとDisposingイベントのハンドラで無限ループさせることにより解決している。このため一度しかビデオを読みこまないプログラムとなっている。


Requested: Video texture in MDX
http://hundev.blogspot.com/2006/07/requested-video-texture-in-mdx.html



この記事では私と全く同じ場所ではまっている。






disposing of Video class in MDX1
http://www.gamedev.net/community/forums/topic.asp?topic_id=380330&forum_id=58&gforum_id=0



この投稿でも私と全く同じ場所ではまっている。


disposing of video when using "RenderToTexture"
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=267957&SiteID=1



私が悩んでいた Video.Dispose() の悩みに対して、It is a bug, but we have no plans to update this API.とマイクロソフトの人?が書いている。


Managed DirectX (その 2 AudioVideoPlayback) ~ Cutting Edge DX 9 - 第 3 回目 ~http://www.microsoft.com/japan/msdn/directx/japan/dx9/AVCS.aspx#AVCS1



日本語で書かれた記事。ムービーテクスチャのサンプルが置いてある。試してないがきちんと動くのだろうか。


Fun with DVR-MS
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnxpmce/html/dvr-ms.asp



コントロールに対してビデオを再生している。ほかに WMP、Quartz を使った再生を示している。







で、DXPresentation ではどうするのか?


選択肢はいくつかある。




  1. AudioVideoPlayback が直るのを待つ


  2. DirectShow を使って気合でなんとかする


  3. WMP を使う


  4. ビデオの再生自体をあきらめる

1.は多分時間の無駄。3.は簡単に実現できると思うのでとりあえず実装するかもしれないが、ビデオのスポットライト、ライン書き込み、クローズアップができないしミラーリングのパフォーマンスが悪そうなのでよくない。4.は選択したくない。


というわけで 2. が真っ当な方法であるが、C#+.NET に慣れすぎてしまい、なんだかやる気がでない。
ちなみに、
Managed DirectShow というプロジェクトがあるようだが、これについてはよく調べていない。これを選択した場合は GPL による配布に切り替える。


 


0 件のコメント:

コメントを投稿