Hi,

here's a diff to reuse usbd_devinfo_vp() (exposed in usbdivar.h) in
VIDIOC_QUERYCAP ioctl callback, this way we can fill v4l2_capability
card struct member with the actual usb product name instead of a dummy
"Generic USB video class device".

Firefox uses that ioctl to get the user-facing device name in
https://dxr.mozilla.org/mozilla-central/source/media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc#313
so that's helpful when you have several devices
and the webrtc doorhanger asks you which camera you want to
share.. cf http://i.imgur.com/uLnWw6u.png

USB_MAX_STRING_LEN is 127 and card is 32 in v4l2_capability, so strlcpy
should take care of null-terminating/truncating.

Thx mpi@ for the directions..

Landry
Index: usb_subr.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/usb_subr.c,v
retrieving revision 1.134
diff -u -r1.134 usb_subr.c
--- usb_subr.c  8 Apr 2017 02:57:25 -0000       1.134
+++ usb_subr.c  24 Apr 2018 14:20:00 -0000
@@ -61,8 +61,6 @@
 
 usbd_status    usbd_set_config(struct usbd_device *, int);
 void           usbd_devinfo(struct usbd_device *, int, char *, size_t);
-void           usbd_devinfo_vp(struct usbd_device *, char *, size_t,
-                   char *, size_t, int);
 char           *usbd_get_device_string(struct usbd_device *, uByte);
 char           *usbd_get_string(struct usbd_device *, int, char *, size_t);
 int            usbd_getnewaddr(struct usbd_bus *);
Index: usbdivar.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdivar.h,v
retrieving revision 1.73
diff -u -r1.73 usbdivar.h
--- usbdivar.h  3 Feb 2018 13:37:37 -0000       1.73
+++ usbdivar.h  24 Apr 2018 14:20:00 -0000
@@ -257,6 +257,8 @@
 usbd_status    usb_insert_transfer(struct usbd_xfer *);
 void           usb_transfer_complete(struct usbd_xfer *);
 int            usbd_detach(struct usbd_device *, struct device *);
+void           usbd_devinfo_vp(struct usbd_device *, char *, size_t,
+                   char *, size_t, int);
 
 /* Routines from usb.c */
 void           usb_needs_explore(struct usbd_device *, int);
Index: uvideo.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/uvideo.c,v
retrieving revision 1.196
diff -u -r1.196 uvideo.c
--- uvideo.c    30 Dec 2017 23:08:29 -0000      1.196
+++ uvideo.c    24 Apr 2018 14:20:00 -0000
@@ -2781,11 +2781,14 @@
 uvideo_querycap(void *v, struct v4l2_capability *caps)
 {
        struct uvideo_softc *sc = v;
+       char vendor[USB_MAX_STRING_LEN];
+       char product[USB_MAX_STRING_LEN];
 
        bzero(caps, sizeof(*caps));
        strlcpy(caps->driver, DEVNAME(sc), sizeof(caps->driver));
-       strlcpy(caps->card, "Generic USB video class device",
-           sizeof(caps->card));
+       usbd_devinfo_vp(sc->sc_udev, vendor, sizeof (vendor), product,
+           sizeof (product), 1);
+       strlcpy(caps->card, product, sizeof(caps->card));
        strlcpy(caps->bus_info, "usb", sizeof(caps->bus_info));
 
        caps->version = 1;

Reply via email to