vdr/xine-lib-vdr/doc Makefile.am Makefile.in README README.dvb README.dxr3 README.freebsd README.irix README.network_dvd README.opengl README.solaris README.syncfb README_xxmc.html

Darren Salt pkg-vdr-dvb-changes@lists.alioth.debian.org
Mon, 04 Apr 2005 22:29:13 +0000


Update of /cvsroot/pkg-vdr-dvb/vdr/xine-lib-vdr/doc
In directory haydn:/tmp/cvs-serv2129/doc

Added Files:
	Makefile.am Makefile.in README README.dvb README.dxr3 
	README.freebsd README.irix README.network_dvd README.opengl 
	README.solaris README.syncfb README_xxmc.html 
Log Message:
Import of VDR-patched xine-lib.

--- NEW FILE: README.dxr3 ---

   ----------------------
            xine
   ----------------------

     a free video player


Introduction
============

This documentation is intended for users of a dxr3 decoder card
from creative labs or a hollywood plus decoder card from sigma
designs.

This version of xine contains a plugin for the mentioned hardware
decoders "out of the box". The missing part is the linux kernel
driver. The driver can be obtained from the main dxr3/hw+ linux
development site at

	http://dxr3.sourceforge.net/

The various release formats (tarball, RPMs) are listed on

	http://dxr3.sourceforge.net/download.html

As setting up the dxr3/hw+ driver is a little bit tricky, please
consult also the HOWTO:

	http://dxr3.sourceforge.net/howto.html

The xine dxr3 plugin requires at least the version
em8300-0.8.1 of the linux drivers.

Additional information on using xine with the dxr3 and on how to
setup the kernel module along with precompiled RPMs can be found
here:
	http://www.amalthea.de/xine/


XINE dxr3 plugin
=================

There are two different ways in which xine can make use of the dxr3 
card.

1. mpeg-1/mpeg-2 (DVD, VCD, ...) decoding and displaying. 

This is the normal use.  Instead of doing the mpeg decoding in
software, xine sets up the display (TV or overlay) and sends the mpeg
data via the kernel driver to the mpeg decoder on the dxr3 card, very
much like the Windows player that you problably got with the card. In
this mode, you should be using the dxr3 video decoder plugin together
with the dxr3 video out plugin. 

Xine should select the dxr3 video decoder plugin automatically when it
encounters an mpeg stream, but it is possible it does not use the dxr3
video out plugin by default. In that case, start xine with the 
"-V dxr3" argument to specify the dxr3 video out plugin. If you use
another video out driver, such as Xv or XShm, xine won't be able
to use the mpeg decoding capability of the dxr3 hardware and will
use libmpeg2 instead. 

Here's a short overview what happens when you play a dvd with xine
using the dxr3 video out driver:

DVD -> split mpeg video and audio and audio streams 
-> send mpeg video to dxr3 -> image appears on screen

2. displaying non-mpeg video on dxr3 hardware. 

Non-mpeg video may be AVI, quicktime, windows media files or whatever 
else xine can decode. 

This option must be compiled in and requires a supported mpeg encoder. 
At the moment there are three:
- libavcodec from xine-lib's ffmpeg plugin (good quality, quite fast)
- libfame from fame.sourceforge.net (very fast, good quality)
  (currently the 0.9 versions of libfame don't work, use the 0.8 versions)
- librte (version 0.4) from zapping.sourceforge.net (fast, very good quality)
If configure finds one or both it will compile in encoding support into
the dxr3 driver. 

In order to use this driver for output instead of, say, Xv, just start
xine with the command line option "-V dxr3", for example
% xine -V dxr3 my_movie.avi

Unlike in case 1), where the card does the video decoding, in this
case Xine does the decoding in software, as usual, and sends the
decompressed image to the video out driver.  The dxr3 video out
driver encodes, in real time, this image as an mpeg-1 intra frame and
sends it to the mpeg decoder on the card.

Using this trick, we can display arbitrary video formats via the
tv out port of the dxr3 card. Nifty huh? The only downside is that
it requires extra computational power, because we have to both
decode the original video and encode to mpeg-1 in software. The
cpu power needed depends of course on the resolution and the source
format, but as a rule of thumb it is recommended to do this on a
system with at least 128 MB of RAM and a P-III/Athlon at 800 MHz.

Here's an overview what happens when you play an AVI this way
(compare this with the previous overview!)

-> split video and audio streams -> decode video stream 
-> encode video as mpeg-1 -> send mpeg-1 stream to dxr3
-> image appears on screen


XINE configuration
==================

The dxr3 video driver can be forced using the "-V dxr3"
command line option. Only the tvmode value has to be edited
if the default driver setting is not correct. Of course you can also
use xine-ui's setup dialog to edit your configuration. Have a look
at the DXR3 section of the configuration.

Here are some additional settings interesting for the DXR3:

video.driver:
	dxr3	The dxr3 video driver does all the necessary card setup
		and the mpeg encoding when playing non-mpeg video.
		(see above)

audio.driver:
	oss	The em8300 audio output is available as an usual
		OSS device. Therefore the audio driver must be
		set to oss. Can also be specified using "-A oss"
		on the command line.

audio.device.oss_device_number:
	0-16	Machines with a dxr3 installed often have a usual
		soundcard too. If audio playback occurs on the
		wrong device, the demanded device can be set using
		this option.

engine.decoder_priorities.dxr3-mpeg2:
	10	Priority of the dxr3 video decoder plugin. <5 means
		that hardware decoding by the card will be disabled
		and libmpeg2 will be used instead. Therefore all video
		material including mpeg will pass the software
		decoding and mpeg re-encoding stages.
		(see also above explanation of the encoding mode)


Zooming Feature (TVout Only)
============================
Pressing the 'z' key enables another tv-only mode which zooms into the 
centre of a 16:9 video to display much smaller (or none) black bars 
top & bottom.  It crops the video on the left and right sides to 
maintain the correct aspect ratio. Use SHIFT-z to disable.


TV mode Cycling Feature
======================
Pressing CTRL-o repeatedly will allow you to cycle between tv modes PAL, 
PAL60, & NTSC.  The format selected will only remain valid for the 
current xine session, on startup the tv mode will revert to the default
in .xine/config


VGA overlay feature
===================

In previous versions of xine support, one had to use dxr3view in order
to use the em8300 overlay mechanism. Now, since the xine 0.5 version,
it is possible to output the em8300 overlay directly in the video
out window. 

In order to activate it, "dxr3.output.mode" must be set to "overlay".
But it won't work until the old dxr3view works too (just a check). Before
a first use, "autocal" has to be run. This will store the right overlay
parameters in "~/.overlay". For more information, please consult the
dxr3 howto too.

As of version 0.9.5, you can now switch between overlay and tv-out modes 
on-the-fly, simply by hiding the video_out window ('h' key by default, 
see the README file).  If you want to start xine with video on the tv, 
you can run xine with the -H option to auto-hide the vo window, instead 
of changing the configuration (although you can still do that instead if you 
prefer, of course).

Have a look at the previous explained configuration options dxr3.output.keycolor
and dxr3.output.keycolor_interval too.


--- 
version of this file:
 $Id: README.dxr3,v 1.1 2005/04/04 22:29:11 dsalt-guest Exp $

--- NEW FILE: README.irix ---
building xine on IRIX
---------------------

* Choose gcc for compilation during configure,
  e.g. 'env CC=gcc ./configure'

* Compile xine with GNU make (gmake).


Known Problems
--------------

* Cannot compile with IRIX cc

  This is an unresolved issue with automake and dependencies.
  Not likely to be fixed soon.

* xine only opens a 16 bit visual and looks ugly

  This is done intentionally (speedup on most architectures).
  Choose an appropriate visual (with xdpyinfo) and select it
  e.g. with 'xine --visual 0x33'.

* Scaling is slow

  Choose the opengl plugin instead of the xshm plugin.
  However, this plugin is still highly experimental, expect
  some crashes, and read README.opengl


Matthias Hopf <mat@mshopf.de>

--- NEW FILE: README ---
xine-lib/doc/README

This directory contains documentation for xine-lib (the xine engine).
Parts of this documentation are targeted towards end-users, other parts
toward developers.

Some frontends (e.g. xine-ui) may come with additional, frontend-specific
documentation. The documents in this directory try to talk about xine
engine features common to all frontends.

faq/
  contains the xine engine FAQ

hackersguide/
  contains the xine hacker's guide for developers

man/
  contains some general manpages about xine-lib

README.dvb
  instructions on how to get DVB (DigitalTV) working in xine

README.dxr3
  instructions on how to get use the DXR3 (hollywood+) in xine

README.freebsd
  hints on running xine on FreeBSD

README.irix
  hints on running xine on IRIX

README.network_dvd
  how to play DVDs / Audio CDs over the network

README.opengl
  how to use xine's OpenGL video output

README.solaris
  hints on running xine on Solaris

README.syncfb
  information about xine's SyncFB video output plugin

--- NEW FILE: README.freebsd ---

   ----------------------
            xine
   ----------------------

     a free video player



This document contains FreeBSD related information about xine


xine fails when allocating images
---------------------------------

Make sure you have enough shared memory enabled. This is very
limited by default.

Edit your /etc/sysctl.conf:

kern.ipc.shmmax=67108864
kern.ipc.shmall=32768


mtrr on freebsd
---------------

setting up the caching behaviour of the memory on the graphics board.

what is being done with the mtrr support on linux is to set the caching
type of the memory of the graphics board to 'write-combine' mode.
that way the performance of big writes into this memory should be faster.

it seems that the same can be achieved on freebsd by executing:

  memcontrol set -b <base-address> -l <length> write-combine

for example on my system i executed:

  memcontrol set -n 0xd8000000 -l 0x02000000 write-combine

i got the base-adress by executing 'startx' and looking at the output.

it seems to be dangerous to change the cache setting of the graphics memory
while xfree is running - at least i managed to have my system freeze that
way. so better do it on the commandline.

this tip is still subject of research, so it might be incorrect - please
report any further information on this topic to the xine-user list.
please also report success or non-success on xine-user if you have the time.


playing video cd on freebsd
---------------------------

currently (because of issues with the freebsd kernel) xine can only
play video cd from atapi cdrom drives. not for scsi drives!

