Menghitung Perangkat Pengambilan Video
Topik ini menjelaskan cara menghitung perangkat pengambilan video pada sistem pengguna, dan cara membuat instans perangkat.
Untuk menghitung perangkat pengambilan video pada sistem, lakukan hal berikut:
- Panggil MFCreateAttributes untuk membuat penyimpanan atribut. Fungsi ini menerima penunjuk IMFAttributes .
- Panggil IMFAttributes::SetGUID untuk mengatur atribut MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE . Atur nilai atribut ke MF_DEVSOURCE_ATTRIBUTE_SOURCE_TYPE_VIDCAP_GUID.
- Hubungi MFEnumDeviceSources. Fungsi ini menerima array penunjuk IMFActivate dan ukuran array. Setiap pointer mewakili perangkat pengambilan video yang berbeda.
Untuk membuat instans perangkat pengambilan:
- Panggil IMFActivate::ActivateObject untuk mendapatkan pointer ke antarmuka IMFMediaSource .
Kode berikut menunjukkan langkah-langkah ini:
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;
}
Setelah Anda membuat sumber media, lepaskan pointer antarmuka dan bebaskan memori untuk array:
SafeRelease(&pAttributes);
for (DWORD i = 0; i < count; i++)
{
SafeRelease(&ppDevices[i]);
}
CoTaskMemFree(ppDevices);
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk