DirectShow Filter除錯方法

2021-07-02 07:54:02 字數 1449 閱讀 6409

介紹經常有人會問,我的filter已經開發好了,但怎麼來除錯呢?怎麼讓程式在filter**上單步執行呢?其實,這個很容易做到。下面我就來講一些具體的步驟吧。

正文經常有人會問,我的filter已經開發好了,但怎麼來除錯呢?怎麼讓程式在filter**上單步執行呢?其實,這個很容易做到。下面我就來講一些具體的步驟吧。

step 0:開發環境:visual studio .net 2003 + directx 9.0a sdk

step 1:filter的開發工作。這個過程就略過了。因為各人開發的filter不盡相同,這裡我們只以sdk的ball為例,即dxsdk9a\samples\c++\directshow\filters\ball。編譯這個filter專案的debug版本,生成乙個ax檔案,假設為d:\dxsdk9a\samples\c++\directshow\filters\ball\debug\ball.ax。接下去要註冊這個filter,方法是:在命令列執行regsvr32 d:\dxsdk9a\samples\c++\directshow\filters\ball\debug\ball.ax。記住你的filter的註冊名,以便後面通過graphedit找到它;這裡是「bouncing ball」。

step 2:開啟ball專案的屬性頁,然後設定該filter專案的執行程式為graphedt.exe,如下圖:

step 3:在filter**中設定斷點。比如我們想看一下filter物件的建立過程,那就在cbouncingball類的建構函式中放乙個斷點;想跟蹤一下filter的資料流過程,則在cballstream::fillbuffer函式中放乙個斷點。設定斷點的方法不用我教了吧?——游標放到指定的**行上,然後按下功能鍵f9。

step 4:開始除錯filter專案。執行選單命令debug | start,或者直接按下功能鍵f5。這時就可以看到我們指定的exe程式執行起來了(這裡是graphedit)。構建乙個包含當前filter的filter graph。比如首先找到「bouncing ball」這個filter,把它加入到filter graph中去……這時候程式就會停在cbouncingball類的建構函式的斷點處了,如下:

在vc專案中按下功能鍵f5讓程式繼續執行,此時graphedit如下圖所示:

繼續構建完整的filter graph。這裡我們可以render這個source filter的output pin,結果如下:

step 5:跟蹤filter執行時的動態行為。執行graphedit的選單命令graph | play,上面構建的filter graph就真正跑起來了。這時候我們可以看到程式停在了cballstream::fillbuffer函式的斷點處。我們的目標最終達成了!!!

注:filter最初開發完成之後,一般首先在graphedit中進行除錯,方法和步驟就是上面介紹的。當通過了初步測試、把這個filter應用到具體的軟體產品之後,一般還會進行一些除錯。這時候就需要把filter專案的執行程式指向使用這個filter的軟體產品的exe檔案了。

directshow filter中新增屬性頁

directshow 屬性頁的製作,為cball filter加了乙個屬性頁 具體為分以下步驟 1.在要顯示屬性的類中繼承現ispecifypropertypages類,並實現此類的getpages 函式。如下所示 hresult stdmethodcalltype cbouncingball ge...

directshow filter經驗總結

以前一直做嵌入式,對directshow一點都不明白。所以第一步是進行 餓補。第一步是補vc,以前學過vc,但是好幾年不用了,有點生疏了。但是功底還不錯,在網上找了些例子練了幾天,感覺找回感覺了。我 認為既然是用vc 程式設計,c oop的概念一定要清晰,具備一定的源 閱讀能力。畢竟directsh...

Linux下除錯core dump 檔案的方法

在開發和使用linux 程式時,引擎有時會莫名 其妙的core 掉,在網上查了一下,整理了乙個簡 單的除錯core 檔案的方法。1 什麼是core dump?core,即core memory,而dump 就是堆放的 意思。core dump 又叫核心轉儲,當程式執行過 程中發生異常,程式異常退出時...