221b5221185b1ef57ae94c70627a9475e239f77b
Consider the case when there're /dev/video0 and /dev/video1. But for somereason the video0 is not in a correct state and can't be open. As a result, current NumberOfDevices will return 1, which is fine. However, we will then never be able to get the device we really want - /dev/video1. Consider the code below, the GetCaptureDevice will fail because it calls into DeviceInfoLinux::GetDeviceName(0, ...) which will again try to open the /dev/video0. So the root cause is the mismatching of the NumberOfDevices and GetDeviceName.
Since we will open the device in DeviceInfoLinux::GetDeviceName anyway, I think we should return the number of /dev/video* in DeviceInfoLinux::NumberOfDevices without trying to open it. Otherwise the DeviceInfoLinux::NumberOfDevices should return more information like which /dev/video* is valid which is not.
bool found = false;
for (int i = 0; i < vie_capture->NumberOfCaptureDevices(); ++i) {
if (vie_capture->GetCaptureDevice(i, ...) == 0) {
found = true;
break;
}
}
Review URL: http://webrtc-codereview.appspot.com/148004
git-svn-id: http://webrtc.googlecode.com/svn/trunk@635 4adac7df-926f-26a2-2b94-8c16560cd09d
Description
No description provided
Languages
C++
88.6%
C
3.3%
Java
3%
Objective-C++
1.9%
Python
1.9%
Other
1%