diff --git a/MakeLegacy.sh b/MakeLegacy.sh index bb6958e4..3c8e9152 100755 --- a/MakeLegacy.sh +++ b/MakeLegacy.sh @@ -1,4 +1,17 @@ #!/bin/sh + +#LINE=`grep "AC_INIT(" configure.ac` +#AC_INIT([mpg123], [0.60-devel], [mpg123-devel@lists.sourceforge.net]) + + + cd src + +# Need to extract this automatically from configure.ac +echo "// Created by MakeLegacy.sh" > config.h +echo "#define PACKAGE_NAME \"mpg123\"" >> config.h +echo "#define PACKAGE_VERSION \"0.60-devel\"" >> config.h + + exec make -f Makefile.legacy $* diff --git a/configure.ac b/configure.ac index f1983760..ca0f2a0b 100644 --- a/configure.ac +++ b/configure.ac @@ -124,7 +124,7 @@ AC_CHECK_HEADERS([CoreAudio/CoreAudio.h], HAVE_COREAUDIO=yes, HAVE_COREAUDIO=no) dnl ############## Choose compiler flags and CPU -CFLAGS="$CFLAGS -DHAVE_CONFIG_H -Wall -std=c99" +CFLAGS="$CFLAGS -Wall -std=c99" # If debugging is enabled then make warnings errors diff --git a/src/Makefile.legacy b/src/Makefile.legacy index 2ea43954..ad8dcf79 100644 --- a/src/Makefile.legacy +++ b/src/Makefile.legacy @@ -232,7 +232,7 @@ linux-alpha: CFLAGS="$(CFLAGS) $(CPPFLAGS) -DLINUX -DOSS -DHAVE_TERMIOS -Wall -O2 \ -fomit-frame-pointer -funroll-all-loops \ -finline-functions -ffast-math \ - -Wall -O6 -DUSE_MMAP" \ + -Wall -O6 -DHAVE_MMAP" \ mpg123-make linux-alpha-esd: @@ -242,7 +242,7 @@ linux-alpha-esd: CFLAGS="$(CFLAGS) $(CPPFLAGS) -DLINUX -DOSS -DHAVE_TERMIOS -Wall -O2 \ -fomit-frame-pointer -funroll-all-loops \ -finline-functions -ffast-math \ - -Wall -O6 -DUSE_MMAP" \ + -Wall -O6 -DHAVE_MMAP" \ mpg123-make #linux-ppc: @@ -286,7 +286,7 @@ linux-ppc-esd: linux-sparc: $(MAKE) CC=gcc \ OBJECTS='decode.o dct64.o audio_sun.o term.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -DREAL_IS_FLOAT -DUSE_MMAP -DSPARCLINUX -Wall -O2 \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -DREAL_IS_FLOAT -DHAVE_MMAP -DSPARCLINUX -Wall -O2 \ -DHAVE_TERMIOS \ -fomit-frame-pointer -funroll-all-loops \ -finline-functions -ffast-math" \ @@ -363,7 +363,7 @@ freebsd: CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -ansi -pedantic -O4 -mcpu=i486 -fomit-frame-pointer \ -funroll-all-loops -ffast-math -DROT_I386 \ -DREAD_MMAP \ - -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS" \ + -DI386_ASSEM -DREAL_IS_FLOAT -DHAVE_MMAP -DOSS" \ mpg123-make freebsd-esd: @@ -373,7 +373,7 @@ freebsd-esd: CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -ansi -pedantic -O4 -mcpu=i486 -fomit-frame-pointer \ -funroll-all-loops -ffast-math -DROT_I386 \ -DREAD_MMAP \ - -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \ + -DI386_ASSEM -DREAL_IS_FLOAT -DHAVE_MMAP -DOSS \ -I/usr/local/include -L/usr/local/lib" \ mpg123-make @@ -384,7 +384,7 @@ freebsd-frontend: CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -ansi -pedantic -O4 -mcpu=i486 -fomit-frame-pointer \ -funroll-all-loops -ffast-math -DROT_I386 \ -DFRONTEND \ - -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS" \ + -DI386_ASSEM -DREAL_IS_FLOAT -DHAVE_MMAP -DOSS" \ $(FRONTEND) @@ -397,14 +397,14 @@ solaris-pure: LDFLAGS="$(LDFLAGS) -lsocket -lnsl" \ OBJECTS='decode.o dct64.o audio_sun.o term.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -fast -native -xO4 -DSOLARIS -DHAVE_TERMIOS \ - -DUSE_MMAP" \ + -DHAVE_MMAP" \ mpg123-make solaris-ccscc: $(MAKE) CC=/usr/ccs/bin/ucbcc LDFLAGS="$(LDFLAGS) -lsocket -lnsl" \ OBJECTS='decode.o dct64.o audio_sun.o term.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -fast -native -xO4 -DSOLARIS \ - -DUSE_MMAP" \ + -DHAVE_MMAP" \ mpg123-make # common solaris compile entries @@ -412,14 +412,14 @@ solaris: $(MAKE) CC=cc LDFLAGS="$(LDFLAGS) -lsocket -lnsl" \ OBJECTS='decode.o dct64.o audio_sun.o term.o' \ CFLAGS="$(CFLAGS)-fast -native -xO4 -DSOLARIS \ - -DUSE_MMAP -DHAVE_TERMIOS" \ + -DHAVE_MMAP -DHAVE_TERMIOS" \ mpg123-make solaris-gcc-profile: $(MAKE) CC='gcc' \ LDFLAGS="$(LDFLAGS) -lsocket -lnsl -pg" \ OBJECTS='decode.o dct64.o audio_sun.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -g -pg -O2 -Wall -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -g -pg -O2 -Wall -DSOLARIS -DREAL_IS_FLOAT -DHAVE_MMAP \ -DREAD_MMAP \ -funroll-all-loops -finline-functions" \ mpg123-make @@ -428,7 +428,7 @@ solaris-gcc: $(MAKE) CC=gcc \ LDFLAGS="$(LDFLAGS) -lsocket -lnsl" \ OBJECTS='decode.o dct64.o audio_sun.o term.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -Wall -pedantic -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -Wall -pedantic -DSOLARIS -DREAL_IS_FLOAT -DHAVE_MMAP \ -DREAD_MMAP -DHAVE_TERMIOS \ -funroll-all-loops -finline-functions" \ mpg123-make @@ -437,7 +437,7 @@ solaris-gcc-esd: $(MAKE) CC=gcc LDFLAGS="$(LDFLAGS) -lsocket -lnsl" \ AUDIO_LIB='-lesd -lresolv' \ OBJECTS='decode.o dct64.o audio_esd.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -Wall -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -Wall -DSOLARIS -DREAL_IS_FLOAT -DHAVE_MMAP \ -DREAD_MMAP \ -funroll-all-loops -finline-functions" \ mpg123-make @@ -446,7 +446,7 @@ solaris-x86-gcc-oss: $(MAKE) CC=gcc LDFLAGS="$(LDFLAGS) -lsocket -lnsl" \ OBJECTS='decode_i386.o dct64_i386.o $(PENTIUM_DECODE).o \ audio_oss.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DUSE_MMAP \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DHAVE_MMAP \ -DREAD_MMAP -DOSS \ -Wall -O2 -mcpu=i486 \ -funroll-all-loops -finline-functions" \ @@ -457,7 +457,7 @@ solaris-gcc-nas: AUDIO_LIB='-L/usr/openwin/lib -laudio -lXau'\ OBJECTS='decode.o dct64.o audio_nas.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -I/usr/openwin/include -Wall \ - -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \ + -DSOLARIS -DREAL_IS_FLOAT -DHAVE_MMAP \ -DREAD_MMAP -DNAS \ -funroll-all-loops -finline-functions" \ mpg123-make @@ -465,7 +465,7 @@ solaris-gcc-nas: sunos: $(MAKE) CC=gcc \ OBJECTS='decode.o dct64.o audio_sun.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -DSUNOS -DREAL_IS_FLOAT -DUSE_MMAP \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -DSUNOS -DREAL_IS_FLOAT -DHAVE_MMAP \ -funroll-loops" \ mpg123-make @@ -491,24 +491,24 @@ hpux-gcc: sgi: $(MAKE) CC=cc \ OBJECTS='decode.o dct64.o audio_sgi.o' AUDIO_LIB=-laudio \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -DSGI -DREAL_IS_FLOAT -DUSE_MMAP' \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -DSGI -DREAL_IS_FLOAT -DHAVE_MMAP' \ mpg123-make sgi-gcc: $(MAKE) CC=gcc \ OBJECTS='decode.o dct64.o audio_sgi.o' AUDIO_LIB=-laudio \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -DSGI -DREAL_IS_FLOAT -DUSE_MMAP" \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -O2 -DSGI -DREAL_IS_FLOAT -DHAVE_MMAP" \ mpg123-make dec: $(MAKE) CC=cc OBJECTS='decode.o dct64.o audio_dummy.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -std1 -warnprotos -O4 -DUSE_MMAP" \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -std1 -warnprotos -O4 -DHAVE_MMAP" \ LDFLAGS="$(LDFLAGS) -lrt" \ mpg123-make dec-debug: $(MAKE) CC=cc OBJECTS='decode.o dct64.o audio_dummy.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -g3 -std1 -warnprotos -O4 -DUSE_MMAP" \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -g3 -std1 -warnprotos -O4 -DHAVE_MMAP" \ LDFLAGS="$(LDFLAGS) -lrt" \ mpg123-make @@ -516,7 +516,7 @@ dec-nas: $(MAKE) CC=cc LDFLAGS="$(LDFLAGS) -L/usr/X11R6/lib" \ AUDIO_LIB='-laudio -lXau -ldnet_stub'\ OBJECTS='decode.o dct64.o audio_nas.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -I/usr/X11R6/include -std1 -warnprotos -O4 -DUSE_MMAP" \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -I/usr/X11R6/include -std1 -warnprotos -O4 -DHAVE_MMAP" \ mpg123-make ultrix: @@ -526,14 +526,14 @@ ultrix: aix-gcc: $(MAKE) CC=gcc OBJECTS='decode.o dct64.o audio_aix.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -DAIX -Wall -O6 -DUSE_MMAP -DREAD_MMAP -DREAL_IS_FLOAT \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -DAIX -Wall -O6 -DHAVE_MMAP -DREAD_MMAP -DREAL_IS_FLOAT \ -fomit-frame-pointer -funroll-all-loops \ -finline-functions -ffast-math" \ mpg123-make aix-xlc: $(MAKE) OBJECTS='decode.o dct64.o audio_aix.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -O3 -qstrict -qcpluscmt -DAIX -DUSE_MMAP \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -O3 -qstrict -qcpluscmt -DAIX -DHAVE_MMAP \ -DREAD_MMAP" \ mpg123-make @@ -543,7 +543,7 @@ aix-tk3play: aix-frontend: $(MAKE) OBJECTS='decode.o dct64.o audio_aix.o \ control_sajber.o control_tk3play.o' \ - CFLAGS="$(CFLAGS) $(CPPFLAGS) -DAIX -Wall -O6 -DUSE_MMAP -DFRONTEND \ + CFLAGS="$(CFLAGS) $(CPPFLAGS) -DAIX -Wall -O6 -DHAVE_MMAP -DFRONTEND \ -fomit-frame-pointer -funroll-all-loops \ -finline-functions -ffast-math" \ $(FRONTEND) @@ -562,7 +562,7 @@ netbsd: OBJECTS='decode.o dct64.o audio_sun.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -ansi -pedantic -O3 -fomit-frame-pointer \ -funroll-all-loops -ffast-math \ - -DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD -DNO_RT" \ + -DREAL_IS_FLOAT -DHAVE_MMAP -DNETBSD -DNO_RT" \ mpg123-make netbsd-x86: @@ -570,7 +570,7 @@ netbsd-x86: OBJECTS='decode_i386.o dct64_i386.o audio_sun.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -ansi -pedantic -O4 -mcpu=i486 -fomit-frame-pointer \ -funroll-all-loops -ffast-math -DROT_I386 \ - -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD -DNO_RT" \ + -DI386_ASSEM -DREAL_IS_FLOAT -DHAVE_MMAP -DNETBSD -DNO_RT" \ mpg123-make netbsd-rt: @@ -578,7 +578,7 @@ netbsd-rt: OBJECTS='decode.o dct64.o audio_sun.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -ansi -pedantic -O3 -fomit-frame-pointer \ -funroll-all-loops -ffast-math \ - -DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD" \ + -DREAL_IS_FLOAT -DHAVE_MMAP -DNETBSD" \ mpg123-make netbsd-x86-rt: @@ -586,7 +586,7 @@ netbsd-x86-rt: OBJECTS='decode_i386.o dct64_i386.o audio_sun.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -ansi -pedantic -O4 -mcpu=i486 -fomit-frame-pointer \ -funroll-all-loops -ffast-math -DROT_I386 \ - -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD" \ + -DI386_ASSEM -DREAL_IS_FLOAT -DHAVE_MMAP -DNETBSD" \ mpg123-make bsdos: @@ -595,7 +595,7 @@ bsdos: audio_oss.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -O4 -mcpu=i486 -fomit-frame-pointer \ -funroll-all-loops -ffast-math -DROT_I386 \ - -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \ + -DI386_ASSEM -DREAL_IS_FLOAT -DHAVE_MMAP -DOSS \ -DDONT_CATCH_SIGNALS" \ mpg123-make @@ -604,7 +604,7 @@ bsdos4: OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -O4 -mcpu=i486 -fomit-frame-pointer \ -funroll-all-loops -ffast-math -DROT_I386 \ - -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \ + -DI386_ASSEM -DREAL_IS_FLOAT -DHAVE_MMAP -DOSS \ -DREAD_MMAP -DDONT_CATCH_SIGNALS" \ mpg123-make @@ -615,7 +615,7 @@ bsdos-nas: audio_nas.o' \ CFLAGS="$(CFLAGS) $(CPPFLAGS) -Wall -O4 -mcpu=i486 -fomit-frame-pointer \ -funroll-all-loops -ffast-math -DROT_I386 \ - -DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \ + -DI386_ASSEM -DREAL_IS_FLOAT -DHAVE_MMAP -DOSS \ -DDONT_CATCH_SIGNALS -DNAS" \ mpg123-make diff --git a/src/audio.c b/src/audio.c index 9901210a..3cc2d7a7 100644 --- a/src/audio.c +++ b/src/audio.c @@ -3,20 +3,12 @@ void audio_info_struct_init(struct audio_info_struct *ai) { -#ifdef AUDIO_USES_FD ai->fn = -1; -#endif -#ifdef SGI -#if 0 - ALconfig config; - ALport port; -#endif -#endif ai->rate = -1; ai->gain = -1; ai->output = -1; -#ifdef ALSA ai->handle = NULL; +#ifdef ALSA ai->alsa_format.format = -1; ai->alsa_format.rate = -1; ai->alsa_format.channels = -1; @@ -26,6 +18,20 @@ void audio_info_struct_init(struct audio_info_struct *ai) ai->format = -1; } + +void audio_info_struct_dump(struct audio_info_struct *ai) +{ + fprintf(stderr, "ai->fn=%d\n", ai->fn); + fprintf(stderr, "ai->handle=%p\n", ai->handle); + fprintf(stderr, "ai->rate=%ld\n", ai->rate); + fprintf(stderr, "ai->gain=%ld\n", ai->gain); + fprintf(stderr, "ai->output=%d\n", ai->output); + fprintf(stderr, "ai->device='%s'\n", ai->device); + fprintf(stderr, "ai->channels=%d\n", ai->channels); + fprintf(stderr, "ai->format=%d\n", ai->format); +} + + #define NUM_CHANNELS 2 #define NUM_ENCODINGS 6 #define NUM_RATES 10 diff --git a/src/audio.h b/src/audio.h index a0d535b6..c5a23cfb 100644 --- a/src/audio.h +++ b/src/audio.h @@ -6,8 +6,16 @@ #define AUDIO_OUT_INTERNAL_SPEAKER 0x02 #define AUDIO_OUT_LINE_OUT 0x04 -enum { DECODE_TEST, DECODE_AUDIO, DECODE_FILE, DECODE_BUFFER, DECODE_WAV, - DECODE_AU,DECODE_CDR,DECODE_AUDIOFILE }; +enum { + DECODE_TEST, + DECODE_AUDIO, + DECODE_FILE, + DECODE_BUFFER, + DECODE_WAV, + DECODE_AU, + DECODE_CDR, + DECODE_AUDIOFILE +}; #define AUDIO_FORMAT_MASK 0x100 #define AUDIO_FORMAT_16 0x100 @@ -23,44 +31,21 @@ enum { DECODE_TEST, DECODE_AUDIO, DECODE_FILE, DECODE_BUFFER, DECODE_WAV, /* 3% rate tolerance */ #define AUDIO_RATE_TOLERANCE 3 -#if 0 -#if defined(HPUX) || defined(SUNOS) || defined(SOLARIS) || defined(OSS) || defined(__NetBSD__) || defined(SPARCLINUX) || defined(__FreeBSD__) -#endif -#endif -#define AUDIO_USES_FD - -#ifdef SGI -/* #include */ -#include -#endif - - -#ifdef ALSA -#include -#endif struct audio_info_struct { -#ifdef AUDIO_USES_FD int fn; /* filenumber */ -#endif -#ifdef SGI - ALconfig config; - ALport port; -#endif + void *handle; /* driver specific pointer */ + long rate; long gain; int output; -#ifdef ALSA - void *handle; - snd_pcm_format_t alsa_format; -#endif + char *device; int channels; int format; - int private1; - void *private2; + }; struct audio_name { @@ -69,21 +54,21 @@ struct audio_name { char *sname; }; + +/* ------ Declarations from "audio.c" ------ */ + +extern void audio_info_struct_init(struct audio_info_struct *); +extern void audio_info_struct_dump(struct audio_info_struct *ai); extern void audio_capabilities(struct audio_info_struct *); extern void audio_fit_capabilities(struct audio_info_struct *ai,int c,int r); - extern char *audio_encoding_name(int format); -extern int audio_play_samples(struct audio_info_struct *,unsigned char *,int); -extern int audio_open(struct audio_info_struct *); -extern int audio_reset_parameters(struct audio_info_struct *); -extern int audio_rate_best_match(struct audio_info_struct *ai); -extern int audio_set_rate(struct audio_info_struct *); -extern int audio_set_format(struct audio_info_struct *); -extern int audio_get_formats(struct audio_info_struct *); -extern int audio_set_channels(struct audio_info_struct *); -extern int audio_write_sample(struct audio_info_struct *,short *,int); -extern int audio_close(struct audio_info_struct *); -extern void audio_info_struct_init(struct audio_info_struct *); -extern void audio_queueflush(struct audio_info_struct *ai); + +/* ------ Declarations from "audio_*.c" ------ */ + +extern int audio_open(struct audio_info_struct *); +extern int audio_get_formats(struct audio_info_struct *); +extern int audio_play_samples(struct audio_info_struct *, unsigned char *,int); +extern void audio_queueflush(struct audio_info_struct *ai); +extern int audio_close(struct audio_info_struct *); diff --git a/src/audio_aix.c b/src/audio_aix.c index a03c8971..38dc88e1 100644 --- a/src/audio_aix.c +++ b/src/audio_aix.c @@ -30,6 +30,30 @@ /* #define AUDIO_BSIZE AUDIO_IGNORE */ #define AUDIO_BSIZE 200 +int audio_rate_best_match(struct audio_info_struct *ai) +{ + static long valid [ ] = { 5510, 6620, 8000, 9600, 11025, 16000, 18900, + 22050, 27420, 32000, 33075, 37800, 44100, 48000, 0 }; + int i = 0; + long best = 8000; + + if(!ai || ai->fn < 0 || ai->rate < 0) { + return -1; + } + + while (valid [i]) + { + if (abs(valid[i] - ai->rate) < abs(best - ai->rate)) + { + best = valid [i]; + } + i = i + 1; + } + + ai->rate = best; + return best; +} + int audio_open(struct audio_info_struct *ai) { @@ -182,45 +206,6 @@ int audio_reset_parameters(struct audio_info_struct *ai) return 0; } -int audio_rate_best_match(struct audio_info_struct *ai) -{ - static long valid [ ] = { 5510, 6620, 8000, 9600, 11025, 16000, 18900, - 22050, 27420, 32000, 33075, 37800, 44100, 48000, 0 }; - int i = 0; - long best = 8000; - - if(!ai || ai->fn < 0 || ai->rate < 0) { - return -1; - } - - while (valid [i]) - { - if (abs(valid[i] - ai->rate) < abs(best - ai->rate)) - { - best = valid [i]; - } - i = i + 1; - } - - ai->rate = best; - return best; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - return audio_reset_parameters(ai); -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - return audio_reset_parameters(ai); -} - -int audio_set_format(struct audio_info_struct *ai) -{ - return audio_reset_parameters(ai); -} - int audio_get_formats(struct audio_info_struct *ai) { /* ULTIMEDIA DOCUMENTATION SAYS: @@ -285,3 +270,8 @@ int audio_close(struct audio_info_struct *ai) return 0; } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} + diff --git a/src/audio_alib.c b/src/audio_alib.c index cd1b631a..e840d9af 100644 --- a/src/audio_alib.c +++ b/src/audio_alib.c @@ -175,23 +175,15 @@ inline int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,in /**************************************************************************/ -/* unused */ -int audio_set_rate(struct audio_info_struct *ai) { - return 0; -} - -/**************************************************************************/ - -/* unused */ -int audio_set_channels(struct audio_info_struct *ai) { - return 0; -} - int audio_get_formats(struct audio_info_struct *ai) { return AUDIO_FORMAT_SIGNED_16; } +void audio_queueflush(struct audio_info_struct *ai) +{ +} + /************************************************************************** * T H A T ' S A L L F O L K S diff --git a/src/audio_alsa.c b/src/audio_alsa.c index 38572ed9..f1ef67ae 100644 --- a/src/audio_alsa.c +++ b/src/audio_alsa.c @@ -30,6 +30,9 @@ #define SND_PCM_FMT_U16_NE SND_PCM_FMT_U16_BE #endif + + + int audio_open(struct audio_info_struct *ai) { int err; @@ -38,6 +41,7 @@ int audio_open(struct audio_info_struct *ai) if(!ai) return -1; + if(ai->device) { /* parse ALSA device name */ if(strchr(ai->device,':')) { /* card with device */ strncpy(scard, ai->device, sizeof(scard)-1); @@ -60,21 +64,62 @@ int audio_open(struct audio_info_struct *ai) } } + // Open the ALSA device if((err=snd_pcm_open(&ai->handle, card, device, SND_PCM_OPEN_PLAYBACK)) < 0 ) { fprintf(stderr, "open failed: %s\n", snd_strerror(err)); exit(1); } - if(audio_reset_parameters(ai) < 0) - { - audio_close(ai); - return -1; - } + + // Now configure the device + audio_set_playback_format( ai ) + audio_set_playback_params( ai ); + return 0; } + +static void audio_set_playback_format(struct audio_info_struct *ai) +{ + snd_pcm_format_t alsa_format; + int err; + + alsa_format.rat = ai->rate; + alsa_format.channels = ai->channels; + + switch(ai->format) + { + case AUDIO_FORMAT_SIGNED_16: + default: + ai->alsa_format.format=SND_PCM_SFMT_S16_NE; + break; + case AUDIO_FORMAT_UNSIGNED_8: + ai->alsa_format.format=SND_PCM_SFMT_U8; + break; + case AUDIO_FORMAT_SIGNED_8: + ai->alsa_format.format=SND_PCM_SFMT_S8; + break; + case AUDIO_FORMAT_ULAW_8: + ai->alsa_format.format=SND_PCM_SFMT_MU_LAW; + break; + case AUDIO_FORMAT_ALAW_8: + ai->alsa_format.format=SND_PCM_SFMT_A_LAW; + break; + case AUDIO_FORMAT_UNSIGNED_16: + ai->alsa_format.format=SND_PCM_SFMT_U16_NE; + break; + } + + if((err=snd_pcm_playback_format(ai->handle, &alsa_format)) < 0 ) + { + fprintf(stderr, "snd_pcm_playback_format failed: %s\n", snd_strerror(err)); + exit(1); + } +} + + static void audio_set_playback_params(struct audio_info_struct *ai) { int err; @@ -101,91 +146,8 @@ static void audio_set_playback_params(struct audio_info_struct *ai) } } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - audio_set_format(ai); - audio_set_channels(ai); - audio_set_rate(ai); - return 0; -} -int audio_rate_best_match(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - int ret; - - if(!ai || ai->rate < 0) - return -1; - - ai->alsa_format.rate=ai->rate; - - if((ret=snd_pcm_playback_format(ai->handle, &ai->alsa_format)) < 0 ) - return -1; - - audio_set_playback_params(ai); - - return 0; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - int ret; - - if(ai->alsa_format.channels < 0) - return 0; - - ai->alsa_format.channels = ai->channels; - - if((ret=snd_pcm_playback_format(ai->handle, &ai->alsa_format)) < 0 ) - return -1; - - audio_set_playback_params(ai); - - return 0; -} - -int audio_set_format(struct audio_info_struct *ai) -{ - int ret; - - if(ai->format == -1) - return 0; - - switch(ai->format) - { - case AUDIO_FORMAT_SIGNED_16: - default: - ai->alsa_format.format=SND_PCM_SFMT_S16_NE; - break; - case AUDIO_FORMAT_UNSIGNED_8: - ai->alsa_format.format=SND_PCM_SFMT_U8; - break; - case AUDIO_FORMAT_SIGNED_8: - ai->alsa_format.format=SND_PCM_SFMT_S8; - break; - case AUDIO_FORMAT_ULAW_8: - ai->alsa_format.format=SND_PCM_SFMT_MU_LAW; - break; - case AUDIO_FORMAT_ALAW_8: - ai->alsa_format.format=SND_PCM_SFMT_A_LAW; - break; - case AUDIO_FORMAT_UNSIGNED_16: - ai->alsa_format.format=SND_PCM_SFMT_U16_NE; - break; - } - - if((ret=snd_pcm_playback_format(ai->handle, &ai->alsa_format)) < 0 ) - return -1; - - audio_set_playback_params(ai); - - return 0; -} int audio_get_formats(struct audio_info_struct *ai) { @@ -236,3 +198,8 @@ int audio_close(struct audio_info_struct *ai) ret = snd_pcm_close(ai->handle); return ret; } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} + diff --git a/src/audio_dummy.c b/src/audio_dummy.c index a81ea6eb..0b61e5ea 100644 --- a/src/audio_dummy.c +++ b/src/audio_dummy.c @@ -7,31 +7,6 @@ int audio_open(struct audio_info_struct *ai) return -1; } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_rate_best_match(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_format(struct audio_info_struct *ai) -{ - return 0; -} - int audio_get_formats(struct audio_info_struct *ai) { return AUDIO_FORMAT_SIGNED_16; @@ -46,3 +21,7 @@ int audio_close(struct audio_info_struct *ai) { return 0; } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} diff --git a/src/audio_esd.c b/src/audio_esd.c index ff8f71c2..3cc780ef 100644 --- a/src/audio_esd.c +++ b/src/audio_esd.c @@ -76,38 +76,10 @@ int audio_open(struct audio_info_struct *ai) else if (ai->rate > esd_rate) return -1; - ai->fn = esd_play_stream_fallback(format, ai->rate, esdserver, "mpg123"); + ai->fn = esd_play_stream_fallback(format, ai->rate, ai->device, "mpg123"); return (ai->fn); } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_rate_best_match(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - audio_close(ai); - return audio_open(ai); -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - audio_close(ai); - return audio_open(ai); -} - -int audio_set_format(struct audio_info_struct *ai) -{ - audio_close(ai); - return audio_open(ai); -} - int audio_get_formats(struct audio_info_struct *ai) { if (0 < ai->channels && ai->channels <= esd_channels diff --git a/src/audio_hp.c b/src/audio_hp.c index f99ff13b..c6d12d2a 100644 --- a/src/audio_hp.c +++ b/src/audio_hp.c @@ -8,6 +8,65 @@ #include + + +static int audio_set_rate(struct audio_info_struct *ai) +{ + if(ai->rate >= 0) + return ioctl(ai->fn,AUDIO_SET_SAMPLE_RATE,ai->rate); + return 0; +} + +static int audio_set_channels(struct audio_info_struct *ai) +{ + if(ai->channels<0) + return 0; + return ioctl(ai->fn,AUDIO_SET_CHANNELS,ai->channels); +} + +static int audio_set_format(struct audio_info_struct *ai) +{ + int fmt; + + switch(ai->format) { + case -1: + case AUDIO_FORMAT_SIGNED_16: + default: + fmt = AUDIO_FORMAT_LINEAR16BIT; + break; + case AUDIO_FORMAT_UNSIGNED_8: + fprintf(stderr,"unsigned 8 bit linear not supported\n"); + return -1; + case AUDIO_FORMAT_SIGNED_8: + fprintf(stderr,"signed 8 bit linear not supported\n"); + return -1; + case AUDIO_FORMAT_ALAW_8: + fmt = AUDIO_FORMAT_ALAW; + break; + case AUDIO_FORMAT_ULAW_8: + fmt = AUDIO_FORMAT_ULAW; + break; + } + return ioctl(ai->fn,AUDIO_SET_DATA_FORMAT,fmt); +} + +static int audio_get_formats(struct audio_info_struct *ai) +{ + return AUDIO_FORMAT_SIGNED_16; +} + +static int audio_reset_parameters(struct audio_info_struct *ai) +{ + int ret; + ret = audio_set_format(ai); + if(ret >= 0) + ret = audio_set_channels(ai); + if(ret >= 0) + ret = audio_set_rate(ai); + return ret; +} + + int audio_open(struct audio_info_struct *ai) { struct audio_describe ades; @@ -72,66 +131,6 @@ int audio_open(struct audio_info_struct *ai) return ai->fn; } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - int ret; - ret = audio_set_format(ai); - if(ret >= 0) - ret = audio_set_channels(ai); - if(ret >= 0) - ret = audio_set_rate(ai); - return ret; -} - -int audio_rate_best_match(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - if(ai->rate >= 0) - return ioctl(ai->fn,AUDIO_SET_SAMPLE_RATE,ai->rate); - return 0; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - if(ai->channels<0) - return 0; - return ioctl(ai->fn,AUDIO_SET_CHANNELS,ai->channels); -} - -int audio_set_format(struct audio_info_struct *ai) -{ - int fmt; - - switch(ai->format) { - case -1: - case AUDIO_FORMAT_SIGNED_16: - default: - fmt = AUDIO_FORMAT_LINEAR16BIT; - break; - case AUDIO_FORMAT_UNSIGNED_8: - fprintf(stderr,"unsigned 8 bit linear not supported\n"); - return -1; - case AUDIO_FORMAT_SIGNED_8: - fprintf(stderr,"signed 8 bit linear not supported\n"); - return -1; - case AUDIO_FORMAT_ALAW_8: - fmt = AUDIO_FORMAT_ALAW; - break; - case AUDIO_FORMAT_ULAW_8: - fmt = AUDIO_FORMAT_ULAW; - break; - } - return ioctl(ai->fn,AUDIO_SET_DATA_FORMAT,fmt); -} - -int audio_get_formats(struct audio_info_struct *ai) -{ - return AUDIO_FORMAT_SIGNED_16; -} int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len) @@ -144,3 +143,8 @@ int audio_close(struct audio_info_struct *ai) close (ai->fn); return 0; } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} + diff --git a/src/audio_libao.c b/src/audio_libao.c index bf610559..3586ed62 100644 --- a/src/audio_libao.c +++ b/src/audio_libao.c @@ -123,7 +123,7 @@ int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len) int res = 0; ao_device *device = (ao_device*)ai->handle; - res = ao_play(device, buf, len); + res = ao_play(device, (char*)buf, len); if (res==0) { fprintf(stderr, "audio_play_samples(): error playing samples\n"); return -1; diff --git a/src/audio_macosx.c b/src/audio_macosx.c index 707e82a8..8fa57b94 100644 --- a/src/audio_macosx.c +++ b/src/audio_macosx.c @@ -223,7 +223,7 @@ void start(int n) int audio_open(struct audio_info_struct *ai) { - long size; + UInt32 size; AudioStreamBasicDescription format; #if MOSX_USES_SEM char s[10]; diff --git a/src/audio_mint.c b/src/audio_mint.c index dc0a911d..94cae044 100644 --- a/src/audio_mint.c +++ b/src/audio_mint.c @@ -8,6 +8,93 @@ extern int outburst; int real_rate_printed = 0; + + +static int audio_rate_best_match(struct audio_info_struct *ai) +{ + int ret,dsp_rate; + + if(!ai || ai->fn < 0 || ai->rate < 0) + return -1; + dsp_rate = ai->rate; + ret = ioctl(ai->fn,AIOCSSPEED, (void *)dsp_rate); + ret = ioctl(ai->fn,AIOCGSPEED,&dsp_rate); + if(ret < 0) + return ret; + ai->rate = dsp_rate; + return 0; +} + +static int audio_set_rate(struct audio_info_struct *ai) +{ + int dsp_rate = ai->rate; + + if(ai->rate >= 0) { + int ret, real_rate; + ret = ioctl(ai->fn, AIOCSSPEED, (void *)dsp_rate); + if (ret >= 0 && !real_rate_printed) { + ioctl(ai->fn,AIOCGSPEED,&real_rate); + if (real_rate != dsp_rate) { + fprintf(stderr, "Replay rate: %d Hz\n", real_rate); + real_rate_printed = 1; + } + } + return ret; + } + + return 0; +} + +static int audio_set_channels(struct audio_info_struct *ai) +{ + int chan = ai->channels; + + if(ai->channels < 1) + return 0; + + return ioctl(ai->fn, AIOCSCHAN, (void *)chan); +} + +static int audio_set_format(struct audio_info_struct *ai) +{ + int fmts; + + if(ai->format == -1) + return 0; + + switch(ai->format) { + case AUDIO_FORMAT_SIGNED_16: + default: + fmts = AFMT_S16; + break; + case AUDIO_FORMAT_UNSIGNED_8: + fmts = AFMT_U8; + break; + case AUDIO_FORMAT_SIGNED_8: + fmts = AFMT_S8; + break; + case AUDIO_FORMAT_ULAW_8: + fmts = AFMT_ULAW; + break; + } + return ioctl(ai->fn, AIOCSFMT, (void *)fmts); +} + +static int audio_reset_parameters(struct audio_info_struct *ai) +{ + int ret; + ret = ioctl(ai->fn,AIOCRESET,NULL); + if(ret >= 0) + ret = audio_set_format(ai); + if(ret >= 0) + ret = audio_set_channels(ai); + if(ret >= 0) + ret = audio_set_rate(ai); + return ret; +} + + + int audio_open(struct audio_info_struct *ai) { if(!ai) @@ -32,90 +119,6 @@ int audio_open(struct audio_info_struct *ai) } return ai->fn; } - -int audio_reset_parameters(struct audio_info_struct *ai) -{ - int ret; - ret = ioctl(ai->fn,AIOCRESET,NULL); - if(ret >= 0) - ret = audio_set_format(ai); - if(ret >= 0) - ret = audio_set_channels(ai); - if(ret >= 0) - ret = audio_set_rate(ai); - return ret; -} - -int audio_rate_best_match(struct audio_info_struct *ai) -{ - int ret,dsp_rate; - - if(!ai || ai->fn < 0 || ai->rate < 0) - return -1; - dsp_rate = ai->rate; - ret = ioctl(ai->fn,AIOCSSPEED, (void *)dsp_rate); - ret = ioctl(ai->fn,AIOCGSPEED,&dsp_rate); - if(ret < 0) - return ret; - ai->rate = dsp_rate; - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - int dsp_rate = ai->rate; - - if(ai->rate >= 0) { - int ret, real_rate; - ret = ioctl(ai->fn, AIOCSSPEED, (void *)dsp_rate); - if (ret >= 0 && !real_rate_printed) { - ioctl(ai->fn,AIOCGSPEED,&real_rate); - if (real_rate != dsp_rate) { - fprintf(stderr, "Replay rate: %d Hz\n", real_rate); - real_rate_printed = 1; - } - } - return ret; - } - - return 0; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - int chan = ai->channels; - - if(ai->channels < 1) - return 0; - - return ioctl(ai->fn, AIOCSCHAN, (void *)chan); -} - -int audio_set_format(struct audio_info_struct *ai) -{ - int fmts; - - if(ai->format == -1) - return 0; - - switch(ai->format) { - case AUDIO_FORMAT_SIGNED_16: - default: - fmts = AFMT_S16; - break; - case AUDIO_FORMAT_UNSIGNED_8: - fmts = AFMT_U8; - break; - case AUDIO_FORMAT_SIGNED_8: - fmts = AFMT_S8; - break; - case AUDIO_FORMAT_ULAW_8: - fmts = AFMT_ULAW; - break; - } - return ioctl(ai->fn, AIOCSFMT, (void *)fmts); -} - int audio_get_formats(struct audio_info_struct *ai) { int ret = 0; @@ -146,3 +149,8 @@ int audio_close(struct audio_info_struct *ai) close (ai->fn); return 0; } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} + diff --git a/src/audio_nas.c b/src/audio_nas.c index 3bf24e28..1ef6d46e 100644 --- a/src/audio_nas.c +++ b/src/audio_nas.c @@ -185,7 +185,7 @@ void nas_createFlow(struct audio_info_struct *ai) info.buf_size = buf_samples * ai->channels * AuSizeofFormat(format); info.buf = (char *) malloc(info.buf_size); if (info.buf == NULL) { - fprintf(stderr, "Unable to allocate input/output buffer of size %d\n", + fprintf(stderr, "Unable to allocate input/output buffer of size %ld\n", info.buf_size); exit(1); } @@ -230,43 +230,7 @@ int audio_open(struct audio_info_struct *ai) return 0; } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - int ret; - ret = audio_close(ai); - if (ret >= 0) - ret = audio_open(ai); - return ret; -} - -extern int audio_rate_best_match(struct audio_info_struct *ai) -{ - int maxRate, minRate; - - if(!ai || ai->rate < 0) - return -1; - maxRate = AuServerMaxSampleRate(info.aud); - minRate = AuServerMinSampleRate(info.aud); - if (ai->rate > maxRate) ai->rate = maxRate; - if (ai->rate < minRate) ai->rate = minRate; - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_format(struct audio_info_struct *ai) -{ - return 0; -} int audio_get_formats(struct audio_info_struct *ai) { @@ -337,3 +301,7 @@ int audio_close(struct audio_info_struct *ai) return 0; } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} diff --git a/src/audio_os2.c b/src/audio_os2.c index 7d072fca..b8917864 100644 --- a/src/audio_os2.c +++ b/src/audio_os2.c @@ -575,11 +575,6 @@ int audio_get_formats(struct audio_info_struct *ai) return fmts; } -int audio_rate_best_match(struct audio_info_struct *ai) -{ - return 0; -} - int audio_get_devices(char *info, int deviceid) { char buffer[128]; @@ -632,3 +627,6 @@ int audio_get_devices(char *info, int deviceid) } } +void audio_queueflush(struct audio_info_struct *ai) +{ +} diff --git a/src/audio_oss.c b/src/audio_oss.c index 9b92af2a..872bb9dc 100644 --- a/src/audio_oss.c +++ b/src/audio_oss.c @@ -34,6 +34,124 @@ extern int outburst; + +static int audio_rate_best_match(struct audio_info_struct *ai) +{ + int ret,dsp_rate; + + if(!ai || ai->fn < 0 || ai->rate < 0) + return -1; + dsp_rate = ai->rate; + ret = ioctl(ai->fn, SNDCTL_DSP_SPEED,&dsp_rate); + if(ret < 0) + return ret; + ai->rate = dsp_rate; + return 0; +} + +static int audio_set_rate(struct audio_info_struct *ai) +{ + int dsp_rate; + int ret = 0; + + if(ai->rate >= 0) { + dsp_rate = ai->rate; + ret = ioctl(ai->fn, SNDCTL_DSP_SPEED,&dsp_rate); + } + return ret; +} + +static int audio_set_channels(struct audio_info_struct *ai) +{ + int chan = ai->channels - 1; + int ret; + + if(ai->channels < 0) + return 0; + + ret = ioctl(ai->fn, SNDCTL_DSP_STEREO, &chan); + if(chan != (ai->channels-1)) { + return -1; + } + return ret; +} + +static int audio_set_format(struct audio_info_struct *ai) +{ + int sample_size,fmts; + int sf,ret; + + if(ai->format == -1) + return 0; + + switch(ai->format) { + case AUDIO_FORMAT_SIGNED_16: + default: + fmts = AFMT_S16_NE; + sample_size = 16; + break; + case AUDIO_FORMAT_UNSIGNED_8: + fmts = AFMT_U8; + sample_size = 8; + break; + case AUDIO_FORMAT_SIGNED_8: + fmts = AFMT_S8; + sample_size = 8; + break; + case AUDIO_FORMAT_ULAW_8: + fmts = AFMT_MU_LAW; + sample_size = 8; + break; + case AUDIO_FORMAT_ALAW_8: + fmts = AFMT_A_LAW; + sample_size = 8; + break; + case AUDIO_FORMAT_UNSIGNED_16: + fmts = AFMT_U16_NE; + break; + } +#if 0 + if(ioctl(ai->fn, SNDCTL_DSP_SAMPLESIZE,&sample_size) < 0) + return -1; +#endif + sf = fmts; + ret = ioctl(ai->fn, SNDCTL_DSP_SETFMT, &fmts); + if(sf != fmts) { + return -1; + } + return ret; +} + + +static int audio_reset_parameters(struct audio_info_struct *ai) +{ + int ret; + ret = ioctl(ai->fn, SNDCTL_DSP_RESET, NULL); + if(ret < 0) + fprintf(stderr,"Can't reset audio!\n"); + ret = audio_set_format(ai); + if (ret == -1) + goto err; + ret = audio_set_channels(ai); + if (ret == -1) + goto err; + ret = audio_set_rate(ai); + if (ret == -1) + goto err; + + /* Careful here. As per OSS v1.1, the next ioctl() commits the format + * set above, so we must issue SNDCTL_DSP_RESET before we're allowed to + * change it again. [dk] + */ + if (ioctl(ai->fn, SNDCTL_DSP_GETBLKSIZE, &outburst) == -1 || + outburst > MAXOUTBURST) + outburst = MAXOUTBURST; + +err: + return ret; +} + + int audio_open(struct audio_info_struct *ai) { char usingdefdev = 0; @@ -90,141 +208,7 @@ int audio_open(struct audio_info_struct *ai) return ai->fn; } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - int ret; - ret = ioctl(ai->fn, SNDCTL_DSP_RESET, NULL); - if(ret < 0) - fprintf(stderr,"Can't reset audio!\n"); - ret = audio_set_format(ai); - if (ret == -1) - goto err; - ret = audio_set_channels(ai); - if (ret == -1) - goto err; - ret = audio_set_rate(ai); - if (ret == -1) - goto err; - /* Careful here. As per OSS v1.1, the next ioctl() commits the format - * set above, so we must issue SNDCTL_DSP_RESET before we're allowed to - * change it again. [dk] - */ - if (ioctl(ai->fn, SNDCTL_DSP_GETBLKSIZE, &outburst) == -1 || - outburst > MAXOUTBURST) - outburst = MAXOUTBURST; - -err: - return ret; -} - -static int audio_get_parameters(struct audio_info_struct *ai) -{ - int c=-1; - int r=-1; - int f=-1; - - if(ioctl(ai->fn,SNDCTL_DSP_SPEED,&r) < 0) - return -1; - if(ioctl(ai->fn,SNDCTL_DSP_STEREO,&c) < 0) - return -1; - if(ioctl(ai->fn,SNDCTL_DSP_SETFMT,&f) < 0) - return -1; - - ai->rate = r; - ai->channels = c + 1; - ai->format = f; - - return 0; -} - - -int audio_rate_best_match(struct audio_info_struct *ai) -{ - int ret,dsp_rate; - - if(!ai || ai->fn < 0 || ai->rate < 0) - return -1; - dsp_rate = ai->rate; - ret = ioctl(ai->fn, SNDCTL_DSP_SPEED,&dsp_rate); - if(ret < 0) - return ret; - ai->rate = dsp_rate; - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - int dsp_rate; - int ret = 0; - - if(ai->rate >= 0) { - dsp_rate = ai->rate; - ret = ioctl(ai->fn, SNDCTL_DSP_SPEED,&dsp_rate); - } - return ret; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - int chan = ai->channels - 1; - int ret; - - if(ai->channels < 0) - return 0; - - ret = ioctl(ai->fn, SNDCTL_DSP_STEREO, &chan); - if(chan != (ai->channels-1)) { - return -1; - } - return ret; -} - -int audio_set_format(struct audio_info_struct *ai) -{ - int sample_size,fmts; - int sf,ret; - - if(ai->format == -1) - return 0; - - switch(ai->format) { - case AUDIO_FORMAT_SIGNED_16: - default: - fmts = AFMT_S16_NE; - sample_size = 16; - break; - case AUDIO_FORMAT_UNSIGNED_8: - fmts = AFMT_U8; - sample_size = 8; - break; - case AUDIO_FORMAT_SIGNED_8: - fmts = AFMT_S8; - sample_size = 8; - break; - case AUDIO_FORMAT_ULAW_8: - fmts = AFMT_MU_LAW; - sample_size = 8; - break; - case AUDIO_FORMAT_ALAW_8: - fmts = AFMT_A_LAW; - sample_size = 8; - break; - case AUDIO_FORMAT_UNSIGNED_16: - fmts = AFMT_U16_NE; - break; - } -#if 0 - if(ioctl(ai->fn, SNDCTL_DSP_SAMPLESIZE,&sample_size) < 0) - return -1; -#endif - sf = fmts; - ret = ioctl(ai->fn, SNDCTL_DSP_SETFMT, &fmts); - if(sf != fmts) { - return -1; - } - return ret; -} /* * get formats for specific channel/rate parameters @@ -288,7 +272,7 @@ fprintf(stderr,"No"); int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len) { -#ifdef PPC_ENDIAN +#ifdef WORDS_BIGENDIAN #define BYTE0(n) ((unsigned char)(n) & (0xFF)) #define BYTE1(n) BYTE0((unsigned int)(n) >> 8) #define BYTE2(n) BYTE0((unsigned int)(n) >> 16) @@ -311,7 +295,7 @@ int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len) intPtr++; } } -#endif /* PPC_ENDIAN */ +#endif /* WORDS_BIGENDIAN */ return write(ai->fn,buf,len); } @@ -321,3 +305,7 @@ int audio_close(struct audio_info_struct *ai) close (ai->fn); return 0; } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} diff --git a/src/audio_sgi.c b/src/audio_sgi.c index 00ac8164..d269ae71 100644 --- a/src/audio_sgi.c +++ b/src/audio_sgi.c @@ -4,6 +4,9 @@ #include #include +/* #include */ +#include + #include "mpg123.h" @@ -11,27 +14,75 @@ static const char analog_output_res_name[] = ".AnalogOut"; +static int audio_set_rate(struct audio_info_struct *ai, ALconfig config) +{ + int dev = alGetDevice(config); + ALpv params[1]; + + /* Make sure the device is OK */ + if (dev < 0) + { + fprintf(stderr,"audio_set_rate : %s\n",alGetErrorString(oserror())); + return 1; + } + + params[0].param = AL_OUTPUT_RATE; + params[0].value.ll = alDoubleToFixed(ai->rate); + + if (alSetParams(dev, params,1) < 0) + fprintf(stderr,"audio_set_rate : %s\n",alGetErrorString(oserror())); + + return 0; +} + +static int audio_set_channels(struct audio_info_struct *ai, ALconfig config) +{ + int ret; + + if(ai->channels == 2) + ret = alSetChannels(config, AL_STEREO); + else + ret = alSetChannels(config, AL_MONO); + + if (ret < 0) + fprintf(stderr,"audio_set_channels : %s\n",alGetErrorString(oserror())); + + return 0; +} + +static int audio_set_format(struct audio_info_struct *ai, ALconfig config) +{ + if (alSetSampFmt(config,AL_SAMPFMT_TWOSCOMP) < 0) + fprintf(stderr,"audio_set_format : %s\n",alGetErrorString(oserror())); + + if (alSetWidth(config,AL_SAMPLE_16) < 0) + fprintf(stderr,"audio_set_format : %s\n",alGetErrorString(oserror())); + + return 0; +} + + int audio_open(struct audio_info_struct *ai) { int dev = AL_DEFAULT_OUTPUT; - - ai->config = alNewConfig(); - + ALconfig config = alNewConfig(); + ALport port = NULL; + /* Test for correct completion */ - if (ai->config == 0) { + if (config == 0) { fprintf(stderr,"audio_open : %s\n",alGetErrorString(oserror())); exit(-1); } /* Set port parameters */ if(ai->channels == 2) - alSetChannels(ai->config, AL_STEREO); + alSetChannels(config, AL_STEREO); else - alSetChannels(ai->config, AL_MONO); + alSetChannels(config, AL_MONO); - alSetWidth(ai->config, AL_SAMPLE_16); - alSetSampFmt(ai->config,AL_SAMPFMT_TWOSCOMP); - alSetQueueSize(ai->config, 131069); + alSetWidth(config, AL_SAMPLE_16); + alSetSampFmt(config,AL_SAMPFMT_TWOSCOMP); + alSetQueueSize(config, 131069); /* Setup output device to specified module. If there is no module specified in ai structure, use the default four output */ @@ -59,90 +110,33 @@ int audio_open(struct audio_info_struct *ai) } /* Set the device */ - if (alSetDevice(ai->config,dev) < 0) + if (alSetDevice(config,dev) < 0) { fprintf(stderr,"audio_open : %s\n",alGetErrorString(oserror())); exit(-1); } /* Open the audio port */ - ai->port = alOpenPort("mpg123-VSC", "w", ai->config); - if(ai->port == NULL) { + port = alOpenPort("mpg123-VSC", "w", config); + if(port == NULL) { fprintf(stderr, "Unable to open audio channel: %s\n", alGetErrorString(oserror())); exit(-1); } - audio_reset_parameters(ai); + ai->handle = (void*)port; + + + audio_set_format(ai, config); + audio_set_channels(ai, config); + audio_set_rate(ai, config); + + alFreeConfig(config); + return 1; } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - int ret; - ret = audio_set_format(ai); - if(ret >= 0) - ret = audio_set_channels(ai); - if(ret >= 0) - ret = audio_set_rate(ai); - -/* todo: Set new parameters here */ - - return ret; -} - -int audio_rate_best_match(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - int dev = alGetDevice(ai->config); - ALpv params[1]; - - /* Make sure the device is OK */ - if (dev < 0) - { - fprintf(stderr,"audio_set_rate : %s\n",alGetErrorString(oserror())); - return 1; - } - - params[0].param = AL_OUTPUT_RATE; - params[0].value.ll = alDoubleToFixed(ai->rate); - - if (alSetParams(dev, params,1) < 0) - fprintf(stderr,"audio_set_rate : %s\n",alGetErrorString(oserror())); - - return 0; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - int ret; - - if(ai->channels == 2) - ret = alSetChannels(ai->config, AL_STEREO); - else - ret = alSetChannels(ai->config, AL_MONO); - - if (ret < 0) - fprintf(stderr,"audio_set_channels : %s\n",alGetErrorString(oserror())); - - return 0; -} - -int audio_set_format(struct audio_info_struct *ai) -{ - if (alSetSampFmt(ai->config,AL_SAMPFMT_TWOSCOMP) < 0) - fprintf(stderr,"audio_set_format : %s\n",alGetErrorString(oserror())); - - if (alSetWidth(ai->config,AL_SAMPLE_16) < 0) - fprintf(stderr,"audio_set_format : %s\n",alGetErrorString(oserror())); - - return 0; -} int audio_get_formats(struct audio_info_struct *ai) { @@ -152,22 +146,30 @@ int audio_get_formats(struct audio_info_struct *ai) int audio_play_samples(struct audio_info_struct *ai,unsigned char *buf,int len) { + ALport port = (ALport)ai->handle; + if(ai->format == AUDIO_FORMAT_SIGNED_8) - alWriteFrames(ai->port, buf, len>>1); + alWriteFrames(port, buf, len>>1); else - alWriteFrames(ai->port, buf, len>>2); + alWriteFrames(port, buf, len>>2); return len; } int audio_close(struct audio_info_struct *ai) { - if (ai->port) { - while(alGetFilled(ai->port) > 0) + ALport port = (ALport)ai->handle; + + if (port) { + while(alGetFilled(port) > 0) sginap(1); - alClosePort(ai->port); - alFreeConfig(ai->config); + alClosePort(port); + ai->handle=NULL; } return 0; } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} diff --git a/src/audio_sun.c b/src/audio_sun.c index d3940ba3..54a427fe 100644 --- a/src/audio_sun.c +++ b/src/audio_sun.c @@ -29,8 +29,114 @@ #include #endif -static void audio_set_format_helper(struct audio_info_struct *ai,audio_info_t *ainfo); +static int audio_reset_parameters(struct audio_info_struct *ai) +{ + audio_info_t ainfo; + + AUDIO_INITINFO(&ainfo); + + if(ai->rate != -1) + ainfo.play.sample_rate = ai->rate; + if(ai->channels >= 0) + ainfo.play.channels = ai->channels; + audio_set_format_helper(ai,&ainfo); + + if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) == -1) + return -1; + return 0; +} + +static int audio_rate_best_match(struct audio_info_struct *ai) +{ + audio_info_t ainfo; + AUDIO_INITINFO(&ainfo); + + ainfo.play.sample_rate = ai->rate; + if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) < 0) { + ai->rate = 0; + return 0; + } + if(ioctl(ai->fn, AUDIO_GETINFO, &ainfo) < 0) { + return -1; + } + ai->rate = ainfo.play.sample_rate; + return 0; +} + +static int audio_set_rate(struct audio_info_struct *ai) +{ + audio_info_t ainfo; + + if(ai->rate != -1) { + AUDIO_INITINFO(&ainfo); + ainfo.play.sample_rate = ai->rate; + if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) == -1) + return -1; + return 0; + } + return -1; +} + +static int audio_set_channels(struct audio_info_struct *ai) +{ + audio_info_t ainfo; + + AUDIO_INITINFO(&ainfo); + ainfo.play.channels = ai->channels; + if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) == -1) + return -1; + return 0; +} + +static void audio_set_format_helper(struct audio_info_struct *ai,audio_info_t *ainfo) +{ + + + switch(ai->format) { + case -1: + case AUDIO_FORMAT_SIGNED_16: + default: + ainfo->play.encoding = AUDIO_ENCODING_LINEAR; + ainfo->play.precision = 16; + break; + case AUDIO_FORMAT_UNSIGNED_8: +#if defined(SOLARIS) || defined(SPARCLINUX) + ainfo->play.encoding = AUDIO_ENCODING_LINEAR8; + ainfo->play.precision = 8; + break; +#endif +#ifdef NETBSD + ainfo->play.encoding = AUDIO_ENCODING_LINEAR; + ainfo->play.precision = 8; + break; +#endif + case AUDIO_FORMAT_SIGNED_8: + fprintf(stderr,"Linear signed 8 bit not supported!\n"); + return; + case AUDIO_FORMAT_ULAW_8: + ainfo->play.encoding = AUDIO_ENCODING_ULAW; + ainfo->play.precision = 8; + break; + case AUDIO_FORMAT_ALAW_8: + ainfo->play.encoding = AUDIO_ENCODING_ALAW; + ainfo->play.precision = 8; + break; + } +} + + +static int audio_set_format(struct audio_info_struct *ai) +{ + audio_info_t ainfo; + + AUDIO_INITINFO(&ainfo); + audio_set_format_helper(ai,&ainfo); + if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) == -1) + return -1; + + return 0; +} int audio_open(struct audio_info_struct *ai) { @@ -100,112 +206,8 @@ int audio_open(struct audio_info_struct *ai) return ai->fn; } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - audio_info_t ainfo; - - AUDIO_INITINFO(&ainfo); - - if(ai->rate != -1) - ainfo.play.sample_rate = ai->rate; - if(ai->channels >= 0) - ainfo.play.channels = ai->channels; - audio_set_format_helper(ai,&ainfo); - - if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) == -1) - return -1; - return 0; -} - -int audio_rate_best_match(struct audio_info_struct *ai) -{ - audio_info_t ainfo; - AUDIO_INITINFO(&ainfo); - - ainfo.play.sample_rate = ai->rate; - if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) < 0) { - ai->rate = 0; - return 0; - } - if(ioctl(ai->fn, AUDIO_GETINFO, &ainfo) < 0) { - return -1; - } - ai->rate = ainfo.play.sample_rate; - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - audio_info_t ainfo; - - if(ai->rate != -1) { - AUDIO_INITINFO(&ainfo); - ainfo.play.sample_rate = ai->rate; - if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) == -1) - return -1; - return 0; - } - return -1; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - audio_info_t ainfo; - - AUDIO_INITINFO(&ainfo); - ainfo.play.channels = ai->channels; - if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) == -1) - return -1; - return 0; -} - -static void audio_set_format_helper(struct audio_info_struct *ai,audio_info_t *ainfo) -{ - switch(ai->format) { - case -1: - case AUDIO_FORMAT_SIGNED_16: - default: - ainfo->play.encoding = AUDIO_ENCODING_LINEAR; - ainfo->play.precision = 16; - break; - case AUDIO_FORMAT_UNSIGNED_8: -#if defined(SOLARIS) || defined(SPARCLINUX) - ainfo->play.encoding = AUDIO_ENCODING_LINEAR8; - ainfo->play.precision = 8; - break; -#endif -#ifdef NETBSD - ainfo->play.encoding = AUDIO_ENCODING_LINEAR; - ainfo->play.precision = 8; - break; -#endif - case AUDIO_FORMAT_SIGNED_8: - fprintf(stderr,"Linear signed 8 bit not supported!\n"); - return; - case AUDIO_FORMAT_ULAW_8: - ainfo->play.encoding = AUDIO_ENCODING_ULAW; - ainfo->play.precision = 8; - break; - case AUDIO_FORMAT_ALAW_8: - ainfo->play.encoding = AUDIO_ENCODING_ALAW; - ainfo->play.precision = 8; - break; - } -} - -int audio_set_format(struct audio_info_struct *ai) -{ - audio_info_t ainfo; - - AUDIO_INITINFO(&ainfo); - audio_set_format_helper(ai,&ainfo); - if(ioctl(ai->fn, AUDIO_SETINFO, &ainfo) == -1) - return -1; - - return 0; -} int audio_get_formats(struct audio_info_struct *ai) { diff --git a/src/audio_win32.c b/src/audio_win32.c index 1e305923..9db3045a 100644 --- a/src/audio_win32.c +++ b/src/audio_win32.c @@ -108,31 +108,6 @@ int audio_open(struct audio_info_struct *ai) return 0; } -int audio_reset_parameters(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_rate_best_match(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_rate(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_channels(struct audio_info_struct *ai) -{ - return 0; -} - -int audio_set_format(struct audio_info_struct *ai) -{ - return 0; -} - int audio_get_formats(struct audio_info_struct *ai) { return AUDIO_FORMAT_SIGNED_16; @@ -224,3 +199,8 @@ int audio_close(struct audio_info_struct *ai) nBlocks = 0; return(0); } + +void audio_queueflush(struct audio_info_struct *ai) +{ +} + diff --git a/src/dct64.c b/src/dct64.c index 88fdde0c..144617e2 100644 --- a/src/dct64.c +++ b/src/dct64.c @@ -4,9 +4,8 @@ * * -funroll-loops (for gcc) will remove the loops for better performance * using loops in the source-code enhances readabillity - */ - -/* + * + * * TODO: write an optimized version for the down-sampling modes * (in these modes the bands 16-31 (2:1) or 8-31 (4:1) are zero */ diff --git a/src/getlopt.h b/src/getlopt.h index 4d80a97c..47360c53 100644 --- a/src/getlopt.h +++ b/src/getlopt.h @@ -41,6 +41,7 @@ for .... no flag) */ * else * loptarg = &arg * return ((value != 0) ? value : sname) + * * bit 1 = 1 - var is a pointer to a char (or string), * and value is interpreted as char * bit 2 = 1 - var is a pointer to int diff --git a/src/httpget.c b/src/httpget.c index 55451c1e..19f30e98 100644 --- a/src/httpget.c +++ b/src/httpget.c @@ -21,10 +21,7 @@ #include #include -#ifdef HAVE_CONFIG_H #include "config.h" -#endif - #include "mpg123.h" #ifndef INADDR_NONE diff --git a/src/mpg123.c b/src/mpg123.c index 862c741f..06905613 100644 --- a/src/mpg123.c +++ b/src/mpg123.c @@ -7,9 +7,7 @@ */ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #include #include @@ -1221,10 +1219,11 @@ tc_hack: static void print_title(void) { - fprintf(stderr,"High Performance MPEG 1.0/2.0 Audio Player for Layer 1, 2 and 3.\n"); + fprintf(stderr,"High Performance MPEG 1.0/2.0 Audio Player for Layers 1, 2 and 3.\n"); fprintf(stderr,"Version %s. Initially written and copyright by Michael Hipp.\n", PACKAGE_VERSION); - fprintf(stderr,"Uses code from various people. See 'README' for more!\n"); - fprintf(stderr,"THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!\n"); + fprintf(stderr,"Uses code from various people, see 'AUTHORS' for full list.\n"); + fprintf(stderr,"This software comes with ABSOLUTELY NO WARRANTY. For details, see \n"); + fprintf(stderr,"the enclosed file COPYING for license information (GPL).\n"); } static void usage(char *dummy) /* print syntax & exit */ diff --git a/src/system.c b/src/system.c index dd69727d..b1e434f4 100644 --- a/src/system.c +++ b/src/system.c @@ -100,7 +100,6 @@ static int system_raw_read_head(int f,unsigned long *head) static int system_raw_read_word(int f,int *word) { unsigned char buf[2]; - int ret; if(my_read(f,buf,2) != 2) { perror("read_word"); @@ -488,5 +487,6 @@ void main(void) filept = 0; ret = system_init(&rd1); fprintf(stderr,"ret: %d\n",ret); + return ret; } diff --git a/src/term.c b/src/term.c index 3dfe2ea2..22da13eb 100644 --- a/src/term.c +++ b/src/term.c @@ -1,7 +1,5 @@ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #ifdef HAVE_TERMIOS diff --git a/src/term.h b/src/term.h index ba759e5b..c11b12d6 100644 --- a/src/term.h +++ b/src/term.h @@ -1,11 +1,8 @@ -#ifdef HAVE_CONFIG_H #include "config.h" -#endif #ifdef HAVE_TERMIOS - #define LOOP_CYCLES 0.500000 /* Loop time in sec */ /* diff --git a/src/xfermem.c b/src/xfermem.c index 96d53d73..e216fa35 100644 --- a/src/xfermem.c +++ b/src/xfermem.c @@ -7,6 +7,10 @@ * See xfermem.h for documentation/description. */ +#ifdef HAVE_CONFIG +#include "config.h" +#endif + #ifndef NOXFERMEM #include @@ -27,12 +31,12 @@ #include "mpg123.h" -#ifndef USE_MMAP +#ifndef HAVE_MMAP #include #include #endif -#if defined (USE_MMAP) && defined(MAP_ANONYMOUS) && !defined(MAP_ANON) +#if defined (HAVE_MMAP) && defined(MAP_ANONYMOUS) && !defined(MAP_ANON) #define MAP_ANON MAP_ANONYMOUS #endif @@ -40,7 +44,7 @@ void xfermem_init (txfermem **xf, int bufsize, int msize, int skipbuf) { int regsize = bufsize + msize + skipbuf + sizeof(txfermem); -#ifdef USE_MMAP +#ifdef HAVE_MMAP # ifdef MAP_ANON if ((*xf = (txfermem *) mmap(0, regsize, PROT_READ | PROT_WRITE, MAP_ANON | MAP_SHARED, -1, 0)) == (txfermem *) -1) { @@ -95,7 +99,7 @@ void xfermem_done (txfermem *xf) { if(!xf) return; -#ifdef USE_MMAP +#ifdef HAVE_MMAP munmap ((caddr_t) xf, xf->size + xf->metasize + sizeof(txfermem)); #else if (shmdt((void *) xf) == -1) {