<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.58 $ -->
<chapter id="ports" xreflabel="Ports">
<title>Ports</title>

<sect1 id="linux">
<title>Linux</title>
<para>
The main development platform is Linux on x86, although
<application>MPlayer</application> works on many other Linux ports.
Binary packages of <application>MPlayer</application> are available from several
sources. However, <emphasis role="bold">none of these packages are supported</emphasis>.
Report problems to the authors, not to us.
</para>

<sect2 id="debian">
<title>Debian packaging</title>
<para>
To build a Debian package, run the following command in the
<application>MPlayer</application> source directory:

<screen>fakeroot debian/rules binary</screen>

If you want to pass custom options to configure, you can set up the
<envar>DEB_BUILD_OPTIONS</envar> environment variable. For instance,
if you want GUI and OSD menu support you would use:

<screen>DEB_BUILD_OPTIONS="--enable-gui --enable-menu" fakeroot debian/rules binary</screen>

You can also pass some variables to the Makefile. For example, if you want
to compile with gcc 3.4 even if it's not the default compiler:

<screen>CC=gcc-3.4 DEB_BUILD_OPTIONS="--enable-gui" fakeroot debian/rules binary</screen>

To clean up the source tree run the following command:

<screen>fakeroot debian/rules clean</screen>

As root you can then install the <filename>.deb</filename> package as usual:

<screen>dpkg -i ../mplayer_<replaceable>version</replaceable>.deb</screen>
</para>

<para>
Christian Marillat has been making unofficial Debian packages of
<application>MPlayer</application>, <application>MEncoder</application> and
our bitmap fonts for a while, you can (apt-)get them from
<ulink url="http://hpisi.nerim.net/">his homepage</ulink>.
</para>
</sect2>

<sect2 id="rpm">
<title>RPM packaging</title>
<para>
Dominik Mierzejewski created and maintains official Red Hat RPM packages of
<application>MPlayer</application>. They are available from his
<ulink url="http://greysector.rangers.eu.org/mplayer.html">homepage</ulink>.
</para>

<para>
Mandrake RPM packages are available from the <ulink url="http://plf.zarb.org/">P.L.F.</ulink>.
SuSE used to include a crippled version of <application>MPlayer</application>
in their distribution. They have removed it in their latest releases. You can
get working RPMs from
<ulink url="http://packman.links2linux.de/?action=128">links2linux.de</ulink>.
</para>
</sect2>

<sect2 id="arm">
<title>ARM</title>
<para>
<application>MPlayer</application> works on Linux PDAs with ARM CPU e.g. Sharp Zaurus,
Compaq Ipaq. The easiest way to obtain <application>MPlayer</application> is to get it
from one of the <ulink url="http://www.openzaurus.org">OpenZaurus</ulink> package feeds. If
you want to compile it yourself, you should look at the
<ulink url="http://openzaurus.bkbits.net:8080/buildroot/src/packages/mplayer?nav=index.html|src/.|src/packages">mplayer</ulink>
and the
<ulink url="http://openzaurus.bkbits.net:8080/buildroot/src/packages/libavcodec?nav=index.html|src/.|src/packages">libavcodec</ulink>
directory in the OpenZaurus distribution buildroot. These always have the latest
Makefile and patches used for building a CVS <application>MPlayer</application> with
<systemitem class="library">libavcodec</systemitem>.
If you need a GUI frontend, you can use xmms-embedded.
</para>
</sect2>
</sect1>

<sect1 id="bsd">
<title>*BSD</title>
<para>
<application>MPlayer</application> runs on FreeBSD, OpenBSD, NetBSD,
BSD/OS and Darwin. There are ports/pkgsrc/fink/etc versions of <application>MPlayer</application>
available that are probably easier to use than our raw sources.
</para>

<para>
To build <application>MPlayer</application> you will need GNU make
(gmake - native BSD make will not work) and a recent version of binutils.
</para>

