1

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のものに対してコンパイル/リンクしましたが、サイコロはありません。

4

1 に答える 1

1

私はこれに対する解決策を持っています。

メッセージポンプのないスレッドから開始されたビデオストリーム。これにより、ビデオウィンドウが応答しなくなりました。(XPはこれに対してより寛容だったと思います。おそらく、Vistaの新しいディスプレイドライバーモデルがそれを台無しにしました。)とにかく、メインアプリウィンドウにSendMessageを実行し、そこからビデオキャプチャを開始すると、すべてが機能しているようです。

于 2009-01-16T16:40:20.637 に答える