currently (Jan 2001), FreeBSD-stable (and thus the current releases also)
needs a patch to the kernel sources to make video cd work (please check
the freebsd documentation if you are unsure on how to build a custom
kernel with this patch included).

the file you have to patch is /sys/dev/ata/atapi-cd.c:

*** atapi-cd.c.orig     Sun Jan 21 14:42:57 2001
--- atapi-cd.c  Sun Jan 21 14:47:13 2001
***************
*** 1163,1174 ****
                return;
            }
        }
!       if (blocksize == 2048)
!           ccb[0] = ATAPI_READ_BIG;
!       else {
!           ccb[0] = ATAPI_READ_CD;
!           ccb[9] = 0x10;
!       }
      }
      else
        ccb[0] = ATAPI_WRITE_BIG;
--- 1163,1182 ----
                return;
            }
        }
!         switch (blocksize) {
!         case 2048:
!             ccb[0] = ATAPI_READ_BIG;
!             break;
! 
!         case 2352: 
!             ccb[0] = ATAPI_READ_CD;
!             ccb[9] = 0xf8;
!             break;
! 
!         default:
!             ccb[0] = ATAPI_READ_CD;
!             ccb[9] = 0x10;
!         }
      }
      else
        ccb[0] = ATAPI_WRITE_BIG;

------------------------------------------------------------------------



--- 
version of this file:
 $Id: README.freebsd,v 1.1 2005/04/04 22:29:11 dsalt-guest Exp $

--- NEW FILE: README.dvb ---

xine Digital TV (DVB)
=====================

xine can be used to watch digital television.

