Index: media/video/capture/win/video_capture_device_factory_win.cc |
diff --git a/media/video/capture/win/video_capture_device_factory_win.cc b/media/video/capture/win/video_capture_device_factory_win.cc |
index 920126df09e2558b16048b0081d1669b68205f2e..4feaea94ab3196d857862d694c7fa17c593daf1f 100644 |
--- a/media/video/capture/win/video_capture_device_factory_win.cc |
+++ b/media/video/capture/win/video_capture_device_factory_win.cc |
@@ -219,13 +219,22 @@ static void GetDeviceSupportedFormatsDirectShow( |
continue; |
} |
+ std::string id; |
device_id.Reset(); |
hr = prop_bag->Read(L"DevicePath", device_id.Receive(), 0); |
- if (FAILED(hr)) { |
- DVLOG(1) << "Couldn't read a device's DevicePath."; |
- return; |
+ if (FAILED(hr) || device_id.type() != VT_BSTR) { |
+ // If there is no clear DevicePath, try with Description and FriendlyName. |
+ ScopedVariant name; |
+ if (SUCCEEDED(prop_bag->Read(L"Description", name.Receive(), 0)) || |
+ SUCCEEDED(prop_bag->Read(L"FriendlyName", name.Receive(), 0))) { |
+ id = base::SysWideToUTF8(V_BSTR(&name)); |
+ } |
+ } else { |
+ DCHECK_EQ(device_id.type(), VT_BSTR); |
+ id = base::SysWideToUTF8(V_BSTR(&device_id)); |
} |
- if (device.id() == base::SysWideToUTF8(V_BSTR(&device_id))) |
+ |
+ if (device.id() == id) |
break; |
moniker.Release(); |
} |