Frequently Asked Questions
GENERIC Video4Linux & Video4Linux2 Microdia-SN9CXXX DRIVER FOR LINUX
SN9C101, SN9C102, SN9C102P, SN9C103, SN9C105, SN9C110, SN9C120, SN9C201, SN9C202

Author & Final contact: Luca Risolia, homepage: http://www.linux-projects.org
-------------------------------------------------------------------------------

1. Q: I asked a question to the author of the driver but he has not answered
      yet. Why?
   A: Probably the answer is in the FAQ. Read it better or again, as it's being
      updated all the time without notice.


2. Q. What hardware does this driver support?
   A. This driver attempts to support all the webcams based on the Microdia
      SN9C101, SN9C102, SN9C102P, SN9C103, SN9C105, SN9C110, SN9C120, SN9C201 and
      SN9C202 video controllers ("SN9CXXX" for short) , which can be found in
      a lot of many recent USB and/or USB2 webcams, embedded in laptops or sold
      as stand-alone devices.


3. Q: Is the driver open-source or closed-source?
   A: The driver is closed-source and provided as a binary-only kernel module.


4. Q: Will you release the source code one day?
   A: It's likely I will never release the source code, unless I have
      financial proposals. The best candidate is the manufacturer of these
      controllers. If you would like to see this driver released under
      the GPL to everyone, please send them a personal request.
      The more requests they will see, the more they will consider this driver.
   
      Another way is to collect the money once from all the potential
      users, according to the principles of the ransom model:
      "A publishing model where copyrighted works (such as books, software,
       or music) remain proprietary until a total amount of money is
       collected or a certain date arrives, at which point the work is
       automatically freed to the public."
      The terms of this approach will require a preliminary discussion
      between me and a group of interested users. Contact me in this case.

      Should a possible agreement go well, I am also available for submitting
      the source code to the mainstream Linux kernel, maintaining and improving
      the driver by supporting new hardware promptly and for free for an unlimited
      period of time.
      A special debugger (already developed) will also be available to the
      community.

5. Q: Under which versions of the Linux kernel does the binary driver run?
   A: The driver has been compiled for some kernels from the most important
      free Linux distributions (i.e *Ubuntu). In some cases, the driver can be
      installed with the help of pre-built packages, which are available for
      free or as trial releases here
      Each package usually corresponds to only one pair of kernel version and
      Linux distribution.


6. Q: What is the COPYING LICENSE of the driver?
   A: The LICENSE is Proprietary. The conditions are written in a file
      contained in each pre-built package or archive (i.e. "copyright").
      There should be nothing surprising for you there, but, you know, I have
      to say that you must read and accept them every time you install the
      driver. THE SOFTWARE IS PROVIDED WITHOUT ANY WARRANTY.


7. Q: Which SN9CXXX webcams does the driver support exactly?
   A: I can't mention all the models and brands of devices with a SN9CXXX
      inside. There are "zillions" of them. If you already have a webcam, the
      simplest way to see if your webcam will be working with the driver is to
      install the driver itself (choose the latest available free package for
      your system). Once loaded, the driver automatically recognizes all the
      SN9CXXX-based devices attached for sure, although not all of them might
      be actually supported and ready to use. Kernel messages will always tell
      you yes or no.


8. Q: My SN9CXXX webcam is not supported. What can I do?
   A: - First of all, make sure it really is a SN9CXXX webcam. Kernel messages
        from the driver will tell you.
      - Make sure it really is not supported. Always install the latest version
        of the driver and check again.
      That said, the SN8CXX driver already supports a wide range of SN9CXXX
      webcams. Support for the rest will be added under payment only and
      through binary-only drivers. If interested, contact me.