xine supports Digital TV (Digital Video Broadcasting - DVB) cards
using the Linux DVB driver from Convergence (http://www.linuxtv.org).
DVB-S (direct satellite reception), DVB-C (Cable) and DVB-T (Teresstrical)
cards should be supported (e.g. the Hauppauge WinTV Nova DVB-S card).

driver download and installation
--------------------------------

Download and install the drivers from http://www.linuxtv.org, the 1.0.0 or later release
should work fine. 

You will need kernel sources configured for your configuration for 
a successfull build, preferably in /usr/src/linux plus a link to them in
/lib/modules/<kernel-version>/build. Once you have that you should be ready 
to compile the driver

# cd linuxtv-dvb-1.0.0/driver
# make

if that doesn't fail, do a

# make insmod

UPDATE: the latest 2.6 kernels include the necessary drivers for most 
  cards, check on the linuxtv.org website for information about supported 
  cards, or read the documentation available in the linux kernel
  sources (linux/Documentation/dvb/*).

to load the generated modules into your running kernel. If everything went
fine, you should have something like

DVB: registering new adapter (TT-Budget/WinTV-NOVA-S  PCI).
PCI: Found IRQ 10 for device 00:0d.0
PCI: Sharing IRQ 10 with 00:0c.0
DVB: registering frontend 0:0 (stv0299 based (e.g. Alps BSRU6 or LG TDQB-S00x))...

in your dmesg.


install a channel list
----------------------

xine's dvb input plugin needs a channel/transponder list that fits your 
dvb equipment. xine now uses the channels.conf format of szap, czap and 
tzap as appropriate for DVB-S, DVB-C and DVB-T. it will search the channel
list file in ~/.xine/channels.conf

channel list format for DVB-S: (satellite)
-------------------------------------------
NBC         :11053   :h  :1        :27500      :550 :551 :1  :8008
station name:freqency:h/v:sat no   :symbol rate:vpid:apid:sid:????
-------------------------------------------

channel list format for DVB-T (terrestrial):
-------------------------------------------
WINSA	    :557500000:INVERSION_AUTO:BANDWIDTH_7_MHZ:FEC_2_3:FEC_AUTO:QAM_64: \
		   TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_8:HIERARCHY_NONE :33  :36  :1
station name:frequency:config options go on seemingly forever ...         :vpid:apid:serviceid
-------------------------------------------

you automatically scan for all available channels using the scan utility
which comes with the dvb package. compile it using something like

# cd linuxtv-dvb-1.0.0/apps/scan
# make

then start scanning

# scan >~/.xine/channels.conf

newer versions of scan (after July 2004) are called dvbscan, but you can use it much the same way:

# dvbscan Hotbird-13.0 >~/.xine/channels.conf

this can take a while. in a DiSEqC environment, use the -s N switch to select
different sattelites to scan and paste the results in one big channels.conf file.  As always,
please be sure to read the man page for the version of the tool you are using.

HINT 1: you might want to manually sort the channels.conf file to have your favourite
        channels at the top and maybe remove scrambled channels which you don't have access to. 


 ************************ If the dvb plugin doesn't seem to work for you ******************
*  if xine doesn't seem to work for you, double check to make sure that the channels.conf  *
*  file is _NOT_ in vdr format, which looks something like this:                           *
*                 WINSA:557500:I999B7C23D0M64T8G8Y0:T:27500:33:36:47:0:1:0:0:0             *
 ******************************************************************************************	

using xine to watch digital television
--------------------------------------

make sure you have a recent libxine and frontend installed (latest CVS as of 
this writing). then simply start something like

$ gxine dvb://

or click on the DVB button in xine-ui.  you should be able to zap around using 
the NumPad-9 / NumPad-3 keys, the xine playlist, or using the next/previous chapter 
buttons in your gui.

An OSD menu is available too. Press NumPad-8 / NumPad-2 to scroll 
through the channels, then press NumPad-Enter to switch to the channel
you have selected.  As of 06-12-2004, the channel list can be brought up and scrolled 
through via the wheel on many mouses.  Use the left mouse button to switch to
the channel you've selected.  The side buttons (6 & 7) can be used to rapidly switch
to previous/next channels, if they are available on your mouse.

You can use MENU3 (F2 in xine-ui, F3 in gxine) to zoom into the centre of a videostream.
This will allow you to view 4:3 content that has been embedded into a 
16:9 stream in fullscreen (no more black borders).  Press the key again
to return to normal viewing.  There is also an option in the xine
preferences to zoom automatically when using xine to view DVB.

MENU7 (F6 in xine-ui or F7 in gxine) will toggle viewing of the current channels' 
Electronic Program Guide (information on the current/next program) on the OSD, if available.

HINT: if audio or video is stuttering, pause (space key) shortly
to give xine a chance to fill up it's buffers.  If watching a large HDTV stream, you
may need to increase the xine video & audio buffer size - increasing audio buffers to
300 and video buffers to 700 has been known to work with streams up to 1920x1088 in size.


recording digital television
----------------------------

there is a very simple vcr-like feature built into the xine engine. just press
MENU2 (that is F2 in gxine, or F1 in xine-ui for example) to start/stop recording 
the currently displayed program to your local disc. a small osd in the upper 
left corner of your screen will tell you the file name the recorded stream is 
written to.  You can select the directory to save to in the xine configuration under 
the MISC tab, otherwise the plugin will record to your home directory.  You can
pause the recording at any time by pressing MENU4 (F3 in xine-ui, F4 in gxine).  
An OSD in the top left hand corner will notify you of the status of the recording. 
Pressing MENU4 again will resume recording.

Have fun.


--- NEW FILE: README.solaris ---

   ----------------------
            xine
   ----------------------

     a free video player


building xine on solaris
------------------------

* The preferred make command to compile xine is GNU make (gmake,
  /opt/sfw/bin/gmake).

  Sun's make (/usr/ccs/bin/make, or dmake) may work, too.


* On Solaris x86: When xine-lib code is build using GCC as the compiler,
  xine-lib tries to use MMX/SSE/3DNOW! instructions of x86 CPUs, which
  may not assemble using Solaris' /usr/ccs/bin/as.

  Make sure to use the GNU assembler as the assembler backend for the
  GNU C compiler and as a standalone assembler command.

  A quick workaround when using the GCC from Sun's
  "Software Companion" CD is to replace /usr/ccs/bin/as with a 
  link to GNU as,  for example like this:

    cd /usr/ccs/bin
    ln -s /opt/sfw/bin/gas gnu-as
    mv as sun-as
    ln -s gnu-as as
    
  (Use "ln -s gnu-as as" or "ln -s sun-as as" to switch between the
  two assemblers)


* To get VIS accelerated video decoding and colour space conversion 
  on Solaris SPARC with an UltraSPARC cpu, download and install Sun's
  mediaLib 2.0 before compiling xine. mediaLib is available here:

    http://www.sun.com/sparc/vis/mediaLib.html


Known Problems
--------------

* Can't use MIT shared memory for local video display

  The default value for the maximum allowed shared memory segment size
  (1MByte) and the number of allowed shared memory segments (6)
  is very small on solaris.  You may want to increase both parameters.
  Add the following lines to /etc/system to increase the shmmax parameter
  to 8MBytes and the shmseg parameter to at least 32 [*]:

	set shmsys:shminfo_shmmax=8388608
	set shmsys:shminfo_shmseg=32

  Reboot the machine after modifying /etc/system to activate the new
  shared memory defaults.

  [*] Note: 15 shared memory segments is the minimum requirement for
      xine's "XShm" video output plugin; 32 gives a bit of extra room
      for other applications.  The GUI frontend might need more
      shared memory segments, see below.


* Warnings from xine-ui, when playlist / control / mrl browser panel
  is opened (and broken skin image elements in these panels):

	xiTK WARNING: X error received: 'BadShmSeg (invalid shared
		segment parameter)'
	xiTK WARNING: X error received: 'BadAccess (attempt to access
		private resource denied)'
	xiTK WARNING: XShmAttach() failed.

  xine-ui tries to use even more shared memory segments for skin
  images.


  Workaround:  The problem can be avoided with one of

  - create a text file $HOME/.xitkrc (or /etc/xitkrc) and add the
    following line into it

      feature.shm = 0

  - configure and build xine-ui with option "--disable-shm" or
    "--disable-shm-default"

  - increase shmsys:shminfo_shmseg to at least 768


* When using an 8-bit display, xine aborts with the error message:

	IMLIB ERROR: Cannot Find Palette. A Palette is required for this mode
	Unable to initialize Imlib

  xine expects an installed Imlib package, installed using the "prefix" /
  xine is looking for the global Imlib config file in /etc/imrc.

  If you have the solaris 8 companion CD installed, an Imlib package is
  already installed on your system, but it uses the "prefix" /opt/sfw.
  
  To work around the problem:
  
  - install a symbolic link /etc/imrc, pointing to /opt/sfw/etc/imrc
    (needs root permission)

	# ln -s /opt/sfw/etc/imrc /etc

  or 

  - install an ".imrc" file in your home directory,
    with the following contents:

	PaletteFile     /opt/sfw/etc/im_palette.pal


* On Solaris x86, you cannot reliably play DVDs using a capacity >4GB:

  The sd(7D) driver on solaris x86 has a bug when accessing a disk
  block >4GB on a device using a logical blocksize != DEV_BSIZE (i.e.
  CDROM and DVD media).  Due to a 32bit int overflow, a disk address
  modulo 4GB is accessed.
  
  There's no workaround available.

  See the following message for more details about this bug:

	http://groups.yahoo.com/group/solarisonintel/message/22516


--- 
version of this file:
 $Id: README.solaris,v 1.1 2005/04/04 22:29:11 dsalt-guest Exp $

--- NEW FILE: README.opengl ---
Startup
-------

Start xine with '-V opengl'.  Note that xine might choose a visual with a
different color depth than you would prefer.  Choose an appropriate visual
with 'glxinfo' and select it with '-V opengl --visual xyz' in this case.


Problems you might encounter
----------------------------

* Output is extremely slow

  Run 'glxinfo' and check the third output line saying 'direct rendering:'
  If it doesn't say 'Yes', you are not running an accelerated OpenGL setup.
  Check your installation.
  Image_Pipeline based rendering is typically slower than 2D_Textures.
  Note that OpenGL output is always slower than XVideo, and often faster
  than X shared memory.

* xine complains about a memory leak

  This is known and - unfortunately - cannot be solved without changing
  the user interface code. This will happen at least for xine-ui in the
  near future.
  Background: The output plugin does not get notified, when the XWindow
  is destroyed, and the OpenGL context can only be destroyed while the
  drawable is still accessible.


Known issues
------------

* GL_BGRA (used on little endian machines, i.e. ix86) needs an extension
  check. This has not been implemented yet.
* Big endian machines have not been checked yet.
* VO_CAP_UNSCALED_OVERLAY reduces performance a lot during the first few
  frames.
* Cropping is not yet implemented - this is done by video_out.c
* XINE_GUI_SEND_WILL_DESTROY_DRAWABLE not yet sent by any GUI, thus untested


Matthias Hopf <mat@mshopf.de>

--- NEW FILE: Makefile.am ---
include $(top_srcdir)/misc/Makefile.common

SUBDIRS = man hackersguide faq

docs_DATA = README README.dvb README.dxr3 \
	    README.freebsd README.irix README.network_dvd README.opengl \
	    README.solaris README.syncfb README_xxmc.html

EXTRA_DIST = $(docs_DATA)

docsdir = $(prefix)/share/doc/xine

docs clean-docs:
	@cd faq && $(MAKE) $@
	@cd hackersguide && $(MAKE) $@

--- NEW FILE: README.network_dvd ---

Playing DVDs / Audio CDs over the network
=========================================

xine can be used to play DVDs and Audio CDs over the network.

ok, but.... why?

there are some reasons people want to do that:

- because you may have a 200 discs DVD changer on your garage and you
  want to watch them on your room.

- because you don't want to have a lousy cdrom driver around when
  listening to your favorite music.

- because the computer that is hooked to the TV doesn't have a dvdrom.

- because you can :)


network block devices
---------------------

yes, network block device (nbd) could be an option for that. however:

- they don't support ioctls which are needed for cd audio playback and
dvd key exchange. (obs: one may write a custom ioctl code for enbd)

- a completely user space solution is more portable.

- the user space solution can handle failures more gratefuly and gives
better control of closing/opening the device.


installation for audio cds
--------------------------

- you must compile the cdda_server.c that comes with xine-lib sources:

  xine-lib$ cd misc
  xine-lib/misc$ make cdda_server
  gcc -W -Wall -g -o cdda_server cdda_server.c -ldl

  Your xine-lib source tree needs to be configured for that, so please
  run ./configure in the toplevel sourcedir on a fresh tree.

- start cdda_server at the machine that has the cdrom drive:

  xine-lib/misc$ ./cdda_server /dev/cdrom 3000

  note: 3000 is the port number to listen.

- start xine on the client machine with:

  $ xine cdda://server_address:3000/1

  that will play the first track of the CD. in order to use the
  GUI button for "CD" you have to change the setting media.audio_cd.device
  to point to the server.


installation for dvds
---------------------

- compile and run cdda_server (see above).

  note: you may also need to install libdvdcss or some equivalent
  library on your server.

- patch libdvdcss on the client.

  note: no CSS code is needed at all, so it would be possible to use a
  kind of "dummy" dvd library that is API compatible with libdvdcss.

  a sample patch is provided for libdvdcss-1.2.6, install it as follow:

  libdvdcss-1.2.6$ patch -p1 < ../xine-lib/misc/libdvdcss-1.2.6-network.patch
  libdvdcss-1.2.6$ ./bootstrap
  libdvdcss-1.2.6$ make
  libdvdcss-1.2.6$ make install

- start xine on the client machine with:

  $ xine dvd://server_address:3000/

  (don't forget the trailing slash)

  
protocol details
----------------

the network protocol is pretty simple. it consists of text-based commands
and replies over a TCP stream.

command format:

  <command> <arg0> <arg1> <arg2> ... \n

reply format:

  <error code> <n> <value0> <value1> ... \n
  followed by n bytes of binary data (like cd or dvd sectors)

cdda commands:

  cdda_open
  <error code> 0

  cdda_read <start_frame> <num_frames>
  <error code> <n>
  <n bytes (frames)>
  
  cdda_tochdr
  <error code> 0 <first_track> <last_track>

  cdda_tocentry
  <error code> 0 <track_mode> <first_frame_min> <first_frame_sec> <first_frame_frame>
  
dvd commands:

  dvd_open
  <error code> 0

  dvd_error
  <error code> <n>
  <n bytes (error string)>

  dvd_read <blocks> <flags>
  <error code> <n>
  <n bytes (blocks)>

  dvd_seek <block> <flags>
  <error code> 0

  dvd_title <block>
  <error code> 0

---
version of this file:
 $Id: README.network_dvd,v 1.1 2005/04/04 22:29:11 dsalt-guest Exp $

--- NEW FILE: Makefile.in ---
# Makefile.in generated by automake 1.9.3 from Makefile.am.
# @configure_input@

# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004  Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.

@SET_MAKE@

srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
target_triplet = @target@
DIST_COMMON = README $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
	$(top_srcdir)/misc/Makefile.common
subdir = doc
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/_xine.m4 $(top_srcdir)/m4/aa.m4 \
	$(top_srcdir)/m4/alsa.m4 $(top_srcdir)/m4/arts.m4 \
	$(top_srcdir)/m4/as.m4 $(top_srcdir)/m4/caca.m4 \
	$(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/directx.m4 \
	$(top_srcdir)/m4/dl.m4 $(top_srcdir)/m4/dvdnav.m4 \
	$(top_srcdir)/m4/esd.m4 $(top_srcdir)/m4/ffmpeg.m4 \
	$(top_srcdir)/m4/freetype2.m4 $(top_srcdir)/m4/gettext.m4 \
	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \
	$(top_srcdir)/m4/irixal.m4 $(top_srcdir)/m4/lcmessage.m4 \
	$(top_srcdir)/m4/libFLAC.m4 $(top_srcdir)/m4/libfame.m4 \
	$(top_srcdir)/m4/ogg.m4 $(top_srcdir)/m4/opengl.m4 \
	$(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/progtest.m4 \
	$(top_srcdir)/m4/sdl.m4 $(top_srcdir)/m4/speex.m4 \
	$(top_srcdir)/m4/theora.m4 $(top_srcdir)/m4/vorbis.m4 \
	$(top_srcdir)/m4/xv.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
	$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
SOURCES =
DIST_SOURCES =
RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
	html-recursive info-recursive install-data-recursive \
	install-exec-recursive install-info-recursive \
	install-recursive installcheck-recursive installdirs-recursive \
	pdf-recursive ps-recursive uninstall-info-recursive \
	uninstall-recursive
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
    *) f=$$p;; \
  esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
am__installdirs = "$(DESTDIR)$(docsdir)"
docsDATA_INSTALL = $(INSTALL_DATA)
DATA = $(docs_DATA)
ETAGS = etags
CTAGS = ctags
DIST_SUBDIRS = $(SUBDIRS)
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
AAINFO = @AAINFO@
AALIB_CFLAGS = @AALIB_CFLAGS@
AALIB_CONFIG = @AALIB_CONFIG@
AALIB_LIBS = @AALIB_LIBS@
ACLOCAL = @ACLOCAL@
ACLOCAL_DIR = @ACLOCAL_DIR@
ALLOCA = @ALLOCA@
ALSA_CFLAGS = @ALSA_CFLAGS@
ALSA_LIBS = @ALSA_LIBS@
ALSA_STATIC_LIB = @ALSA_STATIC_LIB@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AR = @AR@
ARTS_CFLAGS = @ARTS_CFLAGS@
ARTS_CONFIG = @ARTS_CONFIG@
ARTS_LIBS = @ARTS_LIBS@
AS = @AS@
ASFLAGS = @ASFLAGS@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_ASF_FALSE = @BUILD_ASF_FALSE@
BUILD_ASF_TRUE = @BUILD_ASF_TRUE@
BUILD_DHA_KMOD_FALSE = @BUILD_DHA_KMOD_FALSE@
BUILD_DHA_KMOD_TRUE = @BUILD_DHA_KMOD_TRUE@
BUILD_FAAD_FALSE = @BUILD_FAAD_FALSE@
BUILD_FAAD_TRUE = @BUILD_FAAD_TRUE@
BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
CACA_CFLAGS = @CACA_CFLAGS@
CACA_CONFIG = @CACA_CONFIG@
CACA_LIBS = @CACA_LIBS@
CATALOGS = @CATALOGS@
CATOBJEXT = @CATOBJEXT@
CC = @CC@
CCAS = @CCAS@
CCASCOMPILE = @CCASCOMPILE@
CCASFLAGS = @CCASFLAGS@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DATADIRNAME = @DATADIRNAME@
DEBUG_CFLAGS = @DEBUG_CFLAGS@
DEFS = @DEFS@
DEPCOMP = @DEPCOMP@
DEPDIR = @DEPDIR@
DEPMOD = @DEPMOD@
DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
DIRECTFB_LIBS = @DIRECTFB_LIBS@
DIRECTX_AUDIO_LIBS = @DIRECTX_AUDIO_LIBS@
DIRECTX_CPPFLAGS = @DIRECTX_CPPFLAGS@
DIRECTX_VIDEO_LIBS = @DIRECTX_VIDEO_LIBS@
DLLTOOL = @DLLTOOL@
DVDNAV_CFLAGS = @DVDNAV_CFLAGS@
DVDNAV_CONFIG = @DVDNAV_CONFIG@
DVDNAV_LIBS = @DVDNAV_LIBS@
DYNAMIC_LD_LIBS = @DYNAMIC_LD_LIBS@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
ENABLE_VCD_FALSE = @ENABLE_VCD_FALSE@
ENABLE_VCD_TRUE = @ENABLE_VCD_TRUE@
ESD_CFLAGS = @ESD_CFLAGS@
ESD_CONFIG = @ESD_CONFIG@
ESD_LIBS = @ESD_LIBS@
EXEEXT = @EXEEXT@
EXTRA_X_CFLAGS = @EXTRA_X_CFLAGS@
EXTRA_X_LIBS = @EXTRA_X_LIBS@
F77 = @F77@
FFLAGS = @FFLAGS@
FFMPEG_CPPFLAGS = @FFMPEG_CPPFLAGS@
FFMPEG_LIBS = @FFMPEG_LIBS@
FIG2DEV = @FIG2DEV@
FREETYPE_CONFIG = @FREETYPE_CONFIG@
FT2_CFLAGS = @FT2_CFLAGS@
FT2_LIBS = @FT2_LIBS@
GENCAT = @GENCAT@
GLIBC21 = @GLIBC21@
GLUT_LIBS = @GLUT_LIBS@
GLU_LIBS = @GLU_LIBS@
GMOFILES = @GMOFILES@
GMSGFMT = @GMSGFMT@
GNOME_VFS_CFLAGS = @GNOME_VFS_CFLAGS@
GNOME_VFS_LIBS = @GNOME_VFS_LIBS@
GOOM_LIBS = @GOOM_LIBS@
HAVE_AA_FALSE = @HAVE_AA_FALSE@
HAVE_AA_TRUE = @HAVE_AA_TRUE@
HAVE_ALSA09_FALSE = @HAVE_ALSA09_FALSE@
HAVE_ALSA09_TRUE = @HAVE_ALSA09_TRUE@
HAVE_ALSA_FALSE = @HAVE_ALSA_FALSE@
HAVE_ALSA_TRUE = @HAVE_ALSA_TRUE@
HAVE_ARMV4L_FALSE = @HAVE_ARMV4L_FALSE@
HAVE_ARMV4L_TRUE = @HAVE_ARMV4L_TRUE@
HAVE_ARTS_FALSE = @HAVE_ARTS_FALSE@
HAVE_ARTS_TRUE = @HAVE_ARTS_TRUE@
HAVE_BSDI_CDROM = @HAVE_BSDI_CDROM@
HAVE_CACA_FALSE = @HAVE_CACA_FALSE@
HAVE_CACA_TRUE = @HAVE_CACA_TRUE@
HAVE_CDROM_IOCTLS_FALSE = @HAVE_CDROM_IOCTLS_FALSE@
HAVE_CDROM_IOCTLS_TRUE = @HAVE_CDROM_IOCTLS_TRUE@
HAVE_COREAUDIO_FALSE = @HAVE_COREAUDIO_FALSE@
HAVE_COREAUDIO_TRUE = @HAVE_COREAUDIO_TRUE@
HAVE_DARWIN_CDROM = @HAVE_DARWIN_CDROM@
HAVE_DIRECTFB_FALSE = @HAVE_DIRECTFB_FALSE@
HAVE_DIRECTFB_TRUE = @HAVE_DIRECTFB_TRUE@
HAVE_DIRECTX_FALSE = @HAVE_DIRECTX_FALSE@
HAVE_DIRECTX_TRUE = @HAVE_DIRECTX_TRUE@
HAVE_DVDNAV_FALSE = @HAVE_DVDNAV_FALSE@
HAVE_DVDNAV_TRUE = @HAVE_DVDNAV_TRUE@
HAVE_DXR3_FALSE = @HAVE_DXR3_FALSE@
HAVE_DXR3_TRUE = @HAVE_DXR3_TRUE@
HAVE_ESD_FALSE = @HAVE_ESD_FALSE@
HAVE_ESD_TRUE = @HAVE_ESD_TRUE@
HAVE_FB_FALSE = @HAVE_FB_FALSE@
HAVE_FB_TRUE = @HAVE_FB_TRUE@
HAVE_FFMMX_FALSE = @HAVE_FFMMX_FALSE@
HAVE_FFMMX_TRUE = @HAVE_FFMMX_TRUE@
HAVE_FFMPEG_FALSE = @HAVE_FFMPEG_FALSE@
HAVE_FFMPEG_TRUE = @HAVE_FFMPEG_TRUE@
HAVE_FIG2DEV_FALSE = @HAVE_FIG2DEV_FALSE@
HAVE_FIG2DEV_TRUE = @HAVE_FIG2DEV_TRUE@
HAVE_FLAC_FALSE = @HAVE_FLAC_FALSE@
HAVE_FLAC_TRUE = @HAVE_FLAC_TRUE@
HAVE_FREEBSD_CDROM = @HAVE_FREEBSD_CDROM@
HAVE_GNOME_VFS_FALSE = @HAVE_GNOME_VFS_FALSE@
HAVE_GNOME_VFS_TRUE = @HAVE_GNOME_VFS_TRUE@
HAVE_IRIXAL_FALSE = @HAVE_IRIXAL_FALSE@
HAVE_IRIXAL_TRUE = @HAVE_IRIXAL_TRUE@
HAVE_LIBFAME_FALSE = @HAVE_LIBFAME_FALSE@
HAVE_LIBFAME_TRUE = @HAVE_LIBFAME_TRUE@
HAVE_LIBMNG_FALSE = @HAVE_LIBMNG_FALSE@
HAVE_LIBMNG_TRUE = @HAVE_LIBMNG_TRUE@
HAVE_LIBPNG_FALSE = @HAVE_LIBPNG_FALSE@
HAVE_LIBPNG_TRUE = @HAVE_LIBPNG_TRUE@
HAVE_LIBRTE_FALSE = @HAVE_LIBRTE_FALSE@
HAVE_LIBRTE_TRUE = @HAVE_LIBRTE_TRUE@
HAVE_LIBSMBCLIENT_FALSE = @HAVE_LIBSMBCLIENT_FALSE@
HAVE_LIBSMBCLIENT_TRUE = @HAVE_LIBSMBCLIENT_TRUE@
HAVE_LINUX_CDROM = @HAVE_LINUX_CDROM@
HAVE_LINUX_FALSE = @HAVE_LINUX_FALSE@
HAVE_LINUX_TRUE = @HAVE_LINUX_TRUE@
HAVE_MACOSX_VIDEO_FALSE = @HAVE_MACOSX_VIDEO_FALSE@
HAVE_MACOSX_VIDEO_TRUE = @HAVE_MACOSX_VIDEO_TRUE@
HAVE_MLIB_FALSE = @HAVE_MLIB_FALSE@
HAVE_MLIB_TRUE = @HAVE_MLIB_TRUE@
HAVE_OPENGL_FALSE = @HAVE_OPENGL_FALSE@
HAVE_OPENGL_TRUE = @HAVE_OPENGL_TRUE@
HAVE_OSS_FALSE = @HAVE_OSS_FALSE@
HAVE_OSS_TRUE = @HAVE_OSS_TRUE@
HAVE_POLYPAUDIO_FALSE = @HAVE_POLYPAUDIO_FALSE@
HAVE_POLYPAUDIO_TRUE = @HAVE_POLYPAUDIO_TRUE@
HAVE_SDL_FALSE = @HAVE_SDL_FALSE@
HAVE_SDL_TRUE = @HAVE_SDL_TRUE@
HAVE_SGMLTOOLS_FALSE = @HAVE_SGMLTOOLS_FALSE@
HAVE_SGMLTOOLS_TRUE = @HAVE_SGMLTOOLS_TRUE@
HAVE_SOLARIS_CDROM = @HAVE_SOLARIS_CDROM@
HAVE_SPEEX_FALSE = @HAVE_SPEEX_FALSE@
HAVE_SPEEX_TRUE = @HAVE_SPEEX_TRUE@
HAVE_STK_FALSE = @HAVE_STK_FALSE@
HAVE_STK_TRUE = @HAVE_STK_TRUE@
HAVE_SUNAUDIO_FALSE = @HAVE_SUNAUDIO_FALSE@
HAVE_SUNAUDIO_TRUE = @HAVE_SUNAUDIO_TRUE@
HAVE_SUNDGA_FALSE = @HAVE_SUNDGA_FALSE@
HAVE_SUNDGA_TRUE = @HAVE_SUNDGA_TRUE@
HAVE_SUNFB_FALSE = @HAVE_SUNFB_FALSE@
HAVE_SUNFB_TRUE = @HAVE_SUNFB_TRUE@
HAVE_SYNCFB_FALSE = @HAVE_SYNCFB_FALSE@
HAVE_SYNCFB_TRUE = @HAVE_SYNCFB_TRUE@
HAVE_THEORA_FALSE = @HAVE_THEORA_FALSE@
HAVE_THEORA_TRUE = @HAVE_THEORA_TRUE@
HAVE_V4L_FALSE = @HAVE_V4L_FALSE@
HAVE_V4L_TRUE = @HAVE_V4L_TRUE@
HAVE_VCDNAV_FALSE = @HAVE_VCDNAV_FALSE@
HAVE_VCDNAV_TRUE = @HAVE_VCDNAV_TRUE@
HAVE_VIDIX_FALSE = @HAVE_VIDIX_FALSE@
HAVE_VIDIX_TRUE = @HAVE_VIDIX_TRUE@
HAVE_VLDXVMC_FALSE = @HAVE_VLDXVMC_FALSE@
HAVE_VLDXVMC_TRUE = @HAVE_VLDXVMC_TRUE@
HAVE_VORBIS_FALSE = @HAVE_VORBIS_FALSE@
HAVE_VORBIS_TRUE = @HAVE_VORBIS_TRUE@
HAVE_W32DLL_FALSE = @HAVE_W32DLL_FALSE@
HAVE_W32DLL_TRUE = @HAVE_W32DLL_TRUE@
HAVE_WIN32_CDROM = @HAVE_WIN32_CDROM@
HAVE_X11_FALSE = @HAVE_X11_FALSE@
HAVE_X11_TRUE = @HAVE_X11_TRUE@
HAVE_XVMC_FALSE = @HAVE_XVMC_FALSE@
HAVE_XVMC_TRUE = @HAVE_XVMC_TRUE@
HAVE_XV_FALSE = @HAVE_XV_FALSE@
HAVE_XV_TRUE = @HAVE_XV_TRUE@
HAVE_XXMC_FALSE = @HAVE_XXMC_FALSE@
HAVE_XXMC_TRUE = @HAVE_XXMC_TRUE@
HAVE_ZLIB_FALSE = @HAVE_ZLIB_FALSE@
HAVE_ZLIB_TRUE = @HAVE_ZLIB_TRUE@
HOST_OS_DARWIN_FALSE = @HOST_OS_DARWIN_FALSE@
HOST_OS_DARWIN_TRUE = @HOST_OS_DARWIN_TRUE@
INCLUDED_INTL_FALSE = @INCLUDED_INTL_FALSE@
INCLUDED_INTL_TRUE = @INCLUDED_INTL_TRUE@
INCLUDES = @INCLUDES@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_M4_FALSE = @INSTALL_M4_FALSE@
INSTALL_M4_TRUE = @INSTALL_M4_TRUE@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
INSTOBJEXT = @INSTOBJEXT@
INTLBISON = @INTLBISON@
INTLDIR = @INTLDIR@
INTLLIBS = @INTLLIBS@
INTLOBJS = @INTLOBJS@
INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
IRIXAL_CFLAGS = @IRIXAL_CFLAGS@
IRIXAL_LIBS = @IRIXAL_LIBS@
IRIXAL_STATIC_LIB = @IRIXAL_STATIC_LIB@
KSTAT_LIBS = @KSTAT_LIBS@
LDFLAGS = @LDFLAGS@
LIBCDIO_CFLAGS = @LIBCDIO_CFLAGS@
LIBCDIO_LIBS = @LIBCDIO_LIBS@
LIBFAME_CFLAGS = @LIBFAME_CFLAGS@
LIBFAME_CONFIG = @LIBFAME_CONFIG@
LIBFAME_LIBS = @LIBFAME_LIBS@
LIBFFMPEG_CFLAGS = @LIBFFMPEG_CFLAGS@
LIBFLAC_CFLAGS = @LIBFLAC_CFLAGS@
LIBFLAC_LIBS = @LIBFLAC_LIBS@
LIBICONV = @LIBICONV@
LIBISO9660_LIBS = @LIBISO9660_LIBS@
LIBMODPLUG_CFLAGS = @LIBMODPLUG_CFLAGS@
LIBMODPLUG_LIBS = @LIBMODPLUG_LIBS@
LIBMPEG2_CFLAGS = @LIBMPEG2_CFLAGS@
LIBNAME = @LIBNAME@
LIBOBJS = @LIBOBJS@
LIBPNG_CONFIG = @LIBPNG_CONFIG@
LIBS = @LIBS@
LIBSMBCLIENT_LIBS = @LIBSMBCLIENT_LIBS@
LIBSTK_CFLAGS = @LIBSTK_CFLAGS@
LIBSTK_LIBS = @LIBSTK_LIBS@
LIBTOOL = $(SHELL) $(top_builddir)/libtool-nofpic
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIBVCDINFO_LIBS = @LIBVCDINFO_LIBS@
LIBVCD_CFLAGS = @LIBVCD_CFLAGS@
LIBVCD_LIBS = @LIBVCD_LIBS@
LIBVCD_SYSDEP = @LIBVCD_SYSDEP@
LINUX_CDROM_TIMEOUT = @LINUX_CDROM_TIMEOUT@
LINUX_INCLUDE = @LINUX_INCLUDE@
LN_S = @LN_S@
LTLIBOBJS = @LTLIBOBJS@
LT_AGE = @LT_AGE@
LT_CURRENT = @LT_CURRENT@
LT_REVISION = @LT_REVISION@
MAKEINFO = @MAKEINFO@
MKINSTALLDIRS = @MKINSTALLDIRS@
MKNOD = @MKNOD@
MLIB_CFLAGS = @MLIB_CFLAGS@
MLIB_LIBS = @MLIB_LIBS@
MNG_LIBS = @MNG_LIBS@
MSGFMT = @MSGFMT@
NET_LIBS = @NET_LIBS@
OBJC = @OBJC@
OBJCDEPMODE = @OBJCDEPMODE@
OBJCFLAGS = @OBJCFLAGS@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OGG_CFLAGS = @OGG_CFLAGS@
OGG_LIBS = @OGG_LIBS@
OPENGL_CFLAGS = @OPENGL_CFLAGS@
OPENGL_LIBS = @OPENGL_LIBS@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PASS1_CFLAGS = @PASS1_CFLAGS@
PASS2_CFLAGS = @PASS2_CFLAGS@
PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PNG_CFLAGS = @PNG_CFLAGS@
PNG_LIBS = @PNG_LIBS@
POFILES = @POFILES@
POLYPAUDIO_CFLAGS = @POLYPAUDIO_CFLAGS@
POLYPAUDIO_LIBS = @POLYPAUDIO_LIBS@
POSUB = @POSUB@
PPC_ARCH_FALSE = @PPC_ARCH_FALSE@
PPC_ARCH_TRUE = @PPC_ARCH_TRUE@
RANLIB = @RANLIB@
RT_LIBS = @RT_LIBS@
SDL_CFLAGS = @SDL_CFLAGS@
SDL_CONFIG = @SDL_CONFIG@
SDL_LIBS = @SDL_LIBS@
SET_MAKE = @SET_MAKE@
SGMLTOOLS = @SGMLTOOLS@
SHELL = @SHELL@
SPEC_VERSION = @SPEC_VERSION@
SPEEX_CFLAGS = @SPEEX_CFLAGS@
SPEEX_LIBS = @SPEEX_LIBS@
STATIC = @STATIC@
STRIP = @STRIP@
SUNDGA_CFLAGS = @SUNDGA_CFLAGS@
SUNDGA_LIBS = @SUNDGA_LIBS@
TAR_NAME = @TAR_NAME@
THEORAENC_LIBS = @THEORAENC_LIBS@
THEORAFILE_LIBS = @THEORAFILE_LIBS@
THEORA_CFLAGS = @THEORA_CFLAGS@
THEORA_LIBS = @THEORA_LIBS@
THREAD_CFLAGS = @THREAD_CFLAGS@
THREAD_CFLAGS_CONFIG = @THREAD_CFLAGS_CONFIG@
THREAD_INCLUDES = @THREAD_INCLUDES@
THREAD_LIBS = @THREAD_LIBS@
THREAD_LIBS_CONFIG = @THREAD_LIBS_CONFIG@
USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
USE_NLS = @USE_NLS@
VERSION = @VERSION@
VORBISENC_LIBS = @VORBISENC_LIBS@
VORBISFILE_LIBS = @VORBISFILE_LIBS@
VORBIS_CFLAGS = @VORBIS_CFLAGS@
VORBIS_LIBS = @VORBIS_LIBS@
W32DLL_DEP = @W32DLL_DEP@
W32_NO_OPTIMIZE = @W32_NO_OPTIMIZE@
WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
WIN32_FALSE = @WIN32_FALSE@
WIN32_TRUE = @WIN32_TRUE@
XGETTEXT = @XGETTEXT@
XINE_ACFLAGS = @XINE_ACFLAGS@
XINE_BIN_AGE = @XINE_BIN_AGE@
XINE_BUILD_CC = @XINE_BUILD_CC@
XINE_BUILD_DATE = @XINE_BUILD_DATE@
XINE_BUILD_OS = @XINE_BUILD_OS@
XINE_CONFIG_PREFIX = @XINE_CONFIG_PREFIX@
XINE_DATADIR = @XINE_DATADIR@
XINE_FONTDIR = @XINE_FONTDIR@
XINE_FONTPATH = @XINE_FONTPATH@
XINE_IFACE_AGE = @XINE_IFACE_AGE@
XINE_LOCALEDIR = @XINE_LOCALEDIR@
XINE_LOCALEPATH = @XINE_LOCALEPATH@
XINE_MAJOR = @XINE_MAJOR@
XINE_MINOR = @XINE_MINOR@
XINE_PLUGINDIR = @XINE_PLUGINDIR@
XINE_PLUGINPATH = @XINE_PLUGINPATH@
XINE_PLUGIN_MIN_SYMS = @XINE_PLUGIN_MIN_SYMS@
XINE_SCRIPTPATH = @XINE_SCRIPTPATH@
XINE_SUB = @XINE_SUB@
XVMC_LIB = @XVMC_LIB@
XV_LIB = @XV_LIB@
XXMC_LIB = @XXMC_LIB@
X_CFLAGS = @X_CFLAGS@
X_EXTRA_LIBS = @X_EXTRA_LIBS@
X_LIBS = @X_LIBS@
X_PRE_LIBS = @X_PRE_LIBS@
ZLIB_INCLUDES = @ZLIB_INCLUDES@
ZLIB_LIBS = @ZLIB_LIBS@
ZLIB_LIBS_CONFIG = @ZLIB_LIBS_CONFIG@
ac_ct_AR = @ac_ct_AR@
ac_ct_AS = @ac_ct_AS@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DLLTOOL = @ac_ct_DLLTOOL@
ac_ct_F77 = @ac_ct_F77@
ac_ct_OBJDUMP = @ac_ct_OBJDUMP@
ac_ct_RANLIB = @ac_ct_RANLIB@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@
am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@
am__fastdepOBJC_FALSE = @am__fastdepOBJC_FALSE@
am__fastdepOBJC_TRUE = @am__fastdepOBJC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
datadir = @datadir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target = @target@
target_alias = @target_alias@
target_cpu = @target_cpu@
target_os = @target_os@
target_vendor = @target_vendor@
w32_path = @w32_path@
XINE_LIB = $(top_builddir)/src/xine-engine/libxine.la
SUBDIRS = man hackersguide faq
docs_DATA = README README.dvb README.dxr3 \
	    README.freebsd README.irix README.network_dvd README.opengl \
	    README.solaris README.syncfb README_xxmc.html

EXTRA_DIST = $(docs_DATA)
docsdir = $(prefix)/share/doc/xine
all: all-recursive

.SUFFIXES:
$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/misc/Makefile.common $(am__configure_deps)
	@for dep in $?; do \
	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
		&& exit 0; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  doc/Makefile'; \
	cd $(top_srcdir) && \
	  $(AUTOMAKE) --gnu  doc/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
	esac;

$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

$(top_srcdir)/configure:  $(am__configure_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh

mostlyclean-libtool:
	-rm -f *.lo

clean-libtool:
	-rm -rf .libs _libs

distclean-libtool:
	-rm -f libtool
uninstall-info-am:
install-docsDATA: $(docs_DATA)
	@$(NORMAL_INSTALL)
	test -z "$(docsdir)" || $(mkdir_p) "$(DESTDIR)$(docsdir)"
	@list='$(docs_DATA)'; for p in $$list; do \
	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
	  f=$(am__strip_dir) \
	  echo " $(docsDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docsdir)/$$f'"; \
	  $(docsDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docsdir)/$$f"; \
	done

uninstall-docsDATA:
	@$(NORMAL_UNINSTALL)
	@list='$(docs_DATA)'; for p in $$list; do \
	  f=$(am__strip_dir) \
	  echo " rm -f '$(DESTDIR)$(docsdir)/$$f'"; \
	  rm -f "$(DESTDIR)$(docsdir)/$$f"; \
	done

# This directory's subdirectories are mostly independent; you can cd
# into them and run `make' without going through this Makefile.
# To change the values of `make' variables: instead of editing Makefiles,
# (1) if the variable is set in `config.status', edit `config.status'
#     (which will cause the Makefiles to be regenerated when you run `make');
# (2) otherwise, pass the desired values on the `make' command line.
$(RECURSIVE_TARGETS):
	@set fnord $$MAKEFLAGS; amf=$$2; \
	dot_seen=no; \
	target=`echo $@ | sed s/-recursive//`; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    dot_seen=yes; \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
	done; \
	if test "$$dot_seen" = "no"; then \
	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
	fi; test -z "$$fail"

mostlyclean-recursive clean-recursive distclean-recursive \
maintainer-clean-recursive:
	@set fnord $$MAKEFLAGS; amf=$$2; \
	dot_seen=no; \
	case "$@" in \
	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
	  *) list='$(SUBDIRS)' ;; \
	esac; \
	rev=''; for subdir in $$list; do \
	  if test "$$subdir" = "."; then :; else \
	    rev="$$subdir $$rev"; \
	  fi; \
	done; \
	rev="$$rev ."; \
	target=`echo $@ | sed s/-recursive//`; \
	for subdir in $$rev; do \
	  echo "Making $$target in $$subdir"; \
	  if test "$$subdir" = "."; then \
	    local_target="$$target-am"; \
	  else \
	    local_target="$$target"; \
	  fi; \
	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
	done && test -z "$$fail"
tags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
	done
ctags-recursive:
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
	done

ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '    { files[$$0] = 1; } \
	       END { for (i in files) print i; }'`; \
	mkid -fID $$unique
tags: TAGS

TAGS: tags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	tags=; \
	here=`pwd`; \
	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
	  include_option=--etags-include; \
	  empty_fix=.; \
	else \
	  include_option=--include; \
	  empty_fix=; \
	fi; \
	list='$(SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test ! -f $$subdir/TAGS || \
	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
	  fi; \
	done; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '    { files[$$0] = 1; } \
	       END { for (i in files) print i; }'`; \
	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
	  test -n "$$unique" || unique=$$empty_fix; \
	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
	    $$tags $$unique; \
	fi
ctags: CTAGS
CTAGS: ctags-recursive $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
		$(TAGS_FILES) $(LISP)
	tags=; \
	here=`pwd`; \
	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
	unique=`for i in $$list; do \
	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
	  done | \
	  $(AWK) '    { files[$$0] = 1; } \
	       END { for (i in files) print i; }'`; \
	test -z "$(CTAGS_ARGS)$$tags$$unique" \
	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
	     $$tags $$unique

GTAGS:
	here=`$(am__cd) $(top_builddir) && pwd` \
	  && cd $(top_srcdir) \
	  && gtags -i $(GTAGS_ARGS) $$here

distclean-tags:
	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags

distdir: $(DISTFILES)
	$(mkdir_p) $(distdir)/../misc
	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
	list='$(DISTFILES)'; for file in $$list; do \
	  case $$file in \
	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
	  esac; \
	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
	    dir="/$$dir"; \
	    $(mkdir_p) "$(distdir)$$dir"; \
	  else \
	    dir=''; \
	  fi; \
	  if test -d $$d/$$file; then \
	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
	    fi; \
	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
	  else \
	    test -f $(distdir)/$$file \
	    || cp -p $$d/$$file $(distdir)/$$file \
	    || exit 1; \
	  fi; \
	done
	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
	  if test "$$subdir" = .; then :; else \
	    test -d "$(distdir)/$$subdir" \
	    || $(mkdir_p) "$(distdir)/$$subdir" \
	    || exit 1; \
	    distdir=`$(am__cd) $(distdir) && pwd`; \
	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
	    (cd $$subdir && \
	      $(MAKE) $(AM_MAKEFLAGS) \
	        top_distdir="$$top_distdir" \
	        distdir="$$distdir/$$subdir" \
	        distdir) \
	      || exit 1; \
	  fi; \
	done
check-am: all-am
check: check-recursive
all-am: Makefile $(DATA)
installdirs: installdirs-recursive
installdirs-am:
	for dir in "$(DESTDIR)$(docsdir)"; do \
	  test -z "$$dir" || $(mkdir_p) "$$dir"; \
	done
install: install-recursive
install-exec: install-exec-recursive
install-data: install-data-recursive
uninstall: uninstall-recursive

install-am: all-am
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am

installcheck: installcheck-recursive
install-strip:
	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
	  `test -z '$(STRIP)' || \
	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install

clean-generic:

distclean-generic:
	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
clean: clean-recursive

clean-am: clean-generic clean-libtool mostlyclean-am

distclean: distclean-recursive
	-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-libtool \
	distclean-tags

dvi: dvi-recursive

dvi-am:

html: html-recursive

info: info-recursive

info-am:

install-data-am: install-docsDATA
	@$(NORMAL_INSTALL)
	$(MAKE) $(AM_MAKEFLAGS) install-data-hook

install-exec-am:

install-info: install-info-recursive

install-man:

installcheck-am:

maintainer-clean: maintainer-clean-recursive
	-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic

mostlyclean: mostlyclean-recursive

mostlyclean-am: mostlyclean-generic mostlyclean-libtool

pdf: pdf-recursive

pdf-am:

ps: ps-recursive

ps-am:

uninstall-am: uninstall-docsDATA uninstall-info-am
	@$(NORMAL_INSTALL)
	$(MAKE) $(AM_MAKEFLAGS) uninstall-hook

uninstall-info: uninstall-info-recursive

.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \
	clean clean-generic clean-libtool clean-recursive ctags \
	ctags-recursive distclean distclean-generic distclean-libtool \
	distclean-recursive distclean-tags distdir dvi dvi-am html \
	html-am info info-am install install-am install-data \
	install-data-am install-data-hook install-docsDATA \
	install-exec install-exec-am install-info install-info-am \
	install-man install-strip installcheck installcheck-am \
	installdirs installdirs-am maintainer-clean \
	maintainer-clean-generic maintainer-clean-recursive \
	mostlyclean mostlyclean-generic mostlyclean-libtool \
	mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \
	uninstall uninstall-am uninstall-docsDATA uninstall-hook \
	uninstall-info-am


$(XINE_LIB):
	@cd $(top_srcdir)/src/xine-engine && $(MAKE)

install-data-hook:
	@if test $$MAKELEVEL -le 4 ; then \
	  if test -x "$(top_srcdir)/post-install.sh" ; then \
	    $(top_srcdir)/post-install.sh ; \
	  fi \
	fi

pass1:
	@$(MAKE) MULTIPASS_CFLAGS="$(PASS1_CFLAGS)"

pass2:
	@$(MAKE) MULTIPASS_CFLAGS="$(PASS2_CFLAGS)"

debug:
	@$(MAKE) CFLAGS="$(DEBUG_CFLAGS)"

install-debug: debug
	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
	@list='$(SUBDIRS)'; for subdir in $$list; do \
	  (cd $$subdir && $(MAKE) $@) || exit; \
	done;
	$(MAKE) $(AM_MAKEFLAGS) install-data-hook

install-includeHEADERS: $(include_HEADERS)
	@$(NORMAL_INSTALL)
	$(install_sh) -d $(DESTDIR)$(includedir)/xine
	@list='$(include_HEADERS)'; for p in $$list; do \
	  if test -f "$$p"; then d= ; else d="$(srcdir)/"; fi; \
	  echo " $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/xine/$$p"; \
	  $(INSTALL_DATA) $$d$$p $(DESTDIR)$(includedir)/xine/$$p; \
	done

uninstall-includeHEADERS:
	@$(NORMAL_UNINSTALL)
	list='$(include_HEADERS)'; for p in $$list; do \
	  rm -f $(DESTDIR)$(includedir)/xine/$$p; \
	done

uninstall-hook:
	@if echo '$(libdir)' | egrep ^'$(XINE_PLUGINDIR)' >/dev/null; then \
	  list='$(lib_LTLIBRARIES)'; for p in $$list; do \
	    p="`echo $$p | sed -e 's/\.la$$/\.so/g;s|^.*/||'`"; \
	    echo " rm -f $(DESTDIR)$(libdir)/$$p"; \
	    rm -f $(DESTDIR)$(libdir)/$$p; \
	  done; \
	fi

mostlyclean-generic:
	-rm -f *~ \#* .*~ .\#*

maintainer-clean-generic:
	-@echo "This command is intended for maintainers to use;"
	-@echo "it deletes files that may require special tools to rebuild."
	-rm -f Makefile.in

docs clean-docs:
	@cd faq && $(MAKE) $@
	@cd hackersguide && $(MAKE) $@
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

--- NEW FILE: README.syncfb ---

  =====                                                               =====
       XINE video output plugin for MATROX G200/G400/G450 cards *only*
  =====                                                               =====


   VERSION
    => $Id: README.syncfb,v 1.1 2005/04/04 22:29:11 dsalt-guest Exp $
  

* WHAT IS THIS PLUGIN ABOUT and WHY SHOULD I EVEN CONSIDER TO USE IT? :)
  
  This xine video output plugin uses the so called  SyncFB  driver (from
  the Teletux project)  which  provides  special  hardware  features  of
  Matrox G200 and newer cards like hardware  deinterlacing, scaling  and
  synchronization of your video output to the vertical retrace  of  your
  monitor - just to name a few. The  plugin  makes  all  those  features
  available to xine and because all this tasks are done by  the  graphic
  card there  is  no need for xine to do them in software -- so you save
  precious CPU time which you may gonna need for other things. :-)
  
  Ok ok -- why should you want to have your video output synchronized to
  something called the vertical retrace of your monitor?! Well... :)
  
  In order to have an optimal DVD playback the update of the image needs
  to be syncronized with the vertical refresh of the screen.   Otherwise
  you will sometimes see part of frame n and part of  frame  n+1  during
  playback of a movie. Resulting in tearing artefacts on moving objects.
  
  When using this plugin the update of the screen  is  done  during  the
  vertical retrace of your monitor and  those tearing artefacts are gone
  forever.
  
  Also the SyncFB kernel module and this plugin totally  by-pass XFree86
  for anything else but some data gathering routines needed to place the
  overlay at the right spot.      So on some machines you will gain some
  performance too because of the different way the SyncFB kernel  module
  handles your video output.

  Last but not least, you may ask what's so special about deinterlacing?
  There are already several deinterlacing methods  available in xine and
  why should you care about another one? Well (again)... ;-))
  
  All current deinterlacers in xine are done in software  and  therefore
  will cost you some CPU power. The SyncFB video out plugin will use the
  hardware deinterlacing support of your graphic card,  thus saving your
  CPU power because everything is done by your GPU...


