MFEnumDeviceSources 函数 (mfidl.h)
枚举音频或视频捕获设备的列表。
语法
HRESULT MFEnumDeviceSources(
[in] IMFAttributes *pAttributes,
[out] IMFActivate ***pppSourceActivate,
[out] UINT32 *pcSourceActivate
);
参数
[in] pAttributes
指向包含搜索条件的属性存储的指针。 若要创建属性存储,请调用 MFCreateAttributes。 在属性存储中设置以下一个或多个属性:
值 | 含义 |
---|---|
指定是枚举音频设备还是视频设备。 (必选。) | |
对于音频捕获设备,指定设备角色。 (可选。) | |
对于视频捕获设备,指定设备类别。 (可选。) |
[out] pppSourceActivate
接收 IMFActivate 接口指针数组。 每个指针表示媒体源的激活对象。 函数为数组分配内存。 调用方必须释放数组中的指针并调用 CoTaskMemFree 以释放数组的内存。
[out] pcSourceActivate
接收 pppSourceActivate 数组中的元素数。 如果没有捕获设备与搜索条件匹配,此参数将接收值 0。
返回值
如果此函数成功,则返回 S_OK。 否则,将返回 HRESULT 错误代码。
注解
每个返回的 IMFActivate 指针都表示一个捕获设备,并可用于为该设备创建媒体源。 还可以使用 IMFActivate 指针来查询描述设备的属性。 可以设置以下属性:
Attribute | 说明 |
---|---|
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME | 设备的显示名称。 |
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE | 描述设备的输出格式的主要类型和子类型 GUID。 |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE | 捕获设备的类型 (音频或视频) 。 |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID | 音频终结点 ID 字符串。 仅 (音频设备。) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY | 设备类别。 仅 (视频设备。) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE | 设备是硬件设备还是软件设备。 仅 (视频设备。) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK | 设备驱动程序的符号链接。 仅 (视频设备。) |
若要从 IMFActivate 指针创建媒体源,请调用 IMFActivate::ActivateObject 方法。
示例
以下示例枚举系统上的视频捕获设备,并为列表中的第一台设备创建媒体源。
HRESULT CreateVideoDeviceSource(IMFMediaSource **ppSource)
{
*ppSource = NULL;
IMFMediaSource *pSource = NULL;
IMFAttributes *pAttributes = NULL;
IMFActivate **ppDevices = NULL;
// Create an attribute store to specify the enumeration parameters.
HRESULT hr = MFCreateAttributes(&pAttributes, 1);
if (FAILED(hr))
{
goto done;
}
// Source type: video capture devices
hr = pAttributes->SetGUID(
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE,
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID
);
if (FAILED(hr))
{
goto done;
}
// Enumerate devices.
UINT32 count;
hr = MFEnumDeviceSources(pAttributes, &ppDevices, &count);
if (FAILED(hr))
{
goto done;
}
if (count == 0)
{
hr = E_FAIL;
goto done;
}
// Create the media source object.
hr = ppDevices[0]->ActivateObject(IID_PPV_ARGS(&pSource));
if (FAILED(hr))
{
goto done;
}
*ppSource = pSource;
(*ppSource)->AddRef();
done:
SafeRelease(&pAttributes);
for (DWORD i = 0; i < count; i++)
{
SafeRelease(&ppDevices[i]);
}
CoTaskMemFree(ppDevices);
SafeRelease(&pSource);
return hr;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
目标平台 | Windows |
标头 | mfidl.h |
Library | Mf.lib |
DLL | Mf.dll |