Hi, In v4l2 VIDIOC_REQBUFS ioctl, a count value of zero frees all buffers. We do not support it, and worse, it triggers a kernel panic.
Return EINVAL in this case so app can detect we do not allow it. While there change the easily triggerable panic by a printf and return EINVAL. With that gstreamer1 correcly fallback and works. ok ? comments ? Index: uvideo.c =================================================================== RCS file: /cvs/src/sys/dev/usb/uvideo.c,v retrieving revision 1.176 diff -u -p -r1.176 uvideo.c --- uvideo.c 18 Oct 2014 08:01:34 -0000 1.176 +++ uvideo.c 18 Oct 2014 09:01:04 -0000 @@ -3092,8 +3092,14 @@ uvideo_reqbufs(void *v, struct v4l2_requ DPRINTF(1, "%s: %s: count=%d\n", DEVNAME(sc), __func__, rb->count); - if (sc->sc_mmap_count > 0 || sc->sc_mmap_buffer != NULL) - panic("%s: mmap buffers already allocated", __func__); + /* We do not support freeing buffers via raqbufs(0) */ + if (rb->count == 0) + return (EINVAL); + + if (sc->sc_mmap_count > 0 || sc->sc_mmap_buffer != NULL) { + printf("%s: mmap buffers already allocated\n", __func__); + return (EINVAL); + } /* limit the buffers */ if (rb->count > UVIDEO_MAX_BUFFERS)