Vaio Picturebook Motion Eye Camera Driver Readme
------------------------------------------------
	Copyright (C) 2001-2004 Stelian Pop <stelian@popies.net>
	Copyright (C) 2001-2002 Alcôve <www.alcove.com>
	Copyright (C) 2000 Andrew Tridgell <tridge@samba.org>

This driver enable the use of video4linux compatible applications with the
Motion Eye camera. This driver requires the "Sony Laptop Extras" driver (which
can be found in the "Misc devices" section of the kernel configuration utility)
to be compiled and installed (using its "camera=1" parameter).

It can do at maximum 30 fps @ 320x240 or 15 fps @ 640x480.

Grabbing is supported in packed YUV colorspace only.

MJPEG hardware grabbing is supported via a private API (see below).

Hardware supported:
-------------------

This driver supports the 'second' version of the MotionEye camera :)

The first version was connected directly on the video bus of the Neomagic
video card and is unsupported.

The second one, made by Kawasaki Steel is fully supported by this
driver (PCI vendor/device is 0x136b/0xff01)

The third one, present in recent (more or less last year) Picturebooks
(C1M* models), is not supported. The manufacturer has given the specs
to the developers under a NDA (which allows the development of a GPL
driver however), but things are not moving very fast (see
http://r-engine.sourceforge.net/) (PCI vendor/device is 0x10cf/0x2011).

There is a forth model connected on the USB bus in TR1* Vaio laptops.
This camera is not supported at all by the current driver, in fact
little information if any is available for this camera
(USB vendor/device is 0x054c/0x0107).

Driver options:
---------------

Several options can be passed to the meye driver using the standard
module argument syntax (<param>=<value> when passing the option to the
module or meye.<param>=<value> on the kernel boot line when meye is
statically linked into the kernel). Those options are:

	forcev4l1:	force use of V4L1 API instead of V4L2

	gbuffers:	number of capture buffers, default is 2 (32 max)

	gbufsize:	size of each capture buffer, default is 614400

	video_nr:	video device to register (0 = /dev/video0, etc)

Module use:
-----------

In order to automatically load the meye module on use, you can put those lines
in your /etc/modprobe.conf file:

	alias char-major-81 videodev
	alias char-major-81-0 meye
	options meye gbuffers=32

Usage:
------

	xawtv >= 3.49 (<http://bytesex.org/xawtv/>)
		for display and uncompressed video capture:

			xawtv -c /dev/video0 -geometry 640x480
				or
			xawtv -c /dev/video0 -geometry 320x240

	motioneye (<http://popies.net/meye/>)
		for getting ppm or jpg snapshots, mjpeg video

Private API:
------------

	The driver supports frame grabbing with the video4linux API
	(either v4l1 or v4l2), so all video4linux tools (like xawtv)
	should work with this driver.

	Besides the video4linux interface, the driver has a private interface
	for accessing the Motion Eye extended parameters (camera sharpness,
	agc, video framerate), the shapshot and the MJPEG capture facilities.

	This interface consists of several ioctls (prototypes and structures
	can be found in include/linux/meye.h):

	MEYEIOC_G_PARAMS
	MEYEIOC_S_PARAMS
		Get and set the extended parameters of the motion eye camera.
		The user should always query the current parameters with
		MEYEIOC_G_PARAMS, change what he likes and then issue the
		MEYEIOC_S_PARAMS call (checking for -EINVAL). The extended
		parameters are described by the meye_params structure.


	MEYEIOC_QBUF_CAPT
		Queue a buffer for capture (the buffers must have been
		obtained with a VIDIOCGMBUF call and mmap'ed by the
		application). The argument to MEYEIOC_QBUF_CAPT is the
		buffer number to queue (or -1 to end capture). The first
		call to MEYEIOC_QBUF_CAPT starts the streaming capture.

	MEYEIOC_SYNC
		Takes as an argument the buffer number you want to sync.
		This ioctl blocks until the buffer is filled and ready
		for the application to use. It returns the buffer size.

	MEYEIOC_STILLCAPT
	MEYEIOC_STILLJCAPT
		Takes a snapshot in an uncompressed or compressed jpeg format.
		This ioctl blocks until the snapshot is done and returns (for
		jpeg snapshot) the size of the image. The image data is
		available from the first mmap'ed buffer.

	Look at the 'motioneye' application code for an actual example.

Bugs / Todo:
------------

	- the driver could be much cleaned up by removing the v4l1 support.
	  However, this means all v4l1-only applications will stop working.

	- 'motioneye' still uses the meye private v4l1 API extensions.
