After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 789197 - gst-device-monitor shows broken touch "video" sources
gst-device-monitor shows broken touch "video" sources
Status: RESOLVED FIXED
Product: GStreamer
Classification: Platform
Component: gst-plugins-good
1.12.3
Other Linux
: Normal normal
: 1.12.4
Assigned To: GStreamer Maintainers
GStreamer Maintainers
Depends on:
Blocks:
 
 
Reported: 2017-10-19 12:21 UTC by Jan Alexander Steffens (heftig)
Modified: 2017-11-07 01:11 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
[PATCH] v4l2deviceprovider: Ignore touch sensing devices (3.24 KB, patch)
2017-10-19 12:21 UTC, Jan Alexander Steffens (heftig)
needs-work Details | Review
v4l2deviceprovider: Ignore touch sensing devices (3.45 KB, patch)
2017-11-06 20:21 UTC, Jan Alexander Steffens (heftig)
committed Details | Review
v4l2deviceprovider: Add missing V4L2_CAP_TOUCH (1.14 KB, patch)
2017-11-06 20:21 UTC, Jan Alexander Steffens (heftig)
committed Details | Review

Description Jan Alexander Steffens (heftig) 2017-10-19 12:21:34 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 ! ...
Comment 1 Nicolas Dufresne (ndufresne) 2017-10-28 19:28:49 UTC
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.
Comment 2 Nicolas Dufresne (ndufresne) 2017-10-28 19:38:50 UTC
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
Comment 3 Jan Alexander Steffens (heftig) 2017-10-29 13:38:44 UTC
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
Comment 4 Nicolas Dufresne (ndufresne) 2017-11-06 14:59:57 UTC
Ping, any chance you will provide a patch for git master along with this patch for 1.12 ?
Comment 5 Jan Alexander Steffens (heftig) 2017-11-06 20:21:01 UTC
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
Comment 6 Jan Alexander Steffens (heftig) 2017-11-06 20:21:07 UTC
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 7 Jan Alexander Steffens (heftig) 2017-11-06 20:22:10 UTC
Comment on attachment 361857 [details] [review]
[PATCH] v4l2deviceprovider: Ignore touch sensing devices

With master, the device is gone unless I add the env.
Comment 8 Nicolas Dufresne (ndufresne) 2017-11-07 01:09:30 UTC
Comment on attachment 363085 [details] [review]
v4l2deviceprovider: Ignore touch sensing devices

Attachment 363085 [details] pushed as 7e4bc6d - v4l2deviceprovider: Ignore touch sensing devices
Comment 9 Nicolas Dufresne (ndufresne) 2017-11-07 01:10:46 UTC
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
Comment 10 Nicolas Dufresne (ndufresne) 2017-11-07 01:11:33 UTC
Thanks for the report, the patches and the updates.