MFEnumDeviceSources 関数 (mfidl.h)

オーディオまたはビデオ キャプチャ デバイスの一覧を列挙します。

構文

HRESULT MFEnumDeviceSources(
  [in]  IMFAttributes *pAttributes,
  [out] IMFActivate   ***pppSourceActivate,
  [out] UINT32        *pcSourceActivate
);

パラメーター

[in] pAttributes

検索条件を含む属性ストアへのポインター。 属性ストアを作成するには、 MFCreateAttributes を呼び出します。 属性ストアに次の属性の 1 つ以上を設定します。

意味
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
オーディオ デバイスとビデオ デバイスのどちらを列挙するかを指定します。 (必須)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
オーディオ キャプチャ デバイスの場合は、デバイスロールを指定します。 (省略可能)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
ビデオ キャプチャ デバイスの場合は、デバイス カテゴリを指定します。 (省略可能)

[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

こちらもご覧ください

Media Foundation でのオーディオ/ビデオ キャプチャ

メディア ファンデーション機能