winapi - 在 Windows 7 上加载视频处理器 MFT 时出现“类未注册”
问题描述
我有以下 COM 调用:
IMFTransform* pMFT = NULL;
HRESULT hr = CoCreateInstance(CLSID_VideoProcessorMFT, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pMFT));
在我的开发机器上,此调用CoCreateInstance
成功。但是,当我在旧的 Windows 7 机器上部署它时,调用CoCreateInstance
失败,我不知道为什么。这是我显示错误的方式:
_com_error err(hr);
LPCTSTR hrErrMsg = err.ErrorMessage();
WCHAR msg[MAX_PATH];
StringCbPrintf(msg, sizeof(msg), L"HRESULT=0x%X, %s", errContext, hrErr, hrErrMsg);
MessageBox(hwnd, msg, L"Error", MB_ICONERROR);
这是我在该消息框中得到的错误:
HRESULT=0x80040154, Class not registered
也就是说,视频处理器 MFT的 COM 类
未注册。我看到它CLSID_VideoProcessorMFT
被定义为:
EXTERN_GUID(CLSID_VideoProcessorMFT, 0x88753b26, 0x5b24, 0x49bd, 0xb2, 0xe7, 0xc, 0x44, 0x5c, 0x78, 0xc9, 0x82);
这是伪装的 GUID 88753B26-5B24-49bd-B2E7-0C445C78C982
。我知道 COM 类是在 Windows 注册表中注册的,其中包含此 GUID 的键。在我的开发人员机器上使用注册表编辑器,我可以看到密钥:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{88753B26-5B24-49bd-B2E7-0C445C78C982}
并且这个键有一个“默认”值%SystemRoot%\System32\msvproc.dll
,指的是C:\Windows\System32\msvproc.dll
确实存在的文件路径。
在我的旧 Windows 7 机器上,注册表中的这个键不存在——正如预期的那样,考虑到“类未注册”错误。并且没有文件C:\Windows\System32\msvproc.dll
。但这就是小路变冷的地方。我不知道应该在注册表中注册该类的内容,以及为什么它没有在我的旧 Windows 7 机器上运行。
可能的结论:
- 我必须自己注册视频处理器 MFT。但是,文档不建议这样做,我不知道该怎么做。
- Windows 7 不支持视频处理器 MFT。但是文档没有提供任何迹象。事实上,他们说“Media Foundation 需要 Windows Vista 或更高版本”,其中应该包括我的 Windows 7 机器。
- 我以错误的方式加载视频处理器 MFT。有没有更独立于系统的方式来加载它?
以下哪个是正确的结论?是否可以在 Windows 7 上加载视频处理器 MFT?如果是这样,怎么做?
解决方案
即使视频处理器 MFT 的旧文档也没有提到可用性限制,但仍然可以从相关内容中假设它们:
要求
支持的最低客户端:Windows 8 Release Preview
最低支持服务器:Windows Server 2012
针对早期版本 Windows 的应用程序可能应该使用其他 DSP,例如颜色控制变换 DSP 和颜色转换器 DSP。这些是/不是GPU加速的。
Video Processor MFT 的优势在于它支持使用 Microsoft Direct3D 11 进行 GPU 加速的视频处理。
推荐阅读
- java - 是否可以从 Spring 应用程序上下文中获取 basePackages 值?
- scala - 如何根据条件对列表的元素进行分组?
- ruby-on-rails - ActionController::UrlGenerationError: 没有路由匹配 {:action=>"show", :controller=>"demographic_detail", :id=>nil}
- javascript - 在mongodb中将字符串转换为日期?
- sapui5 - 如何在调试器中查看 view.xml 文件?
- java - Json数组不在jsp中打印值
- c++ - 用信号和槽连接多个 UI 对象
- python-3.x - 带有 Python 3.7、pandas 和 scikit-learn (Windows 10) 的 Conda 环境 - 依赖项错误
- ios - Objective c中的自动滚动收集视图
- python - Python 日志记录调试级别不会消失