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 指標來查詢描述裝置的屬性。 可能會設定下列屬性:
屬性 | Description |
---|---|
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME | 裝置的顯示名稱。 |
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE | 描述裝置輸出格式的主要類型和子類型 GUID。 |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE | 擷取裝置的類型 (音訊或視訊) 。 |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID | 音訊端點標識符字串。 僅 (音訊裝置。) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY | 裝置類別。 僅限 (Video 裝置。) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE | 裝置是硬體或軟體裝置。 僅限 (Video 裝置。) |
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK | 設備驅動器的符號連結。 僅限 (Video 裝置。) |
若要從 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 |
程式庫 | Mf.lib |
Dll | Mf.dll |