9. Q: There are no free binaries of the driver available at
      http://www.linux-projects.org matching my running Linux
      distribution/kernel. Can you build one for me?
   A: Why not, but first I ask your contribute with money:
      a. 200 EU: one request for one custom kernel (you will have to provide
                 the kernel headers or the whole system if necessary). The best
                 here would be to provide an VMWare-player image of the system
                 including all the necessary tools for the building environment.
                 The price might not be acceptable for single users, but still
                 valid for companies.
      b. 100 EU: one request for one version of the kernel present in a free
                 and downloadable major Linux distribution (i.e. Fedora, Gentoo,
                 Slackware, Suse and so on), in the only case I need to first
                 install the system from scratch to do the building, testing,
                 packaging. 50EU if you provide a vmware image of the installed
                 system, with all the necessary development tools to build the
                 driver.
      c. 50 EU: one request for one version of the kernel if your system is
                already installed on one of my machines, but no packages are
                ready yet.
      d. 5 EU: if the driver for your distribution has been already built.

      IN EVERY CASE, THE CONTRIBUTION IS INTENDED TO BE A "REWARD" FOR
      THE WORK ALREADY DONE (NOT ONLY ON THE CODE OF THIS DRIVER ITSELF) AND
      ALL THE OTHER RESOURCES/MATERIAL INVESTED AND AVAILABLE FOR FREE.
      I'LL DO MY BEST TO IMPROVE THE MATERIAL DAY BY DAY.
      IN FACTS, BEFORE CONTRIBUTING WITH MONEY YOU HAVE TO BE SURE
      THAT YOU **ALREADY** FOUND THE DRIVER USEFUL, LIKED IT TOTALLY AND WOULD
      ALSO LIKE TO SEE A VERSION FOR YOUR _NEW_ KERNEL. IF YOU HAVE NEVER TRIED
      THE SOFTWARE OR DID NOT LIKE IT, DO NOT MAKE ANY CONTRIBUTION OF MONEY.
      ONCE AGAIN: NO WARRANTIES, THE SOFTWARE IS AND WILL ALWAYS BE PROVIDED
      "AS IS"!

      Would you like to have the SN9CXXX driver released under the terms of
      the GPL? Okay, read question #4 and redirect your requests (or complaints)
      to the appropriate persons.
      

      Contact me for more informations about the exact amount of the
      contribution and to known how/where to contribute with a secure
      transaction through PayPal.

      If possible, binaries for older kernels will appear on the homepage for
      free after a period of time.


10.Q: Can you suggest at least one application to try the driver?
   A: The short answer is: you can use whatever video application you
      prefer, be it V4L1 or V4L2. Just hope it has not too many bugs.

      Below is a list of applications which are known to work. If you know
      one not listed or not working properly, let me know:

      - videoview, its front-end is far from perfect, but has a good
      back-end. It has a GUI. You can do video previewing, recording, playbacking
      and control all the image properties. You can use some external applications
      such as "alltray" to minimize videoview onto the system tray and use it as
      "panel" application for changing the image properties while using another
      preferred application for video streaming.

      - Skype for Linux
      Skype works perfectly. Make sure to use the SN9CXXX v. 2.11 or greater and
      Skype BETA 2.0.0.27 or greater.
      
      - WengoPhone
        It's a multiprotocol (ICQ, MSN, AIM..) Istant Messanger and VoIP/SIP
        client. It seems it works perfectly. However, make sure to use the
        LATEST version available.

      - Ekiga
      Another VoIP client (working with V4L1 and V4L2).
      At the moment of writing, in Ekiga the V4L2 plugin is
      partially broken somewhere. Although ekiga can show the video, it does
      not query and set the image controls (exposure, red, green, blue) as
      expected - also, the interface for the controls when the V4L2 plugin is
      used seems to be the old one used for the old V4l1.

      - VideoLan VLC
      Nice application, you can do about everything with this swiss knife,
      from recording to real-time post-processing and streaming on the net,
      even both at the same time, etc..

      - xawtv

      - mplayer and mencoder, for example, to show a 320x240 video run:
        mplayer tv:// -tv driver=v4l:width=320:height=240:device=/dev/video0
        To record (one line,replace , ,  with values):
        mencoder tv:// -tv driver=v4l:width=:height=:\
        device=/dev/video0 -nosound -ovc lavc -o .avi

      - gqcam. For example:
        gqcam -v /dev/video0 , I suggest that you disable the "Auto brightness"
        option in the menu.

      - camstream

      - sn-webcam

      - palantir

      - aMSN (you must load the SN9CXXX driver with "force_v4lx=1" parameter,
                as at the moment of writing, the V4L2 support in aMSN is not
                complete yet)

      - linphone
        Another VoIP/SIP Client for Audio & Video Conferences.

      - Kopete - Multiprotocol Istant Messanger for the KDE Desktop

      - transcode
      Useful for recording audio and video and do any sort of filtering and
      processing on-the-fly. The v4l1 plugin is not flawless: just make sure
      to record from a supported resolution (width, height must be multiple
      of 16).
      Example (on one line command):
      transcode -z -M 2 -x v4l,v4l -i /dev/video0 --import_v4l 0,38 \
      -p /dev/dsp -y xvid -o test.avi -w 1500 -e 32000 -E 44100 -b 96 -s 7 \
      -c 0-250 -g 320x240 -j 0,4

      - ttv
        ttv displays TV/video on a terminal, rendering the images using aalib.

      - ucview, from the unicap project
        Partially working. Use the latest version available.
        The V4L1 plugin of ucview prior to v0.17 does not seem to show
        the video smoothly and only work with RGB32 bpp and GREY, while the V4L2
        plugin does not support the formats from the webcam. Keep an eye
        on this library, the situation may change in the near future.

      - motion, a software motion detector.

      - vgrabbj
        It takes a v4l device as input to put it into an jpeg, pnm, or
        png file.
        You can add a timestamp into the image. You can also make it
        automagically upload it to your website via ftp.

      - Streamer is a versatile program that allows a capture from a
         webcam or video device using only the command line. It may be
         offered in your Linux distribution's Xawtv package, or may need
         to be fetched separately as in Debian.
         To make an .avi file with streamer: 
         streamer -q -c /dev/video0 -f rgb24 -r 3 -t 00:1:00 -o outfile.avi

      - effectv
         EffecTV is a real-time video effector. You can watch TV or video
         through amazing effectors.

      - freej

      - Flash player 9. It works perfectly, try this page to test.

      - camorama - works perfectly since SN9CXXX version 2.08

      - fswebcam
      
      - luvcview

      - webcam-server
      
      - camgrab

      - wxcam (fixing planned)

      - Picasa
      
      - cheese
      
      - motv
      
      - vidcat
 
      - v4l2ucp
      
      - cameramonitor

      - webcam
      
      - dov4l - Set parameters on a video4linux1 device

      - xsane, quiteinsane, xscanimage, gimp - Graphical scanning frontends


