Index: media/video/capture/linux/video_capture_device_linux.cc |
diff --git a/media/video/capture/linux/video_capture_device_linux.cc b/media/video/capture/linux/video_capture_device_linux.cc |
index 194696127242c0952c3ac81421e1cb9020ae7dbe..56aea315f9e2e4df150575343888769fbd77707a 100644 |
--- a/media/video/capture/linux/video_capture_device_linux.cc |
+++ b/media/video/capture/linux/video_capture_device_linux.cc |
@@ -146,29 +146,23 @@ void VideoCaptureDevice::GetDeviceNames(Names* device_names) { |
void VideoCaptureDevice::GetDeviceSupportedFormats( |
const Name& device, |
- VideoCaptureCapabilities* formats) { |
- |
+ VideoCaptureFormats* supported_formats) { |
if (device.id().empty()) |
return; |
int fd; |
- VideoCaptureCapabilities capture_formats; |
- if ((fd = open(device.id().c_str(), O_RDONLY)) < 0) { |
- // Failed to open this device. |
+ if ((fd = open(device.id().c_str(), O_RDONLY)) < 0) |
return; |
- } |
- |
- formats->clear(); |
- VideoCaptureCapability capture_capability; |
- // Retrieve the caps one by one, first get colorspace, then sizes, then |
- // framerates. See http://linuxtv.org/downloads/v4l-dvb-apis for reference. |
+ supported_formats->clear(); |
+ // Retrieve the caps one by one, first get pixel format, then sizes, then |
+ // frame rates. See http://linuxtv.org/downloads/v4l-dvb-apis for reference. |
v4l2_fmtdesc pixel_format = {}; |
pixel_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; |
while (ioctl(fd, VIDIOC_ENUM_FMT, &pixel_format) == 0) { |
- capture_capability.supported_format.pixel_format = |
+ VideoCaptureFormat supported_format; |
+ supported_format.pixel_format = |
V4l2ColorToVideoCaptureColorFormat((int32)pixel_format.pixelformat); |
- if (capture_capability.supported_format.pixel_format == |
- PIXEL_FORMAT_UNKNOWN) { |
+ if (supported_format.pixel_format == PIXEL_FORMAT_UNKNOWN) { |
continue; |
} |
@@ -176,7 +170,7 @@ void VideoCaptureDevice::GetDeviceSupportedFormats( |
frame_size.pixel_format = pixel_format.pixelformat; |
while (ioctl(fd, VIDIOC_ENUM_FRAMESIZES, &frame_size) == 0) { |
if (frame_size.type == V4L2_FRMSIZE_TYPE_DISCRETE) { |
- capture_capability.supported_format.frame_size.SetSize( |
+ supported_format.frame_size.SetSize( |
frame_size.discrete.width, frame_size.discrete.height); |
} else if (frame_size.type == V4L2_FRMSIZE_TYPE_STEPWISE) { |
// TODO(mcasas): see http://crbug.com/249953, support these devices. |
@@ -192,11 +186,11 @@ void VideoCaptureDevice::GetDeviceSupportedFormats( |
while (ioctl(fd, VIDIOC_ENUM_FRAMEINTERVALS, &frame_interval) == 0) { |
if (frame_interval.type == V4L2_FRMIVAL_TYPE_DISCRETE) { |
if (frame_interval.discrete.numerator != 0) { |
- capture_capability.supported_format.frame_rate = |
+ supported_format.frame_rate = |
static_cast<float>(frame_interval.discrete.denominator) / |
static_cast<float>(frame_interval.discrete.numerator); |
} else { |
- capture_capability.supported_format.frame_rate = 0; |
+ supported_format.frame_rate = 0; |
} |
} else if (frame_interval.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) { |
// TODO(mcasas): see http://crbug.com/249953, support these devices. |
@@ -207,7 +201,7 @@ void VideoCaptureDevice::GetDeviceSupportedFormats( |
NOTIMPLEMENTED(); |
break; |
} |
- formats->push_back(capture_capability); |
+ supported_formats->push_back(supported_format); |
++frame_interval.index; |
} |
++frame_size.index; |