<para>
If <application>MPlayer</application> complains about not finding <filename>/dev/cdrom</filename>
or <filename>/dev/dvd</filename>, create an appropriate symbolic link:
<screen>ln -s /dev/<replaceable>your_cdrom_device</replaceable> /dev/cdrom</screen>
</para>

<para>
To use Win32 DLLs with <application>MPlayer</application> you will need to
re-compile the kernel with &quot;<envar>option USER_LDT</envar>&quot;
(unless you run FreeBSD-CURRENT,
where this is the default).
</para>


<sect2 id="freebsd">
<title>FreeBSD</title>
<para>
If your CPU has SSE, recompile your kernel with
&quot;<envar>options CPU_ENABLE_SSE</envar>&quot; (FreeBSD-STABLE or kernel
patches required).
</para>
</sect2>

<sect2 id="openbsd">
<title>OpenBSD</title>
<para>
Due to limitations in different versions of gas (relocation vs MMX), you
will need to compile in two steps: First make sure that the non-native as
is first in your <envar>$PATH</envar> and do a <command>gmake -k</command>, then
make sure that the native version is used and do <command>gmake</command>.
</para>
<para>
As of OpenBSD 3.4 the hack above is no longer needed.
</para>
</sect2>

<sect2 id="darwin">
<title>Darwin</title>
<para>
See the <link linkend="macos">Mac OS</link> section.
</para>
</sect2>
</sect1>

<sect1 id="solaris">
<title>Sun Solaris</title>
<para>
<application>MPlayer</application> should work on Solaris 2.6 or newer.
</para>

<para>
On <emphasis role="bold">UltraSPARCs</emphasis>, <application>MPlayer</application>
takes advantage of their <emphasis role="bold">VIS</emphasis> extensions
(equivalent to MMX), currently only in
<systemitem class="library">libmpeg2</systemitem>,
<systemitem class="library">libvo</systemitem>
and <systemitem class="library">libavcodec</systemitem>, but not in
<systemitem class="library">mp3lib</systemitem>. You can watch a VOB file
on a 400MHz CPU. You'll need
<ulink url="http://www.sun.com/sparc/vis/mediaLib.html"><systemitem class="library">mLib</systemitem></ulink>
installed.
</para>

<para>
To build the package you will need GNU <application>make</application>
(<filename>gmake</filename>, <filename>/opt/sfw/gmake</filename>), native
Solaris make will not work. Typical error you get when building with
Solaris' make instead of GNU make:
<screen>
   % /usr/ccs/bin/make
   make: Fatal error in reader: Makefile, line 25: Unexpected end of line seen
</screen>
</para>

<para>
On Solaris SPARC, you need the GNU C/C++ Compiler; it does not matter if
GNU C/C++ compiler is configured with or without the GNU assembler.
</para>

<para>
On Solaris x86, you need the GNU assembler and the GNU C/C++ compiler,
configured to use the GNU assembler! The <application>MPlayer</application>
code on the x86 platform makes heavy use of MMX, SSE and 3DNOW! instructions
that cannot be compiled using Sun's assembler <filename>/usr/ccs/bin/as</filename>.
</para>

<para>
The <filename>configure</filename> script tries to find out, which
assembler program is used by your &quot;gcc&quot; command (in case the autodetection
fails, use the <option>--as=<replaceable>/wherever/you/have/installed/gnu-as</replaceable></option>
option to tell the <filename>configure</filename> script where it can find GNU
"as" on your system).
</para>

<para>
Error message from <filename>configure</filename> on a Solaris x86 system using
GCC without GNU assembler:
<screen>
   % configure
   ...
   Checking assembler (/usr/ccs/bin/as) ... , failed
   Please upgrade(downgrade) binutils to 2.10.1...
</screen>
(Solution: Install and use a gcc configured with <option>--with-as=gas</option>)
</para>

