2014-10-05 167 views
1

有仍然引腳捕獲問題,DirectShow中,未能renderstream連接仍然引腳到samplegrabber

我們有一個基本的視頻和圖片捕捉項目,通過捕捉引腳捕捉圖像和視頻是好的,但一旦我嘗試連接仍然引腳(這是FindPin成功發現)到samplegrabber,它失敗與hresult = E_FAIL /未指定失敗/ 0x80004005,

alrorythm的步驟如下(用delphi編寫,我已刪除名稱變量):

  • 初始化接口,成功搜索設備,添加視頻捕獲過濾器;

  • FindPin( '捕獲過濾器',//過濾器。 PINDIR_OUTPUT,//尋找一個輸出引腳。 @PIN_CATEGORY_STILL,// pin類別。 無,//介質類型(不關心)。 False,//引腳必須未連接 0,//獲取第0個引腳 'still pin'//接收指向引腳的指針 ); 此過程成功查找引腳; CoCreateInstance(CLSID_SampleGrabber,NIL,CLSCTX_INPROC_SERVER, IID_IBaseFilter,'sample grabber filter');};}} 成功;

  • 'sample grabber filter'.QueryInterface(IID_ISampleGrabber, 'isamplegrabber object'); 成功;

  • 'graph builder'.AddFilter (VCOISampleGrabFilter,'Sample Grabber'); 成功; CoCreateInstance(CLSID_NullRenderer,NIL,CLSCTX_INPROC_SERVER, IID_IBaseFilter,'null renderer filter'); 成功;

  • 'graph builder'.AddFilter (VCONullRendererFilter,'Null Renderer'); 成功;

  • 'isamplegrabber object'.SetBufferSamples(True); 'isamplegrabber object'.SetOneShot(False); 成功;

  • '圖生成器2'。RenderStream (@PIN_CATEGORY_STILL,@MEDIATYPE_Video, '視頻捕獲過濾器', '樣品採集濾波器', '空渲染濾波器'); 存在這樣的情況正是這種alrotythm失敗後, ,如果我看的圖(已經寫了這個程序),它看起來像只有3未連接的過濾器;

沒有使用回調函數進行樣品採集,只需使用GetCurrentBuffer得到出手,

實際上,這algorythm(僅適用於捕捉引腳)的作品好了,

algorythm從http://msdn.microsoft.com/ru-ru/library/windows/desktop/dd318622%28v=vs.85%29.aspx通過,

也已經嘗試了RenderStream另一個參數,發生同樣的錯誤,

使用「還試圖克2個瑤池銷APH builder'.Connect功能(出仍然在-samplegrabber),它也失敗了,

有任何人都經歷了相同的?很是怪異,第一眼我認爲這是不夠只是改變PIN_CATEGORY_CAPTURE到PIN_CATEGORY_STILL,這將是罰款,

相機100%都還在工作引腳(它正在與另一程序),

我正在重寫微軟的AmCap現在嘗試相同,但不幸的是,它尚未完成,

謝謝, igor。

回答

0

找到了這個問題的解決方案,也許有人會發現這有幫助:你應該渲染一個渲染器,然後samplegrabber :)

0

RenderStream是[假想容易]連接在一起的東西進入可操作狀態的包裝方法。不幸的是,這樣做的代價是缺乏失敗的細節。您有興趣直接使用IGraphBuilder.Connect連接引腳,並將故障隔離爲特定的圖形構建步驟。

相關問題