Я искал на веб-сайте Microsoft информацию о MMFCreateDXGISurfaceBuffer, но все это было написано на C++. Я пытаюсь использовать MMFCreateDXGISurfaceBuffer в С#, но не могу найти ссылку на то, как правильно использовать этот метод.
в С++ ниже приведен код.
MFCreateDXGISurfaceBuffer(__uuidof(ID3D11Texture2D), pAcquiredDesktopImage, 0, FALSE, &pMediaBuffer)
Я попытался преобразовать приведенный выше код в С#, и ниже приведен мой код, но он кажется неправильным, потому что я получаю 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
);
Может ли кто-нибудь научить меня, как использовать MFCreateDXGISurfaceBuffer в MediaFOundation.Net. Спасибо
Изменить: я использовал 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.