<para>
Typical error you get when building with a GNU C compiler that does not use GNU as:
<screen>
   % gmake
   ...
   gcc -c -Iloader -Ilibvo -O4 -march=i686 -mcpu=i686 -pipe -ffast-math
        -fomit-frame-pointer  -I/usr/local/include   -o mplayer.o mplayer.c
   Assembler: mplayer.c
   "(stdin)", line 3567 : Illegal mnemonic
   "(stdin)", line 3567 : Syntax error
   ... more "Illegal mnemonic" and "Syntax error" errors ...
</screen>
</para>

<para>
Due to bugs in Solaris 8, you may not be able to play DVD discs larger than 4 GB:
</para>

<itemizedlist>
<listitem><para>
The sd(7D) driver on Solaris 8 x86 has a bug when accessing a disk block >4GB
on a device using a logical blocksize != DEV_BSIZE (i.e. CD-ROM and DVD media).
Due to a 32Bit int overflow, a disk address modulo 4GB is accessed
(<ulink url="http://groups.yahoo.com/group/solarisonintel/message/22516"/>).
This problem does not exist in the SPARC version of Solaris 8.
</para></listitem>

<listitem><para>
A similar bug is present in the hsfs(7FS) filesystem code (AKA ISO9660),
hsfs may not not support partitions/disks larger than 4GB, all data is
accessed modulo 4GB
(<ulink url="http://groups.yahoo.com/group/solarisonintel/message/22592"/>).
The hsfs problem can be fixed by installing patch 109764-04 (sparc) / 109765-04 (x86).
</para></listitem>
</itemizedlist>
</sect1>

<sect1 id="irix">
<title>Silicon Graphics Irix</title>
<para>
You can either try to install the GNU install program, and (if you did
not put it in your global path) then point to the location with:
<screen>./configure --with-install=<replaceable>/path/and/name/of/install</replaceable></screen>
</para>

<para>
Or you can use the default install delivered with IRIX 6.5 in which case
you will have to edit the <filename>Makefile</filename> by hand a little bit.
Change the following two lines:
<programlisting>
  $(INSTALL) -c -m 644 DOCS/mplayer.1 $(MANDIR)/man1/mplayer.1

  $(INSTALL) -c -m 644 etc/codecs.conf $(CONFDIR)/codecs.conf
</programlisting>
to:
<programlisting>
  $(INSTALL) -m 644 mplayer.1 $(MANDIR)/man1/

  $(INSTALL) -m 644 codecs.conf $(CONFDIR)/
</programlisting>
And then do (from within the <application>MPlayer</application> source dir):
<screen>cp DOCS/mplayer.1 . ; cp etc/codecs.conf .</screen>
and then go on with building and installing.
</para>
</sect1>


<sect1 id="hp-ux">
<title>HP-UX</title>
<para>
Joe Page hosts a detailed HP-UX <application>MPlayer</application>
<ulink url="http://users.rcn.com/joepage/mplayer_on_hpux11.htm">HOWTO</ulink>
by Martin Gansser on his homepage. With these instructions the build should
work out of the box. The following information is taken from this HOWTO.
</para>

<para>
You need GCC 3.4.0 or later, GNU make 3.80 or later and SDL 1.2.7 or later.
HP cc will not produce a working program, prior GCC versions are buggy.
For OpenGL functionality you need to install Mesa and the gl and gl2 video
output drivers should work, speed may be very bad, depending on the CPU speed,
though. A good replacement for the rather poor native HP-UX sound system is
GNU esound.
</para>

<para>
Create the DVD device
scan the SCSI bus with:
</para>

<screen>
# ioscan -fn

Class          I            H/W   Path          Driver    S/W State    H/W Type        Description
...
ext_bus 1    8/16/5      c720  CLAIMED INTERFACE  Built-in SCSI
target  3    8/16/5.2    tgt   CLAIMED DEVICE
disk    4    8/16/5.<emphasis role="bold">2</emphasis>.<emphasis role="bold">0</emphasis>  sdisk CLAIMED DEVICE     <emphasis role="bold">PIONEER DVD-ROM DVD-305</emphasis>
                         /dev/dsk/c1t2d0 <emphasis role="bold">/dev/rdsk/c1t2d0</emphasis>
