0

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

问题:

  1. 流媒体开始后我应该如何触发CheckMediaType/SetMediaType调用?其实SetMediaType对我来说很重要。还是有另一种查询当前流分辨率的方法?
  2. 我是否需要不断检查可能的视频大小变化DoRenderSample
4

1 回答 1

1

CheckMediaType并且SetMediaType不完全是“事件”,它们不会自行出现,因此您无法触发它们。你要改变决议吗?像 VMR 那样靠自己来扩展步幅吗?还是接受上游过滤器的分辨率更改?

此 MSDN 部分包含详细信息:动态格式更改

于 2011-11-17T11:01:21.830 回答