New version of webcamd [3.11.0.1] ready for testing

Juergen Lock nox at jelal.kn-bremen.de
Fri Aug 16 18:41:10 UTC 2013


On Fri, Aug 16, 2013 at 06:51:17PM +0200, Hans Petter Selasky wrote:
> Hi Jurgen,
Hi!
> 
> I think this is something broken at the Linux side or I have sources out of sync.
> You should just ignore the NULL function pointer, hence the technisat driver does not have these callbacks.
> 
> Change:
>        if (!rdev->users++)
>                 rval = rdev->open(rdev);
> Into:
>        if (!rdev->users++ && rdev->open != NULL)
>                 rval = rdev->open(rdev);
> 
> And the same for the:
> 
> rdev->close
> 
> case.
> 
> CC'ed: Srinivas KANDAGATLA
>  
> https://lkml.org/lkml/2013/7/22/93
> 
 Ah indeed that is better, now technisat-usb2 works again, including
it's remote. :)  Here is the patch:

--- media_tree/drivers/media/rc/rc-main.c.orig
+++ media_tree/drivers/media/rc/rc-main.c
@@ -707,7 +707,7 @@ int rc_open(struct rc_dev *rdev)
 		return -EINVAL;
 
 	mutex_lock(&rdev->lock);
-	if (!rdev->users++)
+	if (!rdev->users++ && rdev->open != NULL)
 		rval = rdev->open(rdev);
 
 	if (rval)