* WILL IT WORK WITH MY G200/G400/G450/... CARD?

  So far the plugin and the kernel module itself are only  being  tested
  on G400 cards by its  developers  thus  we  cannot  tell  about  newer
  or older generation chips.
  
  Nevertheless we have received positive feedback that the SyncFB kernel
  module and this plugin work fine with G450 cards too.
  
  If you have got things working on older/newer  chips,  please  let  us
  know about your success and we will place a note here... :-)
  

* AND HOW DOES IT WORK?
  
  The SyncFB driver is a kernel  module you will have to load that makes
  a special device (e.g. /dev/syncfb) available which  is  opened by the
  plugin and controlled with certain ioctl calls. Easy, isn't it? ;-)

  That module is based on the mga_vid driver from Aaron Holzmann and was
  advanced (and reworked) by Matthias Oelmann.


* OK I HEARD ENOUGH - HOW DO I INSTALL and USE IT? :)

  Currently the Teletux project  which maintains the kernel module seems
  orphaned and therefore there hasn't been any progress nor release in a
  fair amount of time. :(  We will try to resolve this situation so that
  the development continues again. As soon as there are any news on this
  matter, this README will be updated accordingly.    For the time being
  you can still use the current Teletux SyncFB kernel module which works
  just fine, so there is no need to worry. :-)

  Back to the original subject.   In order to install and use the SyncFB
  kernel module,  you  *will*  need a fresh CVS checkout  of the sources
  because the last official release is rather outdated.
  
  This sounds more complicated than it actually is.   You will only have
  to execute the following two commands to get the sources in  a sub-dir
  called teletux. When you are asked for password, just press return.

  cvs -d:pserver:anonymous@cvs.teletux.sf.net:/cvsroot/teletux login
  cvs -d:pserver:anonymous@cvs.teletux.sf.net:/cvsroot/teletux co -P teletux

  Now enter the directory teletux/syncfb, that's where the actual kernel
  modul sources are located. Before you can compile the module, you will
  have to change two lines in the Makefile itself to make it work.
  
  In the second line, there is a phrase like  "-I/usr/include" which you
  have to change to "-I/usr/src/linux/include".  In line seven, you need
  to remove syncfbtv and syncfb_test from the OBJ list.

  Now execute a  "make"  and  the  module  will  be  compiled. Place the
  resulting syncfb.o in your modules dir which is usually...
   
   /lib/modules/KERNEL_VERSION/

  ... and issue a "depmod -a" after it. That's it - the kernel module is
  installed.  To load the syncfb module, execute "modprobe syncfb" every
  time you (re)start your computer.   This will automatically create the
  required /dev/syncfb device if you have devfs support,  otherwise  you
  need  to  issue  a  "mknod /dev/syncfb c 178 0"  once  to  create  the
  device yourself permanently.
  
  Once the module is loaded, you can start  xine  with  the  "-V SyncFB"
  option to use this plugin.  xine automatically remembers the video out
  plugin you last used, so you only have to use this option once too. :)
  But don't forget, the module *always* has to be already loaded  before
  you start xine, otherwise xine will fallback to  Xv/XShm or some other
  available video out plugin.


