Table of Contents
0. How to read this documentation
If you are a first-time installer: be sure to read everything from here to the end of the Installation section, and follow the links you will find. If you have any other questions, return to the TOC (Table of Contents) and search for the topic, read the FAQ, or try grepping though the files.
The main rule of this documentation: if it's not documented, it does not exist. If I don't say you encode audio from TV tuner, you can't. A healthy quantity of combining ability is welcomed, though. Good luck. You'll need it :)
MPlayer is a movie player for LINUX (runs on many other Unices, and non-x86 CPUs, see section 6). It plays most MPEG, VOB, AVI, VIVO, ASF/WMV, QT/MOV, FLI, RM, NuppelVideo, yuv4mpeg, FILM, RoQ files, supported by many native, XAnim, and Win32 DLL codecs. You can watch VideoCD, SVCD, DVD, 3ivx, and even DivX movies too (and you don't need the avifile library at all!). The another big feature of mplayer is the wide range of supported output drivers. It works with X11, Xv, DGA, OpenGL, SVGAlib, fbdev, AAlib, DirectFB, but you can use GGI and SDL (and this way all their drivers) and some lowlevel card-specific drivers (for Matrox, 3Dfx and Radeon) too! Most of them supports software or hardware scaling, so you can enjoy movies in fullscreen. MPlayer supports displaying through some hardware MPEG decoder boards, such as the DVB and DXR3/Hollywood+ ! And what about the nice big antialiased shaded subtitles (10 supported types!!!) with european/ISO 8859-1,2 (hungarian, english, czech, etc), cyrillic, korean fonts, and OSD?
MPlayer is basically GPL, but contains some non-GPL code which is not allowed to be distributed in binary form, and also contains the OpenDivX library which has special license. We are still developing towards GPL.
Distributing MPlayer in the form of binaries and/or binary packages is currently impossible, speaking about both technical and law areas. Detailed information can be found in the second part of this file, and it is recommended to read it.
My player is rock solid playing damaged MPEG files (useful for some VCDs), and it plays bad AVI files which are unplayable with the famous windows media player. Even AVI files without index chunk are playable, and you can temporarily rebuild their indexes with the -idx option, or permanently with MEncoder, thus enabling seeking! As you see, stability and quality are the most important things, but the speed is also amazing.
This began a year ago... I (A'rpi) have tried lots of players under linux (mtv,xmps,dvdview,livid/oms,videolan, xine,xanim,avifile,xmmp) but they all have some problem. Mostly with special files or with audio/video sync. Most of them is unable to play both MPEG1, MPEG2 and AVI (DivX) files. Many players have image quality or speed problems too. So I've decided to write/modify one...
In this chapter I'll try to guide you through the compiling and configuring process of MPlayer. It's not easy, but it won't neccessarily be hard. If you experience a different behaviour than what I explain, please search through this documentation and you'll find your answers. If you see links, please follow them and read carefully what they contain. It will take some time, but it DOES worth it.
You need a fairly recent system. On Linux, 2.4.x kernels are recommended.
SOFTWARE REQUIREMENTS
CODECS
libvorbis
properly. Use deb/rpm packages if available, or
compile from
source
(this is a nightly updated tarball of vorbis CVS).VIDEOCARDS
There are generally two kind of videocards. One kind (the newer cards) has hardware scaling and YUV acceleration support, the other cards don't.
YUV cards
They can display and scale (zoom) the picture to any size that fits in their memory, with small CPU usage (zooming doesn't increase it!), thus you get a nice and very fast fullscreen playing.
Non-YUV cards
Fullscreen playing can be achieved by either zooming
by software (use the option -zoom, but i warn you: this is slooow!),
or changing to a smaller videomode, for
example to 352x288. If you don't have YUV accel, this latter method is
the recommended one. Throughout MPlayer, this behaviour can
be switched on by using the -vm
option and with
the following drivers :
SOUNDCARDS
FEATURES
usleep()
to tune
A/V sync, with +/- 10ms accuracy. However sometimes the sync has to be tuned
even finer. The new timer code uses PC's RTC (Real Time Clock) for this task,
because it has precise 1ms timers. This requires root, or a setuid root
MPlayer binary (or a little kernel hacking, but that's unadvised). You
can see the new timer's efficiency in the status line. The third timer
code is turned on with the -softsleep
option. It has the
efficiency of the RTC, but it doesn't use RTC. On the other hand,
it requires more CPU. Note: NEVER install setuid MPlayer binary on a
multiuser system! It's a clear way for everyone to gain root.Then build MPlayer:
./configure make make install
At this point, MPlayer is ready to use. The directory
/usr/local/share/mplayer
contains the codecs.conf
file, which is used to tell the program all the codecs and their capabilities.
This file should always be kept uptodate together with the main binary !
Check if you have codecs.conf in your home directory (~/.mplayer/codecs.conf)
left from old MPlayer versions, and remove it!
Debian users can build a .deb package for themselves, it's very
simple. Just exec fakeroot debian/rules binary
in MPlayer's
root dir. Detailed instructions can be found here.
ALWAYS browse the output of ./configure, and the
configure.log
file, they contain info about what will be built,
and what won't. You may also want to view config.h and config.mak files.
If you have some libs installed, but not detected by ./configure, then check
if you also have the proper header files (usually the -dev packages) and
their version matches. The configure.log usually tells you what is missing.
Though not mandatory, the fonts should be installed in order to gain OSD, and subtitle functionality. Download mp-arial-iso-8859-*.zip and/or optional (if exists) language updates. It's VERY RECOMMENDED to check section 1.5 for details.
mkdir ~/.mplayer/font cd ~/.mplayer/font unzip mp-arial-iso-8859-1.zip
The GUI needs GTK (it isn't GTK, but the panels are). The skins are stored
in PNG format, so gtk, libpng (and their devel stuff) has to be installed.
You can build it by specifying --enable-gui
during ./configure .
Then, to turn on GUI mode, you either
-gui
optiongui=yes
in your config fileln -s /usr/local/bin/mplayer /usr/local/bin/gmplayer
,
and call gmplayer
instead.
HINT: use the middle button (on 2 button mice press left and right simultaneously) for a popup GTK menu, with DVD playing option!
As MPlayer doesn't have a skin included, you have to download them
if you want to use the GUI. See the download page.
They should be extracted to the usual system-wide directory (/usr/local/share/mplayer/Skin
),
or to $HOME/.mplayer/Skin
. MPlayer by default looks in
these directories for a default named directory, but you can use the
-skin newskin option, or the skin=newskin config file
directive to use the skin in */Skin/newskin
directory.
MPlayer can display subtitles along with movie files. Currently the following formats are supported:
VobSub subtitles
VobSub subtitles consist of a big (some megabytes) .SUB file, and optional
.IDX and/or .IFO files.
Usage : if you have files like sample.sub
, sample.ifo
,
sample.idx
- you have to pass the -vobsub sample -vobsubid
<id>
options (optionally with pathname, of course). The
-vobsubid
option is like -sid
for DVDs, you can
choose between subtitle tracks (languages) with it.
Other subtitles
The other formats consist of a single text file containing timing, placement
and text information.
Usage : if you have a file like sample.txt
, you have to pass
the option -sub sample.txt (optionally with pathname, of course).
Adjusting subtitle timing and placement
-subdelay <sec>
: Delays subtitles by <sec> seconds. Can be negative.
-subfps <rate>
: Specify frame/sec rate of subtitle file (float number)
-subpos <0 - 100>
: Specify the position of subtitles.
If you experience a growing delay between the movie and the subtitles when using a MicroDVD
subtitle file, most likely the frame rate of the movie and the subtitle file are different.
Please note that the MicroDVD subtitle format uses absolute frame numbers for its
timing, and therefore the -subfps
option cannot be used with this format. As
MPlayer has no way to guess the frame rate of the subtitle file, you have to manually
convert the frame rate. There is a little perl script in the contrib
directory of
the MPlayer ftp site to do this conversation for you.
About DVD subtitles, read the DVD section.
MPlayer introduces a new subtitle format called MPsub. It was designed by me (Gabucino). Basically its main feature is being dynamically time-based (although it has frame-based mode too). Example (from DOCS/tech/mpsub.sub) :
# first number : wait this much after previous subtitle disappeared
# second number : display the current subtitle for this many seconds
15 3
A long, long time ago...
0 3
in a galaxy far away...
0 3
Naboo was under an attack.
So you see, the main goal was to make subtitle editing/timing/joining/cutting easy. And,
if you - say - get an SSA subtitle but it's badly timed/delayed to your
version of the movie, you simply do a mplayer dummy.avi -sub source.ssa
-dumpmpsub . A dump.mpsub
file will be created in the
current directory, which will contain the source subtitle's text, but in
MPsub format. Then you can freely add/substract seconds to/from the
subtitle.
Subtitles are displayed with a technique called 'OSD', On Screen Display. OSD is used to display current time, volume bar, seek bar etc.
INSTALLING OSD and SUB
You need an MPlayer font package to be able to use OSD/SUB feature. There are many ways to get it:
After that, UNZIP the file you downloaded to ~/.mplayer
or
$PREFIX/share/mplayer
. Then rename or symlink one of them to
font
(like : ln -s ~/.mplayer/arial-24
~/.mplayer/font
). Now you have to see a timer at the upper left corner
of the movie (switch it off with 'o').
OSD has 3 states: (switch with 'o')
You can change default behaviour by setting osdlevel=
variable in config file.
2.3. Video & Audio output devices
2.4. MEncoder - An All-Purpose Encoder
2.5.1. Overview
This section is about how to enable watching/grabbing from V4L compatible TV tuner.
2.5.2. Compilation
./configure
will autodetect kernel headers
of v4l stuff, and the existence of /dev/video* entries. If they exist,
TV support will be built (see configure's output!).Hint : are the colors messed up? Then your tuner can't display
in YV12 colorspace. Try I420 (you must use the -vc rawi420
option too!), or YUY2, UYVY, RGB32 (this one
with -vo sdl
) colorspaces.
You can specify these with the outfmt=YV12
option see below.
2.5.3. Available options
on | use TV input | ||
noaudio | thanx, no sound | ||
driver |
dummy - NULL TV input :) Used for testing only, generates dummy
input. v4l - captures images from standard V4L interface (default /dev/video0 ) |
||
device | specify other
device than the default /dev/video0 |
||
input | give from which
input of the TV tuner you wish to grab from (e.g. television,
s-video, composite, ...) Prints the available ones during init. |
||
freq | specify the frequency to set the tuner (e.g. 511.250) | ||
outfmt | in which output
format should the tuner transport images to us (rgb32, rgb24, yv12,
uyvy, i420 (for i420 you have to pass the -vc rawi420
option, because of a fourcc conflict)) |
||
width | the width of the output window, in pixels | ||
height | the height of the output window, in pixels | ||
norm | available: PAL, SECAM, NTSC | ||
channel | set the tuner to the given channel | ||
chanlist |
available: us-bcast, us-cable, europe-west, europe-east, etc |
2.5.4. Keyboard control
h or l | select previous/next channel | ||
n | change norm | ||
b | change channel list | ||
2.5.5. Examples
Dummy output, to AAlib :)
mplayer -tv on:driver=dummy:width=640:height=480 -vo aa
Input from standard V4L
mplayer -tv on:driver=v4l:width=640:height=480:outfmt=i420 -vc rawi420 -vo xv
2.6. Video filters
2.6.1. Overview
Both MPlayer and MEncoder supports using a universal video filter layer, which comprises of numerous plugins - listed and explained below. These plugins can perform various actions on the image, such as rescale, crop black borders (useful not only for encoding but for playing too, since black borders increase bus usage, and cropping these can boost playing speed on slow boards), expand image (for SVCDs).
With this filter layer it's possible to perform fast image format conversion
between the various RGB and YUV when neccessary. This enables for example
playing RGB data on xv
and xmga
outputs, amongst
others. (see the Scale filter)
The layer also does Direct Rendering between the plugins, to maximize the speed.
Note that the postprocessing code is now also a part of the layer. It will be explained below.
2.6.2. Usage
mplayer/mencoder -vop filter1,filter2,filter3,...
This sets up a filter pipeline (you can use any number of filters). Their parameters are optional and if omitted, some of them are set to default values, like x and y are both set to the center of the screen, and width and height will be set to the movie's width and height.
Filters are queued starting from libvo, so filter1
will be the
last called filter (after that libvo comes, or when using MEncoder,
encoding).
2.6.3. Crop
Description:
Crops the given part of the image, and discards the rest. Useful for removing black bands of widescreen movies.
Usage:
-vop crop[=width:height:x:y]
2.6.4. Expand
Description:
Expands (NOT scales) movie resolution to the given value, and places the unscaled original to x y. For movies that don't contain black bands, this can be used to add them. This is good when creating SVCDs, or using with the SDL video output which can place subtitles in these bands.
Usage:
-vop expand[=width:height:x:y]
2.6.5. Fame
Hmm, segfaulted. :)
2.6.6. Flip
Description:
Simply flips image. Useful for some old codecs which can output only flipped image (these are autodetected).
Usage:
-vop flip
2.6.7. Format
Description:
This filter is NOT image format converter. It just forces the next filter (or libvo) which image format to use. Useful for cards with slow YV12, like tdfx and Savage4. For real conversion, use the Scale filter.
Usage:
-vop format[=format]
(where
format
can be for example: rgb32, yuy2, etc...)
2.6.8. Postprocess
Description:
This is our good old postprocess, juts converted to the filter layer.
Performs image quality enhancement, deinterlacing, etc, see
-npp help
for available options.
Usage:
-vop pp[=postprocess options/keywords]
2.6.9. RGB2BGR
Description:
Performs RGB 24/32 <-> BGR 24/32 colorspace conversion (default behaviour) or RGB 24/32 <-> RGB 24/32 conversion with R<->B swapping (with the 'swap' option)
Usage:
-vop rgb2bgr[=swap]
2.6.10. Rotate
What are the parameters?
2.6.11. Scale
Description:
Scales the image with the software scaler (slow). You can adjust the
quality of the scaler with the -sws
option, see the manpage.
Nice quality implies speed loss.
NOTE: calling this filter with no options means colorspace conversion! This is useful for codecs which can't output in the needed format for the specified video output device. These are hopefully autodetected and scale filter is called to convert. In other cases, you can use it manually.
Usage:
-vop scale[=width:height]
2.6.12. VO
WTF
2.6.13. YUY2
Description:
Forced software YV12/I420 to YUY2 conversion.
Usage:
-vop yuy2
MPlayer utilizes a complex playtree. It consists of global options
written as first (for example mplayer -vfm 5
), and options
written after filenames, that apply only to the given filename/URL/whatever
(for example mplayer -vfm 5 movie1.avi movie2.avi -vfm 4
).
You can group filenames/URLs together using { and }. It's useful with
option -loop: mplayer { 1.avi -loop 2 2.avi } -loop 3
will play files in this order: 1 1 2 1 1 2 1 1 2
file | mplayer [options] [path/]filename | ||
files | mplayer [default options] [path/]filename1 [options for filename1] filename2 [options for filename2] ... | ||
VCD | mplayer [options] -vcd trackno [-cdrom-device /dev/cdrom] | ||
DVD | mplayer [options] -dvd titleno [-dvd-device /dev/dvd] | ||
net | mplayer [options] http://site.com/file.asf (playlists can be used too) | ||
Latest versions of MPlayer also accepts VCD and DVD tracks in URL style, just like
Xine does: mplayer dvd://1
or mplayer vcd://1
mplayer -vo x11 /mnt/Films/Contact/contact2.mpg mplayer -vcd 2 mplayer -afm 3 /mnt/DVDtrailers/alien4.vob mplayer -dvd 1 -dvd-device /dev/hdc mplayer -abs 65536 -delay -0.4 -nobps ~/movies/test.avi
<- or -> | seek backward/forward 10 seconds | ||
up or down | seek backward/forward 1 minute | ||
pgup/pgdown | seek backward/forward 10 minutes | ||
< or > | seek backward/forward in playlist | ||
p or SPACE | pause movie (press any key) | ||
q or ESC | stop playing and quit program | ||
+ or - | adjust audio delay by +/- 0.1 second | ||
/ or * | decrease/increase volume | ||
f | toggle fullscreen | ||
o | toggle OSD: none / seek / seek+timer | ||
z or x | adjust subtitle delay by +/- 0.1 second | ||
(the following keys are valid only when using | |||
1 or 2 | adjust contrast | ||
3 or 4 | adjust brightness | ||
5 or 6 | adjust hue | ||
7 or 8 | adjust saturation |
GUI keyboard control
, and . | previous / next file | ||
gray - or + | decrease / increase volume | ||
enter | start playing | ||
space | pause | ||
s | stop | ||
a | about | ||
l | load file | ||
b | skin browser | ||
e | toggle equalizer | ||
p | toggle playlist | ||
f | toggle fullscreen | ||
m | toggle mute |
TV input control
h or l | select previous/next channel | ||
n | change norm | ||
b | change channel list |
Linux Infrared Remote Control - use an easy to build home-brewn IR-receiver, an (almost) arbitrary remote control and control your linux box with it! More about it at www.lirc.org.
If you have installed the lirc-package, you can compile MPlayer with LIRC support using ./configure --enable-lirc
If everything went fine, MPlayer will print a message like LIRC init was successful. on startup. If an error occurs it will tell you. If it doesn't tell you anything about LIRC there's no support compiled in. That's it :-)
The application name for MPlayer is - oh wonder - 'mplayer'. It understands the following commands:
PAUSE | pause playing. Any other keystroke will continue replay. | ||
QUIT | exit MPlayer | ||
RWND | 10 secs back | ||
FRWND | 60 secs back | ||
FWD | skip 10 secs | ||
FFWD | skip 60 secs | ||
INCVOL | increase volume one percent | ||
DECVOL | decrease volume one percent | ||
PCM | use pcm mixer channel | ||
Don't forget to enable the repeat flag for RWND/FWD in .lircrc. Here's an excerpt from my .lircrc:
begin remote = CU-SX070 prog = mplayer button = Tape_Play repeat = 1 config = FFWD end begin remote = CU-SX070 prog = mplayer button = Tape_Stop config = QUIT end
If you don't like the standard location for the lirc-config file (~/.lircrc) use the -lircconf <filename> switch to specify another file.
3.4. Streaming from network or pipes
MPlayer can play files from network, using the HTTP or MMS protocol.
Playing goes by simply using adding the URL to the command line. MPlayer also honours the HTTP_PROXY environment variable, and uses proxy if available. Proxy usage can also be forced :
mplayer http_proxy://proxy.micorsops.com:3128/http://micorsops.com:80/stream.asf
MPlayer can read from stdin (NOT named pipes). This can be for example used to play from FTP:
wget ftp://micorsops.com/something.avi -O - | mplayer -
Note: it's also recommended to enable CACHE when playback from network:
wget ftp://micorsops.com/something.avi -O - | mplayer -cache 8192 -
To build the package, get the cvs version, or .tgz and uncompress it, and cd into programs directory:
cd main fakeroot debian/rules binary
(... mplayer detects hardware/software, builds itself and.. ) dpkg-deb: building package `mplayer' in `../mplayer_0.18-1_i386.deb'.
And now just become root, and:
dpkg -i ../mplayer_0.18-1_i386.deb as root.
Here's how it looks like:
eyck@incubus:/src/main$ sudo dpkg -i ../mplayer_0.18-1_i386.deb Password: (Reading database ... 26946 files and directories currently installed.) Preparing to replace mplayer 0.17a-1 (using ../mplayer_0.18-1_i386.deb) Unpacking replacement mplayer ... Setting up mplayer (0.18-1) ...
To build the package you will need GNU make (gmake, /usr/ports/devel/gmake), native BSD make will not work.
To run MPlayer you will need to re-compile the kernel with "options USER_LDT" (unless you are running -CURRENT, where this is default). If you have a CPU with SSE also use "options CPU_ENABLE_SSE" to use it (FreeBSD-STABLE required, or use kernel patches).
If MPlayer complains about "CD-ROM Device '/dev/cdrom' not found!" make a
symbolic link: ln -s /dev/(your_cdrom_device) /dev/cdrom
There's no DVD support for FreeBSD yet.
MPlayer should work on Solaris 2.6 or newer.
AVI file playback works best on Solaris x86, because you have the option to use the win32 codecs on the x86 platform, or can use MMX/MMX2/3DNow/etc instructions for MP3/DivX/DVD/whatever. On Solaris SPARC, you'll find quite a few AVI files with non working video and/or audio playback, because the video/audio codecs using the Win32 DLLs are not available. However, DivX/OpenDivX movies should work, when using libavcodec.
On UltraSPARCs, MPlayer takes advantage of their VIS extensions (equivalent to MMX), currently only in libmpeg2, libvo and libavcodec, but not in mp3lib. You can watch a VOB file on a 400Mhz CPU. You'll need mLib installed.
To build the package you will need GNU make (gmake, /opt/sfw/gmake), native Solaris make will not work. Typical error you get when building with solaris' make instead of GNU make:
% /usr/ccs/bin/make make: Fatal error in reader: Makefile, line 25: Unexpected end of line seen
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.
On Solaris x86, you need the GNU assembler and the GNU C/C++
compiler, configured to use the GNU assembler! The mplayer code on
the x86 platform makes heavy use of MMX, SSE and 3DNOW!
instructions that cannot be compiled using Sun's assembler
/usr/ccs/bin/as
.
The configure script tries to find out, which assembler program is used by your "gcc" command (in case the autodetection fails, use the "--as=/whereever/you/have/installed/gnu-as" option to tell the configure script where it can find GNU "as" on your system).
Error message from configure on a Solaris x86 system using GCC without GNU assembler:
% configure ... Checking assembler (/usr/ccs/bin/as) ... , failed Please upgrade(downgrade) binutils to 2.10.1...
(Solution: Install and use a gcc configured with "--with-as=gas")
Typical error you get when building with a GNU C compiler that does not use GNU as:
% 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 ...
For DVD support you must have the patched libcss installed. Patch: http://www.tools.de/solaris/mplayer/.
Due to two bugs in solaris 8 x86, you cannot reliably play DVDs using a capacity >4GB:
On Solaris with an UltraSPARC CPU, you can get some extra speed by using the CPU's VIS instructions for certain time consuming operations. VIS acceleration can be used in MPlayer by calling functions in Sun's mediaLib.
VIS accelerated operations from mediaLib are used for mpeg2 video decoding and for color space conversion in the video output drivers.
MPlayer is reported to compile on StrongARM. Use the following command line:
./configure --target=arm-linux --disable-css --with-x11libdir=/usr/arm/lib --with-x11incdir=/usr/arm/lib --disable-gcc-checking
6.5. Silicon Graphics Indigo / IRIX
Reported working. You'll probably have to use the sgi ao driver. Anyone has closer info?
Works. You'll need to download SDL for QNX, and install it. Then run
MPlayer with -vo sdl:photon
and -ao sdl:nto
options, and it should be fast.
The -vo x11
output will be even slower than on Linux, since
QNX has only X emulation which is VERY slow. Use SDL.
NOTE: Do *NOT* send bugreports, help & feature requests directly to the authors!
Read Appendix C and subscribe to mplayer-users mailing lists.
The MPlayer project:
zr
video output driverMain testers:
The codecs, libs:
Their code is not used in current player version, but I've got some ideas or other technical help from:
Appendix A/2 - MPlayer code and documentation maintainers
Homepage
English documentation
Documentation translations
Platforms/ports
MPlayer code:
libvo drivers:
VIDIX drivers:
libao2 drivers:
TOOLS:
There are some public mailing lists on MPlayer. Subscribing can be achieved on the following addresses:
This list is about mplayer development! Talking about interface/API changes, new libraries, code optimization, ./configure changes, and send patches here. Do NOT send bugreports, user questions, feature requests, flame here! This list should be kept low-traffic.
Send matrox-related questions here
Things related to the hardware decoder card called DVB. (NOT dxr3!)
Send only questions about CVS changes here. (if you don't understand why a change is required or you've better fix or you've noticed possible bug/problem in the commited patch) Be sure in that your target developer reads this list!
NOTE: language of above lists are ENGLISH, unless explicitly stated otherwise. Please do not send messages using other language!
NOTE: you can reach the searchable mailing list archives here.
Appendix C - How to report bugs
Special system/cpu-specific bugs/problems:
-ac ffmpeg
)Various A-V sync and other audio problems:
General audio delay or jerky sound (exists with all or many files):Video-out problems:
First note: options -fs -vm and -zoom are just recommendations, not (yet) supported by all drivers. So it isn't a bug if it doesn't work. Only a few driver supports scaling/zooming, don't expect this from x11 or dga.
OSD/sub flickering:
- x11 driver: sorry, it can't be fixed now
- xv driver: use -double option
Green image using mga_vid (-vo mga / -vo xmga):
- mga_vid missdetected your card's RAM amount, reload it using mga_ram_size option