我有一個自定義的「水槽」過濾器。我創建了一個BDA圖,並通過調用IGraphBuilder2 :: RenderStream將MPEG2VIDEO流發送給它,其中還添加了一箇中介「解碼」過濾器。此時,它會通知我的過濾器,它將傳遞704x480 YUY2數據。爲什麼我的directshow圖(動態格式)只是掛起?
當我調用圖上的Run時,發生調整(我推測)並且數據格式明顯改變,因爲上游解碼器調用我的過濾器引腳上的ReceiveConnection,其大小爲1280x720。我接受它並返回S_OK。
但是,如果我返回S_OK,該圖基本上從這一點掛起。如果我返回VFW_E_ALREADY_CONNECTED,那麼它會成功地爲我提供704x480數據。奇怪的是,如果我在GraphEdit中運行相同類型的圖形,但使用普通的視頻渲染器,則它會成功重新協商格式並使用它。有一點要注意的是我的過濾器沒有自定義分配器。有任何想法嗎?
這種情況下的解碼濾波器是PowerDVD 8的「mpeg2視頻解碼器」FWIW。
我唯一的當前理論是要麼我需要一個分配器,或其他的東西導致調用線程爲「段錯誤」(LAV過濾器,例如看起來像段錯誤)。 – rogerdpack
可能沒有關係,但我過去在powerdvd的mpeg2解碼器中遇到了問題。它在我的應用程序中造成了巨大的內存泄漏。卸載powerdvd並安裝ffdshow(試用版)解決了我的問題。 – wimh
我只使用BDA作爲實時信號源,所以我甚至可以在將demux添加到圖形之前進行調諧。你知道/有elecard的[spy.ax](http://www.elecard.com/assets/files/old/directshow/spy_0.5.zip)嗎?您可以在兩個其他過濾器之間插入過濾器來監視消息。這樣你就可以檢查普通的視頻渲染器是否做了不同的事情。 – wimh