You should copy libavcodec stuff from
ffmpeg CVS or distributive
into
mplayerxp/codecs/libavcodec subfolder. Also you may install it sepraratedly
as:
./configure --prefix=/usr --enable-shared=yes
But in this case you should be ready to have binary incompatibility between
upgrades!
Was found way to get MPlayerXP working under VESA!!! It's not a secret that
MPlayerXP produced coredump after start with
-vo vesa with mounted
ext3fs volume.
Unfortunately, the problem has
NO SOLUTION with
linux-2.4+linuxthreads :(
It seems, that you will be lacky only with linux-2.6.x+nptl (which is part of
glibc since 2.3.3 version)!
You need to upgrade your system as described below:
- gcc-3.2.4+
- linux-kernel-2.6.x
- glibc(2.3.4+) + NPTL(new POSIX thread library)
If you prefer to use
Linux-2.4.x kernel then only way to have working VESA
for you is dismounting of all mounted ext3fs volumes.
First, you need to download
Cygwin-1.5
or better. (
Most probably in the future MPlayerXP will be ported on
MINGW32 too).
Brief recommendation
for proper
Cygwin's configuration: if you have downloaded
tar.bz2 from any of Cygwin's mirror (without
using of
setup.exe) then you need to create proper batch file to
have working environment:
@ECHO OFF
SET TERM=UNIX
SET MODE=UNIX
SET MAKE_MODE=UNIX
SET PATH=C:\CygDrive\usr\bin;%PATH%
umount --remove-all-mounts
mount C:/CygDrive /
bash
After successfull installation of
Cygwin you need download win32 port
of
SDL-1.2.8 or better.
(At the momemnt
of writing of this howto there was available mingw32 port of SDL
only. But it doesn't bring any troubles). You just need to copy SDL.DLL into
$cydrive/usr/bin folder and include files into $cydrive/usr/include/SDL folder.
If everything looks OK then type
./configure and
make in mplayerxp
subfolder. Right now you don't have
make install feature of the project
so you need to perform some operation by hands (it's not a black-art ;)
After successfull compilation of the project you should copy by hands
binaries into separate folder. Finally you should have somethjing like this:
SDL.DLL
codecs.conf
cygiconv-2.dll
cygwin1.dll
cygz.dll
mplayerxp.exe
codecs
libMP3.so
liba52.so
libavcodec.so
libfaad2.so
libmpeg2.so
libnuppelvideo.so
In this configuration you will have working
-ao sdl,
-ao oss and
-vo sdl
drivers.
SDL library is not a perfect solution for win32 operating systems
but is ready to use right now!
Note!!!At the moment of writing of this article support of
libloader.so
is not available. Most probably it would be correctly to write ac_win32 and vc_win32
from scratch.
Note!!!Win32 developers and porters are welcomed!!!
It's most actual question when you are using player ;)
Exist a several ways to speedup playback with MPlayerXP:
- Using VIDIX if available!!! It avoids unnecessary memcpy of decoded frame due
direct access to video memory! (Some commercial drivers provide busmastering
for their cards but almost all X11 drivers don't support this feature). If
VIDIX driver support that you may activate busmastering too! Use
'-enable_bm' key of command line for that (please don't forget to load
dhahelper driver as 'modprobe dhahlper').
- Using
'-forcegl' with '-vo sdl' if available!!!
Unfortunatedly, sometime it's only way to activate busmastering on your
videocard that may extremedly speedup video playback on your hardware. Furthermore,
many world-leading companies (like ATI) suggest to perform videoplayback through
OpenGL framebuffer. They have planes to cutoff YUV-scaler (aka VideoOverlay) from further
chips since OpenGL framebuffer provides more possibilities for HW accelerating of
postprocessing and similar things.
-
Enable DMA for your HDD! Almost all modern Linux distributives enable
this feature for all installed HDDs. But if you are using relatively old
linux distributive then you may force DMA as:
'/bin/sh hdparm -u1 -d1 -a8 /dev/hdX'.
- Use correct AUDIO driver. It's not a secret that modern audiocards
may have broken/incomplete drivers. So you may try different drivers for audio
playback such as:
'-ao sdl', '-ao alsa', '-ao oss'.
- Try disable OSD by pressing
'O' key twice.
- You you are owner of relatively "old" videocard then you may try
to play with different video codecs. For example:
'3D Rage IIC AGP'
doesn't support planar fourcc! If you are using default video codec '-vfm ffmpeg'
then you will force MPlayerXP to use software YV12 to YUY2 convertion and
will have slower total frame decoding than with using of '-vfm dshow'
codec family which are capable to render YUY2 directly into video card!
- If you are using
'-vo xv' then you may try to use '-vf yuy2'.
Thus MPlayerXP will force MMX optimized YV12 to YUY2 convertion! It's not
a secret that almost all Xv drivers forces unoptimized YV12 to YUY2 convertion
regardless the fact that hardware is capable to support planar formats directly!
- If nothing from listed above helps then most probably you are having slow CPU.
In this case you may try
'-framedrop' and '-hardframedrop'
options of command line. The '-framedrop' option drops video rendering
only. In addition '-hardframedrop' drops decoding of non-key frames.
- You may try
'-af lp' as reasonable alternative of
framedropping. In this case MPlayerXP will play sound longer but it requires
support of low samplerate from side of your audiocard. Also you may try
'-af resample' but this filter requires more CPU usage than
previous one.
The main idea of this project is reaching of
SMOOTHNESS of video playback by
threads usage!!! It's not a secret that any media stream (except audio only streams)
consists from lightweight and heavy frames! Their decoding requires different
CPU time. To have presented them on screen
just in time we need to use threading
decoding! Threading decoding also helps when your system is busy by other processes
same as when you have interruptible stream reading (network or scratched media for examlpe).
Exist a several ways to additionally improve quality of playback with MPlayerXP:
- If you still have non smooth playback (or interruptible sound in case of audio streams)
then you may increase the number of buffers for decoding ahead through
'-da_buffs' command line argument. By default MPlayerXP uses 64
buffers for decoding ahead (that's enough to predecode 2.56 sec of stream in case of 25 fps)
but if you have a large amount of RAM and relatively slow CPU then you
may try to increase this number upto 1024 (Note: the number of decoding ahead
buffers doesn't affect decoding speed). As extreme case, you may enable
'-cache' option to prefetch stream reading (in independed thread)
but this technique dramatically loads CPU!
- Using postprocessing (
'-vf pp'). Helps to blur MPEG-1/2 and DivX artefacts
if you use '-vfm ffmpeg' codec's family. Also you may try '-autoq'
key to change dynamically the level of postprocessing depends on CPU loading.
- Using wide set of video postprocessing (
'-vf unsharp', '-vf smartblur', '-vf denoise3d', ...)
for non-linear image processing. For linear image processing you
should use video equalizing ('-brightness', '-saturation', '-contrast', ...)
filters.
- Using wide set of audio postprocessing (
'-af crystality', '-af equalizer', '-af surround', ...)
filters.
- If you are owner of enough expensive audiocard (Prodigy, Terratec, M-Audio)
then it would be better to use
'-ao alsa'. This driver supports
playing of 32-bit audio samples and many build-in codecs of MPlayerXP (such as libmp3,
liba52, libbfaac) were redesigned to provide 32-bit output.