From: Haoyang Chen chenhaoyang@kylinos.cn
--- dlls/devenum/createdevenum.c | 7 +++++- dlls/devenum/tests/devenum.c | 46 ++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-)
diff --git a/dlls/devenum/createdevenum.c b/dlls/devenum/createdevenum.c index bc91b235804..055299aa832 100644 --- a/dlls/devenum/createdevenum.c +++ b/dlls/devenum/createdevenum.c @@ -713,7 +713,7 @@ static void register_vfw_codecs(void)
static void register_avicap_devices(void) { - WCHAR friendlyname[32], version[32]; + WCHAR friendlyname[32], version[32], device_path[32]; IPropertyBag *prop_bag = NULL; REGFILTERPINS2 rgpins = {0}; REGPINTYPES rgtypes; @@ -753,6 +753,11 @@ static void register_avicap_devices(void) V_I4(&var) = i; IPropertyBag_Write(prop_bag, L"VFWIndex", &var);
+ swprintf(device_path, ARRAY_SIZE(device_path), L"/dev/video%d", i); + V_VT(&var) = VT_BSTR; + V_BSTR(&var) = SysAllocString(device_path); + IPropertyBag_Write(prop_bag, L"DevicePath", &var); + VariantClear(&var); IPropertyBag_Release(prop_bag); } diff --git a/dlls/devenum/tests/devenum.c b/dlls/devenum/tests/devenum.c index 52a96c122b8..ccc4eb3b5b2 100644 --- a/dlls/devenum/tests/devenum.c +++ b/dlls/devenum/tests/devenum.c @@ -1154,6 +1154,51 @@ static void test_vfw(void) IParseDisplayName_Release(parser); }
+static void test_video_input(void) +{ + ICreateDevEnum* create_devenum; + IEnumMoniker *mon; + IMoniker *moniker; + IPropertyBag *prop_bag; + GUID guid; + VARIANT var; + HRESULT hr; + + hr = CoCreateInstance(&CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, &IID_ICreateDevEnum, (LPVOID*)&create_devenum); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = ICreateDevEnum_CreateClassEnumerator(create_devenum, &CLSID_VideoInputDeviceCategory, &mon, 0); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + while (IEnumMoniker_Next(mon, 1, &moniker, NULL) == S_OK) + { + hr = IMoniker_BindToStorage(moniker, NULL, NULL, &IID_IPropertyBag, (void **)&prop_bag); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + VariantInit(&var); + hr = IPropertyBag_Read(prop_bag, L"CLSID", &var, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + hr = CLSIDFromString(V_BSTR(&var), &guid); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + VariantClear(&var); + hr = IPropertyBag_Read(prop_bag, L"FriendlyName", &var, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + VariantClear(&var); + hr = IPropertyBag_Read(prop_bag, L"DevicePath", &var, NULL); + ok(hr == S_OK, "Got hr %#lx.\n", hr); + + VariantClear(&var); + IPropertyBag_Release(prop_bag); + IMoniker_Release(moniker); + } + + IEnumMoniker_Release(mon); + ICreateDevEnum_Release(create_devenum); +} + START_TEST(devenum) { HRESULT hr; @@ -1176,6 +1221,7 @@ START_TEST(devenum) test_wavein(); test_midiout(); test_vfw(); + test_video_input();
CoUninitialize(); }