This is a driver for the WIS GO7007SB multi-format video encoder.

Pete Eberlein <pete@sensoray.com>

The driver was originally released under the GPL and is currently hosted at:
http://nikosapi.org/wiki/index.php/WIS_Go7007_Linux_driver
The go7007 firmware can be acquired from the package on the site above.

I've modified the driver to support the following Video4Linux2 MPEG
controls, with acceptable values:

V4L2_CID_MPEG_STREAM_TYPE	V4L2_MPEG_STREAM_TYPE_MPEG2_DVD
				V4L2_MPEG_STREAM_TYPE_MPEG_ELEM
V4L2_CID_MPEG_VIDEO_ENCODING	V4L2_MPEG_VIDEO_ENCODING_MPEG_1
				V4L2_MPEG_VIDEO_ENCODING_MPEG_2
				V4L2_MPEG_VIDEO_ENCODING_MPEG_4
V4L2_CID_MPEG_VIDEO_ASPECT	V4L2_MPEG_VIDEO_ASPECT_1x1
				V4L2_MPEG_VIDEO_ASPECT_4x3
				V4L2_MPEG_VIDEO_ASPECT_16x9
V4L2_CID_MPEG_VIDEO_GOP_SIZE	integer
V4L2_CID_MPEG_VIDEO_BITRATE	64000 .. 10000000

These should be used instead of the non-standard GO7007 ioctls described
below.


The README files from the orignal package appear below:

---------------------------------------------------------------------------
		     WIS GO7007SB Public Linux Driver
---------------------------------------------------------------------------


*** Please see the file RELEASE-NOTES for important last-minute updates ***


  0. OVERVIEW AND LICENSING/DISCLAIMER


This driver kit contains Linux drivers for the WIS GO7007SB multi-format
video encoder.  Only kernel version 2.6.x is supported.  The video stream
is available through the Video4Linux2 API and the audio stream is available
through the ALSA API (or the OSS emulation layer of the ALSA system).

The files in kernel/ and hotplug/ are licensed under the GNU General Public
License Version 2 from the Free Software Foundation.  A copy of the license
is included in the file COPYING.

The example applications in apps/ and C header files in include/ are
licensed under a permissive license included in the source files which
allows copying, modification and redistribution for any purpose without
attribution.

The firmware files included in the firmware/ directory may be freely
redistributed only in conjunction with this document; but modification,
tampering and reverse engineering are prohibited.

MICRONAS USA, INC., MAKES NO WARRANTIES TO ANY PERSON OR ENTITY WITH
RESPECT TO THE SOFTWARE OR ANY DERIVATIVES THEREOF OR ANY SERVICES OR
LICENSES AND DISCLAIMS ALL IMPLIED WARRANTIES, INCLUDING WITHOUT LIMITATION
WARRANTIES OF MERCHANTABILITY, SUPPORT, AND FITNESS FOR A PARTICULAR
PURPOSE AND NON-INFRINGEMENT.


  1. SYSTEM REQUIREMENTS


This driver requires Linux kernel 2.6.  Kernel 2.4 is not supported.  Using
kernel 2.6.10 or later is recommended, as earlier kernels are known to have
unstable USB 2.0 support.

A fully built kernel source tree must be available.  Typically this will be
linked from "/lib/modules/<KERNEL VERSION>/build" for convenience.  If this
link does not exist, an extra parameter will need to be passed to the
`make` command.

All vendor-built kernels should already be configured properly.  However,
for custom-built kernels, the following options need to be enabled in the
kernel as built-in or modules:

	CONFIG_HOTPLUG           - Support for hot-pluggable devices
	CONFIG_MODULES           - Enable loadable module support
	CONFIG_KMOD              - Automatic kernel module loading
	CONFIG_FW_LOADER         - Hotplug firmware loading support
	CONFIG_I2C               - I2C support
	CONFIG_VIDEO_DEV         - Video For Linux
	CONFIG_SOUND             - Sound card support
	CONFIG_SND               - Advanced Linux Sound Architecture
	CONFIG_USB               - Support for Host-side USB
	CONFIG_USB_DEVICEFS      - USB device filesystem
	CONFIG_USB_EHCI_HCD      - EHCI HCD (USB 2.0) support

Additionally, to use the example application, the following options need to
be enabled in the ALSA section:

	CONFIG_SND_MIXER_OSS     - OSS Mixer API
	CONFIG_SND_PCM_OSS       - OSS PCM (digital audio) API

The hotplug scripts, along with the fxload utility, must also be installed.
These scripts can be obtained from <http://linux-hotplug.sourceforge.net/>.
Hotplugging is used for loading firmware into the Cypruss EZ-USB chip using
fxload and for loading firmware into the driver using the firmware agent.


  2. COMPILING AND INSTALLING THE DRIVER


