3,245
社区成员
发帖
与我相关
我的任务
分享
#include <dshow.h>
#include <ks.h>
#include <ksproxy.h>
//#include <dmksctrl.h>
//#include <atlbase.h>
#include <atlconv.h>
#include <ksmedia.h>
//DEFINE_GUID(GUID_CARDV_TL_CD200, 0xC987A729, 0x59D3, 0x4569, 0x84, 0x67, 0xFF, 0x08, 0x49, 0xFC, 0x19, 0xE8);
static const GUID GUID_CARDV_TL_CD200 = {
0x6bdd1fc6,
0x810f,
0x11d0,
0xbe, 0xc7, 0x08, 0x00, 0x2b, 0xe2, 0x09, 0x2f };
//static const GUID GUID_CARDV_TL_CD200 = {
// 0xC987A729,
// 0x59D3,
// 0x4569,
// 0x84, 0x67, 0xFF, 0x08, 0x49, 0xFC, 0x19, 0xE8 };
BOOL TestUvcControlExt(IBaseFilter *pBF, long lData) {
IKsControl *pCtl = NULL;
HRESULT hr = pBF->QueryInterface(IID_IKsControl, (void **)&pCtl);
if (FAILED(hr))
return FALSE;
KSP_NODE knod;
long nEffects = 0;
ULONG dwRsz = 0;
knod.Property.Set = GUID_CARDV_TL_CD200;
knod.Property.Id = KSPROPERTY_EXTENSION_UNIT_CONTROL;
knod.Property.Flags = (KSPROPERTY_TYPE_SET | KSPROPERTY_TYPE_TOPOLOGY);
knod.NodeId = 1;
knod.Reserved = 0;
hr = pCtl->KsProperty((PKSPROPERTY) &knod, sizeof(knod), NULL, 0, &dwRsz);
if (FAILED(hr)) {
pCtl->Release();
return FALSE;
}
printf("0x%08X, %u, 0x%08X\n", hr, dwRsz, nEffects);
pCtl->Release();
return TRUE;
}
int main() {
USES_CONVERSION;
HRESULT hr = NULL;
CoInitialize(NULL);
ICreateDevEnum *pSysDevEnum = NULL;
hr = CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER,
IID_ICreateDevEnum, (void **)&pSysDevEnum);
if (FAILED(hr)) {
return hr;
}
IEnumMoniker *pEnumCat = NULL;
hr = pSysDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnumCat, 0);
if (hr != S_OK) {
pSysDevEnum->Release();
return -1;
}
IMoniker *pMoniker = NULL;
ULONG monikerFetched;
while (pEnumCat->Next(1, &pMoniker, &monikerFetched) == S_OK) {
IPropertyBag *pPropBag;
VARIANT varName;
IBaseFilter *pFilter;
hr = pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void **)&pPropBag);
if (FAILED(hr)) {
pMoniker->Release();
continue;
}
VariantInit(&varName);
hr = pPropBag->Read(L"FriendlyName", &varName, 0);
//"FriendlyName": The name of the device.
//"Description": A description of the device.
//Filter Info================
printf("[%s]\n", W2A(varName.bstrVal));
VariantClear(&varName);
hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&pFilter);
if (!pFilter) {
continue;
}
TestUvcControlExt(pFilter, 0);
pFilter->Release();
pPropBag->Release();
pMoniker->Release();
}
pEnumCat->Release();
pSysDevEnum->Release();
printf("=================================================\n");
CoUninitialize();
return 0;
}