linux/drivers/staging/easycap
Alexey Khoroshilov 22f88fcf40 staging/easycap: fix mismatch in easycap_poll() mutex lock-unlock
In case if condition (kd != isdongle(peasycap)) becomes true,
easycap_poll() returns without releasing easycapdc60_dongle[kd].mutex_video.
The patch adds mutex_unlock() before that return.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Acked-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
2011-08-29 11:20:11 -07:00
..
easycap_ioctl.c staging/easycap: Use memdup_user 2011-08-23 15:22:58 -07:00
easycap_low.c staging/easycap: reduce code duplication for ssa stk settings 2011-03-07 13:52:55 -08:00
easycap_main.c staging/easycap: fix mismatch in easycap_poll() mutex lock-unlock 2011-08-29 11:20:11 -07:00
easycap_settings.c staging/easycap: Fix bytesperline calculation 2011-07-05 10:26:16 -07:00
easycap_sound.c staging/easycap: remove oss support 2011-07-08 14:02:26 -07:00
easycap_testcard.c staging/easycap: convert comparison to NULL into boolean 2011-03-07 13:24:04 -08:00
easycap.h staging/easycap: remove oss support 2011-07-08 14:02:26 -07:00
Kconfig staging/easycap: remove oss support 2011-07-08 14:02:26 -07:00
Makefile staging/easycap: remove oss support 2011-07-08 14:02:26 -07:00
README staging/easycap: There is no need to support V4L1 ioctls 2011-07-05 10:26:16 -07:00

        ***********************************************************
        *   EasyCAP USB 2.0 Video Adapter with Audio, Model DC60  *
        *                            and                          *
        *             EasyCAP002 4-Channel USB 2.0 DVR            *
        ***********************************************************
                     Mike Thomas  <rmthomas@sciolus.org>



SUPPORTED HARDWARE
------------------

This driver is intended for use with hardware having USB ID 05e1:0408.
Two kinds of EasyCAP have this USB ID, namely:

    *  EasyCAP USB 2.0 Video Adapter with Audio, Model DC60,
       having input cables labelled CVBS, S-VIDEO, AUDIO(L), AUDIO(R)

    *  EasyCAP002 4-Channel USB 2.0 DVR, having input cables labelled
       1, 2, 3, 4 and an unlabelled input cable for a microphone.


BUILD OPTIONS AND DEPENDENCIES
------------------------------

Unless EASYCAP_DEBUG is defined during compilation it will not be possible
to select a debug level at the time of module installation.


KNOWN RUNTIME ISSUES
--------------------

(1) Intentionally, this driver will not stream material which is unambiguously
identified by the hardware as copy-protected.  Normal video output will be
present for about a minute but will then freeze when this situation arises.

(2) The controls for luminance, contrast, saturation, hue and volume may not
always work properly.

(3) Reduced-resolution S-Video seems to suffer from moire artefacts.


INPUT NUMBERING
---------------

For the EasyCAP with S-VIDEO input cable the driver regards a request for
inputs numbered 0 or 1 as referring to CVBS and a request for input
numbered 5 as referring to S-VIDEO.

For the EasyCAP with four CVBS inputs the driver expects to be asked for
any one of inputs numbered 1,2,3,4.  If input 0 is asked for, it is
interpreted as input 1.


MODULE PARAMETERS
-----------------

Three module parameters are defined:

debug      the easycap module is configured at diagnostic level n (0 to 9)
gain       audio gain level n (0 to 31, default is 16)
bars       whether to display testcard bars when incoming video signal is lost
           0 => no, 1 => yes (default)


SUPPORTED TV STANDARDS AND RESOLUTIONS
--------------------------------------

The following TV standards are natively supported by the hardware and are
usable as (for example) the "norm=" parameter in the mplayer command:

    PAL_BGHIN,    NTSC_N_443,
    PAL_Nc,       NTSC_N,
    SECAM,        NTSC_M,        NTSC_M_JP,
    PAL_60,       NTSC_443,
    PAL_M.

In addition, the driver offers "custom" pseudo-standards with a framerate
which is 20% of the usual framerate.  These pseudo-standards are named:

    PAL_BGHIN_SLOW,    NTSC_N_443_SLOW,
    PAL_Nc_SLOW,       NTSC_N_SLOW,
    SECAM_SLOW,        NTSC_M_SLOW,        NTSC_M_JP_SLOW,
    PAL_60_SLOW,       NTSC_443_SLOW,
    PAL_M_SLOW.


The available picture sizes are:

     at 25 frames per second:   720x576, 704x576, 640x480, 360x288, 320x240;
     at 30 frames per second:   720x480, 640x480, 360x240, 320x240.


WHAT'S TESTED AND WHAT'S NOT
----------------------------

This driver is known to work with mplayer, mencoder, tvtime, zoneminder,
xawtv, gstreamer and sufficiently recent versions of vlc.  An interface
to ffmpeg is implemented, but serious audio-video synchronization problems
remain.

The driver is designed to support all the TV standards accepted by the
hardware, but as yet it has actually been tested on only a few of these.

I have been unable to test and calibrate the S-video input myself because I
do not possess any equipment with S-video output.


UDEV RULES
----------

In order that the special files /dev/easycap0 and /dev/easysnd1 are created
with conveniently relaxed permissions when the EasyCAP is plugged in, a file
is preferably to be provided in directory /etc/udev/rules.d with content:

ACTION!="add|change", GOTO="easycap_rules_end"
ATTRS{idVendor}=="05e1", ATTRS{idProduct}=="0408", \
	MODE="0666", OWNER="root", GROUP="root"
LABEL="easycap_rules_end"


MODPROBE CONFIGURATION
----------------------

The easycap module is in competition with the module snd-usb-audio for the
EasyCAP's audio channel, and its installation can be aided by providing a
file in directory /etc/modprobe.d with content:

options easycap  gain=16 bars=1
install easycap /sbin/rmmod snd-usb-audio; /sbin/modprobe --ignore-install easycap


ACKNOWLEGEMENTS AND REFERENCES
------------------------------
This driver makes use of information contained in the Syntek Semicon DC-1125
Driver, presently maintained at http://sourceforge.net/projects/syntekdriver/
by Nicolas Vivien.  Particularly useful has been a patch to the latter driver
provided by Ivor Hewitt in January 2009.  The NTSC implementation is taken
from the work of Ben Trask.