很久沒寫有營養的東西了,今天來寫 Directshow video capture source filter 的精華...
一如往常,我寫的東西都是在網路上各個角落挖出來的,先感謝那些把知識放上網路的人,還要感謝我的同學Eric,他推薦的Directshow sample "AMCAP"真是debug的好東西。(雖然我這輩子學 DDK 應該無望了) 
首先,請到這個網頁抓範例。 ( Capture Source filter )
要完成 Directshow video capture source, msdn 有很爛的教學。
我們來看( Capture Source filter )的範例,在DLL main 要註冊 IMoniker
接著我們還要完成以下的 interface
IUnknown
IAMStreamConfig
IKsPropertySet
這些 Interface 在範例裡都寫好了,不過很重要的,在GetMediaType 及 GetFormat 這些function,"一定要"把自己要的 video format 定義清楚。
如果filter 跑不起來,但是AMCAP可以執行,不妨去debug mode 觀察一下 SetMediaType 及 SetFormat,使用這個filter 的 AP 會嘗試協調出一個兩邊共通的 Media Type。
filter 跑起來了,可是畫面一片黑,或是畫面時間有問題,請檢查 FillBuffer function,看看圖片有沒有填對,IMediaSample 的 SetTime 絕對不要用系統時間,請學範例程式使用 Delta Time。
上述步驟都完成了,那該做個dialog 了。
請 google "如何创建Filter的属性页" <-( 這篇不知作者的文章被大量轉載)
照他的步驟 dialog 就可以做好,但是大部份AP 在dialog 結束後都會把 Directshow Graph 砍掉重建。
意指,所有的 filter... pin... dialog... 的 instance 都會被移出記憶體重新 loading,
這時候只能找地方暫存 Dialog 的輸入值了。
取之於網路用之於網路,如果這篇文章可以讓某個讀者少浪費幾小時的光陰去找資料try error,也可以稍稍彌補微軟的罪孽了。