* THE VIDEO IS JERKING - WHAT'S THE MATTER?!

  Playing back video material that is mastered for e.g. NTSC  can  cause
  this jerking if your monitor is not running at a refresh rate  that is
  a multiple of 30 (PAL: 25).

  You can try to fix that by switching your monitor to  the  appropriate
  refresh rates (e.g. 50/75/100 Hz for PAL, 60/90/120 Hz for NTSC).  You
  will need to add so called modelines to your XFree86  config  to  make
  those modes available, if you don't already have them.
  
  Here is is a short listing of some sample modelines. Please  add  only
  those two lines (for NTSC and PAL) which exactly  fit  the  screensize
  you are running your X Server with. You need to add those lines to the
  monitor section of your XF86Config file as well as include their names
  in the screen section  (subsection display of the color depth your are
  using).
 
  USE THE FOLLOWING MODELINES AT YOUR OWN RISK.   THEY COULD DAMAGE YOUR
  MONITOR PERMANTELY - PLEASE TAKE CAUTION AND DON'T BLAME US.  YOU HAVE
  BEEN WARNED.

  So much for the standard disclaimer. :)

  Note: If you want to be on the  safe  side,  generate  your  very  own
        modelines with an application like kvideogen for example.
	
	Also the modelines may need some fine tuning for your setup. You
	can use xvidtune (comes with XFree86) to do that.
  
  # 1024x768
  
    Modeline "1024x768pal"  64.94 1024 1040 1216 1328 768 768 775 802
    Modeline "1024x768ntsc" 54.32 1024 1040 1216 1328 768 768 774 802  
  
  # 1152x864
 
    Modeline "1152x864pal"  68.82 1152 1168 1384 1496 864 864 871 902
    Modeline "1152x864ntsc" 80.93 1152 1168 1384 1496 864 864 872 902    

  # 1280x1024
    
    none yet - might be added in the future

  So before you run  xine  just turn to the appropriate refresh rate and
  the jerking *should* be gone. (you may also want to have a look at the
  XF86VidMode support included in xine which makes on-the-fly resolution
  switching possible when fullscreen is toggled)


