| 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();
|
| }
|
|
|