summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorJan Alexander Steffens (heftig) <jan.steffens@gmail.com>2017-10-19 14:02:37 +0200
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2017-11-06 19:34:22 -0500
commit7e4bc6d418bd6680232e26103d7d3f8efaab688a (patch)
tree5374c85a81b9cbffb4ec852bdf6aae5806cc1e34 /sys
parent593615de46a98165ff34e74bb2559eeecec61fec (diff)
v4l2deviceprovider: Ignore touch sensing devices
With GST_V4L2_USE_LIBV4L2=1, my laptop's touchpad shows up as a video source device in gst-device-monitor, but attempting to stream from it fails because the device doesn't actually support any video formats. name : Synaptics RMI4 Touch Sensor class : Video/Source caps : video/x-raw, format=(string)I420, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)0, height=(int)0, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1; video/x-raw, format=(string)YV12, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)0, height=(int)0, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1; video/x-raw, format=(string)BGR, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)0, height=(int)0, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1; video/x-raw, format=(string)RGB, framerate=(fraction)[ 0/1, 2147483647/1 ], width=(int)0, height=(int)0, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1; properties: udev-probed = true device.bus_path = /sys/devices/rmi4-00/rmi4-00.fn54/video4linux/v4l-touch0 sysfs.path = /sys/devices/rmi4-00/rmi4-00.fn54/video4linux/v4l-touch0 device.subsystem = video4linux device.product.name = "Synaptics\ RMI4\ Touch\ Sensor" device.capabilities = :capture: device.api = v4l2 device.path = /dev/v4l-touch0 v4l2.device.driver = rmi4_f54 v4l2.device.card = "Synaptics\ RMI4\ Touch\ Sensor" v4l2.device.bus_info = rmi4:rmi4-00.fn54 v4l2.device.version = 265480 (0x00040d08) v4l2.device.capabilities = 2501902337 (0x95200001) v4l2.device.device_caps = 354418689 (0x15200001) gst-launch-1.0 v4l2src device=/dev/v4l-touch0 ! ... v4l2-ctl -d /dev/v4l-touch0 --list-formats reports: ioctl: VIDIOC_ENUM_FMT Index : 0 Type : Video Capture Pixel Format: 'TD16' Name : 16-bit signed deltas Index : 1 Type : Video Capture Pixel Format: 'TD08' Name : 8-bit signed deltas Index : 2 Type : Video Capture Pixel Format: 'TU16' Name : 16-bit unsigned touch data https://bugzilla.gnome.org/show_bug.cgi?id=789197
Diffstat (limited to 'sys')
-rw-r--r--sys/v4l2/gstv4l2deviceprovider.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sys/v4l2/gstv4l2deviceprovider.c b/sys/v4l2/gstv4l2deviceprovider.c
index 4b003e721..0f050abd9 100644
--- a/sys/v4l2/gstv4l2deviceprovider.c
+++ b/sys/v4l2/gstv4l2deviceprovider.c
@@ -136,8 +136,13 @@ gst_v4l2_device_provider_probe_device (GstV4l2DeviceProvider * provider,
v4l2obj->vcap.device_caps, NULL);
if (v4l2obj->device_caps &
- (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE))
+ (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_CAPTURE_MPLANE)) {
+ /* We ignore touch sensing devices; those are't really video */
+ if (v4l2obj->device_caps & V4L2_CAP_TOUCH)
+ goto close;
+
type = GST_V4L2_DEVICE_TYPE_SOURCE;
+ }
if (v4l2obj->device_caps &
(V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_VIDEO_OUTPUT_MPLANE)) {