target  4    8/16/5.7    tgt   CLAIMED DEVICE
ctl     <emphasis role="bold">1</emphasis>    8/16/5.7.0  sctl  CLAIMED DEVICE     Initiator
                         /dev/rscsi/c1t7d0 /dev/rscsi/c1t7l0 /dev/scsi/c1t7l0
...
</screen>

<para>
The screen output shows a Pioneer DVD-ROM at SCSI address 2.
The card instance for hardware path 8/16 is 1.
</para>

<para>
Create a link from the raw device to the DVD device.
</para>

<screen>
# ln -s /dev/rdsk/c<replaceable>&lt;SCSI bus instance&gt;</replaceable>t<replaceable>&lt;SCSI target ID&gt;</replaceable>d<replaceable>&lt;LUN&gt;</replaceable> /dev/<replaceable>&lt;device&gt;</replaceable>
</screen>

<para>
Example:
</para>

<screen>
# ln -s /dev/rdsk/c1t2d0 /dev/dvd
</screen>

<para>
Below are solutions for some common problems:
</para>

<itemizedlist>
<listitem>
<para>
Crash at Start with the following error message:
<screen>
/usr/lib/dld.sl: Unresolved symbol: finite (code) from /usr/local/lib/gcc-lib/hppa2.0n-hp-hpux11.00/3.2/../../../libGL.sl
</screen>
</para>

<para>
This means that the function <systemitem>.finite().</systemitem> is not
available in the standard HP-UX math library.
Instead there is <systemitem>.isfinite().</systemitem>.
Solution: Use the latest Mesa depot file.
</para>
</listitem>

<listitem>
<para>
Crash at playback with the following error message:
<screen>
/usr/lib/dld.sl: Unresolved symbol: sem_init (code) from /usr/local/lib/libSDL-1.2.sl.0
</screen>
</para>

<para>
Solution: Use the extralibdir option of configure
<option>--with-extralibdir="/usr/lib -lrt"</option>
</para>
</listitem>

<listitem>
<para>
MPlayer segfaults with a message like this:
<screen>
Pid 10166 received a SIGSEGV for stack growth failure.
Possible causes: insufficient memory or swap space, or stack size exceeded maxssiz.
Segmentation fault
</screen>
</para>

<para>
Solution:
The HP-UX kernel has a default stack size of 8MB(?) per process.(11.0 and
newer 10.20 patches let you increase <systemitem>maxssiz</systemitem> up to
350MB for 32-bit programs). You need to extend <systemitem>maxssiz</systemitem>
and recompile the kernel (and reboot). You can use SAM to do this. (While at
it, check out the <systemitem>maxdsiz</systemitem> parameter for the maximum
amount of data a program can use. It depends on your applications, if the
default of 64MB is enough or not.)
</para>
</listitem>
</itemizedlist>

</sect1>


<sect1 id="qnx">
<title>QNX</title>
<para>
Works. You'll need to download SDL for QNX, and install it. Then run
<application>MPlayer</application> with <option>-vo sdl:photon</option>
and <option>-ao sdl:nto</option> options, and it should be fast.
</para>

<para>
The <option>-vo x11</option> output will be even slower than on Linux,
since QNX has only X <emphasis>emulation</emphasis> which is VERY slow. Use SDL.
</para>
</sect1>

<sect1 id="windows">
<title>Windows</title>

<para>Yes, <application>MPlayer</application> runs on Windows under
  <ulink url="http://www.cygwin.com/"><application>Cygwin</application></ulink> and
  <ulink url="http://www.mingw.org/"><application>MinGW</application></ulink>.
  It does not have a GUI yet, but the command line version is almost completely
  functional. <ulink url="../../tech/patches.txt">Patches</ulink> are always welcome.
  You should check out the
  <ulink url="http://mplayerhq.hu/mailman/listinfo/mplayer-cygwin/">mplayer-cygwin</ulink>
  mailing list for help and latest information.</para>