* WHAT SCREENSIZE SHOULD I PREFER?
  
  Well. It is important that the screensize  you choose for DVD playback
  is exactly the same screensize  you're starting up your X Server  with
  if you are not using the XF86VidMode extension which will properly  do
  the switching for you  and  take  care  that  the  plugin  is  updated
  accordingly. So you shouldn't switch down to 1024x768 yourself if  you
  are running 1280x1024 because that  gives  you  a  virtual  screensize
  of 1280x1024 in a resolution of 1024x768 - and the plugin can't handle
  that - and probably never will... ok... never say never. ;)

  You may want to have a look at the XF86VidMode support in  xine  which
  will enable on-the-fly resolution switching when activating fullscreen.

  Now back to the question.     A screensize of 800x600 should be it for
  non-anamorphic DVDs because their resolution is 720x576 for  pal  DVDs
  and 720x480 for ntsc ones. If you've an anamorphic DVD, you should use
  a higher resolution - 1024x768 will be best because the image only has
  to be horizontally scaled to get back to the original geometry of 16:9
  which is easier to be done.


* WHAT ABOUT DEINTERLACING?!

  Pressing 'i' during playback will toggle hardware deinterlacing.     A
  decrease in picture quality is a known side effect,  yet you won't see
  any artefacts caused by interlacing anymore. :-)
  
  One more note, hardware deinterlacing uses BOB as deinterlacing method
  and is totally independent from the software deinterlacing in xine. So
  specifing a different deinterlacing method in your .xinerc won't  have
  any effect on this feature.
  
  Nevertheless we are thinking about making software  deinterlacing also
  available as an option. It's on the TODO list... :)


