GNOME Bugzilla – Bug 789197
gst-device-monitor shows broken touch "video" sources
Last modified: 2017-11-07 01:11:33 UTC
Created attachment 361857 [details] [review] [PATCH] v4l2deviceprovider: Ignore touch sensing devices 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 ! ...
Review of attachment 361857 [details] [review]: Interesting, so yet another API break on kernel side. ::: sys/v4l2/gstv4l2deviceprovider.c @@ +41,3 @@ +#ifndef V4L2_CAP_TOUCH +#define V4L2_CAP_TOUCH 0x10000000 +#endif We build against our own copy of the header, this is always defined in git-master. You may add this in your backport, or simply update ext/ in 1.12, but don't do this in master please.
Btw, according to the provided trace, the device do pretend to support I420, YV12, BGR and RGB, we already have provision I think to ignored fully unsupported devices. Though, the width/height is 0, which clearly isn't really valid, we could add more check to ignore these in the monitor. I think the formats are caused by bugs in libv4l ? Can you test on git-master before we go ahead and merge this, I've disabled libv4l2 by default now (can be enabled with GST_V4L2_USE_LIBV4L2=1 for testing. The output of the following command could also be useful: v4l2-ctl -d /dev/v4l-touch0 --list-formats
Output: 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
Ping, any chance you will provide a patch for git master along with this patch for 1.12 ?
Created attachment 363085 [details] [review] 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
Created attachment 363086 [details] [review] v4l2deviceprovider: Add missing V4L2_CAP_TOUCH This define was only added in Linux 4.8. This commit is for the stable branch only, since we want to avoid bumping the v4l headers in fear of regressions.
Comment on attachment 361857 [details] [review] [PATCH] v4l2deviceprovider: Ignore touch sensing devices With master, the device is gone unless I add the env.
Comment on attachment 363085 [details] [review] v4l2deviceprovider: Ignore touch sensing devices Attachment 363085 [details] pushed as 7e4bc6d - v4l2deviceprovider: Ignore touch sensing devices
Attachment 363085 [details] pushed as 5483d6e - 1.12 - v4l2deviceprovider: Ignore touch sensing devices Attachment 363086 [details] pushed as 75a5947 - 1.12 - v4l2deviceprovider: Add missing V4L2_CAP_TOUCH
Thanks for the report, the patches and the updates.