自定义DirectShow视频渲染器过滤器 - 动态分辨率更改

时间:2011-11-17 09:25:59

标签: video filter directshow resolution renderer

我有一个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之后,我无法再次获得CheckMediaTypeSetMediaType个事件。我可以尝试从源过滤器触发它们(这也是我的代码),但由于Microsoft's Video Renderer能够自动调整StartStreaming的大小,我想拥有相同的功能。

问题:

  1. 流媒体启动后如何触发CheckMediaType / SetMediaType来电?实际上SetMediaType对我来说很重要。或者还有另一种查询当前流分辨率的方法吗?
  2. 我是否需要在DoRenderSample
  3. 中连续检查可能的视频尺寸变化

1 个答案:

答案 0 :(得分:1)

CheckMediaTypeSetMediaType并非完全是“事件”,它们不会自行出现,因此您无法触发它们。你要改变决议吗?你自己像VMR一样延伸步伐吗?或接受来自上游过滤器的分辨率更改?

此MSDN部分涵盖详细信息:Dynamic Format Changes