我正在使用自定義視頻播放器。我在我的架構中使用了DirectShow/Media Foundation的混合。基本上,我使用DS抓取VOB幀(不受MF支持)。我能夠從DirectShow獲得一個示例,但我堅持將它傳遞給渲染器。在MF中,我得到一個Direct3DSurface9(來自IMFSample),並使用IDirect3D9Device將其呈現在後備緩衝器上。IMediaSample(DirectShow)到IDirect3DSurface9/IMFSample(MediaFoundation)
使用DirectShow,我得到IMediaSample作爲我的數據緩衝區對象。我不知道如何轉換並將其作爲IMFSample傳遞。我發現其他人從樣本中獲取位圖信息並使用GDI +進行渲染。但是我的視頻數據可能並不總是有RGB數據。我希望從IMediaSample獲得IDirect3DSurface9或IMFSample,並將其傳遞給渲染,在此我不必擔心顏色空間轉換。
我是新來的。如果我錯了,請糾正我。 謝謝
感謝您的回覆。假設我希望用我擁有的緩衝區數據填充D3D表面(在IMediaSample中),我該如何實現這一點?我無法使用抓取器方法獲取MF所需格式的樣本,因爲抓取器在渲染器之前不會連接,但總是處於未連接狀態,或者它將在解碼器之前連接。然後我採取了這裏描述的方法:http://www.codeproject.com/KB/audio-video/VideoImageGrabber.aspx我現在堅持如何將它複製到D3DSurface上。我嘗試了'memcpy',但是在渲染時看不到我的幀數據。 – 2012-02-07 10:59:51
你必須想出一個合適的初始化順序,以確保格式匹配。或者,您也可以創建'DShow'和'MF'部件,分別限制某些已知格式,然後自己進行轉換,例如藉助「Color Converter DSP」http://msdn.microsoft.com/zh-cn/我們/庫/窗/臺式機/ ff819079%28V = vs.85%29.aspx – 2012-02-07 11:05:50