<para>Best results are achieved with the native DirectX video output driver
  (<option>-vo directx</option>) and the native Windows waveout audio driver
  (<option>-ao win32</option>). Alternatives are OpenGL and SDL, but OpenGL
  performance varies greatly between systems and SDL is known to
  distort sound and video or crash on some systems. If the image is
  distorted, try turning off hardware acceleration with
  <option>-vo directx:noaccel</option>. Download
  <ulink url="http://www.mplayerhq.hu/MPlayer/releases/win32-beta/contrib/dx7headers.tgz">DirectX 7 header files</ulink>
  to compile the DirectX video output driver. Furthermore you need to have
  DirectX 7 or later installed for the DirectX video output driver to work.
  </para>

<para><link linkend="vidix">VIDIX</link> now works under Windows as
  <option>-vo winvidix</option>, although it is still experimental
  and needs a bit of manual setup. Download
  <ulink url="http://www.mplayerhq.hu/MPlayer/releases/win32-beta/dhahelperwin/dhahelper.sys">dhahelper.sys</ulink> or
  <ulink url="http://www.mplayerhq.hu/MPlayer/releases/win32-beta/dhahelperwin/withmtrr/dhahelper.sys">dhahelper.sys (with MTRR support)</ulink>
  and copy it to the
  <filename class="directory">libdha/dhahelperwin</filename> directory in your
  <application>MPlayer</application> source tree.
  Open a console and change to that directory. Then type

  <screen>gcc -o dhasetup.exe dhasetup.c</screen>

  and execute

  <screen>dhasetup.exe install</screen>

  as Administrator. After that you will have to reboot. When you are
  done, copy the <systemitem class="library">.so</systemitem> files from
  <filename class="directory">vidix/drivers</filename> to the
  <filename class="directory">mplayer/vidix</filename> directory
  relative to your <filename>mplayer.exe</filename>.</para>

<para>For best results <application>MPlayer</application> should use a
  colorspace that your video card supports in hardware. Unfortunately many
  Windows graphics drivers wrongly report some colorspaces as supported in
  hardware. To find out which, try

  <screen>mplayer -benchmark -nosound -frames 100 -vf format=<replaceable>colorspace</replaceable> <replaceable>movie</replaceable></screen>

  where <replaceable>colorspace</replaceable> can be any colorspace
  printed by the <option>-vf format=fmt=help</option> option. If you
  find a colorspace your card handles particularly bad
  <option>-vf noformat=<replaceable>colorspace</replaceable></option>
  will keep it from being used. Add this to your config file to permanently
  keep it from being used.</para>

<para>You can use Win32 codecs and Real Win32 codecs (not Real Linux codecs)
  if you want to. Put the codecs somewhere in your path or pass
  <option>--with-codecsdir=<replaceable>c:/path/to/your/codecs</replaceable></option> (alternatively
  <option>--with-codecsdir=<replaceable>/path/to/your/codecs</replaceable></option> only on
  <application>Cygwin</application>) to <filename>configure</filename>. We
  have had some reports that Real DLLs need to be writable by the user running
  <application>MPlayer</application>, but only on some systems. Try making
  them writable if you have problems. QuickTime DLLs also work, but you will
  have to put them in your Windows system directory
  (<filename class="directory"><replaceable>C:\Windows\system\</replaceable></filename>
  or similar). As a last resort, try putting them in the same directory as
  <application>MPlayer</application>.</para>

<para>You can play VCDs by playing the <filename>.DAT</filename> or <filename>.MPG</filename> files
  that Windows exposes on VCDs. It works like this (adjust for the drive letter
  of your CD-ROM):</para>

<screen>mplayer <replaceable>d:/mpegav/avseq01.dat</replaceable></screen>

<para>DVDs also work, adjust <option>-dvd-device</option> for the drive letter
  of your DVD-ROM:</para>

