Bagikan melalui


Fungsi MFEnumDeviceSources (mfidl.h)

Menghitung daftar perangkat pengambilan audio atau video.

Sintaks

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

Parameter

[in] pAttributes

Penunjuk ke penyimpanan atribut yang berisi kriteria pencarian. Untuk membuat penyimpanan atribut, panggil MFCreateAttributes. Atur satu atau beberapa atribut berikut di penyimpanan atribut:

Nilai Makna
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE
Menentukan apakah akan menghitung perangkat audio atau video. (Wajib)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ROLE
Untuk perangkat pengambilan audio, menentukan peran perangkat. (Opsional.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY
Untuk perangkat pengambilan video, menentukan kategori perangkat. (Opsional.)

[out] pppSourceActivate

Menerima array penunjuk antarmuka IMFActivate . Setiap penunjuk mewakili objek aktivasi untuk sumber media. Fungsi mengalokasikan memori untuk array. Pemanggil harus melepaskan pointer dalam array dan memanggil CoTaskMemFree untuk membebaskan memori untuk array.

[out] pcSourceActivate

Menerima jumlah elemen dalam array pppSourceActivate . Jika tidak ada perangkat tangkapan yang cocok dengan kriteria pencarian, parameter ini menerima nilai 0.

Mengembalikan nilai

Jika fungsi ini berhasil, fungsi akan mengembalikan S_OK. Jika tidak, kode kesalahan HRESULT akan dikembalikan.

Keterangan

Setiap penunjuk IMFActivate yang dikembalikan mewakili perangkat pengambilan, dan dapat digunakan untuk membuat sumber media untuk perangkat tersebut. Anda juga dapat menggunakan penunjuk IMFActivate untuk mengkueri atribut yang menjelaskan perangkat. Atribut berikut mungkin diatur:

Atribut Deskripsi
MF_DEVSOURCE_ATTRIBUTE_FRIENDLY_NAME Nama tampilan perangkat.
MF_DEVSOURCE_ATTRIBUTE_MEDIA_TYPE Jenis utama dan GUID subjenis yang menjelaskan format output perangkat.
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE Jenis perangkat pengambilan (audio atau video).
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_AUDCAP_ENDPOINT_ID String ID titik akhir audio. (Hanya perangkat audio.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_CATEGORY Kategori perangkat. (Hanya perangkat video.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_HW_SOURCE Apakah perangkat adalah perangkat keras atau perangkat lunak. (Hanya perangkat video.)
MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_SYMBOLIC_LINK Tautan simbolis untuk driver perangkat. (Hanya perangkat video.)
 

Untuk membuat sumber media dari penunjuk IMFActivate , panggil metode IMFActivate::ActivateObject .

Contoh

Contoh berikut menghitung perangkat pengambilan video pada sistem dan membuat sumber media untuk perangkat pertama dalam daftar.

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;
}

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 7 [hanya aplikasi desktop]
Server minimum yang didukung Windows Server 2008 R2 [hanya aplikasi desktop]
Target Platform Windows
Header mfidl.h
Pustaka Mf.lib
DLL Mf.dll

Lihat juga

Pengambilan Audio/Video di Media Foundation

Fungsi Media Foundation