如何设置FilterGraph渲染器的所有者?

时间:2009-01-15 18:48:51

标签: mfc directshow

我有一个CView,我想托管一个DirectShow渲染器。

我没有写原始代码,我只是清理并将代码移动到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东西......没有骰子。

1 个答案:

答案 0 :(得分:1)

我已经得到了解决方案。

视频流从没有消息泵的线程开始,这导致视频窗口无响应。 (我猜XP更容忍这个,也许Vista中新的显示驱动程序模型搞砸了。)无论如何,一旦我将SendMessage发送到主应用程序窗口并从那里开始视频捕获,一切似乎都有效!