| 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) {
 | 
| 
 |