我有一个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
中可能的视频大小变化吗?
CheckMediaType
和SetMediaType
不是真正的"事件",它们不会自己出现,所以你不能触发它们。你会改变新年决心吗?像VMR那样,靠你自己来扩展步幅?还是接受上游过滤器的分辨率更改?