Most users should be able to compile the driver by simply running:

	$ make

in the top-level directory of the driver kit.  First the kernel modules
will be built, followed by the example applications.

If the build system is unable to locate the kernel source tree for the
currently-running kernel, or if the module should be built for a kernel
other than the currently-running kernel, an additional parameter will need
to be passed to make to specify the appropriate kernel source directory:

	$ make KERNELSRC=/usr/src/linux-2.6.10-custom3

Once the compile completes, the driver and firmware files should be
installed by running:

	$ make install

The kernel modules will be placed in "/lib/modules/<KERNEL VERSION>/extra"
and the firmware files will be placed in the appropriate hotplug firmware
directory, usually /lib/firmware.  In addition, USB maps and scripts will
be placed in /etc/hotplug/usb to enable fxload to initialize the EZ-USB
control chip when the device is connected.


  3. PAL/SECAM TUNER CONFIGURATION (TV402U-EU only)


The PAL model of the Plextor ConvertX TV402U may require additional
configuration to correctly select the appropriate TV frequency band and
audio subchannel.

Users with a device other than the Plextor ConvertX TV402U-EU should skip
this section.

The wide variety of PAL TV systems used in Europe requires that additional
information about the local TV standards be passed to the driver in order
to properly tune TV channels.  The two necessary parameters are (a) the PAL
TV band, and (b) the audio subchannel format in use.

In many cases, the appropriate TV band selection is passed to the driver
from applications.  However, in some cases, the application only specifies
that the driver should use PAL but not the specific information about the
appropriate TV band.  To work around this issue, the correct TV band may be
specified in the "force_band" parameter to the wis-sony-tuner module:

     TV band           force_band
     -------           ----------
     PAL B/G                B
     PAL I                  I
     PAL D/K                D
     SECAM L                L

If the "force_band" parameter is specified, the driver will ignore any TV
band specified by applications and will always use the band provided in the
module parameter.

The other parameter that can be specified is the audio subchannel format.
There are several stereo audio carrier systems in use, including NICAM and
three varieties of A2.  To receive audio broadcast on one of these stereo
carriers, the "force_mpx_mode" parameter must be specified to the
wis-sony-tuner module.

     TV band           Audio subcarrier       force_mpx_mode
     -------           ----------------       --------------
     PAL B/G            Mono (default)               1
     PAL B/G                  A2                     2
     PAL B/G                 NICAM                   3
     PAL I              Mono (default)               4
     PAL I                   NICAM                   5
     PAL D/K            Mono (default)               6
     PAL D/K                 A2 (1)                  7
     PAL D/K                 A2 (2)                  8
     PAL D/K                 A2 (3)                  9
     PAL D/K                 NICAM                  10
     SECAM L            Mono (default)              11
     SECAM L                 NICAM                  12

If the "force_mpx_mode" parameter is not specified, the correct mono-only
mode will be chosen based on the TV band.  However, the tuner will not
receive stereo audio or bilingual broadcasts correctly.

To pass the "force_band" or "force_mpx_mode" parameters to the
wis-sony-tuner module, the following line must be added to the modprobe
configuration file, which varies from one Linux distribution to another.

     options wis-sony-tuner force_band=B force_mpx_mode=2

The above example would force the tuner to the PAL B/G TV band and receive
stereo audio broadcasts on the A2 carrier.

To verify that the configuration has been placed in the correct location,
execute:

	$ modprobe -c | grep wis-sony-tuner

If the configuration line appears, then modprobe will pass the parameters
correctly the next time the wis-sony-tuner module is loaded into the
kernel.


  4. TESTING THE DRIVER


Because few Linux applications are able to correctly capture from
Video4Linux2 devices with only compressed formats supported, the new driver
should be tested with the "gorecord" application in the apps/ directory.

First connect a video source to the device, such as a DVD player or VCR.
This will be captured to a file for testing the driver.  If an input source
is unavailable, a test file can still be captured, but the video will be
black and the audio will be silent.

This application will auto-detect the V4L2 and ALSA/OSS device names of the
hardware and will record video and audio to an AVI file for a specified
number of seconds.  For example:

	$ apps/gorecord -duration 60 capture.avi

If this application does not successfully record an AVI file, the error
messages produced by gorecord and recorded in the system log (usually in
/var/log/messages) should provide information to help resolve the problem.

Supplying no parameters to gorecord will cause it to probe the available
devices and exit.  Use the -help flag for usage information.


  5. USING THE DRIVER


