2014-03-03 55 views
0

我正在寫一個使用CBaseFilter作爲基類的過濾器。 我正在努力使其將輸入媒體示例轉發到圖中的outputp。爲什麼這個過濾器不起作用?

我創建了兩個引腳類,一個用於輸出,一個用於輸入。 我通過Receive方法將數據從輸入引腳轉發到輸出引腳,在那裏我使用Deliver轉發數據。 實際上調用了這些方法,因爲每次調用這些方法時都寫入了日誌文件條目。

但是,當我在繪圖中使用過濾器時,結果是在我停止圖形之前沒有數據寫入文件。然後它總是將64KB的東西寫入文件。

生成的avi文件當然不可播放。

那麼這64KB的數據是什麼? 我是否必須定義除CBaseInputPin :: Receive和CBaseOutputpin :: deliver之外的其他方法才能使數據流正常工作?

回答

1

你爲什麼使用CBaseFilter?對於具有輸入和輸出的濾波器,可以使用directshow基類:CTransformFilter或者如果您只有一個輸入和一個輸出引腳CTransInPlaceFilter

還有一個DirectShow示例如何實現CTransformFilter,「EZRGB24 Filter Sample」。

我認爲64Kb數據是Avi-Header,它是在你停止圖形之後編寫的。

+0

我使用CBaseFilter,因爲我的最終過濾器至少有3個輸入引腳 – Luke

0

如果不知道圖表的外觀以及您嘗試編寫的數據類型,無法回答您的問題。您可以使用GraphEditPlus在不寫入文件的情況下查看圖形中流動的數據。只需插入一些採樣卡實例,然後在上下文菜單(右鍵單擊)中選擇「watch grabbed samples」。