summaryrefslogtreecommitdiffstats
path: root/media/video
diff options
context:
space:
mode:
authorwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-07 21:21:47 +0000
committerwjia@chromium.org <wjia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-08-07 21:21:47 +0000
commita7420548c1f91e65af3328be1b31bfd9fd6d7a2b (patch)
tree3f7add7d9036c954bfe06111f27c13d8211b9d7c /media/video
parentc28e705dc0568d73b0d4df203819ace60347edbb (diff)
downloadchromium_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.cc10
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;