Mercurial > mplayer.hg
changeset 958:162a78d3cc08
FreeBSD support by Vladimir Kushnir vkushnir@Alfacom.net
author | arpi_esp |
---|---|
date | Sun, 03 Jun 2001 00:31:41 +0000 |
parents | 1a8811b0da3b |
children | 197ae86f68d4 |
files | DOCS/FREEBSD Makefile configure configure.FreeBSD libvo/vo_sdl.c linux/getch2.c loader/dshow/Makefile mplayer.c stream.c vcd_read_fbsd.h |
diffstat | 10 files changed, 1478 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DOCS/FREEBSD Sun Jun 03 00:31:41 2001 +0000 @@ -0,0 +1,19 @@ +Notes for FreeBSD users +======================= + +1. To build the package you will need GNU make (gmake, /usr/ports/devel/gmake), +native BSD make will not work. + +2. Configure script is different for FreeBSD; use configure.FreeBSD instead. + +3. To run mplayer you will need to re-compile the kernel with +"options USER_LDT" (unless you are running -CURRENT, where this is default). + +4. There's no VCD (well, it is not finished) or DVD support for FreeBSD yet. +Feel free to add them :-) + +Enjoy (as do I)! + +-- +Vladimir Kushnir +
--- a/Makefile Sun Jun 03 00:30:10 2001 +0000 +++ b/Makefile Sun Jun 03 00:31:41 2001 +0000 @@ -64,7 +64,7 @@ @for a in mp3lib libac3 libmpeg2 libvo opendivx encore loader/DirectShow ; do $(MAKE) -C $$a all ; done $(PRG): .depend mplayer.o $(OBJS) loader/libloader.a $(DS_DEP) libmpeg2/libmpeg2.a opendivx/libdecore.a $(COMMONLIBS) encore/libencore.a - $(CC) $(CFLAGS) -o $(PRG) mplayer.o $(OBJS) $(XMM_LIBS) $(LIRC_LIBS) $(A_LIBS) -lm $(TERMCAP_LIB) -Lloader -lloader $(DS_LIB) -ldl -Llibmpeg2 -lmpeg2 -Lopendivx -ldecore $(VO_LIBS) -Llibao2 -lao $(CSS_LIB) -Lencore -lencore -lpthread + $(CC) $(CFLAGS) -o $(PRG) mplayer.o $(OBJS) $(XMM_LIBS) $(LIRC_LIBS) $(A_LIBS) -lm $(TERMCAP_LIB) -Lloader -lloader $(DS_LIB) -Llibmpeg2 -lmpeg2 -Lopendivx -ldecore $(VO_LIBS) -Llibao2 -lao $(CSS_LIB) -Lencore -lencore $(ARCH_LIBS) # $(PRG_HQ): .depend mplayerHQ.o $(OBJS) loader/libloader.a libmpeg2/libmpeg2.a opendivx/libdecore.a $(COMMONLIBS) encore/libencore.a # $(CC) $(CFLAGS) -o $(PRG_HQ) mplayerHQ.o $(OBJS) $(XMM_LIBS) $(LIRC_LIBS) $(A_LIBS) -lm $(TERMCAP_LIB) -Lloader -lloader -ldl -Llibmpeg2 -lmpeg2 -Lopendivx -ldecore $(VO_LIBS) -Lencore -lencore -lpthread
--- a/configure Sun Jun 03 00:30:10 2001 +0000 +++ b/configure Sun Jun 03 00:31:41 2001 +0000 @@ -894,6 +894,7 @@ DS_DEP = $_dshowdep DS_LIB = $_dshowlib prefix = $_prefix +ARCH_LIBS = -ldl -lpthread EOF # echo 'CFLAGS=$(OPTFLAGS) -Wall -DMPG12PLAY' >> config.mak
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configure.FreeBSD Sun Jun 03 00:31:41 2001 +0000 @@ -0,0 +1,1282 @@ +#!/bin/sh + +# +# MPlayer configurator. (C) 2000 Pontscho/fresh!mindworkz +# pontscho@makacs.poliod.hu +# +# Changes in reversed order: +# +# 2001/05/40 by LGB +# - added --prefix support +# +# 2001/05/22 by Nick Kurshev +# - added definition of CPU clone +# +# 2001/04/16 by LGB +# - added libcss stuffs +# +# 2001/04/15 by Pontscho +# - added --disable-select option +# - added X11DIR variable in config.mak and fix syncfb Makefile -L/usr/X11/lib bug +# +# 2001/03/24 by Mike Graffam: +# - added autodetect code for XF86VidMode, along with explicit --enable-vm +# +# 2001/03/22 by Bivanbi: +# - new option: --cc (to specify C compiler path+name) +# +# 2001/03/08 by LGB: +# - DGA detect-o-matic :) +# - '--disable-dga' option to force disabling DGA vo driver compiling into mplayer +# - line about '--enable-dga' is added to the help message +# +# 2001/02/26 by A'rpi: +# - added DGA option: --enable-dga +# - no notify if --with-win32libdir used [Tibcu] +# +# 2001/02/25 by LGB: +# - TMPDIR or TEMPDIR variable is honored during tests for temporary files +# - ChangeLog inside configure was reversed ;-) +# +# some changes by A'rpi/ESP-team: +# - added 'athlon' target for the new athlongcc [Ian Kumlien] +# - applied _win32libdir=-L patch by Magnus Pfeffer +# +# some changes by LGB: +# - Ehhh, AMD K6-2 returns with cpuid 5 ;-) Changing back Arpi's last change :) +# More info: AMD K6-2 reports with family 5, duron with 6, so I attached +# much finer CPU type detection based on Linux kernel's one :) +# (k5: 5, model<6, k6: 5, model>=6, k7: 6, model=any) +# - On some exit point (error) temporary files were not deleted. Fixed. +# - $TMP and $TMP2 are renamed to $TMPC and $TMPO ;-) +# - Some useless { ... } are removed +# +# some changes by A'rpi/ESP-team: +# - the --with-win32libdir patch by Aaron Hope applied +# - some english bugfix again :) +# - cpu type selection changed: +# ( k7->k6->k5-> ) || (i686->pentiumpro-> ) pentium-> i486 -> i386 -> error! +# - cpu type for AMD/family=5 changed k6->k5 +# +# some changes by LGB (Gábor Lénárt): +# - SOME gcc may support 'k7', so I added tests for ALL CPU type optimization +# switches with the ability to find out the best optimization for your CPU. +# - Help moved to the begining to avoid tests if user only wants help. +# - A one lined help to indicate detailed help for users +# - Fixed /tmp race (PIDs can be predicted, I added random numbers as well) +# +# some changes by A'rpi/ESP-team: +# - some english bugfix :) +# - removed _??exists flags, _?? is enough... +# - creating only config.mak files instead of whole Makefiles +# +# -- + + +# LGB: Help moved here. + +if [ "$1" = "--help" -o "$1" = "-help" -o "$1" = "-h" ]; then +cat << EOF + +usage: $0 [options] + +params: + --cc use this C compiler to build MPlayer [gcc] + --prefix=DIR use this prefix for installing mplayer [/usr/local] + --enable-debug[=1-3] compile debugging information into mplayer [disable] + --enable-profile compile profiling information into mplayer [disable] + --enable-mmx build with mmx support [autodetect] + --enable-mmx2 build with mmx2 support (PIII, Athlon) [autodetect] + --enable-3dnow build with 3dnow! support [autodetect] + --enable-3dnowex build with 3dnow-dsp! support (K7) [autodetect] + --enable-sse build with sse support [autodetect] + --enable-gl build with OpenGL render support [autodetect] + --enable-dga build with DGA support [autodetect] + --enable-svga build with SVGAlib support [autodetect] + --enable-sdl build with SDL render support [autodetect] + --enable-mga build with mga_vid support [autodetect, if /dev/mga_vid + is available] + --enable-xmga build with mga_vid X Window support [autodetect, + if both /dev/mga_vid and x11 are available] + --enable-xv build with Xv render support for X 4.x [autodetect] + --enable-vm build with XF86VidMode support for x11 driver + --enable-x11 build with X11 render support [autodetect] + --enable-fbdev build with FBDev render support [_not_ autodetected] + --enable-mlib build with MLIB support ( only Solaris ) + + --enable-termcap use termcap database for key codes + --enable-xmmp use XMMP audio drivers + --enable-lirc enable LIRC (remote control) support + + --disable-select disable audio select() support ( for example required this + option ALSA or Vortex2 driver ) + + --disable-dshow disable DirectShow support (if you don't have + C++ compiler&libs, or you've found dshow codecs + slower than old VfW ones) + + --disable-fastmemcpy disable 3dnow/sse/mmx optimized memcpy() + + --with-x11libdir=DIR X library files are in DIR + --with-win32libdir=DIR windows codec files + --with-csslibdir=DIR directory contains libcss.so shared library + --with-cssincdir=DIR directory contains libcss header file (css.h) + (--with-css* only needed, if libCSS autodetect fails) + + --size-x=SIZE default screen width + --size-y=SIZE default screen height +EOF +exit 0 +fi + +# LGB: Some inital help + +echo "You can get detailed help on configure with: $0 --help" +echo "Please wait while ./configure discovers your software and hardware environment!" + +# LGB: temporary files + +TMPC="mplayer-conf-${RANDOM}-$$-${RANDOM}.c" +TMPO="mplayer-conf-${RANDOM}-$$-${RANDOM}.o" + +if [ ! -z $TMPDIR ]; then + TMPC="${TMPDIR}/${TMPC}" + TMPO="${TMPDIR}/${TMPO}" +elif [ ! -z $TEMPDIR ]; then + TMPC="${TEMPDIR}/${TMPC}" + TMPO="${TEMPDIR}/${TMPO}" +else + TMPC="/tmp/${TMPC}" + TMPO="/tmp/${TMPO}" +fi + +# --- + +# config files +CCONF='config.h' +MCONF='config.mak' + +# --- Check for C compiler: + +_cc=gcc +_x11=auto + +_x11libdir= +if [ -e /usr/X11R6 ]; then + _x11libdir=-L/usr/X11R6/lib +else + if [ -e /usr/X11 ]; then + _x11libdir=-L/usr/X11/lib + fi +fi + +for ac_option +do + case "$ac_option" in + --cc=*) + _cc=`echo $ac_option | cut -d '=' -f 2` + ;; + --with-x11libdir=*) + _x11libdir=-L`echo $ac_option | cut -d '=' -f 2` + ;; + --enable-x11) + _x11=yes + ;; + --disable-x11) + _x11=no + ;; + esac +done + +# --- + +pname=`sysctl -n hw.model` +pparam=`cat /var/run/dmesg.boot | grep Features | cut -d '<' -f 2 | cut -d '>' -f 1 | sed 's/,/ /g'` +pvendor=`cat /var/run/dmesg.boot | grep Origin | cut -d '"' -f 2 | cut -d '"' -f 1` +pfamily=`cat /var/run/dmesg.boot | grep Origin | cut -d '0x' -f 2 | cut -c 2` +pmodel=`cat /var/run/dmesg.boot | grep Origin | cut -d '0x' -f 2 | cut -c 3` +pstepping=`cat /var/run/dmesg.boot | grep Stepping | cut -d 'Stepping' -f 2 | cut -c 11` + +_mmx=no +_mmx2=no +_3dnow=no +_3dnowex=no +_mtrr=no +_sse=no + +_mga=no +_gl=no +_sdl=no +_xv=no +_vm=no +_xdpms=no +_3dfx=no +_syncfb=no +_mlib=no +_mpg123=no +_xmga=no +_dga=no +_dga2=no +_svga=no +_fbdev=no +_lirc=no +_css=no +_dshow=yes +_fastmemcpy=yes + +_x=1 +_y=1 + +_gllib= +_sdllib= +_xvlib= +_x11lib= + +_select='#define HAVE_AUDIO_SELECT' + +_gui=no; + +for i in `echo $pparam`; do + + case "$i" in + 3DNow!) + _3dnow=yes + _mpg123=yes + ;; + DSP) + _3dnow=yes + _3dnowex=yes + _mpg123=yes + ;; + MMX) + _mmx=yes + ;; + MTRR) + _mtrr=yes + ;; + SSE) + _sse=yes + _mmx2=yes + ;; + SSE2) + _sse=yes + _mmx2=yes + ;; + esac + +done + + +_win32libdirnotify=no +if [ -e /usr/lib/win32 ]; then + _win32libdir=/usr/lib/win32 +else + if [ -e /usr/local/lib/win32 ]; then + _win32libdir=/usr/local/lib/win32 + else +# This is our default: + _win32libdir=/usr/lib/win32 + _win32libdirnotify=yes + fi +fi + + +if [ -e /dev/mga_vid ]; then + _mga=yes + _syncfb=yes +fi + +proc=pentium +iproc=586 + +case "$pvendor" in + AuthenticAMD) + case "$pfamily" in + 3) + proc=i386 + iproc=386 + ;; + 4) + proc=i486 + iproc=486 + ;; + 5) + if [ $pmodel -ge 6 ]; then # LGB: models are: K5/SSA5 K5 K5 K5 ? ? K6 K6 K6-2 K6-3 + proc=k6 + else + proc=k5 + fi + iproc=586 + ;; + 6|7) # LGB: Though it seems Athlon CPUs returns with "6" + proc=k7 + iproc=686 + ;; + *) + proc=pentium + iproc=586 + ;; + esac + ;; + GenuineIntel) + case "$pfamily" in + 3) + proc=i386 + iproc=386 + ;; + 4) + proc=i486 + iproc=486 + ;; + 5) + proc=pentium + iproc=586 + ;; + 6) + proc=i686 + iproc=686 + ;; + *) + proc=pentium + iproc=586 + ;; + esac + ;; + unknown) # added by Gabucino - upon Tibcu's request + case "$pfamily" in + 3) + proc=i386 + iproc=386 + ;; + 4) + proc=i486 + iproc=486 + ;; + *) + proc=pentium + iproc=586 + ;; + esac + ;; + *) + proc=pentium + iproc=586 + ;; +esac + +# --- + +cat > $TMPC << EOF +int main( void ) { return 0; } +EOF + +# check that gcc supports our cpu, if not, fallback to pentium +# LGB: check -mcpu and -march swithing step by step with enabling +# to fall back till 386. + +#echo -n "Checking your GCC CPU optimalization abilities: " +if [ "$proc" = "k7" ]; then +# echo -n "trying k7 " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=athlon +fi +if [ "$proc" = "athlon" ]; then +# echo -n "trying athlon " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=k6 +fi +if [ "$proc" = "k6" ]; then +# echo -n "trying k6 " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=k5 +fi +if [ "$proc" = "k5" ]; then +# echo -n "trying k5 " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=pentium +fi +if [ "$proc" = "i686" ]; then +# echo -n "trying i686 " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=pentiumpro +fi +if [ "$proc" = "pentiumpro" ]; then +# echo -n "trying pentiumpro " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=pentium +fi +if [ "$proc" = "pentium" ]; then +# echo -n "trying pentium " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=i486 +fi +if [ "$proc" = "i486" ]; then +# echo -n "trying i486 " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=i386 +fi +if [ "$proc" = "i386" ]; then +# echo -n "trying i386 " + $_cc $TMPC -o $TMPO -march=$proc -mcpu=$proc > /dev/null || proc=error +fi +if [ "$proc" = "error" ]; then + echo + echo "Your gcc does not support even \"i386\" for '-march' and '-mcpu'." >&2 + rm -f $TMPC $TMPO + exit +fi +#echo "DONE (${proc})." + + +$_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO -lvgagl -lvga > /dev/null && _svga=yes + +$_cc $TMPC -o $TMPO -pthread > /dev/null || \ + { echo "Lib pthread not found."; rm -f $TMPC $TMPO ; exit 1; } + +# Atmosfear: added SDL versioncheck and autodetect; removed warnings. +_sdl=no +if $_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO -L/usr/lib/ -L/usr/local/lib/ -lSDL-1.1 -pthread > /dev/null ; then + if test `sdl11-config --version | sed s/[=[:punct:]=]//g` -gt 116 ; then + if test `sdl11-config --version | sed s/[=[:punct:]=]//g` -lt 121 ; then + _sdlbuggy='#define BUGGY_SDL' + else + _sdlbuggy='#undef BUGGY_SDL' + fi + _sdl=yes + else + _sdl=outdated + fi +fi + +# Atmosfear: added libcss autodetect +_css=no +if test -e "/usr/local/lib/libcss.so" ; then + _csslibdir="/usr/local/lib/" + if test -e "/usr/local/include/css.h" ; then + _cssincdir="/usr/local/include" + _css=yes + fi +else + if test -e "/usr/lib/libcss.so" ; then + _csslibdir="/usr/lib/" + if test -e "/usr/include/css.h" ; then + _cssincdir="/usr/include/" + _css=yes + fi + fi +fi + +_termcap=no +$_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO -ltermcap > /dev/null && _termcap=yes + +_png=no +$_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO -lpng -lz> /dev/null && _png=yes + +_binutils=no +as libac3/downmix/downmix_i386.S -o $TMPO > /dev/null && _binutils=yes + +# ----------- Check X11 and related libs (GL, Xxf86vm, Xv, DGA) -------------- + +if [ $_x11 = auto ]; then + _x11=no + $_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO $_x11libdir -lX11 -lXext > /dev/null && _x11=yes +fi + +if [ $_x11 = yes ]; then + +$_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXdpms > /dev/null && _xdpms=yes +$_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXv > /dev/null && _xv=yes +$_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXxf86vm > /dev/null && _vm=yes + +if $_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lGL > /dev/null; then +_gl=yes +elif $_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lGL -pthread > /dev/null; then +_gl=yes +fi + +cat > $TMPC << EOF +#include <GL/gl.h> +int main( void ) { return 0; } +EOF + +if $_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lGL > /dev/null; then +elif $_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lGL -pthread > /dev/null;then +else +_gl=no; echo "GL includes not found!" +fi + +cat > $TMPC << EOF +#include <stdio.h> +#include <X11/Xlib.h> +#include <X11/extensions/xf86dga.h> +int main (void) { return 0;} +EOF + +$_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO -L/usr/X11R6/lib -L/usr/X11/lib -lX11 -lXext -lXxf86dga -lXxf86vm > /dev/null && _dga=yes +# Note: the -lXxf86vm library is the VideoMode extension and though it's +# not needed for DGA, AFAIK every distribution packages together with DGA +# stuffs named 'X extensions' or something similar. This check can be usefull +# for further mplayer versions to set resolution by mplayer itself. +# If you run into problems, remove '-lXxf86vm'. + +# Check if DGA is 2.0 or greater +cat > $TMPC << EOF +#include <stdio.h> +#include <X11/Xlib.h> +#include <X11/extensions/xf86dga.h> +int main (void) { XDGAMode mode; XDGADevice device; return 0;} +EOF + +_dga2=no +$_cc -I/usr/local/include -I/usr/X11R6/include -L/usr/local/lib $TMPC -o $TMPO -L/usr/X11R6/lib -L/usr/X11/lib -lX11 -lXext -lXxf86dga -lXxf86vm > /dev/null && _dga2=yes + +fi + +rm -f $TMPC $TMPO + +# --- + +# check for the parameters. + +_prefix="/usr/local" + +for ac_option +do + case "$ac_option" in + --enable-profile) + _profile='-p' + ;; + --enable-debug) + _debug='-g' + ;; + --enable-debug=*) + _debug=`echo -n '-g'; echo $ac_option | cut -d '=' -f 2` + ;; + --enable-css) + _css=yes + ;; + --enable-png) + _png=yes + ;; + --enable-sse) + _sse=yes + ;; + --enable-3dnow) + _3dnow=yes + ;; + --enable-3dnowex) + _3dnow=yes + _3dnowex=yes + ;; + --enable-mmx) + _mmx=yes + ;; + --enable-mmx2) + _mmx2=yes + ;; + --enable-mtrr) + _mtrr=yes + ;; + --enable-gl) + _gl=yes + ;; + --enable-sdl) + _sdl=yes + ;; + --enable-mga) + _mga=yes + ;; + --enable-xmga) + _xmga=yes + ;; + --enable-svga) + _svga=yes + ;; + --enable-dga) + _dga=yes + ;; + --enable-dga2) + _dga2=yes + ;; + --enable-xv) + _xv=yes + ;; + --enable-vm) + _vm=yes + ;; + --enable-3dfx) + _3dfx=yes + ;; + --enable-syncfb) + _syncfb=yes + ;; + --enable-fbdev) + _fbdev=yes + ;; + --enable-mlib) + _mlib=yes + ;; + --enable-termcap) + _termcap=yes + ;; + --enable-xmmp) + _xmmp=yes + ;; + --enable-lirc) + _lirc=yes + ;; + --enable-select) + _select='#define HAVE_AUDIO_SELECT' + ;; + --enable-gui) + _gui=yes + ;; + --disable-css) + _css=no + ;; + --disable-png) + _png=no + ;; + --disable-sse) + _sse=no + ;; + --disable-3dnow) + _3dnow=no + _3dnowex=no + ;; + --disable-3dnowex) + _3dnowex=no + ;; + --disable-mmx) + _mmx=no + _mmx2=no + ;; + --disable-mmx2) + _mmx2=no + ;; + --disable-mtrr) + _mtrr=no + ;; + --disable-gl) + _gl=no + ;; + --disable-sdl) + _sdl=no + ;; + --disable-mga) + _mga=no + ;; + --disable-xmga) + _xmga=no + ;; + --disable-xv) + _xv=no + ;; + --disable-vm) + _vm=no + ;; + --disable-mlib) + _mlib=no + ;; + --disable-svga) + _svga=no + ;; + --disable-dga) + _dga=no + ;; + --disable-dga2) + _dga2=no + ;; + --disable-fbdev) + _fbdev=no + ;; + --disable-termcap) + _termcap=no + ;; + --disable-select) + _select='#undef HAVE_AUDIO_SELECT' + ;; + --disable-dshow) + _dshow=no + ;; + --disable-fastmemcpy) + _fastmemcpy=no + ;; + --disable-gui) + _gui=no + ;; + --with-win32libdir=*) + _win32libdir=`echo $ac_option | cut -d '=' -f 2` + _win32libdirnotify=no + ;; + --with-csslibdir=*) + _csslibdir=`echo $ac_option | cut -d '=' -f 2` + _css='yes'; + ;; + --with-cssincdir=*) + _cssincdir=`echo $ac_option | cut -d '=' -f 2` + _css='yes'; + ;; + --size-x=*) + _x=`echo $ac_option | cut -d '=' -f 2` + ;; + --size-y=*) + _y=`echo $ac_option | cut -d '=' -f 2` + ;; + --with-x11libdir=*) + ;; + --prefix=*) + _prefix=`echo $ac_option | cut -d '=' -f 2` + ;; + --cc=*) + ;; + esac +done + +if [ $_x11 = 'yes' ]; then + if [ $_mga = 'yes' ]; then + _xmga=yes + fi +fi + +# to screen. +echo -n "Kernel: " +uname -a +echo "Using C compiler: $_cc" +echo "Install prefix: $_prefix" +$_cc -v +as --version | head -n 1 +echo "Checking for cpu vendor ... $pvendor ( $pfamily:$pmodel:$pstepping )" +echo "Checking for cpu type ... $pname" +echo "Optimizing to ... $proc" +echo "Checking for mmx support ... $_mmx" +echo "Checking for mmx2 support ... $_mmx2" +echo "Checking for 3dnow support ... $_3dnow" +echo "Checking for 3dnowex support ... $_3dnowex" +echo "Checking for sse support ... $_sse" +echo "Checking for mtrr support ... $_mtrr" +echo "Screen size ... ${_x}x${_y}" +echo "Checking for X11 libs ... $_x11libdir" +echo "Checking mga_vid device ... $_mga" +echo "Checking for xmga ... $_xmga" +echo "Checking for SDL ... $_sdl" +echo "Checking for OpenGL ... $_gl" +echo "Checking for Xv ... $_xv" +echo "Checking for X11 ... $_x11" +echo "Checking for DGA ... $_dga" +echo "Checking for DGA 2.0 .. $_dga2" +echo "Checking for Xf86VM ... $_vm" +echo "Checking for SVGAlib ... $_svga" +echo "Checking for FBDev ... $_fbdev" +echo "Checking for DeCSS support ... $_css" +echo "Checking for PNG support ... $_png" +echo "Checking for DirectShow ... $_dshow" +echo "Checking for fastmemcpy ... $_fastmemcpy" +# write conf files. + +if [ $_gl = yes ]; then + if [ -f /usr/X11R6/bin/XFree86 ]; then + _gllib='-lGL -pthread' + else + _gllib='-lGL' + fi +fi + +if [ $_css = yes ]; then + if [ ! -z $_csslibdir ]; then + _csslib="-L${_csslibdir} -lcss" + else + _csslib='-lcss' + fi + _css='#define HAVE_LIBCSS' + if [ ! -z $_cssincdir ]; then + _cssinc="-I${_cssincdir}" + else + _cssinc="" + fi +else + _css='#undef HAVE_LIBCSS' + _csslib='' + _cssinc='' +fi + +if [ $_dshow = yes ]; then + _dshowlib='-Lloader/DirectShow -lDS_Filter -lstdc++' + _dshowdep='loader/DirectShow/libDS_Filter.a' + _dshow='#define USE_DIRECTSHOW' +else + _dshowlib='' + _dshowdep='' + _dshow='#undef USE_DIRECTSHOW' +fi + +if [ $_fastmemcpy = yes ]; then + _fastmemcpy='#define USE_FASTMEMCPY' +else + _fastmemcpy='#undef USE_FASTMEMCPY' +fi + +if [ $_x11 = yes ]; then + if [ $_xdpms = yes ]; then + _x11lib='-lX11 -lXext -lXdpms' + else + _x11lib='-lX11 -lXext' + fi +fi + +if [ $_xv = yes ]; then + _xvlib='-lXv' +fi + +if [ $_sdl = yes ]; then + _sdllib='-L/usr/local/lib -lSDL-1.1 -pthread' +fi + +if [ $_dga = yes ]; then + _dgalib='-lXxf86dga' +fi + +if [ $_svga = yes ]; then + _svgalib='-lvgagl -lvga' +fi + +if [ $_vm = yes ]; then + _vmlib='-lXxf86vm' +fi + +if [ "$_termcap" = "yes" ]; then + _termcap='#define USE_TERMCAP' + _libtermcap='-ltermcap' +else + _termcap='#undef USE_TERMCAP' + _libtermcap='' +fi + +if [ "$_xmmp" = "yes" ]; then + _xmmpaudio='#define USE_XMMP_AUDIO' + _xmmplibs='-Llibxmm -lxmm' +else + _xmmpaudio='#undef USE_XMMP_AUDIO' +fi + +if [ "$_lirc" = "yes" ]; then + _lircdefs='#define HAVE_LIRC' + _lirclibs='-llirc_client' +else + _lircdefs='#undef HAVE_LIRC' + _lirclibs='' +fi + +if [ $_png = yes ]; then + _libpng='-L/usr/local/lib -lpng -lz' +fi + +# Checking for CFLAGS +if [ "$_profile" != "" ] || [ "$_debug" != "" ]; then + CFLAGS="-O2 -D_THREAD_SAFE -march=$proc -mcpu=$proc $_debug $_profile" +else +if test -z "$CFLAGS"; then + CFLAGS="-O4 -D_THREAD_SAFE -march=$proc -mcpu=$proc -pipe -ffast-math -fomit-frame-pointer" +fi +fi +echo +echo "Creating $MCONF" +cat > $MCONF << EOF + +# -------- Generated by ./configure ----------- + +ARCH=FREEBSD +AR=ar +CC=$_cc +X11DIR=$_x11libdir +# OPTFLAGS=-O4 -D_THREAD_SAFE $_profile $_debug -march=$proc -mcpu=$proc -pipe -fomit-frame-pointer -ffast-math +OPTFLAGS=$CFLAGS -I/usr/local/include -I/usr/X11R6/include +# LIBS=-L/usr/lib -L/usr/local/lib $_x11libdir $_gllib $_sdllib $_dgalib $_x11lib $_xvlib +X_LIBS=$_x11libdir $_gllib $_sdllib $_dgalib $_x11lib $_xvlib $_vmlib $_svgalib $_libpng +TERMCAP_LIB=$_libtermcap +XMM_LIBS = $_xmmplibs +LIRC_LIBS = $_lirclibs +CSS_LIB = $_csslib +CSS_INC = $_cssinc +WIN32_PATH=-DWIN32_PATH=\"$_win32libdir\" +DS_DEP = $_dshowdep +DS_LIB = $_dshowlib +prefix = $_prefix +ARCH_LIBS = -rdynamic -pthread + +EOF +# echo 'CFLAGS=$(OPTFLAGS) -Wall -DMPG12PLAY' >> config.mak + +echo "Creating $CCONF" + +if [ "$_mmx" = "yes" ]; then + _mmx='#define HAVE_MMX' +else + _mmx='#undef HAVE_MMX' +fi + +if [ "$_mmx2" = "yes" ]; then + _mmx2='#define HAVE_MMX2' +else + _mmx2='#undef HAVE_MMX2' +fi + +if [ $_3dnow = yes ]; then + _3dnowm='#define HAVE_3DNOW' +else + _3dnowm='#undef HAVE_3DNOW' +fi + +if [ $_3dnowex = yes ]; then + _3dnowexm='#define HAVE_3DNOWEX' +else + _3dnowexm='#undef HAVE_3DNOWEX' +fi + +if [ $_sse = yes ]; then + _ssem='#define HAVE_SSE' +else + _ssem='#undef HAVE_SSE' +fi + +# --- + +_vosrc='' + +if [ $_png = yes ]; then + _png='#define HAVE_PNG' + _vosrc=$_vosrc' vo_png.c' +else + _png='#undef HAVE_PNG' +fi + + +if [ $_mlib = yes ]; then + _mlib='#define HAVE_MLIB' + _vosrc=$_vosrc' yuv2rgb_mlib.c' +else + _mlib='#undef HAVE_MLIB' +fi + +# --- + +if [ $_gl = yes ]; then + _gl='#define HAVE_GL' + _vosrc=$_vosrc' vo_gl.c' +else + _gl='#undef HAVE_GL' +fi + +if [ $_sdl = yes ]; then + _sdldef='#define HAVE_SDL' + _vosrc=$_vosrc' vo_sdl.c' +else + _sdldef='#undef HAVE_SDL' +fi + +if [ $_x11 = yes ]; then + _x11='#define HAVE_X11' + _vosrc=$_vosrc' vo_x11.c' +else + _x11='#undef HAVE_X11' +fi + +if [ $_xv = yes ]; then + _xv='#define HAVE_XV' + _vosrc=$_vosrc' vo_xv.c' +else + _xv='#undef HAVE_XV' +fi + +if [ $_vm = yes ]; then + _vm='#define HAVE_XF86VM' +else + _vm='#undef HAVE_XF86VM' +fi + +# --- + +if [ $_mga = yes ]; then + _mga='#define HAVE_MGA' + _vosrc=$_vosrc' vo_mga.c' +else + _mga='#undef HAVE_MGA' +fi +if [ $_xmga = yes ]; then + _vosrc=$_vosrc' vo_xmga.c' +fi + +if [ $_syncfb = yes ]; then + _syncfb='#define HAVE_SYNCFB' + _vosrc=$_vosrc' vo_syncfb.c' +else + _syncfb='#undef HAVE_SYNCFB' +fi + +if [ $_3dfx = yes ]; then + _3dfx='#define HAVE_3DFX' + _vosrc=$_vosrc' vo_3dfx.c' +else + _3dfx='#undef HAVE_3DFX' +fi + +if [ $_svga = yes ]; then + _svga='#define HAVE_SVGALIB' + _vosrc=$_vosrc' vo_svga.c' +else + _svga='#undef HAVE_SVGALIB' +fi + +if [ $_dga = yes ]; then + _dga='#define HAVE_DGA' + _vosrc=$_vosrc' vo_dga.c vo_fsdga.c' +else + _dga='#undef HAVE_DGA' +fi + +if [ $_dga2 = yes ]; then + _dga2='#define HAVE_DGA2' + _vosrc=$_vosrc' vo_dga.c vo_fsdga.c' +else + _dga2='#undef HAVE_DGA2' +fi + +if [ $_fbdev = yes ]; then + _fbdev='#define HAVE_FBDEV' + _vosrc=$_vosrc' vo_fbdev.c' +else + _fbdev='#undef HAVE_FBDEV' +fi + +if [ $_mpg123 = yes ]; then + _mpg123='#define DEFAULT_MPG123' +else + _mpg123='#undef DEFAULT_MPG123' +fi + +if [ $_gui = yes ]; then + _gui='#define HAVE_GUI' +else + _gui='#undef HAVE_GUI' +fi + +cat > $CCONF << EOF + +/* -------- Generated by ./configure ----------- */ + +/* Define this to enable avg. byte/sec-based AVI sync method by default: + (use -bps or -nobps commandline option for run-time method selection) */ +#undef AVI_SYNC_BPS + +/* Undefine this if you want soundcard-only timing by default: + You can still change this with the -alsa or -noalsa command-line option! + (This function was originally impemented to solve ALSA driver's big + buffer problems, but it seems to be useful for every soundcard drivers) */ +#define ALSA_TIMER + +/* Undefine this if you don't want to select mono audio (left or right) + with a stereo MPEG layer 2/3 audio stream. The command-line option + -stereo has three possible values (0 for stereo, 1 for left-only, 2 for + right-only), with 0 being the default. + */ +#define USE_FAKE_MONO + +/* Undefine this if your soundcard driver has no working select(). + If you have kernel Oops, player hangups, or just no audio, you should + try to recompile MPlayer with this option disabled! */ +$_select + +/* You have a choice for MP3 decoding: mp3lib(mpg123) or Win32(l3codeca.acm) + #define this if you prefer mpg123 (with 3Dnow! support) than l3codeca.acm + (with mmx/sse optimizations) + You can still change it runtime using -afm 1 (mpg123) or -afm 4 (l3codeca)*/ +$_mpg123 + +/* XMMP support: (test code) */ +$_xmmpaudio +#define LIBDIR "/usr/local/lib" +#define PLUGINDIR LIBDIR "/xmmp/Plugins" +#define XMMP_AUDIO_DRIVER PLUGINDIR "/Sound/oss.so" + +/* set up max. outburst. use 65536 for ALSA 0.5, for others 16384 is enough */ +#define MAX_OUTBURST 65536 + +/* set up audio OUTBURST. Do not change this! */ +#ifdef USE_XMMP_AUDIO +#define OUTBURST 4096 +#else +//#define OUTBURST 1024 +#define OUTBURST 512 +#endif + +/* LIRC (remote control, see www.lirc.org) support: */ +$_lircdefs + +/* DeCSS support using libcss */ +$_css + +/* Define this to enable MPEG 1/2 image postprocessing (requires FAST cpu!) */ +#define MPEG12_POSTPROC + +/* DirectShow support */ +$_dshow + +/* Use 3dnow/mmxext/sse/mmx optimized fast memcpy() [maybe buggy... signal 4]*/ +$_fastmemcpy + +/* gui support, please do not edit this option */ +$_gui + +/* Define if your processor stores words with the most significant + byte first (like Motorola and SPARC, unlike Intel and VAX). */ +/* #define WORDS_BIGENDIAN */ + +#define ARCH_X86 + +/* Define this to any prefered value from 386 up to infinity with step 100 */ +#define __CPU__ $iproc + +/*---------------------------------------------------------------------------- +** +** NOTE: Instead of modifying these definitions here, use the +** --enable/--disable options of the ./configure script! +** See ./configure --help for details. +** +*---------------------------------------------------------------------------*/ + +/* termcap flag for getch2.c */ +$_termcap +$_png + +/* Extension defines */ +$_mlib // available only on solaris +$_3dnowm // only define if you have 3DNOW (AMD k6-2, AMD Athlon, iDT WinChip, etc.) +$_3dnowexm // only define if you have 3DNOWEX (AMD Athlon, etc.) +$_mmx // only define if you have MMX +$_mmx2 // only define if you have MMX2 +$_ssem // only define if you have SSE (Intel Pentium III or Celeron II) + +/* libvo options */ +#define SCREEN_SIZE_X $_x +#define SCREEN_SIZE_Y $_y +$_x11 +$_xv +$_vm +$_gl +$_dga +$_dga2 +$_sdldef +/* defined for SDLlib with keyrepeat bugs (before 1.2.1) */ +$_sdlbuggy +$_3dfx +$_mga +$_syncfb +$_fbdev +$_svga + +#if defined(HAVE_GL)||defined(HAVE_X11)||defined(HAVE_XV) +#define X11_FULLSCREEN +#endif + +EOF + +echo "Creating libvo/config.mak" + +_voobj=`echo $_vosrc | sed -e 's/\.c/\.o/g'` + +cat > libvo/config.mak << EOF + +include ../config.mak + +OPTIONAL_SRCS=$_vosrc +OPTIONAL_OBJS=$_voobj + +EOF + +echo "Creating libac3/config.mak" + +if [ $_sse = yes ]; then + _downmixc='downmix/downmix_kni.S' + _downmixo='downmix/downmix_kni.o' +else +if [ $_3dnow = yes ]; then + _downmixc='downmix/downmix_3dnow.S' + _downmixo='downmix/downmix_3dnow.o' +else +if [ $_binutils = yes ]; then + _downmixc='downmix/downmix_i386.S' + _downmixo='downmix/downmix_i386.o' +else +_downmixc='downmix/downmix.c' +_downmixo='downmix/downmix.o' +cat << EOF + +!!! Warning! fallback to slow downmix.c due the old binutils. +!!! Upgrade for better audio decoding performance. + +EOF +fi +fi +fi +cat > libac3/config.mak << EOF + +include ../config.mak + +OPTIONAL_SRCS = $_downmixc +OPTIONAL_OBJS = $_downmixo + +EOF + +echo "Creating mp3lib/config.mak" + +if [ $_3dnowex = yes ]; then + _mp3libobjectsrcs='dct36_k7.s dct64_k7.s decode_k7.s dct36_3dnow.s dct64_3dnow.s decode_3dnow.s' + _mp3libobjectobjs='dct36_k7.o dct64_k7.o decode_k7.o dct36_3dnow.o dct64_3dnow.o decode_3dnow.o' +else +if [ $_3dnow = yes ]; then + _mp3libobjectsrcs='dct36_3dnow.s dct64_3dnow.s decode_3dnow.s' + _mp3libobjectobjs='dct36_3dnow.o dct64_3dnow.o decode_3dnow.o' +else +if [ $_sse = yes ]; then + _mp3libobjectsrcs='decode_sse.s' + _mp3libobjectobjs='decode_sse.o' +else + _mp3libobjectsrcs= + _mp3libobjectobjs= +fi +fi +fi + +cat > mp3lib/config.mak << EOF + +include ../config.mak + +OPTIONAL_SRCS = $_mp3libobjectsrcs +OPTIONAL_OBJS = $_mp3libobjectobjs + +EOF + +cat << EOF + +Config files successfully generated by ./configure ! +Please check config.h and config.mak files, tune CPU +and optimization flags if you don't like these defaults. +You can compile the program with 'make dep;make' and +install with 'make install'. Good luck! + +EOF + +if [ $_mtrr = yes ]; then + echo "Please check mtrr settings at /compat/linux/proc/mtrr (see DOCS/MTRR)" + echo +fi + +if [ $_sdl = outdated ]; then + echo "You have libSDL installed, but your version is outdated (earlier then" + echo "v.1.1.7), SDL support has been disabled please update, if you want to" + echo "use it (libSDL v1.1.8 and v1.2.0 are tested and known to work, recent" + echo "versions are available from http://www.libsdl.org/)." + echo "After updating you need to re-run ./configure and recompile to enable SDL." + echo +fi + +if [ $_win32libdirnotify = yes ]; then + echo "Missing WIN32 codecs dir at $_win32libdir !" + echo "Make it and copy DLL files to there! (You can get them from your windows" + echo "directory or download ftp://thot.banki.hu/esp-team/linux/MPlayer/w32codec.zip" +else + echo "Ok, Win32 codecs directory at $_win32libdir already exists." +fi +
--- a/libvo/vo_sdl.c Sun Jun 03 00:30:10 2001 +0000 +++ b/libvo/vo_sdl.c Sun Jun 03 00:31:41 2001 +0000 @@ -136,7 +136,11 @@ "" }; +#ifdef __FreeBSD__ +#include <SDL11/SDL.h> +#else #include <SDL/SDL.h> +#endif #define FS 0x01 #define VM 0x02
--- a/linux/getch2.c Sun Jun 03 00:30:10 2001 +0000 +++ b/linux/getch2.c Sun Jun 03 00:31:41 2001 +0000 @@ -201,15 +201,27 @@ void getch2_enable(){ struct termios tio_new; +#ifdef __FreeBSD__ + ioctl(0,TIOCGETA,&tio_orig); /* tcgetattr(0,&tio_orig); */ +#else ioctl(0,TCGETS,&tio_orig); /* tcgetattr(0,&tio_orig); */ +#endif tio_new=tio_orig; tio_new.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */ tio_new.c_cc[VMIN] = 1; tio_new.c_cc[VTIME] = 0; +#ifdef __FreeBSD__ + ioctl(0,TIOCSETA,&tio_new); /* tcsetattr(0,TCSANOW,&tio_new); */ +#else ioctl(0,TCSETS,&tio_new); /* tcsetattr(0,TCSANOW,&tio_new); */ +#endif } void getch2_disable(){ +#ifdef __FreeBSD__ + ioctl(0,TIOCSETA,&tio_orig); /* tcsetattr(0,TCSANOW,&tio_orig); */ +#else ioctl(0,TCSETS,&tio_orig); /* tcsetattr(0,TCSANOW,&tio_orig); */ +#endif }
--- a/loader/dshow/Makefile Sun Jun 03 00:30:10 2001 +0000 +++ b/loader/dshow/Makefile Sun Jun 03 00:31:41 2001 +0000 @@ -22,7 +22,7 @@ $(AR) r $(LIBNAME) $(OBJS) test: test.c $(LIBNAME) - $(CC) test.c -Wall $(CFLAGS) -o test -L. -lDS_Filter -L.. -lloader -ldl -lpthread -lstdc++ + $(CC) test.c -Wall $(CFLAGS) -o test -L. -lDS_Filter -L.. -lloader $(ARCH_LIBS) -lstdc++ all: $(LIBNAME)
--- a/mplayer.c Sun Jun 03 00:30:10 2001 +0000 +++ b/mplayer.c Sun Jun 03 00:31:41 2001 +0000 @@ -17,7 +17,11 @@ #include <sys/stat.h> #include <fcntl.h> #include <sys/soundcard.h> +#ifdef __FreeBSD__ +#include <sys/cdio.h> +#else #include <linux/cdrom.h> +#endif #include "version.h" #include "config.h" @@ -444,7 +448,7 @@ int screen_size_xy=0; // movie info: int out_fmt=0; -char *dsp="/dev/dsp"; +char *dsp=NULL; int force_ni=0; char *conffile; int conffile_fd; @@ -575,7 +579,8 @@ } // check audio_out -//audio_out=audio_out_drivers[0]; +audio_out=audio_out_drivers[0]; +if(dsp) audio_out->control(AOCONTROL_SET_DEVICE,dsp); // check codec.conf if(!parse_codec_cfg(get_path("codecs.conf"))){
--- a/stream.c Sun Jun 03 00:30:10 2001 +0000 +++ b/stream.c Sun Jun 03 00:31:41 2001 +0000 @@ -9,13 +9,23 @@ //#include <sys/stat.h> //#include <fcntl.h> +#ifdef __FreeBSD__ +#include <sys/cdio.h> +#include <sys/cdrio.h> +#else #include <linux/cdrom.h> +#endif #include "stream.h" extern int verbose; // defined in mplayer.c +#ifdef __FreeBSD__ +#warning "VCD support under FreeBSD not implemented yet" +#include "vcd_read_fbsd.c" +#else #include "vcd_read.c" +#endif //=================== STREAMER =========================
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vcd_read_fbsd.h Sun Jun 03 00:31:41 2001 +0000 @@ -0,0 +1,141 @@ +//=================== VideoCD ========================== +#define CDROM_LEADOUT 0xAA + +typedef struct { + unsigned char unused; + unsigned char minute; + unsigned char second; + unsigned char frame; +} cdrom_msf; + +static struct ioc_read_toc_single_entry vcd_entry; + +static inline void vcd_set_msf(unsigned int sect){ + vcd_entry.entry.addr.msf.frame=sect%75; + sect=sect/75; + vcd_entry.entry.addr.msf.second=sect%60; + sect=sect/60; + vcd_entry.entry.addr.msf.minute=sect; +} + +static inline unsigned int vcd_get_msf(){ + return vcd_entry.entry.addr.msf.frame + + (vcd_entry.entry.addr.msf.second+ + vcd_entry.entry.addr.msf.minute*60)*75; +} + +int vcd_seek_to_track(int fd,int track){ + vcd_entry.address_format = CD_MSF_FORMAT; + vcd_entry.track = track; + if (ioctl(fd, CDIOREADTOCENTRY, &vcd_entry)) { + perror("ioctl dif1"); + return -1; + } + return VCD_SECTOR_DATA*vcd_get_msf(); +} + +int vcd_get_track_end(int fd,int track){ + struct ioc_toc_header tochdr; + if (ioctl(fd,CDIOREADTOCHEADER,&tochdr)==-1) + { perror("read CDROM toc header: "); return -1; } + vcd_entry.address_format = CD_MSF_FORMAT; + vcd_entry.track = track<tochdr.ending_track?(track+1):CDROM_LEADOUT; + if (ioctl(fd, CDIOREADTOCENTRY, &vcd_entry)) { + perror("ioctl dif2"); + return -1; + } + return VCD_SECTOR_DATA*vcd_get_msf(); +} + +void vcd_read_toc(int fd){ + struct ioc_toc_header tochdr; + int i; + if (ioctl(fd,CDIOREADTOCHEADER,&tochdr)==-1) + { perror("read CDROM toc header: "); return; } + for (i=tochdr.starting_track ; i<=tochdr.ending_track ; i++){ + struct ioc_read_toc_single_entry tocentry; + + tocentry.track = i; + tocentry.address_format = CD_MSF_FORMAT; + + if (ioctl(fd,CDIOREADTOCENTRY,&tocentry)==-1) + { perror("read CDROM toc entry: "); return; } + + printf("track %02d: adr=%d ctrl=%d format=%d %02d:%02d:%02d\n", + (int)tocentry.track, + (int)tocentry.entry.addr_type, + (int)tocentry.entry.control, + (int)tocentry.address_format, + (int)tocentry.entry.addr.msf.minute, + (int)tocentry.entry.addr.msf.second, + (int)tocentry.entry.addr.msf.frame + ); + } +} + +static char vcd_buf[VCD_SECTOR_SIZE]; + +static int vcd_read(int fd,char *mem){ + memcpy(vcd_buf,&vcd_entry.entry.addr.msf,sizeof(cdrom_msf)); +/* if(ioctl(fd,CDROMREADRAW,vcd_buf)==-1) return 0; */ // EOF? +/* if(ioctl(fd,CDRIOCSETBLOCKSIZE,VCD_SECTOR_SIZE)==-1) return 0; + if (pread(fd,vcd_buf,VCD_SECTOR_SIZE,ntohl(vcd_entry.entry.addr.lba)*VCD_SECTOR_SIZE) != VCD_SECTOR_SIZE) return 0; */ // EOF? + vcd_entry.entry.addr.msf.frame++; + if (vcd_entry.entry.addr.msf.frame==75){ + vcd_entry.entry.addr.msf.frame=0; + vcd_entry.entry.addr.msf.second++; + if (vcd_entry.entry.addr.msf.second==60){ + vcd_entry.entry.addr.msf.second=0; + vcd_entry.entry.addr.msf.minute++; + } + } + + memcpy(mem,&vcd_buf[VCD_SECTOR_OFFS],VCD_SECTOR_DATA); + return VCD_SECTOR_DATA; +} + +//================== VCD CACHE ======================= +#ifdef VCD_CACHE + +static int vcd_cache_size=0; +static char *vcd_cache_data=NULL; +static int *vcd_cache_sectors=NULL; +static int vcd_cache_index=0; // index to first free (or oldest) cache sector +static int vcd_cache_current=-1; + +void vcd_cache_init(int s){ + vcd_cache_size=s; + vcd_cache_sectors=malloc(s*sizeof(int)); + vcd_cache_data=malloc(s*VCD_SECTOR_SIZE); + memset(vcd_cache_sectors,255,s*sizeof(int)); +} + +static inline void vcd_cache_seek(int sect){ + vcd_cache_current=sect; +} + +int vcd_cache_read(int fd,char* mem){ +int i; +char* vcd_buf; + for(i=0;i<vcd_cache_size;i++) + if(vcd_cache_sectors[i]==vcd_cache_current){ + // found in the cache! :) + vcd_buf=&vcd_cache_data[i*VCD_SECTOR_SIZE]; + ++vcd_cache_current; + memcpy(mem,&vcd_buf[VCD_SECTOR_OFFS],VCD_SECTOR_DATA); + return VCD_SECTOR_DATA; + } + // NEW cache entry: + vcd_buf=&vcd_cache_data[vcd_cache_index*VCD_SECTOR_SIZE]; + vcd_cache_sectors[vcd_cache_index]=vcd_cache_current; + ++vcd_cache_index;if(vcd_cache_index>=vcd_cache_size)vcd_cache_index=0; + // read data! + vcd_set_msf(vcd_cache_current); + memcpy(vcd_buf,&vcd_entry.entry.addr.msf,sizeof(struct cdrom_msf)); +/* if(ioctl(fd,CDROMREADRAW,vcd_buf)==-1) return 0; */ // EOF? + ++vcd_cache_current; + memcpy(mem,&vcd_buf[VCD_SECTOR_OFFS],VCD_SECTOR_DATA); + return VCD_SECTOR_DATA; +} + +#endif