The V4L2 device implemented by the driver provides a standard compressed
format API, within the following criteria:

  * Applications that only support the original Video4Linux1 API will not
    be able to communicate with this driver at all.

  * No raw video modes are supported, so applications like xawtv that
    expect only uncompressed video will not function.

  * Supported compression formats are: Motion-JPEG, MPEG1, MPEG2 and MPEG4.

  * MPEG video formats are delivered as Video Elementary Streams only.
    Program Stream (PS), Transport Stream (TS) and Packetized Elementary
    Stream (PES) formats are not supported.

  * Video parameters such as format and input port may not be changed while
    the encoder is active.

  * The audio capture device only functions when the video encoder is
    actively capturing video.  Attempts to read from the audio device when
    the encoder is inactive will result in an I/O error.

  * The native format of the audio device is 48Khz 2-channel 16-bit
    little-endian PCM, delivered through the ALSA system.  No audio
    compression is implemented in the hardware.  ALSA may convert to other
    uncompressed formats on the fly.

The include/ directory contains a C header file describing non-standard
features of the GO7007SB encoder, which are described below:


  GO7007IOC_S_COMP_PARAMS, GO7007IOC_G_COMP_PARAMS

    These ioctls are used to negotiate general compression parameters.

    To query the current parameters, call the GO7007IOC_G_COMP_PARAMS ioctl
    with a pointer to a struct go7007_comp_params.  If the driver is not
    set to MPEG format, the EINVAL error code will be returned.

    To change the current parameters, initialize all fields of a struct
    go7007_comp_params and call the GO7007_IOC_S_COMP_PARAMS ioctl with a
    pointer to this structure.  The driver will return the current
    parameters with any necessary changes to conform to the limitations of
    the hardware or current compression mode.  Any or all fields can be set
    to zero to request a reasonable default value.  If the driver is not
    set to MPEG format, the EINVAL error code will be returned.  When I/O
    is in progress, the EBUSY error code will be returned.

    Fields in struct go7007_comp_params:

	__u32                        The maximum number of frames in each
	  gop_size                   Group Of Pictures; i.e. the maximum
				     number of frames minus one between
				     each key frame.

	__u32                        The maximum number of sequential
	  max_b_frames               bidirectionally-predicted frames.
				     (B-frames are not yet supported.)

	enum go7007_aspect_ratio     The aspect ratio to be encoded in the
	  aspect_ratio               meta-data of the compressed format.

				     Choices are:
					GO7007_ASPECT_RATIO_1_1
					GO7007_ASPECT_RATIO_4_3_NTSC
					GO7007_ASPECT_RATIO_4_3_PAL
					GO7007_ASPECT_RATIO_16_9_NTSC
					GO7007_ASPECT_RATIO_16_9_PAL

	__u32                        Bit-wise OR of control flags (below)
	  flags

    Flags in struct go7007_comp_params:

	GO7007_COMP_CLOSED_GOP       Only produce self-contained GOPs, used
				     to produce streams appropriate for
				     random seeking.

	GO7007_COMP_OMIT_SEQ_HEADER  Omit the stream sequence header.


  GO7007IOC_S_MPEG_PARAMS, GO7007IOC_G_MPEG_PARAMS

    These ioctls are used to negotiate MPEG-specific stream parameters when
    the pixelformat has been set to V4L2_PIX_FMT_MPEG.

    To query the current parameters, call the GO7007IOC_G_MPEG_PARAMS ioctl
    with a pointer to a struct go7007_mpeg_params.  If the driver is not
    set to MPEG format, the EINVAL error code will be returned.

    To change the current parameters, initialize all fields of a struct
    go7007_mpeg_params and call the GO7007_IOC_S_MPEG_PARAMS ioctl with a
    pointer to this structure.  The driver will return the current
    parameters with any necessary changes to conform to the limitations of
    the hardware or selected MPEG mode.  Any or all fields can be set to
    zero to request a reasonable default value.  If the driver is not set
    to MPEG format, the EINVAL error code will be returned.  When I/O is in
    progress, the EBUSY error code will be returned.

    Fields in struct go7007_mpeg_params:

	enum go7007_mpeg_video_standard
	  mpeg_video_standard        The MPEG video standard in which to
				     compress the video.

				     Choices are:
					GO7007_MPEG_VIDEO_MPEG1
					GO7007_MPEG_VIDEO_MPEG2
					GO7007_MPEG_VIDEO_MPEG4

	__u32                        Bit-wise OR of control flags (below)
	  flags

	__u32                        The profile and level indication to be
	  pali                       stored in the sequence header.  This
				     is only used as an indicator to the
				     decoder, and does not affect the MPEG
				     features used in the video stream.
				     Not valid for MPEG1.

				     Choices for MPEG2 are:
					GO7007_MPEG2_PROFILE_MAIN_MAIN

				     Choices for MPEG4 are:
					GO7007_MPEG4_PROFILE_S_L0
					GO7007_MPEG4_PROFILE_S_L1
					GO7007_MPEG4_PROFILE_S_L2
					GO7007_MPEG4_PROFILE_S_L3
					GO7007_MPEG4_PROFILE_ARTS_L1
					GO7007_MPEG4_PROFILE_ARTS_L2
					GO7007_MPEG4_PROFILE_ARTS_L3
					GO7007_MPEG4_PROFILE_ARTS_L4
					GO7007_MPEG4_PROFILE_AS_L0
					GO7007_MPEG4_PROFILE_AS_L1
					GO7007_MPEG4_PROFILE_AS_L2
					GO7007_MPEG4_PROFILE_AS_L3
					GO7007_MPEG4_PROFILE_AS_L4
					GO7007_MPEG4_PROFILE_AS_L5

    Flags in struct go7007_mpeg_params:

	GO7007_MPEG_FORCE_DVD_MODE   Force all compression parameters and
				     bitrate control settings to comply
				     with DVD MPEG2 stream requirements.
				     This overrides most compression and
				     bitrate settings!

	GO7007_MPEG_OMIT_GOP_HEADER  Omit the GOP header.

	GO7007_MPEG_REPEAT_SEQHEADER Repeat the MPEG sequence header at
				     the start of each GOP.


  GO7007IOC_S_BITRATE, GO7007IOC_G_BITRATE

    These ioctls are used to set and query the target bitrate value for the
    compressed video stream.  The bitrate may be selected by storing the
    target bits per second in an int and calling GO7007IOC_S_BITRATE with a
    pointer to the int.  The bitrate may be queried by calling
    GO7007IOC_G_BITRATE with a pointer to an int where the current bitrate
    will be stored.

    Note that this is the primary means of controlling the video quality
    for all compression modes, including V4L2_PIX_FMT_MJPEG.  The
    VIDIOC_S_JPEGCOMP ioctl is not supported.


