| Index: media/capture/video/linux/v4l2_capture_delegate.cc
|
| diff --git a/media/capture/video/linux/v4l2_capture_delegate.cc b/media/capture/video/linux/v4l2_capture_delegate.cc
|
| index a6f47b551ed410f3fa28c5f45b888eee6f97c0b7..ccf63a19e0eb0e7706ba60ec5db08755fd2f4501 100644
|
| --- a/media/capture/video/linux/v4l2_capture_delegate.cc
|
| +++ b/media/capture/video/linux/v4l2_capture_delegate.cc
|
| @@ -18,6 +18,17 @@
|
| #include "media/base/bind_to_current_loop.h"
|
| #include "media/capture/video/linux/video_capture_device_linux.h"
|
|
|
| +// Until include/uapi/linux/videodev2.h defines V4L2_PIX_FMT_Z16/INVZ, define
|
| +// them here.
|
| +#ifndef V4L2_PIX_FMT_Z16
|
| +// 16 bit depth, Realsense F200.
|
| +#define V4L2_PIX_FMT_Z16 v4l2_fourcc('Z', '1', '6', ' ')
|
| +#endif
|
| +#ifndef V4L2_PIX_FMT_INVZ
|
| +// 16 bit depth, Realsense SR300.
|
| +#define V4L2_PIX_FMT_INVZ v4l2_fourcc('I', 'N', 'V', 'Z')
|
| +#endif
|
| +
|
| namespace media {
|
|
|
| // Desired number of video buffers to allocate. The actual number of allocated
|
| @@ -45,6 +56,10 @@ static struct {
|
| size_t num_planes;
|
| } const kSupportedFormatsAndPlanarity[] = {
|
| {V4L2_PIX_FMT_YUV420, PIXEL_FORMAT_I420, 1},
|
| + {V4L2_PIX_FMT_GREY, PIXEL_FORMAT_Y8, 1},
|
| + {V4L2_PIX_FMT_Y16, PIXEL_FORMAT_Y16, 1},
|
| + {V4L2_PIX_FMT_Z16, PIXEL_FORMAT_Y16, 1},
|
| + {V4L2_PIX_FMT_INVZ, PIXEL_FORMAT_Y16, 1},
|
| {V4L2_PIX_FMT_YUYV, PIXEL_FORMAT_YUY2, 1},
|
| {V4L2_PIX_FMT_UYVY, PIXEL_FORMAT_UYVY, 1},
|
| {V4L2_PIX_FMT_RGB24, PIXEL_FORMAT_RGB24, 1},
|
| @@ -397,9 +412,16 @@ void V4L2CaptureDelegate::DoCapture() {
|
| base::TimeDelta timestamp =
|
| base::TimeDelta::FromSeconds(buffer.timestamp.tv_sec) +
|
| base::TimeDelta::FromMicroseconds(buffer.timestamp.tv_usec);
|
| - client_->OnIncomingCapturedData(
|
| - buffer_tracker->start(), buffer_tracker->payload_size(),
|
| - capture_format_, rotation_, base::TimeTicks::Now(), timestamp);
|
| +#ifdef V4L2_BUF_FLAG_ERROR
|
| + if (buffer.flags & V4L2_BUF_FLAG_ERROR) {
|
| + LOG(ERROR) << "Dequeued v4l2 buffer contains corrupted data ("
|
| + << buffer.bytesused << " bytes).";
|
| + buffer.bytesused = 0;
|
| + } else
|
| +#endif
|
| + client_->OnIncomingCapturedData(
|
| + buffer_tracker->start(), buffer_tracker->payload_size(),
|
| + capture_format_, rotation_, base::TimeTicks::Now(), timestamp);
|
|
|
| if (HANDLE_EINTR(ioctl(device_fd_.get(), VIDIOC_QBUF, &buffer)) < 0) {
|
| SetErrorState(FROM_HERE, "Failed to enqueue capture buffer");
|
|
|