【发布时间】:2011-11-17 09:25:59
【问题描述】:
我有一个Custom DirectShow Video Renderer Filter,它在Microsoft's Video Renderer Filter 上具有一些扩展功能,例如叠加图像。我知道我可以用Transform Filter 做同样的事情,但我选择了这种方式。我也相信,Transform Filter 会遇到同样的问题,我将在下面描述。
当我使用Microsoft's Video Renderer Filter 时,它能够在流启动/更改时自动调整窗口大小和缓冲区大小。我的过滤器能够做同样的事情,但除了流开始后我无法接收事件。我相信我可以以某种方式查询,但我不知道如何查询。
当前的事件管道如下所示。
On Pin Connect
--------------
CreateInstance
Video Renderer Class Constructor
CheckMediaType
SetMediaType
-> Width: 100, Height: 100
CheckMediaType
CheckMediaType
CheckMediaType
SetMediaType
-> Width: 100, Height: 100
On Play
-------
StartStreaming
DoRenderSample
...
...
...
DoRenderSample
On Stop
-------
Video Renderer Class Destructor
我的源过滤器设置的默认窗口大小为 100x100。我可以在引脚连接上得到这个两次。但是在StartStreaming 之后,我无法再次获得CheckMediaType 和SetMediaType 事件。我可以尝试从源过滤器触发它们(这也是我的代码),但由于 Microsoft's Video Renderer 能够自动调整 StartStreaming 的大小,我希望拥有相同的功能。
问题:
- 流媒体开始后我应该如何触发
CheckMediaType/SetMediaType调用?实际上SetMediaType对我来说很重要。还是有其他方法可以查询当前流分辨率? - 我是否需要在
DoRenderSample中不断检查可能的视频大小变化?
【问题讨论】:
标签: video filter directshow resolution renderer