diff options
author | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-07 21:21:47 +0000 |
---|---|---|
committer | wjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-08-07 21:21:47 +0000 |
commit | a7420548c1f91e65af3328be1b31bfd9fd6d7a2b (patch) | |
tree | 3f7add7d9036c954bfe06111f27c13d8211b9d7c /media/video | |
parent | c28e705dc0568d73b0d4df203819ace60347edbb (diff) | |
download | chromium_src-a7420548c1f91e65af3328be1b31bfd9fd6d7a2b.zip chromium_src-a7420548c1f91e65af3328be1b31bfd9fd6d7a2b.tar.gz chromium_src-a7420548c1f91e65af3328be1b31bfd9fd6d7a2b.tar.bz2 |
fix detection of video capture device on linux
MEM2MEM devices are registered with V4L2 as both V4L2_CAP_VIDEO_CAPTURE and V4L2_CAP_VIDEO_OUTPUT capabilities. Need to filter out those MEM2MEM devices when to enuemrate/open video capture devices.
BUG=139356
Review URL: https://chromiumcodereview.appspot.com/10824205
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@150414 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'media/video')
-rw-r--r-- | media/video/capture/linux/video_capture_device_linux.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/media/video/capture/linux/video_capture_device_linux.cc b/media/video/capture/linux/video_capture_device_linux.cc index 9ba2570..5063643 100644 --- a/media/video/capture/linux/video_capture_device_linux.cc +++ b/media/video/capture/linux/video_capture_device_linux.cc @@ -85,10 +85,11 @@ void VideoCaptureDevice::GetDeviceNames(Names* device_names) { // Failed to open this device. continue; } - // Test if this is a V4L2 device. + // Test if this is a V4L2 capture device. v4l2_capability cap; if ((ioctl(fd, VIDIOC_QUERYCAP, &cap) == 0) && - (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) { + (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) && + !(cap.capabilities & V4L2_CAP_VIDEO_OUTPUT)) { // This is a V4L2 video capture device name.device_name = StringPrintf("%s", cap.card); device_names->push_back(name); @@ -203,10 +204,11 @@ void VideoCaptureDeviceLinux::OnAllocate(int width, return; } - // Test if this is a V4L2 device. + // Test if this is a V4L2 capture device. v4l2_capability cap; if (!((ioctl(device_fd_, VIDIOC_QUERYCAP, &cap) == 0) && - (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE))) { + (cap.capabilities & V4L2_CAP_VIDEO_CAPTURE) && + !(cap.capabilities & V4L2_CAP_VIDEO_OUTPUT))) { // This is not a V4L2 video capture device. close(device_fd_); device_fd_ = -1; |