我有一个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
?答案 0 :(得分:1)
CheckMediaType
和SetMediaType
并非完全是“事件”,它们不会自行出现,因此您无法触发它们。你要改变决议吗?你自己像VMR一样延伸步伐吗?或接受来自上游过滤器的分辨率更改?
此MSDN部分涵盖详细信息:Dynamic Format Changes。