我有一个像覆盖图像这样的Custom DirectShow Video Renderer Filter
扩展功能。Microsoft's Video Renderer Filter
我知道我可以用 a 做同样的事情,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
?