aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar gabucino <gabucino@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-04-15 18:35:17 +0000
committerGravatar gabucino <gabucino@b3059339-0415-0410-9bf9-f77b7e298cf2>2001-04-15 18:35:17 +0000
commit6ead487b065fb66adad951f585919a8258c6bf10 (patch)
tree56683cb0264ae0b37874e6924498351def73095b
parent77c23fbd26336f7d62b4db6842577c8573b3c271 (diff)
Pontscho's mixer, select, and hell-a-lot-of-stuff patch ;)
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@441 b3059339-0415-0410-9bf9-f77b7e298cf2
-rw-r--r--DOCS/LIRC4
-rw-r--r--DOCS/SOUNDCARDS11
-rw-r--r--Makefile20
-rw-r--r--cfg-mplayer.h118
-rwxr-xr-xconfigure126
-rw-r--r--help_mp.h6
-rw-r--r--libvo/wskeys.h2
-rw-r--r--libvo/x11_common.c94
-rw-r--r--lirc_mp.c6
-rw-r--r--mplayer.c394
10 files changed, 387 insertions, 394 deletions
diff --git a/DOCS/LIRC b/DOCS/LIRC
index 831ede3c66..3fa0c42e33 100644
--- a/DOCS/LIRC
+++ b/DOCS/LIRC
@@ -29,6 +29,10 @@ o MPlayer and LIRC
FRWND - 60 secs back
FWD - skip 10 secs
FFWD - skip 60 secs
+ INCVOL - increase volume one percent
+ DECVOL - decrease volmue one percent
+ MASTER - use master mixer channel
+ 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:
diff --git a/DOCS/SOUNDCARDS b/DOCS/SOUNDCARDS
index 0cbde947b0..5ae42ea32e 100644
--- a/DOCS/SOUNDCARDS
+++ b/DOCS/SOUNDCARDS
@@ -2,12 +2,11 @@
Recommendations for misc. soundcards
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Aureal Vortex 2: (Pontscho)
- In config.h, change #define HAVE_AUDIO_SELECT to
- #undef HAVE_AUDIO_SELECT
- OSS : With MPEG files : defaults are ok
- With AVI files : -delay -0.5
- ALSA : same
+Aureal Vortex 2: In config.h, change #define HAVE_AUDIO_SELECT to
+ #undef HAVE_AUDIO_SELECT or run
+ ./configure script with --disable-select option
+
+ALSA with GUS PnP: see Aureal Vortex2
SB Live!:
OSS : OK
diff --git a/Makefile b/Makefile
index 14f2ae8fde..b30a8db68d 100644
--- a/Makefile
+++ b/Makefile
@@ -22,8 +22,8 @@ PRG_CFG = codec-cfg
prefix = /usr/local
BINDIR = ${prefix}/bin
# BINDIR = /usr/local/bin
-SRCS = codec-cfg.c subreader.c linux/getch2.c linux/timer-lx.c linux/shmem.c xa/xa_gsm.c lirc_mp.c cfgparser.c
-OBJS = codec-cfg.o subreader.o linux/getch2.o linux/timer-lx.o linux/shmem.o xa/xa_gsm.o lirc_mp.o cfgparser.o
+SRCS = codec-cfg.c subreader.c linux/getch2.c linux/timer-lx.c linux/shmem.c xa/xa_gsm.c lirc_mp.c cfgparser.c mixer.c
+OBJS = codec-cfg.o subreader.o linux/getch2.o linux/timer-lx.o linux/shmem.o xa/xa_gsm.o lirc_mp.o cfgparser.o mixer.o
CFLAGS = $(OPTFLAGS) -Iloader -Ilibvo # -Wall
A_LIBS = -Lmp3lib -lMP3 -Llibac3 -lac3
VO_LIBS = -Llibvo -lvo $(X_LIBS)
@@ -32,7 +32,7 @@ VO_LIBS = -Llibvo -lvo $(X_LIBS)
# .PHONY: all clean
-all: version.h $(PRG) $(PRG_CFG)
+all: $(PRG) $(PRG_CFG)
# $(PRG_AVIP)
.c.o:
@@ -65,6 +65,7 @@ encore/libencore.a:
$(MAKE) -C encore
$(PRG): .depend mplayer.o $(OBJS) loader/libloader.a loader/DirectShow/libDS_Filter.a libmpeg2/libmpeg2.a opendivx/libdecore.a $(COMMONLIBS) encore/libencore.a
+ @for a in mp3lib libac3 libmpeg2 opendivx encore libvo loader loader/DirectShow drivers drivers/syncfb ; do $(MAKE) -C $$a; done
$(CC) $(CFLAGS) -o $(PRG) mplayer.o $(OBJS) $(XMM_LIBS) $(LIRC_LIBS) $(A_LIBS) -lm $(TERMCAP_LIB) -Lloader -lloader -Lloader/DirectShow -lDS_Filter -ldl -Llibmpeg2 -lmpeg2 -Lopendivx -ldecore $(VO_LIBS) -Lencore -lencore -lpthread -lstdc++
$(PRG_HQ): .depend mplayerHQ.o $(OBJS) loader/libloader.a libmpeg2/libmpeg2.a opendivx/libdecore.a $(COMMONLIBS) encore/libencore.a
@@ -76,7 +77,7 @@ $(PRG_AVIP): .depend aviparse.o $(OBJS) loader/libloader.a $(COMMONLIBS)
$(PRG_TV): .depend tvision.o $(OBJS) $(COMMONLIBS)
$(CC) $(CFLAGS) -o $(PRG_TV) tvision.o $(OBJS) -lm $(TERMCAP_LIB) $(VO_LIBS)
-$(PRG_CFG): .depend codec-cfg.c codec-cfg.h
+$(PRG_CFG): codec-cfg.c codec-cfg.h
$(CC) $(CFLAGS) -g codec-cfg.c -o $(PRG_CFG) -DTESTING
install: $(PRG)
@@ -98,20 +99,9 @@ depend: .depend
.depend: Makefile config.mak config.h
makedepend -f- -- $(CFLAGS) -- mplayer.c mplayerHQ.c aviparse.c tvision.c $(SRCS) 1>.depend 2>/dev/null
-# rebuild at every config.h/config.mak change:
-version.h: config.h config.mak Makefile
- $(MAKE) distclean
- ./version.sh
-
-# rebuild at every CVS update:
-ifneq ($(wildcard CVS/Entries),)
-version.h: CVS/Entries
-endif
-
#
# include dependency files if they exist
#
ifneq ($(wildcard .depend),)
include .depend
endif
-
diff --git a/cfg-mplayer.h b/cfg-mplayer.h
index d3b376adb4..9b149a37b9 100644
--- a/cfg-mplayer.h
+++ b/cfg-mplayer.h
@@ -6,78 +6,76 @@
extern char *fb_dev_name;
extern char *fb_mode_cfgfile;
extern char *fb_mode_name;
-extern char *monitor_hfreq_str;
-extern char *monitor_vfreq_str;
-extern char *monitor_dotclock_str;
+extern int fb_mode_depth;
#endif
struct config conf[]={
- /* name, pointer, type, flags, min, max */
- {"include", cfg_include, CONF_TYPE_FUNC_PARAM, 0, 0, 0}, /* this must be the first!!! */
- {"o", "Option -o has been renamed to -vo (video-out), use -vo !\n",
+ /* name, pointer, type, flags, min, max */
+ {"include", cfg_include, CONF_TYPE_FUNC_PARAM, 0, 0, 0}, /* this must be the first!!! */
+ {"o", "Option -o has been renamed to -vo (video-out), use -vo !\n",
CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
- {"vo", &video_driver, CONF_TYPE_STRING, 0, 0, 0},
- {"dsp", &dsp, CONF_TYPE_STRING, 0, 0, 0},
+ {"vo", &video_driver, CONF_TYPE_STRING, 0, 0, 0},
+ {"dsp", &dsp, CONF_TYPE_STRING, 0, 0, 0},
+ {"mixer", &mixer_device, CONF_TYPE_STRING, 0, 0, 0},
+ {"master", &mixer_usemaster, CONF_TYPE_FLAG, 0, 0, 1},
#ifdef HAVE_FBDEV
- {"fb", &fb_dev_name, CONF_TYPE_STRING, 0, 0, 0},
- {"fbmode", &fb_mode_name, CONF_TYPE_STRING, 0, 0, 0},
- {"fbmodeconfig", &fb_mode_cfgfile, CONF_TYPE_STRING, 0, 0, 0},
- {"monitor_hfreq", &monitor_hfreq_str, CONF_TYPE_STRING, 0, 0, 0},
- {"monitor_vfreq", &monitor_vfreq_str, CONF_TYPE_STRING, 0, 0, 0},
- {"monitor_dotclock", &monitor_dotclock_str, CONF_TYPE_STRING, 0, 0, 0},
+ {"fb", &fb_dev_name, CONF_TYPE_STRING, 0, 0, 0},
+ {"fbmode", &fb_mode_name, CONF_TYPE_STRING, 0, 0, 0},
+ {"fbmodeconfig", &fb_mode_cfgfile, CONF_TYPE_STRING, 0, 0, 0},
+ {"fbdepth", &fb_mode_depth, CONF_TYPE_INT, CONF_RANGE, 15, 32},
#endif
- {"encode", &encode_name, CONF_TYPE_STRING, 0, 0, 0},
- {"sub", &sub_name, CONF_TYPE_STRING, 0, 0, 0},
- {"subdelay", &sub_delay, CONF_TYPE_FLOAT, 0, 0.0, 10.0},
- {"subfps", &sub_fps, CONF_TYPE_FLOAT, 0, 0.0, 10.0},
- {"font", &font_name, CONF_TYPE_STRING, 0, 0, 0},
- {"ffactor", &font_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 10.0},
- {"bg", &play_in_bg, CONF_TYPE_FLAG, 0, 0, 1},
- {"nobg", &play_in_bg, CONF_TYPE_FLAG, 0, 1, 0},
- {"sb", &seek_to_byte, CONF_TYPE_INT, CONF_MIN, 0, 0},
-// {"ss", &seek_to_sec, CONF_TYPE_INT, CONF_MIN, 0, 0},
- {"sound", &has_audio, CONF_TYPE_FLAG, 0, 0, 1},
- {"nosound", &has_audio, CONF_TYPE_FLAG, 0, 1, 0},
- {"abs", &audio_buffer_size, CONF_TYPE_INT, CONF_MIN, 0, 0},
- {"delay", &audio_delay, CONF_TYPE_FLOAT, CONF_RANGE, -10.0, 10.0},
- {"bps", &pts_from_bps, CONF_TYPE_FLAG, 0, 0, 1},
- {"nobps", &pts_from_bps, CONF_TYPE_FLAG, 0, 1, 0},
- {"alsa", &alsa, CONF_TYPE_FLAG, 0, 0, 1},
- {"noalsa", &alsa, CONF_TYPE_FLAG, 0, 1, 0},
- {"ni", &force_ni, CONF_TYPE_FLAG, 0, 0, 1},
- {"noni", &force_ni, CONF_TYPE_FLAG, 0, 1, 0},
- {"aid", &audio_id, CONF_TYPE_INT, CONF_RANGE, 0, 256},
- {"vid", &video_id, CONF_TYPE_INT, CONF_RANGE, 0, 256},
-// {"auds", &avi_header.audio_codec, CONF_TYPE_STRING, 0, 0, 0},
-// {"vids", &avi_header.video_codec, CONF_TYPE_STRING, 0, 0, 0},
- {"mc", &default_max_pts_correction, CONF_TYPE_FLOAT, CONF_RANGE, 0, 10},
- {"fps", &force_fps, CONF_TYPE_FLOAT, CONF_MIN, 0, 0},
- {"afm", &audio_format, CONF_TYPE_INT, CONF_RANGE, 1, 6},
- {"vcd", &vcd_track, CONF_TYPE_INT, CONF_RANGE, 1, 99},
- {"divxq", "Option -divxq has been renamed to -pp (postprocessing), use -pp !\n",
+ {"encode", &encode_name, CONF_TYPE_STRING, 0, 0, 0},
+ {"sub", &sub_name, CONF_TYPE_STRING, 0, 0, 0},
+ {"subdelay", &sub_delay, CONF_TYPE_FLOAT, 0, 0.0, 10.0},
+ {"subfps", &sub_fps, CONF_TYPE_FLOAT, 0, 0.0, 10.0},
+ {"font", &font_name, CONF_TYPE_STRING, 0, 0, 0},
+ {"ffactor", &font_factor, CONF_TYPE_FLOAT, CONF_RANGE, 0.0, 10.0},
+ {"bg", &play_in_bg, CONF_TYPE_FLAG, 0, 0, 1},
+ {"nobg", &play_in_bg, CONF_TYPE_FLAG, 0, 1, 0},
+ {"sb", &seek_to_byte, CONF_TYPE_INT, CONF_MIN, 0, 0},
+// {"ss", &seek_to_sec, CONF_TYPE_INT, CONF_MIN, 0, 0},
+ {"sound", &has_audio, CONF_TYPE_FLAG, 0, 0, 1},
+ {"nosound", &has_audio, CONF_TYPE_FLAG, 0, 1, 0},
+ {"abs", &audio_buffer_size, CONF_TYPE_INT, CONF_MIN, 0, 0},
+ {"delay", &audio_delay, CONF_TYPE_FLOAT, CONF_RANGE, -10.0, 10.0},
+ {"bps", &pts_from_bps, CONF_TYPE_FLAG, 0, 0, 1},
+ {"nobps", &pts_from_bps, CONF_TYPE_FLAG, 0, 1, 0},
+ {"alsa", &alsa, CONF_TYPE_FLAG, 0, 0, 1},
+ {"noalsa", &alsa, CONF_TYPE_FLAG, 0, 1, 0},
+ {"ni", &force_ni, CONF_TYPE_FLAG, 0, 0, 1},
+ {"noni", &force_ni, CONF_TYPE_FLAG, 0, 1, 0},
+ {"aid", &audio_id, CONF_TYPE_INT, CONF_RANGE, 0, 256},
+ {"vid", &video_id, CONF_TYPE_INT, CONF_RANGE, 0, 256},
+// {"auds", &avi_header.audio_codec, CONF_TYPE_STRING, 0, 0, 0},
+// {"vids", &avi_header.video_codec, CONF_TYPE_STRING, 0, 0, 0},
+ {"mc", &default_max_pts_correction, CONF_TYPE_FLOAT, CONF_RANGE, 0, 10},
+ {"fps", &force_fps, CONF_TYPE_FLOAT, CONF_MIN, 0, 0},
+ {"afm", &audio_format, CONF_TYPE_INT, CONF_RANGE, 1, 6},
+ {"vcd", &vcd_track, CONF_TYPE_INT, CONF_RANGE, 1, 99},
+ {"divxq", "Option -divxq has been renamed to -pp (postprocessing), use -pp !\n",
CONF_TYPE_PRINT, 0, 0, 0},
- {"pp", &divx_quality, CONF_TYPE_INT, CONF_RANGE, 0, 63},
- {"br", &encode_bitrate, CONF_TYPE_INT, CONF_RANGE, 10000, 10000000},
+ {"pp", &divx_quality, CONF_TYPE_INT, CONF_RANGE, 0, 63},
+ {"br", &encode_bitrate, CONF_TYPE_INT, CONF_RANGE, 10000, 10000000},
- {"x", &screen_size_x, CONF_TYPE_INT, CONF_RANGE, 1, 4096},
- {"y", &screen_size_y, CONF_TYPE_INT, CONF_RANGE, 1, 4096},
- {"xy", &screen_size_xy, CONF_TYPE_INT, CONF_RANGE, 1, 4096},
+ {"x", &screen_size_x, CONF_TYPE_INT, CONF_RANGE, 1, 4096},
+ {"y", &screen_size_y, CONF_TYPE_INT, CONF_RANGE, 1, 4096},
+ {"xy", &screen_size_xy, CONF_TYPE_INT, CONF_RANGE, 1, 4096},
{"vm", &vidmode, CONF_TYPE_FLAG, 0, 0, 1},
{"novm", &vidmode, CONF_TYPE_FLAG, 0, 1, 0},
- {"fs", &fullscreen, CONF_TYPE_FLAG, 0, 0, 1},
- {"nofs", &fullscreen, CONF_TYPE_FLAG, 0, 1, 0},
+ {"fs", &fullscreen, CONF_TYPE_FLAG, 0, 0, 1},
+ {"nofs", &fullscreen, CONF_TYPE_FLAG, 0, 1, 0},
{"zoom", &softzoom, CONF_TYPE_FLAG, 0, 0, 1},
{"nozoom", &softzoom, CONF_TYPE_FLAG, 0, 1, 0},
-
+
{"bpp", &vo_dbpp, CONF_TYPE_INT, CONF_RANGE, 0, 32},
-
- {"idx", &no_index, CONF_TYPE_FLAG, 0, 1, 0},
- {"noidx", &no_index, CONF_TYPE_FLAG, 0, 0, 1},
- {"verbose", &verbose, CONF_TYPE_INT, CONF_RANGE, 0, 100},
- {"v", cfg_inc_verbose, CONF_TYPE_FUNC, 0, 0, 0},
- {"-help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
- {"help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
- {"h", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
- {NULL, NULL, 0, 0, 0, 0}
+
+ {"idx", &no_index, CONF_TYPE_FLAG, 0, 1, 0},
+ {"noidx", &no_index, CONF_TYPE_FLAG, 0, 0, 1},
+ {"verbose", &verbose, CONF_TYPE_INT, CONF_RANGE, 0, 100},
+ {"v", cfg_inc_verbose, CONF_TYPE_FUNC, 0, 0, 0},
+ {"-help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
+ {"help", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
+ {"h", help_text, CONF_TYPE_PRINT, CONF_NOCFG, 0, 0},
+ {NULL, NULL, 0, 0, 0, 0}
};
diff --git a/configure b/configure
index d49fb504a9..90b1551a6d 100755
--- a/configure
+++ b/configure
@@ -6,6 +6,10 @@
#
# Changes in reversed order:
#
+# 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
#
@@ -89,7 +93,10 @@ params:
--enable-termcap use termcap database for key codes
--enable-xmmp use XMMP audio drivers
- --enable-lirc enable LIRC (remote control) support
+ --enable-lirc enable LIRC ( remote control ) support
+
+ --disable-select disable audio select() support ( for example required this
+ option ALSA or Vortex2 driver )
--with-x11libdir=DIR X library files are in DIR
--with-win32libdir=DIR windows codec files
@@ -130,16 +137,6 @@ 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
@@ -147,15 +144,6 @@ do
--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
@@ -182,6 +170,7 @@ _gl=no
_sdl=no
_xv=no
_vm=no
+_x11=no
_3dfx=no
_syncfb=no
_mlib=no
@@ -190,7 +179,7 @@ _xmga=no
_dga=no
_dga2=no
_svga=no
-_fbdev=yes
+_fbdev=no
_lirc=no
_xdpms=no
@@ -199,8 +188,11 @@ _y=1
_gllib=
_sdllib=
-_xvlib=
_x11lib=
+_xvlib=
+_xlibdir=
+
+_select='#define HAVE_AUDIO_SELECT'
for i in `echo $pparam`; do
@@ -237,6 +229,13 @@ for i in `echo $pparam`; do
done
+if [ -e /usr/X11R6 ]; then
+ _x11libdir=-L/usr/X11R6/lib
+else
+ if [ -e /usr/X11 ]; then
+ _x11libdir=-L/usr/X11/lib
+ fi
+fi
_win32libdirnotify=no
if [ -e /usr/lib/win32 ]; then
@@ -376,15 +375,21 @@ fi
#echo "DONE (${proc})."
-$_cc $TMPC -o $TMPO -lvgagl -lvga &> /dev/null && _svga=yes
+# check GL & X11 & Xext & Xv & SDL & termcap libs
-$_cc $TMPC -o $TMPO -lpthread &> /dev/null || \
+$_cc $TMPC -o $TMPO $_x11libdir/ -lGL &> /dev/null && _gl=yes
+$_cc $TMPC -o $TMPO $_x11libdir/ -lXxf86vm &> /dev/null && _vm=yes
+$_cc $TMPC -o $TMPO -lvgagl -lvga &> /dev/null && _svga=yes
+$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext &> /dev/null && _x11=yes
+$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXdpms &> /dev/null && _xdpms=yes
+$_cc $TMPC -o $TMPO $_x11libdir -lXv &> /dev/null && _xv=yes
+$_cc $TMPC -o $TMPO $_x11libdir -L/usr/local/lib/ -lpthread &> /dev/null || \
{ echo "Lib pthread not found."; rm -f $TMPC $TMPO ; exit 1; }
# SDL disabled by default (0.11pre22-) because of the compilation problems
# this is very buggy & experimental code, use it only if you really need it!!
_have_sdl=no
-$_cc $TMPC -o $TMPO -L/usr/local/lib/ -lSDL -lpthread &> /dev/null && _have_sdl=yes
+$_cc $TMPC -o $TMPO $_x11libdir -L/usr/local/lib/ -lSDL -lpthread &> /dev/null && _have_sdl=yes
_termcap=no
$_cc $TMPC -o $TMPO -ltermcap &> /dev/null && _termcap=yes
@@ -392,28 +397,7 @@ $_cc $TMPC -o $TMPO -ltermcap &> /dev/null && _termcap=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 $TMPC -o $TMPO $_x11libdir -lX11 -lXext &> /dev/null && _x11=yes
-fi
-
-if [ $_x11 = yes ]; then
-
-$_cc $TMPC -o $TMPO $_x11libdir -lX11 -lXext -lXdpms &> /dev/null && _xdpms=yes
-$_cc $TMPC -o $TMPO $_x11libdir -lXv &> /dev/null && _xv=yes
-
-$_cc $TMPC -o $TMPO $_x11libdir -lGL &> /dev/null && _gl=yes
-
-cat > $TMPC << EOF
-#include <GL/gl.h>
-int main( void ) { return 0; }
-EOF
-$_cc $TMPC -o $TMPO $_x11libdir -lGL &> /dev/null || \
- { _gl=no; echo "GL includes not found!";}
-
-$_cc $TMPC -o $TMPO $_x11libdir -lXxf86vm &> /dev/null && _vm=yes
+# LGB: Check DGA
cat > $TMPC << EOF
#include <stdio.h>
@@ -422,6 +406,7 @@ cat > $TMPC << EOF
int main (void) { return 0;}
EOF
+_dga=no
$_cc $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
@@ -429,6 +414,8 @@ $_cc $TMPC -o $TMPO -L/usr/X11R6/lib -L/usr/X11/lib -lX11 -lXext -lXxf86dga -lXx
# 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>
@@ -440,10 +427,24 @@ EOF
_dga2=no
$_cc $TMPC -o $TMPO -L/usr/X11R6/lib -L/usr/X11/lib -lX11 -lXext -lXxf86dga -lXxf86vm &> /dev/null && _dga2=yes
-fi
+
+cat > $TMPC << EOF
+#include <GL/gl.h>
+int main( void ) { return 0; }
+EOF
+
+$_cc $TMPC -o $TMPO $_x11libdir/ -lGL &> /dev/null || \
+ { _gl=no; echo "GL includes not found!";}
rm -f $TMPC $TMPO
+
+if [ $_x11 = 'yes' ]; then
+ if [ $_mga = 'yes' ]; then
+ _xmga=yes
+ fi
+fi
+
# ---
# check for the parameters.
@@ -493,6 +494,9 @@ do
--enable-vm)
_vm=yes
;;
+ --enable-x11)
+ _x11=yes
+ ;;
--enable-3dfx)
_3dfx=yes
;;
@@ -514,6 +518,9 @@ do
--enable-lirc)
_lirc=yes
;;
+ --enable-select)
+ _select='#define HAVE_AUDIO_SELECT'
+ ;;
--disable-sse)
_sse=no
;;
@@ -545,6 +552,9 @@ do
--disable-vm)
_vm=no
;;
+ --disable-x11)
+ _x11=no
+ ;;
--disable-mlib)
_mlib=no
;;
@@ -563,6 +573,12 @@ do
--disable-termcap)
_termcap=no
;;
+ --disable-select)
+ _select='#undef HAVE_AUDIO_SELECT'
+ ;;
+ --with-x11libdir=*)
+ _x11libdir=-L`echo $ac_option | cut -d '=' -f 2`
+ ;;
--with-win32libdir=*)
_win32libdir=`echo $ac_option | cut -d '=' -f 2`
_win32libdirnotify=no
@@ -573,19 +589,11 @@ do
--size-y=*)
_y=`echo $ac_option | cut -d '=' -f 2`
;;
- --with-x11libdir=*)
- ;;
--cc=*)
;;
esac
done
-if [ $_x11 = 'yes' ]; then
- if [ $_mga = 'yes' ]; then
- _xmga=yes
- fi
-fi
-
# to screen.
echo "Using C compiler: $_cc"
echo "Checking for cpu vendor ... $pvendor ( $pfamily:$pmodel:$pstepping )"
@@ -675,10 +683,12 @@ cat > $MCONF << EOF
AR=ar
CC=$_cc
+X11DIR=$_x11libdir
# OPTFLAGS=-O4 -march=$proc -mcpu=$proc -pipe -fomit-frame-pointer -ffast-math
OPTFLAGS=-O4 -march=$proc -mcpu=$proc -pipe -ffast-math
# LIBS=-L/usr/lib -L/usr/local/lib $_x11libdir $_gllib $_sdllib $_dgalib $_x11lib $_xvlib
-X_LIBS=$_x11libdir $_gllib $_sdllib $_dgalib $_x11lib $_xvlib $_vmlib $_svgalib
+# X_LIBS=$_x11libdir $_gllib $_sdllib $_dgalib $_x11lib $_xvlib $_vmlib $_svgalib
+X_LIBS=\$(X11DIR) $_gllib $_sdllib $_dgalib $_x11lib $_xvlib $_vmlib $_svgalib
TERMCAP_LIB=$_libtermcap
XMM_LIBS = $_xmmplibs
LIRC_LIBS = $_lirclibs
@@ -837,7 +847,7 @@ cat > $CCONF << EOF
/* 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! */
-#define HAVE_AUDIO_SELECT
+$_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
diff --git a/help_mp.h b/help_mp.h
index a1cd318f88..aa867b7a63 100644
--- a/help_mp.h
+++ b/help_mp.h
@@ -1,10 +1,10 @@
static char* banner_text=
"\n\n"
-"MPlayer " VERSION " (C) 2000-2001 Arpad Gereoffy <arpi@thot.banki.hu>\n"
+"MPlayer " VERSION " (C) 2000-2001 Arpad Gereoffy <arpi@esp-team.scene.hu>\n"
"\n";
static char* help_text=
-"\nUsage: mplayer [options] [path/]name\n"
+"Usage: mplayer [options] [path/]name\n"
"\n"
" Options:\n"
" -vo <driver> select output driver (see '-vo help' for driver list)\n"
@@ -40,4 +40,6 @@ static char* help_text=
" q or ESC stop playing and quit program\n"
" + or - adjust audio delay by +/- 0.1 second\n"
" o toggle OSD: none / seek / seek+timer\n"
+" * or / increase or decrease volume\n"
+" m or c use mixer master or pcm channel\n"
"\n";
diff --git a/libvo/wskeys.h b/libvo/wskeys.h
index e624abc34f..e3643ca09f 100644
--- a/libvo/wskeys.h
+++ b/libvo/wskeys.h
@@ -60,6 +60,8 @@
#define wsSpace ' '
#define wsMinus '-'
#define wsPlus '+'
+#define wsMul '*'
+#define wsDiv '/'
#define wsUp 0x52 + 256
#define wsDown 0x54 + 256
diff --git a/libvo/x11_common.c b/libvo/x11_common.c
index 0379797f81..9c72b16732 100644
--- a/libvo/x11_common.c
+++ b/libvo/x11_common.c
@@ -1,41 +1,37 @@
-
#include <stdio.h>
#include <stdlib.h>
-
-#include "config.h"
-
-#ifdef X11_FULLSCREEN
-
#include <string.h>
+
#include <unistd.h>
#include <sys/mman.h>
+#include "config.h"
#include "video_out.h"
+#ifdef X11_FULLSCREEN
+
#include <X11/Xmd.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xatom.h>
-#include <X11/extensions/dpms.h>
-
static int dpms_disabled=0;
static int timeout_save=0;
void vo_hidecursor ( Display *disp , Window win )
{
- Cursor no_ptr;
- Pixmap bm_no;
- XColor black,dummy;
- Colormap colormap;
- static unsigned char bm_no_data[] = { 0,0,0,0, 0,0,0,0 };
-
- colormap = DefaultColormap(disp,DefaultScreen(disp));
- XAllocNamedColor(disp,colormap,"black",&black,&dummy);
- bm_no = XCreateBitmapFromData(disp, win, bm_no_data, 8,8);
- no_ptr=XCreatePixmapCursor(disp, bm_no, bm_no,&black, &black,0, 0);
- XDefineCursor(disp,win,no_ptr);
+ Cursor no_ptr;
+ Pixmap bm_no;
+ XColor black,dummy;
+ Colormap colormap;
+ static unsigned char bm_no_data[] = { 0,0,0,0, 0,0,0,0 };
+
+ colormap = DefaultColormap(disp,DefaultScreen(disp));
+ XAllocNamedColor(disp,colormap,"black",&black,&dummy);
+ bm_no = XCreateBitmapFromData(disp, win, bm_no_data, 8,8);
+ no_ptr=XCreatePixmapCursor(disp, bm_no, bm_no,&black, &black,0, 0);
+ XDefineCursor(disp,win,no_ptr);
}
@@ -100,6 +96,10 @@ void vo_x11_putkey(int key){
case wsGrayMinus: mplayer_put_key('-'); break;
case wsPlus:
case wsGrayPlus: mplayer_put_key('+'); break;
+ case wsGrayMul:
+ case wsMul: mplayer_put_key('*'); break;
+ case wsGrayDiv:
+ case wsDiv: mplayer_put_key('/'); break;
default: if((key>='a' && key<='z')||(key>='A' && key<='Z')) mplayer_put_key(key);
}
@@ -153,17 +153,17 @@ int vo_x11_check_events(Display *mydisplay){
switch( Event.type )
{
case Expose:
- ret|=VO_EVENT_EXPOSE;
+ ret|=VO_EVENT_EXPOSE;
break;
case ConfigureNotify:
vo_dwidth=Event.xconfigure.width;
- vo_dheight=Event.xconfigure.height;
- ret|=VO_EVENT_RESIZE;
+ vo_dheight=Event.xconfigure.height;
+ ret|=VO_EVENT_RESIZE;
break;
case KeyPress:
XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat );
vo_x11_putkey( ( (keySym&0xff00) != 0?( (keySym&0x00ff) + 256 ):( keySym ) ) );
- ret|=VO_EVENT_KEYPRESS;
+ ret|=VO_EVENT_KEYPRESS;
break;
}
}
@@ -171,25 +171,27 @@ int vo_x11_check_events(Display *mydisplay){
return ret;
}
+#endif
+
void saver_on(Display *mDisplay) {
int nothing;
if (dpms_disabled)
{
- if (DPMSQueryExtension(mDisplay, &nothing, &nothing))
- {
- printf ("Enabling DPMS\n");
- DPMSEnable(mDisplay); // restoring power saving settings
- DPMSQueryExtension(mDisplay, &nothing, &nothing);
- }
+ if (DPMSQueryExtension(mDisplay, &nothing, &nothing))
+ {
+ printf ("Enabling DPMS\n");
+ DPMSEnable(mDisplay); // restoring power saving settings
+ DPMSQueryExtension(mDisplay, &nothing, &nothing);
+ }
}
-
+
if (timeout_save)
{
- int dummy, interval, prefer_blank, allow_exp;
- XGetScreenSaver(mDisplay, &dummy, &interval, &prefer_blank, &allow_exp);
- XSetScreenSaver(mDisplay, timeout_save, interval, prefer_blank, allow_exp);
- XGetScreenSaver(mDisplay, &timeout_save, &interval, &prefer_blank, &allow_exp);
+ int dummy, interval, prefer_blank, allow_exp;
+ XGetScreenSaver(mDisplay, &dummy, &interval, &prefer_blank, &allow_exp);
+ XSetScreenSaver(mDisplay, timeout_save, interval, prefer_blank, allow_exp);
+ XGetScreenSaver(mDisplay, &timeout_save, &interval, &prefer_blank, &allow_exp);
}
}
@@ -200,20 +202,18 @@ void saver_off(Display *mDisplay) {
if (DPMSQueryExtension(mDisplay, &nothing, &nothing))
{
- BOOL onoff;
- CARD16 state;
- DPMSInfo(mDisplay, &state, &onoff);
- if (onoff)
- {
- printf ("Disabling DPMS\n");
- dpms_disabled=1;
- DPMSDisable(mDisplay); // monitor powersave off
- }
+ BOOL onoff;
+ CARD16 state;
+ DPMSInfo(mDisplay, &state, &onoff);
+ if (onoff)
+ {
+ printf ("Disabling DPMS\n");
+ dpms_disabled=1;
+ DPMSDisable(mDisplay); // monitor powersave off
+ }
}
XGetScreenSaver(mDisplay, &timeout_save, &interval, &prefer_blank, &allow_exp);
if (timeout_save)
- XSetScreenSaver(mDisplay, 0, interval, prefer_blank, allow_exp);
- // turning off screensaver
+ XSetScreenSaver(mDisplay, 0, interval, prefer_blank, allow_exp);
+ // turning off screensaver
}
-
-#endif
diff --git a/lirc_mp.c b/lirc_mp.c
index 7ab91c06cd..42ab098826 100644
--- a/lirc_mp.c
+++ b/lirc_mp.c
@@ -95,7 +95,11 @@ int lirc_mp_getinput(){
{"FFWD" , KEY_UP},
{"RWND" , KEY_LEFT},
{"FRWND" , KEY_DOWN},
- {"PAUSE", 'p'}
+ {"PAUSE", 'p'},
+ {"INCVOL", '*'},
+ {"DECVOL", '/'},
+ {"MASTER", 'm'},
+ {"PCM", 'c'}
};
char *code;
diff --git a/mplayer.c b/mplayer.c
index 3d74849faa..c3286b99cf 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -88,7 +88,7 @@ int verbose=0;
#define ABS(x) (((x)>=0)?(x):(-(x)))
//**************************************************************************//
-// .SUB
+// .SUB
//**************************************************************************//
static current_sub=0;
@@ -127,47 +127,39 @@ static int cfg_inc_verbose(struct config *conf){
}
static int cfg_include(struct config *conf, char *filename){
- return parse_config_file(conf, filename);
+ return parse_config_file(conf, filename);
}
char *get_path(char *filename){
- char *homedir;
- char *buff;
- static char *config_dir = "/.mplayer";
- int len;
-
- if ((homedir = getenv("HOME")) == NULL)
- return NULL;
- len = strlen(homedir) + strlen(config_dir) + 1;
- if (filename == NULL) {
- if ((buff = (char *) malloc(len)) == NULL)
- return NULL;
- sprintf(buff, "%s%s", homedir, config_dir);
- } else {
- len += strlen(filename) + 1;
- if ((buff = (char *) malloc(len)) == NULL)
- return NULL;
- sprintf(buff, "%s%s/%s", homedir, config_dir, filename);
- }
- return buff;
+ char *homedir;
+ char *buff;
+ static char *config_dir = "/.mplayer";
+ int len;
+
+ if ((homedir = getenv("HOME")) == NULL)
+ return NULL;
+ len = strlen(homedir) + strlen(config_dir) + 1;
+ if (filename == NULL) {
+ if ((buff = (char *) malloc(len)) == NULL)
+ return NULL;
+ sprintf(buff, "%s%s", homedir, config_dir);
+ } else {
+ len += strlen(filename) + 1;
+ if ((buff = (char *) malloc(len)) == NULL)
+ return NULL;
+ sprintf(buff, "%s%s/%s", homedir, config_dir, filename);
+ }
+ return buff;
}
static int max_framesize=0;
-//static int dbg_es_sent=0;
-//static int dbg_es_rcvd=0;
+static int dbg_es_sent=0;
+static int dbg_es_rcvd=0;
//static int show_packets=0;
//**************************************************************************//
-//**************************************************************************//
-// Input media streaming & demultiplexer:
-//**************************************************************************//
-
-#include "stream.c"
-#include "demuxer.c"
-
-#include "stheader.h"
typedef struct {
// file:
@@ -181,9 +173,6 @@ typedef struct {
int idx_pos_a;
int idx_pos_v;
int idx_offset; // ennyit kell hozzaadni az index offset ertekekhez
- // streams:
- sh_audio_t* a_streams[256];
- sh_video_t* v_streams[256];
// video:
unsigned int bitrate;
} avi_header_t;
@@ -192,28 +181,20 @@ avi_header_t avi_header;
#include "aviprint.c"
-sh_audio_t* new_sh_audio(int id){
- if(avi_header.a_streams[id]){
- printf("Warning! Audio stream header %d redefined!\n",id);
- } else {
- if(verbose) printf("Found audio stream: %d\n",id);
- avi_header.a_streams[id]=malloc(sizeof(sh_audio_t));
- memset(avi_header.a_streams[id],0,sizeof(sh_audio_t));
- }
- return avi_header.a_streams[id];
-}
+extern picture_t *picture;
-sh_video_t* new_sh_video(int id){
- if(avi_header.v_streams[id]){
- printf("Warning! video stream header %d redefined!\n",id);
- } else {
- if(verbose) printf("Found video stream: %d\n",id);
- avi_header.v_streams[id]=malloc(sizeof(sh_video_t));
- memset(avi_header.v_streams[id],0,sizeof(sh_video_t));
- }
- return avi_header.v_streams[id];
-}
+char* encode_name=NULL;
+char* encode_index_name=NULL;
+int encode_bitrate=0;
+
+//**************************************************************************//
+// Input media streaming & demultiplexer:
+//**************************************************************************//
+#include "stream.c"
+#include "demuxer.c"
+
+#include "stheader.h"
#include "demux_avi.c"
#include "demux_mpg.c"
@@ -222,18 +203,14 @@ demuxer_t *demuxer=NULL;
demux_stream_t *d_audio=NULL;
demux_stream_t *d_video=NULL;
-sh_audio_t *sh_audio=NULL;//&sh_audio_i;
-sh_video_t *sh_video=NULL;//&sh_video_i;
-
-char* encode_name=NULL;
-char* encode_index_name=NULL;
-int encode_bitrate=0;
+sh_audio_t sh_audio_i; // FIXME later!
+sh_video_t sh_video_i;
+sh_audio_t *sh_audio=&sh_audio_i;
+sh_video_t *sh_video=&sh_video_i;
// MPEG video stream parser:
#include "parse_es.c"
-extern picture_t *picture;
-
static const int frameratecode2framerate[16] = {
0, 24000*10000/1001, 24*10000,25*10000, 30000*10000/1001, 30*10000,50*10000,60000*10000/1001,
60*10000, 0,0,0,0,0,0,0
@@ -274,15 +251,15 @@ int opendivx_stride[3];
// callback, the opendivx decoder calls this for each frame:
void convert_linux(unsigned char *puc_y, int stride_y,
- unsigned char *puc_u, unsigned char *puc_v, int stride_uv,
- unsigned char *bmp, int width_y, int height_y){
+ unsigned char *puc_u, unsigned char *puc_v, int stride_uv,
+ unsigned char *bmp, int width_y, int height_y){
// printf("convert_yuv called %dx%d stride: %d,%d\n",width_y,height_y,stride_y,stride_uv);
opendivx_src[0]=puc_y;
opendivx_src[1]=puc_u;
opendivx_src[2]=puc_v;
-
+
opendivx_stride[0]=stride_y;
opendivx_stride[1]=stride_uv;
opendivx_stride[2]=stride_uv;
@@ -372,7 +349,6 @@ void exit_sighandler(int x){
}
int divx_quality=0;
-extern int vo_dbpp;
int main(int argc,char* argv[], char *envp[]){
char* filename=NULL; //"MI2-Trailer.avi";
@@ -383,8 +359,8 @@ int f; // filedes
int stream_type;
stream_t* stream=NULL;
int file_format=DEMUXER_TYPE_UNKNOWN;
-int has_audio=1;
-//int has_video=1;
+int has_audio=1; // audio 0=no 1=mpeg 2=pcm 3=ac3 4=ACM 5=alaw 6=msgsm 7=DShow
+int has_video=1; // video 0=no 1=mpeg 2=win32/VfW 3=OpenDivX 4=w32/DShow
//
int audio_format=0; // override
#ifdef ALSA_TIMER
@@ -430,7 +406,10 @@ char *sub_name=NULL;
float sub_delay=0;
float sub_fps=0;
//int user_bpp=0;
-
+extern int vo_dbpp;
+// --- NEW
+#include "mixer.h"
+// ---
#include "cfg-mplayer.h"
printf("%s",banner_text);
@@ -470,18 +449,30 @@ if(video_driver && strcmp(video_driver,"help")==0){
i=0;
while (video_out_drivers[i]) {
const vo_info_t *info = video_out_drivers[i++]->get_info ();
- printf("\t%s\t%s\n", info->short_name, info->name);
+ printf("\t%s\t%s\n", info->short_name, info->name);
}
printf("\n");
exit(0);
}
-if(!filename){
- if(vcd_track) filename="/dev/cdrom";
- else {
- printf("%s",help_text); exit(0);
+// check font
+ if(font_name){
+ vo_font=read_font_desc(font_name,font_factor,verbose>1);
+ if(!vo_font) printf("Can't load font: %s\n",font_name);
+ } else {
+ // try default:
+ vo_font=read_font_desc(get_path("font/font.desc"),font_factor,verbose>1);
}
-}
+
+// check .sub
+ if(sub_name){
+ subtitles=sub_read_file(sub_name);
+ if(!subtitles) printf("Can't load subtitles: %s\n",font_name);
+ } else {
+ // try default:
+ subtitles=sub_read_file(get_path("default.sub"));
+ }
+
// check video_out driver name:
if(!video_driver)
@@ -498,30 +489,19 @@ if(!filename){
return 0;
}
+if(!filename){
+ if(vcd_track) filename="/dev/cdrom";
+ else {
+ printf("%s",help_text); exit(0);
+ }
+}
+
// check codec.conf
if(!parse_codec_cfg(get_path("codecs.conf"))){
printf("(copy/link DOCS/codecs.conf to ~/.mplayer/codecs.conf)\n");
exit(1);
}
-// check font
- if(font_name){
- vo_font=read_font_desc(font_name,font_factor,verbose>1);
- if(!vo_font) printf("Can't load font: %s\n",font_name);
- } else {
- // try default:
- vo_font=read_font_desc(get_path("font/font.desc"),font_factor,verbose>1);
- }
-
-// check .sub
- if(sub_name){
- subtitles=sub_read_file(sub_name);
- if(!subtitles) printf("Can't load subtitles: %s\n",font_name);
- } else {
- // try default:
- subtitles=sub_read_file(get_path("default.sub"));
- }
-
if(vcd_track){
//============ Open VideoCD track ==============
@@ -546,7 +526,7 @@ stream=new_stream(f,stream_type);
//============ Open & Sync stream and detect file format ===============
-if(!has_audio) audio_id=-2; // do NOT read audio packets...
+if(has_audio==0) audio_id=-2; // do NOT read audio packets...
//=============== Try to open as AVI file: =================
stream_reset(stream);
@@ -557,7 +537,7 @@ stream_seek(demuxer->stream,seek_to_byte);
if(id==mmioFOURCC('R','I','F','F')){
stream_read_dword_le(demuxer->stream); //filesize
id=stream_read_dword_le(demuxer->stream); // "AVI "
- if(id==formtypeAVI){
+ if(id==formtypeAVI){
printf("Detected AVI file format!\n");
file_format=DEMUXER_TYPE_AVI;
}
@@ -618,10 +598,8 @@ if(file_format==DEMUXER_TYPE_UNKNOWN){
//====== File format recognized, set up these for compatibility: =========
d_audio=demuxer->audio;
d_video=demuxer->video;
-//d_audio->sh=sh_audio;
-//d_video->sh=sh_video;
-//sh_audio=d_audio->sh;sh_audio->ds=d_audio;
-//sh_video=d_video->sh;sh_video->ds=d_video;
+d_audio->sh=sh_audio; sh_audio->ds=d_audio;
+d_video->sh=sh_video; sh_video->ds=d_video;
switch(file_format){
case DEMUXER_TYPE_AVI: {
@@ -641,7 +619,7 @@ switch(file_format){
if(verbose) printf("AVI index offset: %d\n",avi_header.idx_offset);
}
demuxer->endpos=avi_header.movi_end;
-
+
if(avi_header.idx_size>0){
// check that file is non-interleaved:
int i;
@@ -671,7 +649,7 @@ switch(file_format){
if(force_ni || abs(a_pos-v_pos)>0x100000){ // distance > 1MB
printf("Detected NON-INTERLEAVED AVI file-format!\n");
demuxer->type=DEMUXER_TYPE_AVI_NI; // HACK!!!!
- pts_from_bps=1; // force BPS sync!
+ pts_from_bps=1; // force BPS sync!
}
}
} else {
@@ -679,26 +657,21 @@ switch(file_format){
if(force_ni){
printf("Using NON-INTERLEAVED Broken AVI file-format!\n");
demuxer->type=DEMUXER_TYPE_AVI_NINI; // HACK!!!!
- avi_header.idx_pos_a=
- avi_header.idx_pos_v=avi_header.movi_start;
- pts_from_bps=1; // force BPS sync!
+ avi_header.idx_pos_a=
+ avi_header.idx_pos_v=avi_header.movi_start;
+ pts_from_bps=1; // force BPS sync!
}
}
if(!ds_fill_buffer(d_video)){
printf("AVI: missing video stream!? contact the author, it may be a bug :(\n");
exit(1);
}
- sh_video=d_video->sh;sh_video->ds=d_video;
if(has_audio){
- if(verbose) printf("AVI: Searching for audio stream (id:%d)\n",d_audio->id);
+ if(verbose) printf("ASF: Searching for audio stream (id:%d)\n",d_audio->id);
if(!ds_fill_buffer(d_audio)){
- printf("AVI: No Audio stream found... ->nosound\n");
+ printf("ASF: No Audio stream found... ->nosound\n");
has_audio=0;
- sh_audio=NULL;
- } else {
- sh_audio=d_audio->sh;sh_audio->ds=d_audio;
- sh_audio->format=sh_audio->wf->wFormatTag;
- }
+ } else sh_audio->format=sh_audio->wf.wFormatTag;
}
// calc. FPS:
sh_video->fps=(float)sh_video->video.dwRate/(float)sh_video->video.dwScale;
@@ -709,10 +682,10 @@ switch(file_format){
if(verbose) printf("AVI video length=%d\n",avi_header.bitrate);
avi_header.bitrate=((float)avi_header.bitrate/(float)sh_video->video.dwLength)*sh_video->fps;
printf("VIDEO: [%.4s] %dx%d %dbpp %4.2f fps %5.1f kbps (%4.1f kbyte/s)\n",
- &sh_video->bih->biCompression,
- sh_video->bih->biWidth,
- sh_video->bih->biHeight,
- sh_video->bih->biBitCount,
+ &sh_video->bih.biCompression,
+ sh_video->bih.biWidth,
+ sh_video->bih.biHeight,
+ sh_video->bih.biBitCount,
sh_video->fps,
avi_header.bitrate*0.008f,
avi_header.bitrate/1024.0f );
@@ -729,42 +702,36 @@ switch(file_format){
printf("ASF: missing video stream!? contact the author, it may be a bug :(\n");
exit(1);
}
- sh_video=d_video->sh;sh_video->ds=d_video;
if(has_audio){
if(verbose) printf("ASF: Searching for audio stream (id:%d)\n",d_audio->id);
if(!ds_fill_buffer(d_audio)){
printf("ASF: No Audio stream found... ->nosound\n");
has_audio=0;
- sh_audio=NULL;
- } else {
- sh_audio=d_audio->sh;sh_audio->ds=d_audio;
- sh_audio->format=sh_audio->wf->wFormatTag;
- }
+ } else sh_audio->format=sh_audio->wf.wFormatTag;
}
sh_video->fps=1000.0f; sh_video->frametime=0.001f; // 1ms
printf("VIDEO: [%.4s] %dx%d %dbpp\n",
- &sh_video->bih->biCompression,
- sh_video->bih->biWidth,
- sh_video->bih->biHeight,
- sh_video->bih->biBitCount);
+ &sh_video->bih.biCompression,
+ sh_video->bih.biWidth,
+ sh_video->bih.biHeight,
+ sh_video->bih.biBitCount);
break;
}
case DEMUXER_TYPE_MPEG_ES: {
- d_audio->type=0;
- has_audio=0;sh_audio=NULL; // ES streams has no audio channel
+ demuxer->audio->type=0;
+ has_audio=0; // ES streams has no audio channel
break;
}
case DEMUXER_TYPE_MPEG_PS: {
if(has_audio)
if(!ds_fill_buffer(d_audio)){
printf("MPEG: No Audio stream found... ->nosound\n");
- has_audio=0;sh_audio=NULL;
+ has_audio=0;
} else {
- sh_audio=d_audio->sh;sh_audio->ds=d_audio;
if(verbose) printf("detected MPG-PS audio format: %d\n",d_audio->type);
switch(d_audio->type){
case 1: sh_audio->format=0x50;break; // mpeg
- case 2: sh_audio->format=0x10001;break; // dvd pcm
+ case 2: sh_audio->format=0x2;break; // pcm
case 3: sh_audio->format=0x2000;break; // ac3
default: has_audio=0; // unknown type
}
@@ -778,9 +745,9 @@ switch(file_format){
case DEMUXER_TYPE_AVI:
case DEMUXER_TYPE_ASF: {
// display info:
- sh_video->format=sh_video->bih->biCompression;
- sh_video->disp_w=sh_video->bih->biWidth;
- sh_video->disp_h=abs(sh_video->bih->biHeight);
+ sh_video->format=sh_video->bih.biCompression;
+ sh_video->disp_w=sh_video->bih.biWidth;
+ sh_video->disp_h=abs(sh_video->bih.biHeight);
break;
}
case DEMUXER_TYPE_MPEG_ES:
@@ -797,7 +764,6 @@ switch(file_format){
}
}
if(verbose) printf("OK!\n");
- sh_video=d_video->sh;sh_video->ds=d_video;
sh_video->format=1; // mpeg video
mpeg2_init();
// ========= Read & process sequence header & extension ============
@@ -833,7 +799,7 @@ switch(file_format){
}
} // switch(file_format)
-//if(verbose) printf("file successfully opened (has_audio=%d)\n",has_audio);
+if(verbose) printf("file successfully opened (has_audio=%d)\n",has_audio);
printf("[V] filefmt:%d fourcc:0x%X size:%dx%d fps:%5.2f ftime:=%6.4f\n",
file_format,sh_video->format,sh_video->disp_w,sh_video->disp_h,
@@ -851,15 +817,15 @@ if(has_audio){
has_audio=0;
} else {
printf("Found audio codec: [%s] drv:%d (%s)\n",sh_audio->codec->name,sh_audio->codec->driver,sh_audio->codec->info);
- //has_audio=sh_audio->codec->driver;
+ has_audio=sh_audio->codec->driver;
}
}
if(has_audio){
if(verbose) printf("Initializing audio codec...\n");
- if(!init_audio(sh_audio)){
+ has_audio=init_audio(sh_audio);
+ if(!has_audio){
printf("Couldn't initialize audio codec! -> nosound\n");
- has_audio=0;
} else {
printf("AUDIO: samplerate=%d channels=%d bps=%d\n",sh_audio->samplerate,sh_audio->channels,sh_audio->samplesize);
}
@@ -868,19 +834,26 @@ if(has_audio){
//================== Init VIDEO (codec & libvo) ==========================
// Go through the codec.conf and find the best codec...
-sh_video->codec=find_codec(sh_video->format,
- sh_video->bih?((unsigned int*) &sh_video->bih->biCompression):NULL,NULL,0);
+sh_video->codec=find_codec(sh_video->format,(unsigned int*) &sh_video->bih.biCompression,NULL,0);
if(!sh_video->codec){
printf("Can't find codec for video format 0x%X !\n",sh_video->format);
exit(1);
}
-//has_video=sh_video->codec->driver;
+has_video=sh_video->codec->driver;
printf("Found video codec: [%s] drv:%d (%s)\n",sh_video->codec->name,sh_video->codec->driver,sh_video->codec->info);
+//if(user_bpp)printf("Trying user defined depth of %dbpp\n", user_bpp);
+
for(i=0;i<CODECS_MAX_OUTFMT;i++){
out_fmt=sh_video->codec->outfmt[i];
- if(video_out->query_format(out_fmt)) break;
+// if(vo_dbpp){
+// if( ((out_fmt & IMGFMT_BGR_MASK) == IMGFMT_BGR) && ((out_fmt & 0xff) == vo_dbpp) || (out_fmt & IMGFMT_BGR_MASK) != IMGFMT_BGR){
+// if(video_out->query_format(out_fmt)) break;
+// }
+// }else{
+ if(video_out->query_format(out_fmt)) break;
+// }
}
if(i>=CODECS_MAX_OUTFMT){
printf("Sorry, selected video_out device is incompatible with this codec.\n");
@@ -888,7 +861,7 @@ if(i>=CODECS_MAX_OUTFMT){
}
sh_video->outfmtidx=i;
-switch(sh_video->codec->driver){
+switch(has_video){
case 2: {
if(!init_video_codec(out_fmt)) exit(1);
if(verbose) printf("INFO: Win32 video codec init OK!\n");
@@ -900,14 +873,14 @@ switch(sh_video->codec->driver){
exit(1);
#else
sh_video->our_out_buffer=NULL;
- if(DS_VideoDecoder_Open(sh_video->codec->dll,&sh_video->codec->guid, sh_video->bih, 0, &sh_video->our_out_buffer)){
+ if(DS_VideoDecoder_Open(sh_video->codec->dll,&sh_video->codec->guid, &sh_video->bih, 0, &sh_video->our_out_buffer)){
printf("ERROR: Couldn't open required DirectShow codec: %s\n",sh_video->codec->dll);
printf("Maybe you forget to upgrade your win32 codecs?? It's time to download the new\n");
printf("package from: ftp://thot.banki.hu/esp-team/linux/MPlayer/w32codec.zip !\n");
printf("Or you should disable DShow support: make distclean;make -f Makefile.No-DS\n");
exit(1);
}
-
+
if(out_fmt==IMGFMT_YUY2)
DS_VideoDecoder_SetDestFmt(16,mmioFOURCC('Y', 'U', 'Y', '2'));
// DS_VideoDecoder_SetDestFmt(16,mmioFOURCC('Y', 'V', '1', '2'));
@@ -918,7 +891,7 @@ switch(sh_video->codec->driver){
printf("DivX setting result = %d\n", DS_SetAttr_DivX("Quality",divx_quality) );
// printf("DivX setting result = %d\n", DS_SetValue_DivX("Brightness",60) );
-
+
if(verbose) printf("INFO: Win32/DShow video codec init OK!\n");
break;
#endif
@@ -927,12 +900,12 @@ switch(sh_video->codec->driver){
if(verbose) printf("OpenDivX video codec\n");
{ DEC_PARAM dec_param;
DEC_SET dec_set;
- dec_param.x_dim = sh_video->bih->biWidth;
- dec_param.y_dim = sh_video->bih->biHeight;
- dec_param.color_depth = 32;
- decore(0x123, DEC_OPT_INIT, &dec_param, NULL);
- dec_set.postproc_level = divx_quality;
- decore(0x123, DEC_OPT_SETPP, &dec_set, NULL);
+ dec_param.x_dim = sh_video->bih.biWidth;
+ dec_param.y_dim = sh_video->bih.biHeight;
+ dec_param.color_depth = 32;
+ decore(0x123, DEC_OPT_INIT, &dec_param, NULL);
+ dec_set.postproc_level = divx_quality;
+ decore(0x123, DEC_OPT_SETPP, &dec_set, NULL);
}
if(verbose) printf("INFO: OpenDivX video codec init OK!\n");
break;
@@ -1043,7 +1016,7 @@ make_pipe(&keyb_fifo_get,&keyb_fifo_put);
if(verbose) printf("INFO: Video OUT driver init OK!\n");
fflush(stdout);
-
+
//================== MAIN: ==========================
{
int audio_fd=-1;
@@ -1171,10 +1144,9 @@ if(!has_audio){
if(verbose) printf("Freeing %d unused audio chunks\n",d_audio->packs);
ds_free_packs(d_audio); // free buffered chunks
d_audio->id=-2; // do not read audio chunks
- if(sh_audio) if(sh_audio->a_buffer) free(sh_audio->a_buffer);
+ if(sh_audio->a_buffer) free(sh_audio->a_buffer);
alsa=1;
// fake, required for timer:
- sh_audio=new_sh_audio(255); // FIXME!!!!!!!!!!
sh_audio->samplerate=76800;
sh_audio->samplesize=sh_audio->channels=2;
sh_audio->o_bps=sh_audio->channels*sh_audio->samplerate*sh_audio->samplesize;
@@ -1215,7 +1187,7 @@ while(has_audio){
// Update buffer if needed
unsigned int t=GetTimer();
current_module="decode_audio"; // Enter AUDIO decoder module
- //sh_audio->codec->driver=has_audio; // FIXME!
+ sh_audio->codec->driver=has_audio; // FIXME!
while(sh_audio->a_buffer_len<OUTBURST && !d_audio->eof){
int ret=decode_audio(sh_audio,&sh_audio->a_buffer[sh_audio->a_buffer_len],sh_audio->a_buffer_size-sh_audio->a_buffer_len);
if(ret>0) sh_audio->a_buffer_len+=ret; else break;
@@ -1292,14 +1264,14 @@ while(has_audio){
if(1)
while(v_frame<a_frame || force_redraw){
-
+
float frame_time=1;
float pts1=d_video->pts;
current_module="decode_video";
//-------------------- Decode a frame: -----------------------
-switch(sh_video->codec->driver){
+switch(has_video){
case 3: {
// OpenDivX
unsigned int t=GetTimer();
@@ -1311,9 +1283,9 @@ switch(sh_video->codec->driver){
if(in_size>max_framesize) max_framesize=in_size;
// let's decode
dec_frame.length = in_size;
- dec_frame.bitstream = start;
- dec_frame.render_flag = 1;
- decore(0x123, 0, &dec_frame, NULL);
+ dec_frame.bitstream = start;
+ dec_frame.render_flag = 1;
+ decore(0x123, 0, &dec_frame, NULL);
t2=GetTimer();t=t2-t;video_time_usage+=t*0.000001f;
if(opendivx_src[0]){
@@ -1349,15 +1321,14 @@ switch(sh_video->codec->driver){
int in_size=ds_get_packet(d_video,&start);
if(in_size<0){ eof=1;break;}
if(in_size>max_framesize) max_framesize=in_size;
-
- if(in_size){
- sh_video->bih->biSizeImage = in_size;
-// ret = ICDecompress(avi_header.hic, ICDECOMPRESS_NOTKEYFRAME|(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL),
- ret = ICDecompress(sh_video->hic, ICDECOMPRESS_NOTKEYFRAME,
- sh_video->bih, start,
+
+ sh_video->bih.biSizeImage = in_size;
+// ret = ICDecompress(avi_header.hic, ICDECOMPRESS_NOTKEYFRAME|(ICDECOMPRESS_HURRYUP|ICDECOMPRESS_PREROL),
+ ret = ICDecompress(sh_video->hic, ICDECOMPRESS_NOTKEYFRAME,
+ &sh_video->bih, start,
&sh_video->o_bih, sh_video->our_out_buffer);
if(ret){ printf("Error decompressing frame, err=%d\n",ret);break; }
- }
+
t2=GetTimer();t=t2-t;video_time_usage+=t*0.000001f;
video_out->draw_frame((uint8_t **)&sh_video->our_out_buffer);
t2=GetTimer()-t2;vout_time_usage+=t2*0.000001f;
@@ -1389,30 +1360,30 @@ switch(sh_video->codec->driver){
if(i>=0x101 && i<0x1B0) in_frame=1; // picture startcode
else if(!i){ eof=1; break;} // EOF
}
- if(grab_frames==2 && (i==0x1B3 || i==0x1B8)) grab_frames=1;
+ if(grab_frames==2 && (i==0x1B3 || i==0x1B8)) grab_frames=1;
if(!read_video_packet(d_video)){ eof=1; break;} // EOF
//printf("read packet 0x%X, len=%d\n",i,videobuf_len);
}
-
+
if(videobuf_len>max_framesize) max_framesize=videobuf_len; // debug
//printf("--- SEND %d bytes\n",videobuf_len);
- if(grab_frames==1){
- FILE *f=fopen("grab.mpg","ab");
- fwrite(videobuffer,videobuf_len-4,1,f);
- fclose(f);
- }
-
+ if(grab_frames==1){
+ FILE *f=fopen("grab.mpg","ab");
+ fwrite(videobuffer,videobuf_len-4,1,f);
+ fclose(f);
+ }
+
t-=GetTimer();
mpeg2_decode_data(video_out, videobuffer, videobuffer+videobuf_len);
t+=GetTimer(); video_time_usage+=t*0.000001;
newfps=frameratecode2framerate[picture->frame_rate_code]*0.0001f;
- if(ABS(sh_video->fps-newfps)>0.01f) if(!force_fps){
+ if(ABS(sh_video->fps-newfps)>0.01f){
printf("Warning! FPS changed %5.3f -> %5.3f (%f) [%d] \n",sh_video->fps,newfps,sh_video->fps-newfps,picture->frame_rate_code);
sh_video->fps=newfps;
sh_video->frametime=10000.0f/(float)frameratecode2framerate[picture->frame_rate_code];
}
-
+
frame_time=(100+picture->repeat_count)*0.01f;
picture->repeat_count=0;
@@ -1424,7 +1395,7 @@ switch(sh_video->codec->driver){
// Increase video timers:
num_frames+=frame_time;
frame_time*=sh_video->frametime;
- if(file_format==DEMUXER_TYPE_ASF && !force_fps){
+ if(file_format==DEMUXER_TYPE_ASF){
// .ASF files has no fixed FPS - just frame durations!
float d=d_video->pts-pts1;
if(d>=0 && d<5) frame_time=d;
@@ -1450,7 +1421,7 @@ switch(sh_video->codec->driver){
if(has_audio){
if(pts_from_bps && (file_format==DEMUXER_TYPE_AVI)){
// a_pts=(float)ds_tell(d_audio)/sh_audio->wf.nAvgBytesPerSec-(buffer_delay+audio_delay);
- a_pts=(float)ds_tell(d_audio)/sh_audio->wf->nAvgBytesPerSec-(buffer_delay);
+ a_pts=(float)ds_tell(d_audio)/sh_audio->wf.nAvgBytesPerSec-(buffer_delay);
delay_corrected=1; // hack
} else
if(d_audio->pts){
@@ -1481,12 +1452,12 @@ switch(sh_video->codec->driver){
if(x> max_pts_correction) x= max_pts_correction;
max_pts_correction=default_max_pts_correction;
a_frame+=x; c_total+=x;
- printf(" ct:%7.3f %3d %2d%% %2d%% %3.1f%% \r",c_total,
+ printf(" ct:%7.3f %3d %2d%% %2d%% %3.1f%% %d \r",c_total,
(int)num_frames,
(v_frame>0.5)?(int)(100.0*video_time_usage/(double)v_frame):0,
(v_frame>0.5)?(int)(100.0*vout_time_usage/(double)v_frame):0,
- (v_frame>0.5)?(100.0*audio_time_usage/(double)v_frame):0
-// dbg_es_sent-dbg_es_rcvd
+ (v_frame>0.5)?(100.0*audio_time_usage/(double)v_frame):0,
+ dbg_es_sent-dbg_es_rcvd
);
fflush(stdout);
}
@@ -1498,13 +1469,12 @@ switch(sh_video->codec->driver){
if(d_video->pts) v_pts=d_video->pts;
if(frame_corr_num==5){
// printf("A: --- V:%6.1f \r",v_pts);
- printf("V:%6.1f %3d %2d%% %2d%% %3.1f%% \r",v_pts,
+ printf("V:%6.1f %3d %2d%% %2d%% %3.1f%% %d \r",v_pts,
(int)num_frames,
(v_frame>0.5)?(int)(100.0*video_time_usage/(double)v_frame):0,
(v_frame>0.5)?(int)(100.0*vout_time_usage/(double)v_frame):0,
- (v_frame>0.5)?(100.0*audio_time_usage/(double)v_frame):0
-// dbg_es_sent-dbg_es_rcvd
- );
+ (v_frame>0.5)?(100.0*audio_time_usage/(double)v_frame):0,
+ dbg_es_sent-dbg_es_rcvd);
fflush(stdout);
frame_corr_num=0;
@@ -1525,7 +1495,7 @@ switch(sh_video->codec->driver){
lirc_mp_getinput()<=0 &&
#endif
getch2(20)<=0 && mplayer_get_key()<=0){
- video_out->check_events();
+ video_out->check_events();
}
osd_function=OSD_PLAY;
}
@@ -1578,6 +1548,20 @@ switch(sh_video->codec->driver){
case 'o': // toggle OSD
osd_level=(osd_level+1)%3;
break;
+// --- NEW
+ case '*':
+ mixer_incvolume();
+ break;
+ case '/':
+ mixer_decvolume();
+ break;
+ case 'm':
+ mixer_usemaster=1;
+ break;;
+ case 'c':
+ mixer_usemaster=0;
+ break;
+// ---
}
if(rel_seek_secs)
if(file_format==DEMUXER_TYPE_AVI && avi_header.idx_size<=0){
@@ -1589,7 +1573,7 @@ switch(sh_video->codec->driver){
// clear demux buffers:
if(has_audio) ds_free_packs(d_audio);
ds_free_packs(d_video);
-
+
// printf("sh_audio->a_buffer_len=%d \n",sh_audio->a_buffer_len);
sh_audio->a_buffer_len=0;
@@ -1601,7 +1585,7 @@ switch(file_format){
int curr_audio_pos=0;
int audio_chunk_pos=-1;
int video_chunk_pos=d_video->pos;
-
+
skip_video_frames=0;
// SEEK streams
@@ -1665,13 +1649,13 @@ switch(file_format){
int len=0;
// calc new audio position in audio stream: (using avg.bps value)
- curr_audio_pos=(avi_video_pts) * sh_audio->wf->nAvgBytesPerSec;
+ curr_audio_pos=(avi_video_pts) * sh_audio->wf.nAvgBytesPerSec;
if(curr_audio_pos<0)curr_audio_pos=0;
#if 1
curr_audio_pos&=~15; // requires for PCM formats!!!
#else
- curr_audio_pos/=sh_audio->wf->nBlockAlign;
- curr_audio_pos*=sh_audio->wf->nBlockAlign;
+ curr_audio_pos/=sh_audio->wf.nBlockAlign;
+ curr_audio_pos*=sh_audio->wf.nBlockAlign;
avi_header.audio_seekable=1;
#endif
@@ -1707,21 +1691,21 @@ switch(file_format){
if(!(sh_audio->codec->flags&CODECS_FLAG_SEEKABLE)){
#if 0
// curr_audio_pos=apos; // selected audio codec can't seek in chunk
- skip_audio_secs=(float)skip_audio_bytes/(float)sh_audio->wf->nAvgBytesPerSec;
+ skip_audio_secs=(float)skip_audio_bytes/(float)sh_audio->wf.nAvgBytesPerSec;
//printf("Seek_AUDIO: %d bytes --> %5.3f secs\n",skip_audio_bytes,skip_audio_secs);
skip_audio_bytes=0;
#else
- int d=skip_audio_bytes % sh_audio->wf->nBlockAlign;
+ int d=skip_audio_bytes % sh_audio->wf.nBlockAlign;
skip_audio_bytes-=d;
// curr_audio_pos-=d;
- skip_audio_secs=(float)d/(float)sh_audio->wf->nAvgBytesPerSec;
+ skip_audio_secs=(float)d/(float)sh_audio->wf.nAvgBytesPerSec;
//printf("Seek_AUDIO: %d bytes --> %5.3f secs\n",d,skip_audio_secs);
#endif
}
// now: audio_chunk_pos=pos in index
// skip_audio_bytes=bytes to skip from that chunk
// skip_audio_secs=time to play audio before video (if can't skip)
-
+
// calc skip_video_frames & adjust video pts counter:
// i=last;
i=avi_header.idx_pos;
@@ -1735,7 +1719,7 @@ switch(file_format){
}
++i;
}
-
+
}
if(verbose) printf("SEEK: idx=%d (a:%d v:%d) v.skip=%d a.skip=%d/%4.3f \n",
@@ -1768,7 +1752,7 @@ switch(file_format){
stream_seek(demuxer->stream,newpos);
}
break;
-
+
case DEMUXER_TYPE_MPEG_ES:
case DEMUXER_TYPE_MPEG_PS: {
//================= seek in MPEG ==========================
@@ -1802,10 +1786,10 @@ switch(file_format){
demux_read_data(d_audio,NULL,skip_audio_bytes);
d_audio->pts=0; // PTS is outdated because of the raw data skipping
}
-
+
current_module="resync_audio";
- switch(sh_audio->codec->driver){
+ switch(has_audio){
case 1:
MP3_DecodeFrame(NULL,-2); // resync
MP3_DecodeFrame(NULL,-2); // resync
@@ -1827,10 +1811,10 @@ switch(file_format){
if(file_format==DEMUXER_TYPE_MPEG_PS)
if(d_video->pts && d_audio->pts){
if (d_video->pts < d_audio->pts){
-
+
} else {
while(d_video->pts > d_audio->pts){
- switch(sh_audio->codec->driver){
+ switch(has_audio){
case 1: MP3_DecodeFrame(NULL,-2);break; // skip MPEG frame
case 3: sh_audio->ac3_frame=ac3_decode_frame();break; // skip AC3 frame
default: ds_fill_buffer(d_audio); // skip PCM frame
@@ -1869,7 +1853,7 @@ switch(file_format){
}
// for(i=1;i<=11;i++) osd_text_buffer[10+i]=i;osd_text_buffer[10+i]=0;
// vo_osd_text=osd_text_buffer;
-
+
// find sub
if(subtitles){
if(sub_fps==0) sub_fps=sh_video->fps;