我在微軟官方網站上搜索了關於MMFCreateDXGISurfaceBuffer但它全部用C++編寫。我想在c#中使用MMFCreateDXGISurfaceBuffer,但找不到任何有關如何正確使用該方法的參考。如何在MediaFundation.Net中使用MMFCreateDXGISurfaceBuffer?
在C++下面是代碼。
MFCreateDXGISurfaceBuffer(__uuidof(ID3D11Texture2D), pAcquiredDesktopImage, 0, FALSE, &pMediaBuffer)
我想上面的代碼轉換爲C#和下面是我的代碼,但似乎不正確的,因爲我得到E_NOINTERFACE
MFExtern.MFCreateDXGISurfaceBuffer(typeof(SharpDX.Direct3D11.Texture2D).GUID, texture, 0, false, out buffer);
我使用SharpDX DXGI和MediaFoundation.Net在我的應用程序。我不知道如果
typeof(SharpDX.Direct3D11.Texture2D).GUID
相當於
__uuidof(ID3D11Texture2D)
下面是包裝MMFCreateDXGISurfaceBuffer
[DllImport("mfplat.dll", ExactSpelling = true), SuppressUnmanagedCodeSecurity]
public static extern HResult MFCreateDXGISurfaceBuffer(
[In, MarshalAs(UnmanagedType.LPStruct)] Guid riid,
[MarshalAs(UnmanagedType.Interface)] object punkSurface,
int uSubresourceIndex,
[MarshalAs(UnmanagedType.Bool)] bool fBottomUpWhenLinear,
out IMFMediaBuffer ppBuffer
);
有人能教我如何在MediaFOundation.Net使用MFCreateDXGISurfaceBuffer 。由於
編輯:我用MFTrace和下面是它失敗的
1716,2494 03:19:20.59013 CMFTransformDetours::SetInputType @02E96B4C Failed MT: MF_MT_FRAME_SIZE=5866925327104 (1366,768);MF_MT_MAJOR_TYPE=MEDIATYPE_Video;MF_MT_FRAME_RATE=257698037761 (60,1);MF_MT_PIXEL_ASPECT_RATIO=4294967297 (1,1);MF_MT_INTERLACE_MODE=2;MF_MT_SUBTYPE=MFVideoFormat_RGB32
林不知道如果我設置正確,因爲我用料表面的Direct3D水槽輸入類型的日誌。
此線程上的代碼是我想要在C#中轉換。使用SharpDX和MediaFoundation.Net https://stackoverflow.com/questions/34857680/mf-sinkwriter-memory-problems – kripto