<screen>mplayer dvd://<replaceable>&lt;title&gt;</replaceable> -dvd-device <replaceable>d</replaceable>:</screen>

<para>The <application>Cygwin</application>/<application>MinGW</application>
  console is rather slow. Redirecting output or using the
  <option>-quiet</option> option has been reported to improve performance on
  some systems. Direct rendering (<option>-dr</option>) may also help.
  You can prevent OSD flicker through double buffering with the
  <option>-double</option> option. If playback is jerky, try
  <option>-autosync 100</option>. If some of these options help you, you
  may want to put them in your config file.</para>

<para>Sascha Sommer releases official Windows binaries from time to time,
  Joey Parrish makes unofficial Windows packages complete with installer.
  Look for these in the Windows section of
  <ulink url="http://www.mplayerhq.hu/homepage/design7/projects.html#windows">our projects page</ulink>.</para>

<sect2 id="cygwin">
<title><application>Cygwin</application></title>

<para>You need to run <application>Cygwin</application> 1.5.0 or later in
  order to compile <application>MPlayer</application>.</para>

<para>DirectX header files need to be extracted to <filename class="directory">/usr/include/</filename> or
  <filename class="directory">/usr/local/include/</filename>.</para>

<para>Instructions and files for making SDL run under
  <application>Cygwin</application> can be found on the
  <ulink url="http://www.libsdl.org/extras/win32/cygwin/">libsdl site</ulink>.</para>

</sect2>


<sect2 id="mingw">
<title><application>MinGW</application></title>

<para>Installing a version of <application>MinGW</application> that could
  compile <application>MPlayer</application> used to be quite tricky, but it
  works out of the box now. Just install <application>MinGW</application>
  3.1.0 or later and MSYS 1.0.9 or later and tell the MSYS postinstall that
  <application>MinGW</application> is installed.</para>

<para>Extract DirectX header files to <filename class="directory">/mingw/include/</filename>.</para>

<para>MOV compressed header support requires
  <ulink url="http://www.gzip.org/zlib/">zlib</ulink>, which
  <application>MinGW</application> does not provide by default.
  Configure it with <option>--prefix=/mingw</option> and install
  it before compiling <application>MPlayer</application>.</para>

</sect2>


</sect1>

<sect1 id="macos">
<title>Mac OS</title>
<para>
Only Mac OS X 10.2 and up is supported by the "raw"
<application>MPlayer</application> source. Feel free to make support for older
Mac OS versions and send patches!
</para>

<para>
Apple's modified GCC 3.x is preferred for compiling
<application>MPlayer</application> especially when using
<systemitem class="library">libavcodec</systemitem> as Apple's
modified GCC 2.95.x doesn't support C99 syntax well.
</para>

<para>
One can get an Aqua GUI for <application>MPlayer</application> together with
compiled <application>MPlayer</application> binaries for Mac OS X from the
<ulink url="http://mplayerosx.sf.net/">MPlayerOSX</ulink> project.
</para>
</sect1>

<sect1 id="amiga">
<title>Amiga/MorphOS (GeekGadgets)</title>
<para>
Nicholas Det at Genesi has done a big and powerful port of <application>MPlayer
</application> for MorphOS. Sadly it's based on the 0.90 series.
</para>

<para>
Get if from <ulink url="http://www.morphzone.org/">MorphZone</ulink>:
<itemizedlist>
<listitem><para>
<ulink url="http://www.morphzone.org/modules/mydownloads/singlefile.php?lid=90">
<application>MPlayer</application> 0.91 binary</ulink>
</para></listitem>
<listitem><para>
<ulink url="http://www.morphzone.org/modules/mydownloads/singlefile.php?lid=91">
<application>MPlayer</application> 0.91 source</ulink>
</para></listitem>
<listitem><para>
<ulink url="http://www.morphzone.org/modules/mydownloads/singlefile.php?lid=92">
<application>MEncoder</application> 1.0pre3 binary</ulink>
</para></listitem>
</itemizedlist>
</para>
</sect1>

</chapter>