----------------------------------------------------------------------------
		   Installing the WIS PCI Voyager Driver
---------------------------------------------------------------------------

The WIS PCI Voyager driver requires several patches to the Linux 2.6.11.x
kernel source tree before compiling the driver.  These patches update the
in-kernel SAA7134 driver to the newest development version and patch bugs
in the TDA8290/TDA8275 tuner driver.

The following patches must be downloaded from Gerd Knorr's website and
applied in the order listed:

	http://dl.bytesex.org/patches/2.6.11-2/i2c-tuner
	http://dl.bytesex.org/patches/2.6.11-2/i2c-tuner2
	http://dl.bytesex.org/patches/2.6.11-2/v4l2-api-mpeg
	http://dl.bytesex.org/patches/2.6.11-2/saa7134-update

The following patches are included with this SDK and can be applied in any
order:

	patches/2.6.11/saa7134-voyager.diff
	patches/2.6.11/tda8275-newaddr.diff
	patches/2.6.11/tda8290-ntsc.diff

Check to make sure the CONFIG_VIDEO_SAA7134 option is enabled in the kernel
configuration, and build and install the kernel.

After rebooting into the new kernel, the GO7007 driver can be compiled and
installed:

	$ make SAA7134_BUILD=y
	$ make install
	$ modprobe saa7134-go7007

There will be two V4L video devices associated with the PCI Voyager.  The
first device (most likely /dev/video0) provides access to the raw video
capture mode of the SAA7133 device and is used to configure the source
video parameters and tune the TV tuner.  This device can be used with xawtv
or other V4L(2) video software as a standard uncompressed device.

The second device (most likely /dev/video1) provides access to the
compression functions of the GO7007.  It can be tested using the gorecord
application in the apps/ directory of this SDK:

	$ apps/gorecord -vdevice /dev/video1 -noaudio test.avi

Currently the frame resolution is fixed at 720x480 (NTSC) or 720x576 (PAL),
and the video standard must be specified to both the raw and the compressed
video devices (xawtv and gorecord, for example).


--------------------------------------------------------------------------
RELEASE NOTES FOR WIS GO7007SB LINUX DRIVER
---------------------------------------------------------------------------

Last updated: 5 November 2005

 - Release 0.9.7 includes new support for using udev to run fxload.  The
   install script should automatically detect whether the old hotplug
   scripts or the new udev rules should be used.  To force the use of
   hotplug, run "make install USE_UDEV=n".  To force the use of udev, run
   "make install USE_UDEV=y".

 - Motion detection is supported but undocumented.  Try the `modet` app
   for a demonstration of how to use the facility.

 - Using USB2.0 devices such as the TV402U with USB1.1 HCDs or hubs can
   cause buffer overruns and frame drops, even at low framerates, due to
   inconsistency in the bitrate control mechanism.

 - On devices with an SAA7115, including the Plextor ConvertX, video height
   values of 96, 128, 160, 192, 256, 320, and 384 do not work in NTSC mode.
   All valid heights up to 512 work correctly in PAL mode.

 - The WIS Star Trek and PCI Voyager boards have no support yet for audio
   or the TV tuner.
