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



我有一个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中可能的视频大小变化吗?

CheckMediaTypeSetMediaType不是真正的"事件",它们不会自己出现,所以你不能触发它们。你会改变新年决心吗?像VMR那样,靠你自己来扩展步幅?还是接受上游过滤器的分辨率更改?

最新更新