DirectShowレンダラーをホストしたいCViewがあります。
私は元のコードを書きませんでした。単にコードをクリーンアップしてVS2005に移動しています。これには特定のサードパーティツールのアップグレードが必要だったので、DX/DirectShowを完全に理解せずにコードを少し変更しようとしています。
問題は、実行するとアプリがハングすることです
hr = gcap.pFg->QueryInterface(IID_IVideoWindow, (void **)&gcap.pVW);
[trimmed some code]
gcap.pVW->put_Owner((OAHWND) m_pDockWnd->GetSafeHwnd()); // We own the window now
m_pDockWndはCViewです。プレビューモードではこれを実行できますが、キャプチャモードでは実行できません。キャプチャモードでは、アプリがハングします。
レンダリングウィンドウを所有していない場合は、問題はありません(ただし、キャプチャウィンドウはデスクトップによって所有されているため、機能しません)。
また、キャプチャウィンドウには、デスクトップが所有しているときにビジーカーソルが表示されます。おそらく、実際には機能していませんが、少なくともアプリがハングしていません。ハングとは、アプリがユーザー入力に応答しないが、バックグラウンドスレッドは引き続き実行されることを意味します。
更新:古いバージョンのDirectX(2006年8月)を使用していました。Vista SDKにパッケージ化されたDirectShowのものに対してコンパイル/リンクしましたが、サイコロはありません。