0

我对 DirectShow 还很陌生,现在真的只是在摸索。我想在 WPF 应用程序中托管 directshow 图形的 directshow 渲染器窗口,并且目前正在使用 HwndHost 类来尝试实现这一点。我需要的 HwndHost 是渲染视频的窗口的句柄。我找到了一个示例,它显示了通过枚举 IVideoWindow 接口的引脚并查询 IOverlay 来获取句柄,因此可以使用 GetWindowHandle 方法来获取句柄。

问题是 IOverlay 在 DirectShow.Net 中似乎不可用。阅读 DirectShow.Net关于页面,IOverlay 列在表格中,标题为“这些接口在源代码中,但已弃用、未记录、用于 Ole 自动化或无法测试,这意味着它们不是,也不会被测试”

那么我必须做些什么才能访问这个定义呢?它是否从作为库分发的构建中排除,所以我应该自己从源代码构建库吗?

或者有没有更好的方法来做我想做的事情?Anyhelp 将不胜感激,就像我说我对所有这些东西都是新手一样。

提前致谢。

编辑:那里没有多少 DirectShow 开发人员?或者这是一个愚蠢的问题,绝对可以接受窥视者可能有的任何建议......

4

1 回答 1

2

执行此操作的正常方法是使用 IVideoWindow::put_Owner 重新设置视频窗口的父级,使其成为您自己窗口的子级。您还需要设置 AutoShow (false)、Visible、Width 和 Height 属性,并更改 WindowStyle 属性以使其成为子窗口。

IOverlay 接口在 DirectShow (1996) 的第一个版本中实现,以支持一些早已失效的硬件解码器。我认为当前的视频渲染器不会支持它。

窗口句柄很难获得,因为糟糕的应用程序编程导致 Video for Windows 中经常出现死锁,开发人员认为 DirectShow 线程和他们拥有的窗口以及任何应用程序线程之间需要明确分离。

G

于 2009-09-03T08:17:57.703 回答