none
DirectDrawの何が変化したか知りたい RRS feed

  • 質問

  • 現在DirectDrawを使っているソフトを開発しています。
    (Windows10,  VisualStudio2010 C++MFC)

    動画ファイルを読んで、 再生するなど基本的には問題ないのですが、
    ある動画ソフトをインストールすると DirectDrawの状態が変わったようで
    動きがいろいろおかしくなります。
    具体的には
     MediaDet::get_StreamMediaType から得られる値が そのソフトをインストールする前と変わったり
     MediaDet::get_FrameRateを呼んで戻ってくるのにかなり時間がかかるようになりました。 


    質問はそのソフトを入れた後 DirectDrawがどのように変わったか知りたいのですが、
    そうゆうのを調べる方法(ツールやソフト)があれば教えてください。

    ちなみに dxdiag で見ても変わったところはありませんでした。


    よろしくお願いいたします。
    2020年5月8日 5:03

回答

  • 動画ソフトを入れてなったのなら、その動画ソフトが再生用のフィルタを登録して、再生グラフでそのフィルタが使用されるようになったということでは?
    で、そのフィルタグラフがどう変わったかを調べたいと。

    そういうのはGraphEditを使うのがセオリーだったはず。
    使い方はぐぐってみて。このあたりとか。

    #ずいぶん昔にDVHSのiLINKで遊んだだけなので忘れた


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2020年5月8日 7:08

すべての返信

  • > ある動画ソフトをインストールすると 
    > DirectDrawの状態が変わったようで
    > 動きがいろいろおかしくなります。

    その「ある動画ソフト」が、挙動の変わったメソッドに影響を与えるなんかの API をフックしているからでは?
    それを調べるにはいろいろと方法はありますが、個人的に手っ取り早いと思う方法は、挙動が変わる前と後のそれぞれのプロセス ダンプを採取し、DirectDraw に関連するモジュールにフックされている形跡 (IAT, function prologue, etc.) がないか調べるとか。
    (私はそーいうのを調べるのは結構好きなのですが、嫌いな方もいらっしゃるようなので、無理にはお勧めしませんけど。)
    2020年5月8日 6:34
  • 動画ソフトを入れてなったのなら、その動画ソフトが再生用のフィルタを登録して、再生グラフでそのフィルタが使用されるようになったということでは?
    で、そのフィルタグラフがどう変わったかを調べたいと。

    そういうのはGraphEditを使うのがセオリーだったはず。
    使い方はぐぐってみて。このあたりとか。

    #ずいぶん昔にDVHSのiLINKで遊んだだけなので忘れた


    個別に明示されていない限りgekkaがフォーラムに投稿したコードにはフォーラム使用条件に基づき「MICROSOFT LIMITED PUBLIC LICENSE」が適用されます。(かなり自由に使ってOK!)

    2020年5月8日 7:08
  • ありがとうございます。

    プロセスダンプは敷居が高そうなんで、 GraphEditがあれば使ってみようと思います。

    GraphEditはMicrosoft DirectX SDK (February 2010)に入ってなかったので、 Windows10の環境でも使えるものがあれば使ってみます。

    その後GraphEditの"Connect to Remote Graph"で見たのですが何も表示せずでした。

    引き続き調べます。

    2020年5月8日 7:24
  • DirectDrawではなくて、DirectShowの話なのでは。

    それはそうと、RemoteGraphが動かないのは、https://docs.microsoft.com/ja-jp/windows/win32/directshow/loading-a-graph-from-an-external-processによる、「Starting in Windows Vista, you must register proppage.dll to enable this feature. Proppage.dll」が原因ではないでしょうか。

    また、WindowsSDK側にも、GraphEditやproppage.dllは存在します。C:\Program Files (x86)\Windows Kits\10\bin\10.0.18362.0\


    jzkey

    2020年5月8日 9:57
  • 返信ありがとうございました。

    regsvr32 proppage.dll
    regsvr32 evrprop.dll
    をやっても結果は同じでした。

    GraphEditを動かすだけでもちょっと面倒ということが分かりました。

    別件が入りましたので少し間本件は保留にします。 また再開出来ましたらお願いします。


    2020年5月8日 13:45
  • GraphEditとProppage.dllは32bit/64bitの区別があります。
    RemoteGraph対象とするプロセスと同じbitのペアを使う必要があるとは思いますが、そのあたりは大丈夫ですか。

    jzkey

    2020年5月10日 11:20