在GraphEdit中,你可以在DirectShow Filters目錄中找到這個Filter,它的名字為“Fitler Tracer”。下面,筆者就以問答的方式介紹一下這個Filter的使用。
1. 如何使用這個Filter?
答:運行GraphEdit,首先構建好你的Filter Graph鏈路。然後,加入“Filter Tracer” Filter,並將其接入到Filter鏈路的適當位置或保持其未串連狀態。開啟Filter的屬性頁面進行操作即可。
2. 如何查看Filter Graph中的所有Filter的狀態?
答:加入“Filter Tracer” Filter並開啟其屬性頁面,在“Graph Info”頁中,你可以看到列出的當前Filter Graph中的所有Filter。在“Filter”組合框中,選擇一個你想查看的Filter。於是,下面就列出了這個Filter的所有的Pin,以及每個Pin對應的當前的(如果Pin處於串連成功狀態)或所有支援的Mediatype(如果Pin處於斷開狀態)。
3. 如何知道Filter是否進行了正確的串連?
答:一般在“Graph Info”頁中查看當前Filter的串連Mediatype:看Majortype、Subtype和Formattype是否正確;查看“Format Details”中描述的資訊是否與你期望的一樣。通過選擇單選框“Text”或“Hex”,你可以看到“Format Details”的兩種不同形式。
4. 如何方面地得到指定Filter的CLSID?
答:在Filter Graph中加入你想要查看的那個Filter,然後在“Filter Tracer”的“Graph Info”頁中選中這個Filter,在屬性頁面的最下面“Filter CLSID”中便可以看到這個Filter的Friendly Name和CLSID。雙擊字串,通過右鍵菜單可以將CLSID拷貝到剪貼簿中。
5. 如何在“Filter Tracer”的屬性頁面中直接開啟指定Filter的屬性頁面?
答:在“Graph Info”頁中選中某Filter,然後直接點擊“Filter”組合框右側的“…”按鈕。
6. 如何將Filter Graph的某條鏈路阻塞?
答:加入“Filter Tracer”Filter接入這條Filter鏈路,開啟其屬性頁面,在“Filter Tracer”頁中,將“Receive”多選框打上勾。注意:在你停止Filter Graph之前,務必取消阻塞狀態。
7. 如何在Filter傳送Sample時去掉時間戳記?
答:加入“Filter Tracer”Filter接入這條Filter鏈路,在“Filter Tracer”頁中,將“TStamp”多選框打上勾。於是,Sample到達Renderer時會直接播放。
8. 如何將Quality Control的Notify斷掉?
答:加入“Filter Tracer”Filter接入這條Filter鏈路。在“Filter Tracer”頁中,將“Notify”多選框打上勾。於是,Renderer Filter發送的通知就不會沿著這條鏈路達到Source filter了。
9. 如何將Mediaseeking鏈路斷開?
答:大家知道,Filter Graph Manager從Renderer filter開始一級一級往上申請的到Mediaseeking介面。我們要將這個申請鏈路斷開,只需將“Filter Tracer”Filter接入這條Filter鏈路,並且在“Filter Tracer”頁中將“MSeeking”多選框打上勾。
10. 我想讓Filter Graph傳送Sample一個一個互動進行,怎麼辦?
答:加入“Filter Tracer”Filter並將其接入,在“Filter Tracer”頁中將“StepSample”多選框打上勾。運行Filter Graph,每次按下“Feature Diagnosing”組的“StepSample”按鈕即可完成當前一個Sample的傳送。注意:務必在停止Filter Graph之前取消“StepSample”狀態。
11. 如何將Sample的裸資料寫到檔案中?
答:在“Filter Tracer”頁中將“Get Sample Data”多選框打上勾。
12. 如何將每個Sample的屬性資訊寫到檔案中?
答:在“Filter Tracer”頁中將“Get Sample Info”多選框打上勾。
13. 如何將當前串連的Format位元據寫到檔案中?
答:在“Filter Tracer”頁中將“Get Media Format”多選框打上勾。
14. 如何統計整個鏈路回放實際的幀率?
答:在“Filter Tracer”頁中將“Get Frame Rate”多選框打上勾。運行Filter Graph,啟動並執行時間越久,統計的幀率越精確。
15. 如何將某個Sample的資料寫成一個BMP檔案?
答:請先在“Filter Tracer”頁中將“Write a BMP File”多選框打上勾,然後將“Filter Tracer”Filter接入,一般在“Video Renderer”的前一個位置。注意,此時“Filter Tracer”Filter只接受RGB24或RGB32的Mediatype。另外,在“No.”後面可以指定將第幾個Sample寫到檔案中去。
16. 如何對Filter Graph的Mediaseeking介面進行測試?
答:將“Filter Tracer”Filter接入,在其“Filter Tracer”屬性頁面的“Feature Diagnosing”組中點擊“Get_Pos”按鈕:通過“Filter Tracer”Filter的Input Pin取得ImediaSeeking介面擷取當前位置;“Reset_Pos”按鈕:通過“Filter Tracer”Filter的Input Pin取得ImediaSeeking介面並調用“SetPosition”方法;“Reset_Graph”按鈕:通過Filter
Graph Manager的ImediaSeeking介面調用“SetPosition”方法。
17. 如何即時監測每一個傳送的Sample?
答:將“Filter Tracer”Filter接入適當的位置,運行Filter Graph,你就可以看到一個監看式視窗。在這個監看式視窗中,你可以看到Filter Graph啟動並執行系統時間,每個Sample的起訖時間,Sample傳送的個數、進度等資訊。你同樣可以通過監看式視窗的右鍵菜單實現一些控制,比如運行、暫停、停止Filter Graph,調整Sample的傳送速度等等。
18. 如何往當前Filter Graph中加入一個其他Filter?
答:有時候,我們僅需要“Filter Tracer”Filter列印一些資訊,最後面的Renderer filter可以接一個“Null Renderer”什麼也不做。你只需要在“Filter Tracer”屬性頁面中“Tools”組中,點擊“Add”按鈕。
19. 如何修改指定Filter的“Merit”值?
答:在“Filter Tracer”屬性頁面中“Tools”組中,首先在“Filter CLSID”輸入指定的Filter,然後點擊“Get”按鈕,讀出了這個Filter註冊的Friendly Name和現有的Merit值。你可以修改這個“Merit”值,並點擊“Set”按鈕進行設定。
20. 在Filter Graph中某個Filter的一個Output Pin支援很多種Mediatype,但是我只想用其中某一種進行串連,怎麼辦?
答:將“Filter Tracer”Filter接入到這個Filter的後面,開啟屬性頁面,在“MyOutput”頁中,可以看到所有的Mediatype,選擇其中一種,按下“Apply”。然後再將“Filter Tracer”Filter的Output Pin往下串連即可。