I have the following COM call:
IMFTransform* pMFT = NULL; HRESULT hr = CoCreateInstance(CLSID_VideoProcessorMFT, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pMFT));
On my development machine, this call to
However, when I deploy this on my old Windows 7 machine,
the call to
and I don't know why.
Here's how I'm displaying the error:
_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);
And here's the error I get in that message box:
HRESULT=0x80040154, Class not registered
That is, the COM class for the Video Processor MFT
is not registered.
I see that
CLSID_VideoProcessorMFT is defined as:
EXTERN_GUID(CLSID_VideoProcessorMFT, 0x88753b26, 0x5b24, 0x49bd, 0xb2, 0xe7, 0xc, 0x44, 0x5c, 0x78, 0xc9, 0x82);
This is the GUID
88753B26-5B24-49bd-B2E7-0C445C78C982 in disguise.
I understand that COM classes are registered in the Windows Registry with a key containing this GUID.
Using Registry Editor on my developer machine, I can see the key:
and this key has a "Default" value of
referring to the filepath
which does exist.
On my old Windows 7 machine, this key in the registry does not exist --
as expected, given the "Class not registered" error.
And there is no file at
But this is where the trail goes cold.
I don't know what is supposed to register that class in the registry,
and why it hasn't run on my old Windows 7 machine.
Which of these is the right conclusion? Is it possible to load the Video Processor MFT on Windows 7? If so, how?
Minimum supported client: Windows 8 Release Preview
Minimum supported server: Windows Server 2012
Applications that target earlier versions of Windows are likely to be supposed to use other DSPs like Color Control Transform DSP and Color Converter DSP. These were/are not GPU accelerated though.
The advantage of Video Processor MFT was that it supported GPU-accelerated video processing using Microsoft Direct3D 11.
(This is an expansion on @SimonMourier's very helpful comment, for future readers, since it was all new to me.)
CLSID_VideoProcessorMFT is available as follows:
The header file
mfidl.h documents which Windows version a specific COM class was introduced in. Following
CLSID_VideoProcessorMFT to its definition, I find:
#if (WINVER >= _WIN32_WINNT_WINTHRESHOLD) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) // ... EXTERN_GUID(CLSID_VideoProcessorMFT, 0x88753b26, 0x5b24, 0x49bd, 0xb2, 0xe7, 0xc, 0x44, 0x5c, 0x78, 0xc9, 0x82); #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) */ #endif // (WINVER >= _WIN32_WINNT_WINTHRESHOLD) // ... #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) #if (WINVER >= _WIN32_WINNT_WINBLUE) #if (WINVER < _WIN32_WINNT_WINTHRESHOLD) EXTERN_GUID(CLSID_VideoProcessorMFT, 0x88753b26, 0x5b24, 0x49bd, 0xb2, 0xe7, 0xc, 0x44, 0x5c, 0x78, 0xc9, 0x82); #endif // (WINVER < _WIN32_WINNT_WINTHRESHOLD) #endif // (WINVER >= _WIN32_WINNT_WINBLUE) // ... #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
By following and decoding all these macros, I got the availability list above.
User contributions licensed under CC BY-SA 3.0