Chromium Code Reviews| Index: media/video/capture/linux/video_capture_device_factory_linux.cc |
| diff --git a/media/video/capture/linux/video_capture_device_factory_linux.cc b/media/video/capture/linux/video_capture_device_factory_linux.cc |
| index 4cb08000f19af6ef70b0e22790995354b5481a44..810bd8e15c57c063c9b0fd375b0cddc0d92a52b9 100644 |
| --- a/media/video/capture/linux/video_capture_device_factory_linux.cc |
| +++ b/media/video/capture/linux/video_capture_device_factory_linux.cc |
| @@ -155,15 +155,14 @@ void VideoCaptureDeviceFactoryLinux::GetDeviceSupportedFormats( |
| frame_interval.pixel_format = pixel_format.pixelformat; |
| frame_interval.width = frame_size.discrete.width; |
| frame_interval.height = frame_size.discrete.height; |
| + std::list<float> frame_rates; |
| while (HANDLE_EINTR(ioctl( |
| fd.get(), VIDIOC_ENUM_FRAMEINTERVALS, &frame_interval)) == 0) { |
| if (frame_interval.type == V4L2_FRMIVAL_TYPE_DISCRETE) { |
| if (frame_interval.discrete.numerator != 0) { |
| - supported_format.frame_rate = |
| + frame_rates.push_back( |
| static_cast<float>(frame_interval.discrete.denominator) / |
| - static_cast<float>(frame_interval.discrete.numerator); |
| - } else { |
| - supported_format.frame_rate = 0; |
| + static_cast<float>(frame_interval.discrete.numerator)); |
| } |
| } else if (frame_interval.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) { |
| // TODO(mcasas): see http://crbug.com/249953, support these devices. |
| @@ -174,9 +173,21 @@ void VideoCaptureDeviceFactoryLinux::GetDeviceSupportedFormats( |
| NOTIMPLEMENTED(); |
| break; |
| } |
| + ++frame_interval.index; |
| + } |
| + |
| + // Some devices, e.g. Kinect, do not enumerate any frame rates. For these |
| + // devices, we do not want to lose all enumeration (pixel format and |
| + // resolution), so we return a frame rate of zero instead. |
| + if (frame_rates.empty()) |
| + frame_rates.push_back(0); |
| + |
| + for (std::list<float>::iterator it = frame_rates.begin(); |
| + it != frame_rates.end(); |
| + ++it) { |
|
perkj_chrome
2014/09/05 12:04:58
nit, fits on line above.
magjed_chromium
2014/09/09 09:10:06
Done. FYI, clang-format wants "++it" on a separate
|
| + supported_format.frame_rate = *it; |
| supported_formats->push_back(supported_format); |
| DVLOG(1) << device.name() << " " << supported_format.ToString(); |
| - ++frame_interval.index; |
| } |
| ++frame_size.index; |
| } |