2015-01-21 385 views
0

我有一個基本的avstream驅動程序(基於avshws示例)。我的YUY2輸出不適用於Video Renderer過濾器

當測試YUY2輸出I得到不同的結果基於我使用的渲染器:

  • 視頻渲染器:空白圖像
  • VMR-7:加擾圖像(由於使用具有一緩衝器的渲染器較大的步幅)
  • VMR-9:完美呈現

我不知道爲什麼基本的視頻渲染器(由AMCAP使用)不會工作。我已經檢查了輸出相同格式的網絡攝像機的圖形,除了渲染器輸出外,我看不到任何區別。

+0

也許是壞的媒體類型。您尚未發佈相關詳情。 – 2015-01-21 07:21:35

+0

請您詳細說明一下嗎? – djp 2015-01-21 10:47:23

+0

由「您尚未發佈相關詳情。」我的意思是你應該在圖表檢查中增加你發現的內容:特別是「相同格式」和「任何差異」。否則,你要求我們在黑暗中拍攝。 – 2015-01-21 10:54:23

回答

1

我假設你正在編寫基於avshws的自己的過濾器。我不熟悉這個特定的示例,但通常您需要確保兩件事:

  • 確保您的篩選器檢查提出的任何媒體類型都是可以接受的。在DirectShow基類中,視頻渲染器調用輸出引腳IPin::QueryAccept,該引腳調用您正在使用的任何基類成員,例如, CBasePin.CheckMediaTypeCTransformFilter.CheckTransform
  • 確保您在每個輸出樣本上撥打IMediaSample::GetMediaType,並做出適當的響應。調用CTransformFilter.SetMediaType並更改輸出的格式/步幅。現在談判已經太遲了 - 您已經接受了更改,如果您確實無法繼續操作,則必須中止流式傳輸,並返回錯誤HRESULT,並返回EC_ERRORABORT或EC_ERRORABORTEX。除非它有問題,否則下游過濾器應該調用您的輸出引腳的QueryAccept,並在它發送帶有媒體類型更改的樣本之前收到S_OK(我已經看到了偶爾的過濾器,可以在不詢問的情況下向第一個樣本添加重複的媒體類型)。

Handling Format Changes from the Video Renderer

0

我想通了這個問題。我錯過了一行來更新流指針結構中的其餘字節:

Leading-> OffsetOut.Remaining = 0;

這導致某些過濾器丟棄我的樣本(AVI/MJPEG Decompressor,Dump),這意味着某些圖形配置將不會呈現任何東西。

相關問題