MFEnumDeviceSources 関数 (mfidl.h)
オーディオまたはビデオ キャプチャ デバイスの一覧を列挙します。
構文
HRESULT MFEnumDeviceSources(
[in] IMFAttributes *pAttributes,
[out] IMFActivate ***pppSourceActivate,
[out] UINT32 *pcSourceActivate
);
パラメーター
[in] pAttributes
検索条件を含む属性ストアへのポインター。 属性ストアを作成するには、 MFCreateAttributes を呼び出します。 属性ストアに次の属性の 1 つ以上を設定します。
値 | 意味 |
---|---|
オーディオ デバイスとビデオ デバイスのどちらを列挙するかを指定します。 (必須) | |
オーディオ キャプチャ デバイスの場合は、デバイスロールを指定します。 (省略可能) | |
ビデオ キャプチャ デバイスの場合は、デバイス カテゴリを指定します。 (省略可能) |
[out] pppSourceActivate
IMFActivate インターフェイス ポインターの配列を受け取ります。 各ポインターは、メディア ソースのアクティブ化オブジェクトを表します。 関数は、配列のメモリを割り当てます。 呼び出し元は、配列内のポインターを解放し、 CoTaskMemFree を呼び出して配列のメモリを解放する必要があります。
[out] pcSourceActivate
pppSourceActivate 配列内の要素の数を受け取ります。 検索条件に一致するキャプチャ デバイスがない場合、このパラメーターは値 0 を受け取ります。
戻り値
この関数が成功すると、 S_OKが返されます。 そうでない場合は、HRESULT エラー コードを返します。
注釈
返される各 IMFActivate ポインターはキャプチャ デバイスを表し、そのデバイスのメディア ソースを作成するために使用できます。 IMFActivate ポインターを使用して、デバイスを記述する属性を照会することもできます。 次の属性が設定される場合があります。
属性 | 説明 |
---|---|
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 |