我有一個Custom DirectShow Video Renderer Filter
它有一些擴展功能,比覆蓋圖像Microsoft's Video Renderer Filter
。我知道我可以用Transform Filter
做同樣的事情,但我選擇了這種方式。我也相信,我會面對同樣的問題,我將在下面描述一個Transform Filter
。自定義DirectShow視頻渲染器過濾器 - 動態分辨率更改
當我使用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
中連續檢查可能的視頻尺寸變化?
是的,我們想要的只是改變分辨率,而不是像YUV-> RGB等其他媒體類型的改變。我們想要完全像VMR那樣做。順便說一下,我們的類是從CBaseVideoRenderer擴展而來的,它是從使用CRendererInputPin作爲朋友類的CBaseRenderer擴展而來的。我是否應該使用自定義Pin來重寫QueryAccept並獲取這些分辨率更改? –
那你到底想要支持什麼?像VMR那樣擴展步幅,或者像VMR那樣處理上游過濾器所要求的格式變化呢? –
我正在嘗試處理格式更改。 –