video using webcamd on Raspberry Pi 3

Curtis Villamizar curtis at orleans.occnc.com
Sat Sep 30 17:33:33 UTC 2017


On 09/30/17 04:42, Hans Petter Selasky wrote:
> On 09/30/17 03:55, Curtis Villamizar wrote:
>> I'm using two camera with webcamd successfully with a amd64 desktop
>> running FreeBSD 11.0-STABLE r308356.  The same camera don't work using
>> FreeBSD 12.0-CURRENT r322787 on a Raspberry Pi 3 (RPi3) which uses the
>> arm64 architecture.
>>
>> Both are using the latest libv4l and webcamd from ports.  I'm using
>> pwcview for testing though I'd eventually like to get the motion port
>> running.
>>
>> I compiled webcamd with DEBUG on both.  On the amd64 (which works
>> fine) I get:
>>
>> # /usr/local/sbin/webcamd -i 0 -d ugen2.3 -U webcamd -G webcamd -H
>> Linux video capture interface: v2.00
>> uvcvideo: Unable to create debugfs directory
>> USB Video Class driver (1.1.1)
>> cpia2: V4L-Driver for Vision CPiA2 based cameras v3.0.1
>> pvrusb2: V4L in-tree version:Hauppauge WinTV-PVR-USB2 MPEG2 
>> Encoder/Tuner
>> pvrusb2: Debug mask is 31 (0x1f)
>> USBVision USB Video Device Driver for Linux : 0.9.11
>> em28xx: Registered (Em28xx v4l2 Extension) extension
>> em28xx: Registered (Em28xx dvb Extension) extension
>> Attached to ugen2.3[0]
>> uvcvideo: Found UVC 1.00 device USB 2.0 Camera (05a3:9310)
>> Waiting for HAL USB device.
>> Creating /dev/video0
>>
>> The difference between that and the RPi3 (arm64) that doesn't work
>> are:
>>
>> --- webcamd-amd64-elp.txt       2017-09-29 14:52:37.265268000 -0400
>> +++ webcamd-rpi3-elp.txt        2017-09-29 14:54:26.374538000 -0400
>> @@ -1,14 +1,10 @@
>> -# /usr/local/sbin/webcamd -i 0 -d ugen2.3 -U webcamd -G webcamd -H
>> +# /usr/local/sbin/webcamd -i 0 -d ugen0.4 -U webcamd -G webcamd
>>   Linux video capture interface: v2.00
>> -uvcvideo: Unable to create debugfs directory
>>   USB Video Class driver (1.1.1)
>>   cpia2: V4L-Driver for Vision CPiA2 based cameras v3.0.1
>>   pvrusb2: V4L in-tree version:Hauppauge WinTV-PVR-USB2 MPEG2 
>> Encoder/Tuner
>>   pvrusb2: Debug mask is 31 (0x1f)
>>   USBVision USB Video Device Driver for Linux : 0.9.11
>> -em28xx: Registered (Em28xx v4l2 Extension) extension
>> -em28xx: Registered (Em28xx dvb Extension) extension
>> -Attached to ugen2.3[0]
>> +Attached to ugen0.4[0]
>>   uvcvideo: Found UVC 1.00 device USB 2.0 Camera (05a3:9310)
>> -Waiting for HAL USB device.
>>   Creating /dev/video0
>>
>> The two lines that jump out as missing are the lines that begin with
>> "em28xx: Registered".  These are in
>> work/webcamd-4.8.0.4/media_tree/drivers/media/usb/em28xx/em28xx-video.c
>> work/webcamd-4.8.0.4/media_tree/drivers/media/usb/em28xx/em28xx-dvb.c
>> but I don't understand how module_init works.
>>
>> I've tried to turn on more debugging with webcamd -m options. Even
>> turning on all debug didn't seem to work.  I used
>> webcamd -s | grep debug=0 | sed -e 's,=0.*,=255,' -e 's, , -m ,'
>> to tun on all variables with .debug in the name, yet got no additional
>> output other than from uaudio0 (the microphone on the camera).
>>
>> Does anyone have any insights into this?
>>
>
> Hi,
>
> The RPI3 uses a different USB chipset. Is your device high-speed or 
> full-speed. Are you using an external HUB?
>
> What does "usbdump -i usbus0 -f 4 -s 65536 -vvv" say when you start 
> pwcview ?
>
> Are there any error messages in dmesg ?
>
> --HPS

Hi Petter,

Thanks for the reply.

No external hub.  The camera is USB 2.0.  I'm testing with sif (320x240) 
and vga (640x480) so modest bandwidth.  I'm doing a build world on a USB 
disk at the moment so that might affect the dump.

I get scrambled output which is mostly greenish.  usbdump produces a lot 
of output so I will highlight.

16:55:43.747966 usbus0.4 
SUBM-ISOC-EP=00000081,SPD=HIGH,NFR=128,SLEN=0,IVAL=0
  frame[0] READ 3072 bytes
  frame[1] READ 3072 bytes
  frame[2] READ 3072 bytes

[...]

  flags 0x16 <SHORT_XFER_OK|SHORT_FRAMES_OK|PROXY_BUFFER|0>
  status 0x51823 
<OPEN|TRANSFERRING|STARTED|SHORT_FRAMES_OK|SHORT_XFER_OK|ISOCHRONOUS_XFR|CAN_CANCEL_IMMED|0>
16:55:43.749492 usbus0.4 
DONE-ISOC-EP=00000081,SPD=HIGH,NFR=128,SLEN=73412,IVAL=0,ERR=0
  frame[0] READ 652 bytes

The rest is frame dumps but the read sizes are off:

  frame[0] READ 652 bytes

  frame[1] READ 52 bytes

  frame[2] READ 652 bytes

  frame[3] READ 652 bytes

[...]

  frame[28] READ 0 bytes

  frame[29] READ 0 bytes

  frame[30] READ 3004 bytes

  frame[31] READ 860 bytes

  frame[32] READ 12 bytes

  frame[33] READ 448 bytes

  frame[34] READ 652 bytes

[...]

frame[113] READ 652 bytes
  flags 0x16 <SHORT_XFER_OK|SHORT_FRAMES_OK|PROXY_BUFFER|0>
  status 0xd1821 
<OPEN|STARTED|SHORT_FRAMES_OK|SHORT_XFER_OK|ISOCHRONOUS_XFR|CAN_CANCEL_IMMED|DOING_CALLBACK|0>
16:55:43.764598 usbus0.4 
SUBM-ISOC-EP=00000081,SPD=HIGH,NFR=128,SLEN=0,IVAL=0

The [...] is where there are a lot of lines with the same content except 
incrementing frame numbers.  I did not include the data with the frame 
dumps.

The whole thing ends after the C-c on usbdump with:

180 packets captured
490 packets received by filter
116 packets dropped by kernel

I did a two similar dumps.  Not running pwcview I got nothing 
interesting except 0 packets dropped by kernel.  Starting usbdump and 
then starting and stopping pwcview I got a lot of short packet exchanges 
which I assume (hope) are setup since there were short reads and 
writes.  Then on to " frame[0] READ 3072 bytes" and output similar to above.

Curtis



More information about the freebsd-multimedia mailing list