2014-02-27 28 views
2

這將是我在查找解釋幾天後在StackOverflow中的第一個問題。請溫柔地問我,因爲我知道我的問題有點奇怪是一個普遍的問題。在C++中用Media Foundation&Windows 8捕獲問題

我製作了一個基於微軟示例'CaptureToFile'的MF捕捉視頻應用程序。它確實在Windows 7 x64上工作。我升級到Visual Studio 2013沒有問題。當我嘗試將所有開發放在Windows 8.1 x64機器上時出現問題。

該應用程序編譯和沒有錯誤執行,但它不能通過在異步模式下使用m_pReader-> ReadSample()捕獲樣本;只有前兩個樣本到達OnReadSample方法;並且必須有'控制'樣本,因爲IMFSample在它們全部爲空。之後,該應用程序被「吊死」等待數據。

我試過原來的MFCaptureToFile樣品,結果也一樣。

當然,我認爲硬件和軟件是類似(同採集卡使用相同的驅動程序版本,兩者都是臺式PC ...)

你知道這種行爲的任何可能的原因是什麼?在Win7中,一切都是無懈可擊的!或者至少,如果你能點燃我一點關於尋找新的路徑發生了什麼

在此先感謝

UPDATE:有在比賽中的另一個「玩家」。看看線程,我發現一個工作線程在'RTWorkQ.dll'中,實時工作隊列容器,只針對Windows 8。我將繼續調查。同時,如果您有任何想法和需要分享的內容,我很樂意聽到您的聲音。

更新2:我修改了示例MFCaptureToFile以同步獲取視頻樣本,因爲我認爲問題可能是由於異步行爲;與隊列有關。我必須說,即使在這種變化下,問題仍然存在。第二次嘗試閱讀樣本時,應用程序被「吊死」,等待閱讀不會永遠不會到來。

更新3:我試着用CaptureEngine示例應用程序使用另一種MF方式捕獲視頻(MFCaptureEngine)。它的構建和運行完美無瑕,但在開始「預覽」時不會顯示任何圖像,也不會記錄任何有用的,只有非可播放的文件。

更新4:我已經在Windows 8 PRO中安裝了Visual Studio 2010 Ultimate。示例中的示例MFCaptureToFile再次失敗。它無法從圖像採集卡中讀取第二個採樣。我開始認爲這可能是採集卡(Datapath VisionRGB-E1S)和Windows 8 PRO之間的不兼容,儘管驅動程序確保它在此平臺中正常工作,並且測試程序顯示圖像。明天我要用外置USB攝像頭進行測試。

回答

0

它必須是幀捕獲器Datapath VisionRGB-E1S的問題。我嘗試過使用全新的USB攝像頭LifeCam Studio,並且一切正常。

我會留給未來其他線程的Windows 8和Windows 7之間爲什麼這種不成對的行爲,但它可能是一些涉及到用戶模式訪問...

+0

維克,你發現了什麼新的東西?我正在開發一個虛擬的視頻驅動程序(基於Testcap樣品),並沒有在MediaFoundation工作了。現在我試圖調試從兩側的問題(內核模式驅動程序和Topoedit MF應用程序) - 沒有成功至今。的確,基於MediaFoundation應用程序的請求只有兩個首批樣品... – Dalamber

2

最後,我想通了的原因這個問題。

隨着Windows 8。1發佈微軟已推出New AVStream Interfaces for Windows 8.1 KS_FRAME_INFO結構 - 新的FrameCompletionNumber成員有一個小的,但非常重要的變化。

已完成隊列中幀的識別序列號。 此數用於驗證正確的幀順序。當該值是 0時,幀被取消。該成員開始提供 的Windows 8.1。

DirectShow不關心這個數字。而MediaFoundation關心。

所以,你不能只修復你的用戶模式。製造業開發人員必須發佈更新。順便說一句,我有兩個攝像頭 - 羅技C270和Creative Live Socialize HD。羅技支持Metro,而Creative則不支持。

我已成功更新我的驅動程序只有幾行代碼(以正確設置FrameCompletionNumber)。

UPD。類似的線程http://www.osronline.com/showthread.cfm?link=255004

+0

完全同意,Dalamber。感謝您的反饋意見。你做了一個很好的研究。我接觸到製造商,他們能夠重現錯誤。不幸的是,他們已經預定2014年底的新驅動程序!所以我不得不改變卡的品牌... – Vic

0

我有同樣的問題的種類:

  • IMFSourceReader獲得成功

  • reader->SetCurrentMediaType()報告任何錯誤。

  • reader->ReadSample()成功。

然後OnReadSample()被稱爲只有一次和hrStatus參數0x80070491

對我來說,問題是,我修改了視頻亞型IMFMediaType,然後應用到閱讀器當前的媒體類型。

相關問題