11. Q: What are the differences between the SN9C1XX driver and the generic
       SN9CXXX driver?
    A: The SN9CXXX supports all the SN9C1XX webcams, but not only, it also
       supports the SN9C102P, SN9C110 and the USB2 SN9C201 and SN9C202.
       The SN9CXXX is closed-source, while the SN9C1XX is opensource.
       The SN9C1XX is included and maintained in the mainstream
       Linux kernels, while the SN9CXXX lives outside the kernel.
       The SN9C1XX is released under the terms of the GPL, while the SN9CXXX
       license is proprietary. The SN9C1XX can only support the Video4Linux2
       API, while the SN9CXXX also supports the old Video4Linux1 API and
       works with every video application.


12. Q: Do I need to remove the default SN9C1XX kernel driver to install the
       SN9CXXX ?
    A: Unless you know what you are doing, yes. All the SN9C1XX's are
       supported by the SN9CXXX with more features, so you won't lost any
       functionalities. Whenever possible, the installation process will ask
       you whether you wish to remove the SN9C1XX (sn9c102.ko module) to
       avoid any possible conflicts with the SN9CXXX.


13. Q: Does the 64-bit version of the SN9CXXX kernel driver work with
       32bit applications?
    A: Yes.


14. Q: I have installed the package and loaded the driver, but no video
       device appears at all.
    A: Make sure you have unloaded all the kernel modules conflicting with the
       "sn9cxxx" module, which are "sn9c102" and "gspca".
       If no video dev is appearing, it's likely that either your webcam is not
       supported  by the latest release of the driver (see messages from the
       kernel) or you have tried to force the installation, but things went wrong.
       DO NOT FORCE THE INSTALLATION/LOADING OF THE DRIVER, as your system might
       crash in the worst case. Remember that each package is specific for
       only one building environment (one Linux distribution, one kernel
       version 2.6.x.y-z, and one compiler, globally speaking)


15. Q: The image from my webcam is upside down. What can I do?
    A: It happens with some webcams. The SN9CXXX driver has a module parameter
       named "vflip". Try to load the driver with "vflip=1" to solve the problem.


16. Q: What are the features of the SN9CXXX driver?
    A: Some of the features of the driver are:
       - transparent and full compliance with both the Video4Linux1
         and Video4Linux2 API;
       - working with all the existing video applications under linux;
       - multiple opens;
       - available mmap or read/poll methods for video streaming;
       - automatic detection of image sensor;
       - support for built-in microphone interface;
       - support for any window resolutions and optional panning within
         the pixel area of the image sensor;
       - image downscaling with arbitrary scaling factors from 1, 2 and 4
         in both directions;
       - two different video formats for uncompressed or compressed video data
         in low or high compression quality;
       - full support for the capabilities of many of the possible image sensors
         that can be connected to the SN9Cxxx bridges, including, for instance,
         red, green, blue and global gain adjustments, exposure, etc..;
       - use of default color settings for sunlight conditions;
       - dynamic I/O interface for both SN9Cxxx and image sensor control and
         monitoring (only with source code);
       - dynamic driver control thanks to various module parameters;
       - up to 64 cameras can be handled at the same time;
       - no known bugs.

You may contact me for claryfing this FAQ, if necessary.