【发布时间】:2021-10-20 16:46:12
【问题描述】:
我正在使用 Windows Media Foundation 从视频采集卡中读取数据,我发现在某些机器上,ActivateObject 返回 MF_E_INVALIDMEDIATYPE。代码非常简单:
CComPtr<IMFAttributes> pAttributes = nullptr;
HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED | COINIT_DISABLE_OLE1DDE);
hr = MFStartup(MF_VERSION);
if (hr != S_OK)
{
return false;
}
// Create an attribute store to specify the enumeration parameters.
hr = MFCreateAttributes(&pAttributes, 1);
if (hr != S_OK)
{
return false;
}
// Source type: video capture devices
hr = pAttributes->SetGUID(MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE, MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID);
if (hr != S_OK)
{
return false;
}
IMFActivate** ppDevices = nullptr;
bool success = true;
UINT32 count = 0;
// Enumerate devices.
HRESULT hr = MFEnumDeviceSources(pAttributes, &ppDevices, &count);
//Returns MF_E_INVALIDMEDIATYPE on some machines (using the same device/drivers)
hr = ppDevices[0]->ActivateObject(IID_PPV_ARGS(&m_pMediaSource));
【问题讨论】:
-
可能此设备无法与 Media Foundation 一起正常工作。那可能是驱动问题。这是特殊的硬件吗?
-
Blackmagic Design 硬件,例如,已知有这种行为(与他们的驱动程序有关)。
-
是的,它是 Osprey Raptor 系列 935 PCIe 采集卡。如果这在任何机器上都不起作用,我倾向于同意它只是不受支持。事实上,它在一台让我感到困惑的机器上运行良好(一台机器恰好运行不同版本的 windows - windows LTSB,其他机器运行 windows 10 Pro)。
-
你应该联系供应商,如果他们支持MF,它应该可以工作。
-
我已经联系了供应商,他们不支持MF。
标签: c++ windows ms-media-foundation