从 win10 商店安装了官方的 HEVC 扩展后,有些电脑上通过代码无法获取 HEVC 解码器。代码如下:(解决方法在最后)
#include <cstdio>
#include <iostream>
#include <Windows.h>
#include <mfapi.h>
#include <mfidl.h>
int main()
{
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
if (SUCCEEDED(hr))
{
hr = MFStartup(MF_VERSION);
if (SUCCEEDED(hr))
{
MFT_REGISTER_TYPE_INFO info = { MFMediaType_Video, MFVideoFormat_HEVC };
UINT32 count = 0;
IMFActivate** ppActivate = NULL;
hr = MFTEnumEx(MFT_CATEGORY_VIDEO_DECODER, MFT_ENUM_FLAG_ALL, &info, NULL, &ppActivate, &count);
//count不为0,说明系统已经安装 HEVC 扩展
IMFTransform* dec = NULL;
//下面这行返回错误
hr = ppActivate[0]->ActivateObject(__uuidof(IMFTransform), (void**)& dec);
printf("%x", hr);
for (UINT32 i = 0; i < count; i++)
{
ppActivate[i]->Release();
}
CoTaskMemFree(ppActivate);
E_ACCESSDENIED General access
MFShutdown();
}
CoUninitialize();
}
int a;
std::cin >> a;
return 0;
}
问题原因其实有点奇怪,是因为装的这个扩展的 dll 文件 Users 没有执行权限。。只要找到这个 dll 文件,把 Users 的执行的权限勾上即可解决。此例中 HEVC 的解码器文件应该是"C:\Program Files\WindowsApps\Microsoft.HEVCVideoExtensions_1.0.20033.0_x64__8wekyb3d8bbwe\x64\mfh265enc.dll",可以用 everything搜一下文件名就有了。权限可能直接改不了,需要先更改拥有者,具体步骤我就不说了,搜一下就有。