DirectShow で 動画をテクスチャ に描画!  つまり、、、最強! | ゲームプログラマ志望が福岡で叫ぶ 『絶望』

ゲームプログラマ志望が福岡で叫ぶ 『絶望』

プログラマーになりたい!!!!! あ、風のうわさで聞いた最近若者で流行っているトゥイッターなるものを始めてみました (・ト・) @toshi_desu_yo

先週悩んでた事の1つ、
DirectShowでテクスチャ
にムービーを貼れた!
(`・ω・´)



音も再生できている。



テクスチャに貼れたので、ポリゴンとの色の合成と回転を行っている。






正直、
DirectShowのリファレンスを読む時間のほうが長かった・・・
3日ぐらい読んでいた気がする。。。(ヽ´ω`)



僕の頭はお豆腐なので
リファレンスに言い回しが難しい日本語がいっぱい出てくると



理解に時間がかかるのですわ(´・ω・`)

正直専門的な用語を調べ、理解するのにくっっっっそ時間かかりました。




プログラム自体はすぐ出来ました。



マイクロソフトのサンプルに対して言い表せない程の恐怖を持っているので最初は戦慄していましたが、

これはものすっっっっご簡単でした( ゚д゚ )
作成した方凄い。


最初からこっちみて、
わからないところをリファレンス見ればよかったかも。。。



あと、
ほぼサンプルのパクリです(ドヤ顔)



*********************************

前、記述したとおり、

DirectShowは "フィルタ" と呼ばれる部品をつなぎ合わせることで、
最終的に動画の再生やファイルコンバーター等のアプリケーションを作成できる。



===========================

(例)
ファイルの読み込みフィルタ ↓ ①
   ビデオファイルの解凍をするフィルタ ↓ ②
            動画、音の再生をするフィルタ ↓ ③

      ”ウィンドウに出る!”

===========================






DirectShowが最高な点は、 ① と ③ をドッキングさせると、


自動で 途中の ② を作成して繋げてくれる。



つまり、
『どの形式を読み込んだら、このフィルタを繋げて更にこのフィルタを~・・・』


 という作業が要らない。
基本的には読み込みフィルタと最後のフィルタを繋げるだけでおk




 最高。 (*´д`*)エクスタスィー




Windows Media Player もこのフィルタを繋ぎあわせて再生しているらしく、

再生に関して、
Windows Media Player で再生できる形式DirectShowで再生可能。




今回お仕事で依頼されたビデオ形式は mp4。

通常の Windows Media Playermp4の再生に対応してないみたい。




なので、最初は再生できなかった。
      → ぬるりとハマった。





avi を再生するときは
aviを読み込んで → ”解凍”して解析 → 動画と音のファイルに分ける。

そこから描画処理に回すのですが、
その解凍する部分がWindowsに無かったので再生も出来なかった。


つまり、
上の例で行くと ② が出来ないので ③ まで繋げることが出来ない。



解決策として、

新しく外部からWindowsのレジスタに
 "mp4を解凍するフィルタを追加" することで 再生可能になった!


うれしかったわぁ

参考サイト様↓
【 (URL) mp4をWIndowsで再生 】 ありがとうございますm(_ _)m





最初は


 ど・ど・どうするよ((((;゚Д゚))))ガクガクブルブル
mp4再生できない!? (((( ;゚д゚))))アワワワワ 


これは別の形式に変換しないといけない!?

今更仕様を変えるよう連絡するとかぅtふぁfsf! アタヽ(д`ヽ彡ノ´д)ノフタ


・・・・


と、
尋常じゃなくテンパッた。
仕様変えるとか怖くて言えない。 (ボソッ




よくよく考えると再生できないはずがない。

できなかったら
 Windowsではmp4を再生できないということになる。

インターネットって便利だわぁ・・
分からないことは大抵解決できるもん。。。(言語の壁は高い)




ただプレーヤーを作るだけではなく、他にも


③の部分を
---
---------------------------------------------------------------------------
  ”解析したmp4ファイルをAVIに変換するフィルタ”
------------------------------------------------------------------------------
に変更し、

その後に新しく
------------------------------------------------------------------------------
 "デスクトップに、変換したビデオを書き出すフィルタ"
 
------------------------------------------------------------------------------
を繋げると


mp4形式を読み込ますと、
 デスクトップにAVI形式のビデオが吐き出されます。 
おえええええ!



めっちゃ便利 DirectShow ( ゚д゚ )

正直なんでこれがDirectXでサポートされなくなったのかが不明。
もう完成されたから? よくよく考えたらカテゴリがDirectXではなかった?




今回は、
 ③ の後に ”テクスチャに描画するフィルタ” をつなげたので

 テクスチャに描画できました!

理屈は超簡単



このフィルタはDirectShowの中にはありません。


そう、
フィルタは自分でも開発できるのです!
(  ゚д゚ )!




これがさらに DirectShow が面白いと思える所。


新しい形式をWindowsが対応してなかったら自分で作ればいい。 


そういうことです。




テクスチャに描画できたので、


変形や色の変化、

モデルに貼り付ることも出来そうです。
これは後日やってみたい。




今後は、

******************************************************

① 2D、3Dでまともに使えるようにプロジェクトを書き換える。
② フルスクリーン対応
③ 再生、停止、早送り、巻き戻し、コマ送り 等の操作を簡単にできるようにクラス作成。

******************************************************
が課題。

テクスチャに描画したので ①、② は簡単にできそう。


③はめんどくさそうなので後回しさ!
(b´∀`)ネッ!




あ、それと
 COM関連で最後にReleaseをしたらエラー吐き出すものがあった。。。(´・ω・`)

ちょっと調査しなきゃ。。。

最初からスマートポインタにしろということか・・・




*******************************


一応プロジェクト ↓

【 (URL) DirectShow_Texture_1

● VisualStdio2012 Desktop版
● Windows SDK 6.1  
● DirectX 2010 June
 → これはすいませんm(_ _)m  64bit対応しようと試行錯誤して面倒くさくなって手打ちしてもうた。 直すの今めんどい



が入れてあると多分再生できるんじゃないかと。。

後、64Bitにしてるので 32Bitの方はVisualStdio の
「ローカル Windows デバッガー」 の右の x64 を Win32 にしてもらえると・・いけるはず。


出来なかったら言ってください。。。
まだ修正中なので絶対できなさそうです (;´Д`)

(追記)
すいません、コレだと32bit版のかたは出来なさそう・・・
VC++ ディレクトリの設定をうまく直していただくと。。。 多分。。。
修正します!!



異常!