* HEY! THE OVERLAY TURNS OFF WHEN THE WINDOW IS PARTLY OFF THE DESKTOP!?
  
  That's done on purpose.  It  prevents  possible  yet  harmless  screen
  corruption. And by the way - why would you want to see  a  movie  just
  partly?! ;-)


* MY DESKTOP BACKGROUND IMAGE GETS CORRUPTED WHEN USING THIS PLUGIN!

  Even though it doesn't look nice, it's nevertheless harmless.    So no
  need to worry about it. XFree86 is using your  free  video  memory  as
  cache for certain things. Now when you use this plugin  that  part  of
  your video memory could also be used by the syncfb module.     So your
  image data cached there will be corrupted.   Unfortunately there is no
  way to avoid it. Yet, like stated earlier, it is truely  harmless  and
  just a cosmetical side effect.


* THE XINE PANEL DOES NOT APPEAR WHEN I WATCH A MOVIE IN FULLSCREEN?!

  Actually it does appear - you just don't see it. :)     This is a side
  effect of how SyncFB works.  The X server can't display anything where
  the actual overlay from SyncFB is being displayed because this area in
  your video memory is constantly over written - so are the changes done
  by your X Server (like a window graphic that is placed there).
  
  This is just cosmetical and harmless, so no need to worry. If you want
  to do something with the xine panel when the video overlay  is  taking
  all your screen, just switch back to window mode and do  what you have
  to do and after that, back to fullscreen it goes. :-)