@@ -731,7 +731,7 @@ void rc_close(struct rc_dev *rdev)
 	if (rdev) {
 		mutex_lock(&rdev->lock);
 
-		 if (!--rdev->users)
+		 if (!--rdev->users && rdev->close != NULL)
 			rdev->close(rdev);
 
 		mutex_unlock(&rdev->lock);
> --HPS
> 
 And now I also tested rtl28xxu, af9015, af9035, ati_remote, mceusb,
uvc, gspca and they also all worked as before.

 Thanx!
	Juergen
> 
> 
> -----Original message-----
> > From:Juergen Lock <nox at jelal.kn-bremen.de <mailto:nox at jelal.kn-bremen.de> >
> > Sent: Friday 16th August 2013 18:05
> > To: Hans Petter Selasky <hans.petter.selasky at bitfrost.no <mailto:hans.petter.selasky at bitfrost.no> >
> > Cc: freebsd-multimedia at freebsd.org <mailto:freebsd-multimedia at freebsd.org> 
> > Subject: Re: New version of webcamd [3.11.0.1] ready for testing
> > 
> > On Fri, Aug 16, 2013 at 02:23:06PM +0200, Hans Petter Selasky wrote:
> > > Hi,
> > Hi!
> > > 
> > > There is a new version of webcamd available. Changes:
> > > 
> > > - Update to the latest and greatest Linux V4L codebase (Linux 3.11).
> > > 
> > > Please test and report back!
> > > 
> > > svn --username anonsvn --password anonsvn \
> > >         checkout svn://svn.turbocat.net/i4b/trunk/ports
> > > 
> >  Segfaults with technisat-usb2:
> > 
> > Linux video capture interface: v2.00
> > lirc_dev: IR Remote Control driver registered, major 14 
> > IR NEC protocol handler initialized
> > IR RC5(x) protocol handler initialized
> > IR RC6 protocol handler initialized
> > IR JVC protocol handler initialized
> > IR Sony protocol handler initialized
> > IR RC5 (streamzap) protocol handler initialized
> > IR SANYO protocol handler initialized
> > IR LIRC bridge handler initialized
> > b2c2-flexcop: B2C2 FlexcopII/II(b)/III digital TV receiver chip loaded successfully
> > uvcvideo: Unable to create debugfs directory
> > USB Video Class driver (1.1.1)
> > cpia2: V4L-Driver for Vision CPiA2 based cameras v3.0.1
> > au0828 driver loaded
> > 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: Initialized (Em28xx dvb Extension) extension
> > virtual DVB server adapter driver, version 1.0-hps, (c) 2011 Hans Petter Selasky
> > Attached to ugen5.2[0]
> > technisat-usb2: set alternate setting
> > technisat-usb2: firmware version: 17.63
> > dvb-usb: found a 'Technisat SkyStar USB HD (DVB-S/S2)' in warm state.
> > dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
> > DVB: registering new adapter (Technisat SkyStar USB HD (DVB-S/S2))
> > dvb-usb: MAC address: 0x8014c3188M
> > stv6110x_attach: Attaching STV6110x
> > DBG: : dvb_register_frontend:
> > INFO: : DVB: registering adapter 0 frontend 0 (Technisat SkyStar USB HD (DVB-S/S2))...
> > DBG: : dvb_frontend_clear_cache: Clearing cache for delivery system 5
> > Registered IR keymap rc-technisat-usb2
> > rc0: IR-receiver inside an USB DVB receiver as webcamd
> > DBG: rc0: lirc_dev: lirc_register_driver: sample_rate: 0
> > INFO: rc0: lirc_dev: driver ir-lirc-codec (technisat-usb2) registered at minor = 0
> > dvb-usb: schedule remote query interval to 100 msecs.
> > dvb-usb: Technisat SkyStar USB HD (DVB-S/S2) successfully initialized and connected.
> > Waiting for HAL USB device.
> > Creating /dev/dvb/adapter0/demux0
> > Creating /dev/dvb/adapter0/dvr0
> > DBG: : dvb_frontend_open:
> > DBG: : dvb_frontend_release:
> > Creating /dev/dvb/adapter0/frontend0
> > DBG: rc0: lirc_dev (ir-lirc-codec (technisat-usb2)[0]): open called
> > zsh: segmentation fault (core dumped)  webcamd-31101x -d 5.2 -H
> > # gdb $(which webcamd-31101x ) webcamd.core
> > GNU gdb 6.1.1 [FreeBSD]
> > Copyright 2004 Free Software Foundation, Inc.
> > GDB is free software, covered by the GNU General Public License, and you are
> > welcome to change it and/or distribute copies of it under certain conditions.
> > Type "show copying" to see the conditions.
> > There is absolutely no warranty for GDB.  Type "show warranty" for details.
> > This GDB was configured as "amd64-marcel-freebsd"...
> > 
> > warning: core file may not match specified executable file.
> > Core was generated by `webcamd'.
> > Program terminated with signal 11, Segmentation fault.
> > Reading symbols from /usr/local/lib/libdbus-1.so.3...done.
> > Loaded symbols for /usr/local/lib/libdbus-1.so.3
> > Reading symbols from /usr/local/lib/libhal.so.1...done.
> > Loaded symbols for /usr/local/lib/libhal.so.1
> > Reading symbols from /usr/lib/libusb.so.2...done.
> > Loaded symbols for /usr/lib/libusb.so.2
> > Reading symbols from /usr/local/lib/libcuse4bsd.so.1...done.
> > Loaded symbols for /usr/local/lib/libcuse4bsd.so.1
> > Reading symbols from /lib/libutil.so.8...done.
> > Loaded symbols for /lib/libutil.so.8
> > Reading symbols from /lib/libthr.so.3...done.
> > Loaded symbols for /lib/libthr.so.3
> > Reading symbols from /lib/libc.so.7...done.
> > Loaded symbols for /lib/libc.so.7
> > Reading symbols from /libexec/ld-elf.so.1...done.
> > Loaded symbols for /libexec/ld-elf.so.1
> > #0  0x0000000000000000 in ?? ()
> > [New Thread 8014087c0 (LWP 100307/webcamd)]
> > [New Thread 801408980 (LWP 100306/webcamd)]
> > [New Thread 801408b40 (LWP 100305/webcamd)]
> > [New Thread 801408d00 (LWP 100304/webcamd)]
> > [New Thread 801409080 (LWP 100303/webcamd)]
> > [New Thread 801409240 (LWP 100302/webcamd)]
> > [New Thread 801409400 (LWP 100301/webcamd)]
> > [New Thread 8014095c0 (LWP 100299/webcamd)]
> > [New Thread 801409940 (LWP 100298/webcamd)]
> > [New Thread 801409b00 (LWP 100289/webcamd)]
> > [New Thread 801409cc0 (LWP 100288/webcamd)]
> > [New Thread 801409e80 (LWP 100287/webcamd)]
> > [New Thread 80140a3c0 (LWP 100274/webcamd)]
> > [New Thread 80140a740 (LWP 100265/webcamd)]
> > [New Thread 80140aac0 (LWP 100260/webcamd)]
> > [New Thread 80140ac80 (LWP 100229/webcamd)]
> > [New Thread 80140ae40 (LWP 100159/webcamd)]
> > [New Thread 80144f1c0 (LWP 100146/webcamd)]
> > [New Thread 8014041c0 (LWP 100541/initial thread)]
> > (gdb) bt
> > #0  0x0000000000000000 in ?? ()
> > #1  0x00000000005abcca in rc_open (rdev=0x8015aea00)
> >     at media_tree/drivers/media/rc/rc-main.c:711
> > #2  0x00000000005ae488 in lirc_dev_fop_open (inode=0x801499508, 
> >     file=0x801499520) at media_tree/drivers/media/rc/lirc_dev.c:472
> > #3  0x000000000070e8db in linux_open (f_v4b=288, fflags=0)
> >     at kernel/linux_file.c:57
> > #4  0x0000000000715a21 in v4b_create (unit=-1) at webcamd.c:353
> > #5  0x0000000000716636 in main (argc=4, argv=0x7fffffffe2b8) at webcamd.c:719
> > (gdb) fr 1
> > #1  0x00000000005abcca in rc_open (rdev=0x8015aea00)
> >     at media_tree/drivers/media/rc/rc-main.c:711
> > 711                     rval = rdev->open(rdev);
> > (gdb) p rdev
> > $1 = (struct rc_dev *) 0x8015aea00
> > (gdb) p *rdev
> > $2 = {dev = {minor = 0, busnum = 0, kobj = {parent = 0x0}, refcount = {
> >       refcount = {counter = 1}}, release = 0, driver = 0x0, 
> >     parent = 0x8014be000, type = 0x954700, platform_data = 0x0, 
> >     driver_data = 0x8015aea00, fops = 0x0, cdev = 0x0, class = 0x9545a0, 
> >     driver_static = {name = 0x0, owner = 0x0, pm = 0x0}, devt = 0, 
> >     name = "rc0", '\0' <repeats 60 times>, bus_name = '\0' <repeats 31 times>, 
> >     bus_id = '\0' <repeats 31 times>}, 
> >   input_name = 0x77e958 "IR-receiver inside an USB DVB receiver", 
> >   input_phys = 0x8014c42a8 "usb-/dev/usb-/dev/usb/ir0", input_id = {
> >     bustype = 3, vendor = 5367, product = 1280, version = 1}, 
> >   driver_name = 0x787852 "technisat-usb2", 
> >   map_name = 0x787840 "rc-technisat-usb2", rc_map = {scan = 0x80148ae00, 
> >     size = 64, len = 33, alloc = 512, rc_type = RC_TYPE_RC5, 
> >     name = 0x770887 "rc-technisat-usb2", lock = <incomplete type>}, lock = {
> >     sem = {value = 0, owner = 0x8014041c0}}, devno = 0, raw = 0x80148ac00, 
> >   input_dev = 0x8015b9400, driver_type = RC_DRIVER_IR_RAW, idle = false, 
> >   allowed_protos = 262143, enabled_protocols = 18446744073709551615, 
> >   users = 1, scanmask = 0, priv = 0x8014c2000, keylock = <incomplete type>, 
> >   keypressed = false, keyup_jiffies = 0, timer_keyup = {entry = {
> >       tqe_next = 0x0, tqe_prev = 0x0}, function = 0x5ab930 <ir_timer_keyup>, 
> >     expires = 0, data = 34382473728}, last_keycode = 0, last_scancode = 0, 
> >   last_toggle = 0 '\0', timeout = 0, min_timeout = 0, max_timeout = 0, 
> >   rx_resolution = 0, tx_resolution = 0, change_protocol = 0, open = 0, 
> > ---Type <return> to continue, or q <return> to quit---
> >   close = 0, s_tx_mask = 0, s_tx_carrier = 0, s_tx_duty_cycle = 0, 
> >   s_rx_carrier_range = 0, tx_ir = 0, s_idle = 0, s_learning_mode = 0, 
> >   s_carrier_report = 0}
> > (gdb) p rdev->open
> > $3 = (int (*)(struct rc_dev *)) 0
> > (gdb) q
> > 
> >  Thanx,
> > 	Juergen
> > 
> > PS: pctv452e (TT-S2 3600) and dual dib0700 seem to work so far.
> > 
> 


More information about the freebsd-multimedia mailing list