Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 May 2009 12:32:54 +0200
From:      Matthias Apitz <guru@unixarea.de>
To:        Luigi Rizzo <rizzo@iet.unipi.it>
Cc:        freebsd-multimedia@freebsd.org, freebsd-emulation@freebsd.org, Hans Petter Selasky <hselasky@freebsd.org>, Beech Rintoul <beech@freebsd.org>
Subject:   Re: Skype-2.0 is here!
Message-ID:  <20090530103254.GA3368@current.Sisis.de>
In-Reply-To: <20090530090540.GC46541@onelab2.iet.unipi.it>
References:  <200804142217.17035.beech@FreeBSD.org> <20090530070025.GA2465@current.Sisis.de> <200905300955.34102.hselasky@freebsd.org> <20090530090540.GC46541@onelab2.iet.unipi.it>

next in thread | previous in thread | raw e-mail | index | archive | help
El día Saturday, May 30, 2009 a las 11:05:40AM +0200, Luigi Rizzo escribió:

> On Sat, May 30, 2009 at 09:55:32AM +0200, Hans Petter Selasky wrote:
> > 
> > Hi all,
> > 
> > We need some common effort to get Video4Linux USB devices working on FreeBSD. 
> > First of all we need to push a video4linux library.
> > 
> > -lvideodevx
> > 
> > Methods:
> > 
> > int videodevx_open(int unit); /* returns a handle, not neccesarily a 
> > file-handle */
> > int videodevx_read(int hdl, ptr, len);
> > int videodevx_write(int hdl, ptr, len);
> > int videodevx_ioctl(int hdl, cmd, arg);
> > int videodevx_mmap(int hdl, void *addr, size_t len, int prot, int flags, int 
> > fd, off_t offset);
> > int videodevx_getfd(int hdl); /* used for polling */
> > int videodevx_close(int hdl);
> > 
> > Some work in progress is available from:
> > 
> > svn --username anonsvn --password anonsvn \
> >       checkout svn://svn.turbocat.net/i4b/trunk/usbcam
> > 
> > Download "linux-2.6.29" to "ulinux/linux"
> > 
> > cd ulinux
> > 
> > make clean all
> > 
> > NOTE: It's not linking yet.
> > 
> > Second, we need a userland port for Video4Linux, which I am working on. So 
> > that the application directly receives the USB data and talks to the webcam 
> > through -lvideodevx and the new BSD licensed -lusb .
> > 
> > Third we need to convince everyone to use videodevx when opening video 
> > devices. On linux videodevx will simply be a wrapper for 
> > open/close/ioctl/... . On FreeBSD videodevx will be a complete USB webcam 
> > driver library.
> > 
> > Anyone that wants to join heads?
> 
> Excellent summary which covers the situation for native apps.
> 
> I wonder if the case is a bit different for skype and linux binaries
> in general, as they run under linux emulation so perhaps the
> it is the linuxulator that has to emulate the v4l(2?) calls,
> and i have no idea if this needs to be done in the kernel or we
> can deal with this in some libc wrapper ?

Some time ago (using RELENG_7) I did some effort to port Ekiga, PWLib
and Opal out of SVN to FreeBSD because the port versions have been
outdated at this time. I wanted to use the Ekiga client to
connect to our Polycon VC system but there was a bug in the Polycon which
could not decifer the video encoding and so this ended up for me in a
dead project :-(
old details are here:
http://wiki.ekiga.org/index.php/Compile_your_own_SVN_version_of_Ekiga_on_FreeBSD

In any case, there was support for video in
ptlib/plugins/vidinput_v4l/vidinput_v4l.cxx
and the only change I had to made to make it work in FreeBSD was the manner of picking
up the /dev/video0 and not using the Linux major and minor number:

#if defined(P_FREEBSD)
         // device numbers are irrelevant here, so we match on names
         // instead.
          if (filename.GetLength() <= 5 || filename.Left(5) != "video")
               continue;
         int num = atoi(filename.Mid(6));
         if (num < 0 || num > 63)
               continue;
          vid.SetAt(num, devname);
#else

          static const int deviceNumbers[] = { 81 };
          for (PINDEX i = 0; i < PARRAYSIZE(deviceNumbers); i++) {
            if (MAJOR(s.st_rdev) == deviceNumbers[i]) {
              PINDEX num = MINOR(s.st_rdev);
              if (num <= 63 && num >= 0) {
                vid.SetAt(num, devname);
              }
            }
          }
#endif

the rest of the code was just working above the /dev/video0 device
provided by the pwc.ko.

I'm wondering if we could make use of the PTlib plug-in for this as well?
To bring it under the linuxemulator is another story, though.

CU

	matthias


-- 
Matthias Apitz
t +49-89-61308 351 - f +49-89-61308 399 - m +49-170-4527211
e <guru@unixarea.de> - w http://www.unixarea.de/
People who hate Microsoft Windows use Linux but people who love UNIX use FreeBSD.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20090530103254.GA3368>