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 66aecff74351bf0f29e135e01be5212e833048e3..194696127242c0952c3ac81421e1cb9020ae7dbe 100644 |
--- a/media/video/capture/linux/video_capture_device_linux.cc |
+++ b/media/video/capture/linux/video_capture_device_linux.cc |
@@ -159,22 +159,25 @@ void VideoCaptureDevice::GetDeviceSupportedFormats( |
formats->clear(); |
- VideoCaptureCapability capture_format; |
+ 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. |
v4l2_fmtdesc pixel_format = {}; |
pixel_format.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; |
while (ioctl(fd, VIDIOC_ENUM_FMT, &pixel_format) == 0) { |
- capture_format.color = |
+ capture_capability.supported_format.pixel_format = |
V4l2ColorToVideoCaptureColorFormat((int32)pixel_format.pixelformat); |
- if (capture_format.color == PIXEL_FORMAT_UNKNOWN) continue; |
+ if (capture_capability.supported_format.pixel_format == |
+ PIXEL_FORMAT_UNKNOWN) { |
+ continue; |
+ } |
v4l2_frmsizeenum frame_size = {}; |
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_format.width = frame_size.discrete.width; |
- capture_format.height = frame_size.discrete.height; |
+ capture_capability.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. |
NOTIMPLEMENTED(); |
@@ -189,11 +192,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_format.frame_rate = |
+ capture_capability.supported_format.frame_rate = |
static_cast<float>(frame_interval.discrete.denominator) / |
static_cast<float>(frame_interval.discrete.numerator); |
} else { |
- capture_format.frame_rate = 0; |
+ capture_capability.supported_format.frame_rate = 0; |
} |
} else if (frame_interval.type == V4L2_FRMIVAL_TYPE_CONTINUOUS) { |
// TODO(mcasas): see http://crbug.com/249953, support these devices. |
@@ -204,7 +207,7 @@ void VideoCaptureDevice::GetDeviceSupportedFormats( |
NOTIMPLEMENTED(); |
break; |
} |
- formats->push_back(capture_format); |
+ formats->push_back(capture_capability); |
++frame_interval.index; |
} |
++frame_size.index; |
@@ -291,7 +294,7 @@ VideoCaptureDeviceLinux::~VideoCaptureDeviceLinux() { |
} |
void VideoCaptureDeviceLinux::AllocateAndStart( |
- const VideoCaptureCapability& capture_format, |
+ const VideoCaptureParams& params, |
scoped_ptr<VideoCaptureDevice::Client> client) { |
if (v4l2_thread_.IsRunning()) { |
return; // Wrong state. |
@@ -301,9 +304,9 @@ void VideoCaptureDeviceLinux::AllocateAndStart( |
FROM_HERE, |
base::Bind(&VideoCaptureDeviceLinux::OnAllocateAndStart, |
base::Unretained(this), |
- capture_format.width, |
- capture_format.height, |
- capture_format.frame_rate, |
+ params.requested_format.frame_size.width(), |
+ params.requested_format.frame_size.height(), |
+ params.requested_format.frame_rate, |
base::Passed(&client))); |
} |
@@ -409,12 +412,11 @@ void VideoCaptureDeviceLinux::OnAllocateAndStart(int width, |
// framerate configuration, or the actual one is different from the desired? |
// Store our current width and height. |
- frame_info_.color = |
+ capture_format_.frame_size.SetSize(video_fmt.fmt.pix.width, |
+ video_fmt.fmt.pix.height); |
+ capture_format_.frame_rate = frame_rate; |
+ capture_format_.pixel_format = |
V4l2ColorToVideoCaptureColorFormat(video_fmt.fmt.pix.pixelformat); |
- frame_info_.width = video_fmt.fmt.pix.width; |
- frame_info_.height = video_fmt.fmt.pix.height; |
- frame_info_.frame_rate = frame_rate; |
- frame_info_.frame_size_type = VariableResolutionVideoCaptureDevice; |
// Start capturing. |
if (!AllocateVideoBuffers()) { |
@@ -519,7 +521,7 @@ void VideoCaptureDeviceLinux::OnCaptureTask() { |
0, |
false, |
false, |
- frame_info_); |
+ capture_format_); |
// Enqueue the buffer again. |
if (ioctl(device_fd_, VIDIOC_QBUF, &buffer) == -1) { |