Roz*_*are 5 directx-11 ms-media-foundation
我正在尝试在 Windows 10(桌面)上使用 DirectX 11 为 Media Foundation 编写 EVR。到目前为止,我找到的唯一一个解决方案是在这里 不幸的是,我不知道(和其他许多人一样)如何正确使用它。有人可以指出我如何将 MF 与 DirectX 11/12 结合的正确方向吗?
我正在使用激活我的 EVR 的代码:
hr = MFCreateVideoRendererActivate(hwndVideo, &pRendererActivate);
hr = pRendererActivate->SetGUID(MF_ACTIVATE_CUSTOM_VIDEO_PRESENTER_CLSID, CLSID_DX11VideoRenderer);
Run Code Online (Sandbox Code Playgroud)
我来到了 MF 要求 GetDeviceID 并在 kernel.dll 中引发异常的地步。我认为混合器和渲染器设备之间存在不匹配。它们的默认设备是 DX9。在我的示例中,我必须提供 DirectX 11 设备 CLSID。
小智 1
DX11VideoRenderer 是一个很好的示例,展示了如何使用基于 Dx11 的演示器。然而,没有太多代码片段来演示如何使用它。
\n\n您可以通过两种方式进行研究:
\n\n无需注册即可使用。
\n\n代码片段:
\n\ntypedef HRESULT(_stdcall *PFN_GetClassObject)(REFCLSID, REFIID, LPVOID*);\nHMODULE hSink = NULL;\nPFN_GetClassObject pfn = NULL;\nHRESULT hr = E_FAIL;\nIClassFactory *pMediaSinkFactory = NULL;\nIMFMediaSink *pMediaSink = NULL;\n\nhSink = ::LoadLibraryEx(L\xe2\x80\x9cDX11VideoRenderer.dll\xe2\x80\x9d, \n NULL, \n LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);\n\nif(hSink)\n pfn = (PFN_GetClassObject)GetProcAddress(\n hSink, \n "DllGetClassObject");\n\nif(pfn)\n hr = pfn(CLSID_DX11VideoRenderer, \n IID_IClassFactory, \n (LPVOID*)&pMediaSinkFactory);\n\nif(pMediaSinkFactory){\n pMediaSinkFactory->CreateInstance(NULL, \n __uuidof(IMFMediaSink), \n (LPVOID*)&pMediaSink);\n pMediaSinkFactory->Release();\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |