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(); }
Maotong Zhang (@xiaotong) commented about dlls/devenum/createdevenum.c:
V_I4(&var) = i; IPropertyBag_Write(prop_bag, L"VFWIndex", &var);
swprintf(device_path, ARRAY_SIZE(device_path), L"/dev/video%d", i);
Is it really okay to code a Linux path here? It doesn't seem right.
On Mon Aug 4 04:25:39 2025 +0000, Maotong Zhang wrote:
Is it really okay to code a Linux path here? It doesn't seem right.
It only serves as a unique identifier field. The WeCom application actually doesn't use it, it just retrieves it and doesn't actually use it.
The tests fail and segfault on Windows (so maybe there needs to be a webcam check?)
On Mon Aug 4 06:44:24 2025 +0000, Aida Jonikienė wrote:
The tests fail and segfault on Windows (so maybe there needs to be a webcam check?)
Sure, to need a physical camera device. The DevicePath field may not exist in some Windows series releases.
Hi im having a problem setting up winlator 10.1 im struggling to sign in to steam and the gta launcher app is refusing to initialize
Its says loading user data then the app crashes my device is the s25+ with snapdragon 8 elite
On Wed Aug 13 16:46:31 2025 +0000, zero wrote:
Hi im having a problem setting up winlator 10.1 im struggling to sign in to steam and the gta launcher app is refusing to initialize
A merge request discussion is not meant for user support. Please ask such things on the forum.