* KNOWN BUGs

  + the default_repeat config option is currently hardcoded to 0 because
    any higher value than 1 will trigger a bug with the SyncFB kernel module
    that results in a distorted picture (depending on video resolution)
    [this bug is hard to trace, so don't hold your breath for now]

  + SyncFB overlay won't turn off when video window is minimized or
    somehow else hidden.
    [currently there is no way for the SyncFB plugin to know about the
     state of the video window except if the original xine-ui hide function
     is used to hide the video window... this will be fixed soon]

  + zooming feature is currently deactivated because it exposes a bug
    with the SyncFB kernel module
    [for now, don't expect this to be fixed soon - sorry]

  + the syncfb kernel module needs updating pretty badly


* WHAT IS ON THE TODO LIST?

  + fix above listed bugs in the SyncFB kernel module
  
  + make software deinterlacing available as an option
  
  + RGB support
    (unlikely at the moment because there is no need for it)
  
  + check if the video source is not too big in terms of  dimensions for
    the video memory left (video memory - X reserved video memory)
    
  + bug fixes
  + more sanity checks
  + new features
  + optimizations
  

* CONTACTS and FEEDBACK

  Your first starting point should be this README followed by the FAQ. :-)
  If you don't find your answers there or if you found a bug, please leave
  a message on the xine user mailinglist (see the general README).

  You can also reach the maintainers directly by mail (or you may consider
  sending a message in bottle so we have some more time  to  find  a  good
  excuse for the bug you may have found *grin*):
  
    Matthias Dahl <matthew2k@web.de>
  Joachim Koening <joachim.koenig@gmx.net>

--- NEW FILE: README_xxmc.html ---
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta http-equiv="content-type"
 content="text/html; charset=ISO-8859-1">
  <title>Xine's xxmc plugin</title>
</head>
<body>
<h1 style="text-align: center;"><a name="mozTocId168296"
 class="mozTocH1"></a>Compiling and installing Xine's xxmc plugin.</h1>
<ol id="mozToc">
<!--mozToc h1 1 h2 2 h3 3 h4 4 h5 5 h6 6--><li><a href="#mozTocId168296">Compiling
and installing Xine's xxmc plugin.</a>
    <ol>
      <li><a href="#mozTocId69222">Background</a></li>
      <li><a href="#mozTocId160476">Needed drivers and libs</a></li>
      <li><a href="#mozTocId849061">Configuring and installing</a></li>
      <li><a href="#mozTocId197304">Running the plugin</a>
        <ol>
          <li><a href="#mozTocId437541">General</a></li>
          <li><a href="#mozTocId374228">Caveats</a></li>
          <li><a href="#mozTocId6059">Optimizing</a></li>
          <li><a href="#mozTocId769361">Deinterlacing</a></li>
        </ol>
      </li>
      <li><a href="#mozTocId615875">FAQ</a></li>
    </ol>
  </li>
</ol>
<h2><a name="mozTocId69222" class="mozTocH2"></a>Background</h2>
The xine xxmc plugin supports playback with <br>
<ul>
  <li>Standard XvMC, as supported by many Nvidia chips.</li>
  <li>VLD XvMC, as supported by the VIA CLE266 chip, up to 1024x1024.<br>
  </li>
  <li>Standard Xv. The xxmc plugin will fall back to Xv if any of the
above fails.</li>
</ul>
There is no API or hardware feature called "xxmc". It is only the name
of Xine's plugin, since the name "xvmc" was already taken. The name
"xxmc" stands for eXtended XvMC, and it is extended in the sense that
it also includes support for VLD XvMC, which is a nonstandard extension
to XvMC, proposed by the Unichrome project.<br>
<h2><a name="mozTocId160476" class="mozTocH2"></a>Needed drivers and
libs</h2>
<ul>
  <li>You need an XvMC driver for the chip you want to run accelerated
on. (This does not apply if you only want to run Xv on the accelerated
driver). Drivers for Nvidia chips are on <a
 href="http://www.nvidia.com">Nvidia's website</a>. Drivers for the VIA
CLE266 chip are present in Xorg CVS or downloadable as patches at <a
 href="http://unichrome.sourceforge.net">The Unichrome project's site</a></li>
  <li>You need the XvMC wrapper, present in Xorg CVS, or downloadable
from <a href="http://unichrome.sourceforge.net">The Unichrome site</a></li>
</ul>
<h2><a name="mozTocId849061" class="mozTocH2"></a>Configuring and
installing</h2>
Make sure you have the XvMC wrapper installed. The wrapper will try to
figure out at run-time what xvmc-hardware specific driver to load. If
it fails it will open the file <span style="font-family: monospace;">/etc/X11/XvMCConfig</span>
or <span style="font-family: monospace;">/usr/X11R6/lib/X11/XvMCConfig</span>
and try to load the hardware-specific library mentioned in that file.
If you downloaded the XvMC wrapper from the unichrome site, the default
XvMCConfig will make the XvMC wrapper try to load the Nvidia XvMC
driver. If you want to use it with the VIA CLE266 chip, you will have
to edit the XvMCConfig file to contain the single word<br>
<br>
<span style="font-family: monospace;">libviaXvMC.so.1<br>
<br>
</span>Now configure and compile xine-lib as usual. Make sure that the
xxmc plugin got enabled by <span style="font-family: monospace;">configure</span>
or <span style="font-family: monospace;">autogen.sh.<br>
</span>
<h2><a name="mozTocId197304" class="mozTocH2"></a>Running the plugin</h2>
<h3><a name="mozTocId437541" class="mozTocH3"></a>General<br>
</h3>
Start xine with xine -V xxmc, or kaffeine with kaffeine -x xxmc. If the
XvMC wrapper fails to load a hardware specific library or fails to read
the XvMCConfig file it will specifically tell you so. If you have the
wrong hardware-specific library specified in the XvMCConfig file, the
xxmc plugin will think that you are running against a remote X-server
and fall back to software decoding. <span style="font-weight: bold;">If
the driver uses hardware acceleration it will specifically tell you so.
</span>At the moment, the XvMC implementation only accelerates mpeg1
and mpeg2 files, <span style="font-weight: bold;">if the hardware
advertises support for these file types. <br>
<br>
</span>
<h3><a name="mozTocId374228" class="mozTocH3"></a>Caveats<br>
</h3>
Some Nvidia chips seem to use very much CPU when subtitles are
displayed, and black areas of the screen are full of small white dots.
These chips only use motion compensation accelaration, and are bad at
it as well. You're better off running the Xv plugin with these chips.
The white dots are due to hardware- or driver bugs. Nvidia chips that
supports IDCT acceleration also seem to support motion compensation
acceleration correctly.<br>
<br>
OSD might be rendered in the wrong color with Nvidia chips. To work
around this use the xine config option<br>
<br>
<span style="font-family: monospace;">video.device.xvmc_nvidia_color_fix:1<br>
<br>
</span>This is due to a bug in the Nvidia XvMC drivers, and this bug is
probably also present in the i810 drivers.<br>
<br>
There is also a bug in xine's XvMC support for interlaced streams with
IDCT and motion compensation accelerations. The xxmc plugin will fall
back to plain Xv for these streams. Hopefully this will be fixed in the
not too distant future.<br>
<br>
<h3><a name="mozTocId6059" class="mozTocH3"></a>Optimizing</h3>
If you are running VLD XvMC on the CLE266 there are some options that
may affect performance:<br>
<br>
<span style="font-family: monospace;">video.device.unichrome_cpu_save:1</span><br>
<br>
Will save a lot of CPU-power if you are running a 2.6 series kernel. It
does this by sleeping while the hardware decoder works. Otherwise it
will spend a lot of CPU waiting for decoder completion.<br>
<br>
<span style="font-family: monospace;">video.device.xvmc_more_frames:1</span><br>
<br>
Will allocate 15 XvMC surfaces instead of 8. This is very useful if you
are using vdr-xine and want to avoid buffer-underrun stutters in xine.
Don't use this with Nvidia cards since they only allow a maximum of 8
frames. If your driver does not allow 15 frames and you turn this
option on, it will abruptly fall back to software rendering, causing
some rendering glitches while doing so.<br>
<br>
<span style="font-family: monospace;">gui.osd_use_unscaled:0</span><br>
<br>
Don't use unscaled overlays for OSD. Sometimes the X server will have
severe problems painting the OSD surface when unscaled OSD:s are used.
This will be visible as severe stutters when ANY overlay (OSD or
subtitle) are displayed and removed. Use this option for scaled OSD
which is considerably faster with CLE266, since blending is done in
hardware. This option is usable also with Nvidia cards, but I've never
seen problems with unscaled OSD with those. <br>
<br>
<h3><a name="mozTocId769361" class="mozTocH3"></a>Deinterlacing</h3>
XvMC can only do very simple one-field deinterlacing in hardware. It's
also impossible to use software deinterlacing, since XvMC does not
allow xine to read the content of a decoded frame. Therefore, when you
run a hardware accelerated stream, Interlacing will be toggled by
pressing "i". If the xxmc plugin has fallen back to Xv and software
decoding, post plugins will take care of deinterlacing. <br>
<br>
BOB deinterlacing for XvMC accelerated streams will be implemented in
the near future. That means alternating between the top- and bottom
fields of the frame at twice the original frame-rate.<br>
<br>
<h2><a name="mozTocId615875" class="mozTocH2"></a>FAQ</h2>
Q: The xxmc plugin is not enabled when I configure xine-lib<br>
A: Check that you have installed the XvMC wrapper, and that you've run
"ldconfig -v" as root after that.<br>
<br>
Q: The XvMC wrapper complains when I start xine.<br>
A: Check that you have created an XvMCConfig file specifying the
relevant driver name.<br>
<br>
Q: I'm running on a Nvidia card and my OSD colors are wrong.<br>
A: See "caveats" above.<br>
<br>
Q: I'm running VDR-xine and the playback stutters.<br>
A: See "optimizing" above.<br>
<br>
Q: I'm running on a CLE266 and I get severe stutter when subtitles are
displayed.<br>
A: See "optimizing" above.<br>
<br>
Q: Can I use the xxmc plugin without the XvMC wrapper?<br>
A: Yes, you can link directly with a hardware specific library, but
this is not recommended. Run "./configure --help" to check which
options to use.<br>
<br>
</body>
</html>