diff options
Diffstat (limited to 'src/audio_out')
-rw-r--r-- | src/audio_out/Makefile.am | 19 | ||||
-rw-r--r-- | src/audio_out/audio_alsa_out.c | 45 | ||||
-rw-r--r-- | src/audio_out/audio_esd_out.c | 38 | ||||
-rw-r--r-- | src/audio_out/audio_oss_out.c | 45 |
4 files changed, 88 insertions, 59 deletions
diff --git a/src/audio_out/Makefile.am b/src/audio_out/Makefile.am index 0e90b2028..c8c82ee32 100644 --- a/src/audio_out/Makefile.am +++ b/src/audio_out/Makefile.am @@ -1,4 +1,4 @@ -CFLAGS = @GLOBAL_CFLAGS@ -DXINE_COMPILE +CFLAGS = @GLOBAL_CFLAGS@ -DXINE_COMPILE $(ALSA_CFLAGS) $(ESD_CFLAGS) EXTRA_DIST = audio_alsa_out.c audio_esd_out.c @@ -20,17 +20,18 @@ endif # All of xine audio out plugins should be named like the # scheme "xineplug_ao_out_" # -##lib_LTLIBRARIES = xineplug_ao_out_oss.la $(alsa_module) $(esd_module) -lib_LTLIBRARIES = +lib_LTLIBRARIES = xineplug_ao_out_oss.la $(alsa_module) $(esd_module) -##xineplug_ao_out_oss_la_SOURCES = audio_oss_out.c resample.c -##xineplug_ao_out_oss_la_LDFLAGS = -avoid-version -module +xineplug_ao_out_oss_la_SOURCES = audio_oss_out.c resample.c +xineplug_ao_out_oss_la_LDFLAGS = -avoid-version -module -##xineplug_ao_out_alsa_la_SOURCES = audio_alsa_out.c resample.c -##xineplug_ao_out_alsa_la_LDFLAGS = -avoid-version -module +xineplug_ao_out_alsa_la_SOURCES = audio_alsa_out.c resample.c +xineplug_ao_out_alsa_la_LIBADD = $(ALSA_LIBS) +xineplug_ao_out_alsa_la_LDFLAGS = -avoid-version -module -##xineplug_ao_out_esd_la_SOURCES = audio_esd_out.c resample.c -##xineplug_ao_out_esd_la_LDFLAGS = -avoid-version -module +xineplug_ao_out_esd_la_SOURCES = audio_esd_out.c resample.c +xineplug_ao_out_esd_la_LIBADD = $(ESD_LIBS) +xineplug_ao_out_esd_la_LDFLAGS = -avoid-version -module noinst_HEADERS = audio_oss_out.h audio_alsa_out.h audio_esd_out.h resample.h diff --git a/src/audio_out/audio_alsa_out.c b/src/audio_out/audio_alsa_out.c index 95405511f..4a3d84b59 100644 --- a/src/audio_out/audio_alsa_out.c +++ b/src/audio_out/audio_alsa_out.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_alsa_out.c,v 1.1 2001/04/24 20:53:00 f1rmb Exp $ + * $Id: audio_alsa_out.c,v 1.2 2001/04/27 10:42:38 f1rmb Exp $ */ #ifdef HAVE_CONFIG_H @@ -36,13 +36,15 @@ //#include <linux/asoundid.h> #include <inttypes.h> -#include "xine/xine.h" -#include "xine/monitor.h" -#include "xine/audio_out.h" -#include "xine/metronom.h" +#include "xine_internal.h" +#include "monitor.h" +#include "audio_out.h" +#include "metronom.h" #include "resample.h" -#include "xine/ac3.h" -#include "xine/utils.h" +#include "libac3/ac3.h" +#include "utils.h" + +#define AO_OUT_ALSA_IFACE_VERSION 1 #define AUDIO_NUM_FRAGMENTS 15 #define AUDIO_FRAGMENT_SIZE 8192 @@ -50,9 +52,6 @@ #define GAP_TOLERANCE 15000 #define MAX_MASTER_CLOCK_DIV 5000 -extern uint32_t xine_debug; - - typedef struct _audio_alsa_globals { snd_pcm_t *front_handle; @@ -157,7 +156,8 @@ static void alsa_set_frag(int fragment_size, int fragment_count) { /* * open the audio device for writing to */ -static int ao_open(uint32_t bits, uint32_t rate, int ao_mode) { +static int ao_open(metronom_t *metronom, + uint32_t bits, uint32_t rate, int ao_mode) { int channels; int subdevice = 0; int direction = SND_PCM_OPEN_PLAYBACK; @@ -290,7 +290,7 @@ static int ao_open(uint32_t bits, uint32_t rate, int ao_mode) { xprintf (VERBOSE|AUDIO, "audio_out : audio_step %d pts per 32768 samples\n", gAudioALSA.audio_step); - metronom_set_audio_rate (gAudioALSA.audio_step); + metronom->set_audio_rate (metronom, gAudioALSA.audio_step); memcpy(&pcm_chan_params.format, &pcm_format, sizeof(snd_pcm_format_t)); @@ -419,7 +419,8 @@ static uint32_t ao_get_current_vpts (void) { /* * */ -static void ao_put_samples(int16_t* output_samples, +static void ao_put_samples(metronom_t *metronom, + int16_t* output_samples, uint32_t num_samples, uint32_t pts_) { uint32_t vpts; uint32_t audio_vpts; @@ -441,7 +442,7 @@ static void ao_put_samples(int16_t* output_samples, // alsa_set_frag(num_samples, 6); // } - vpts = metronom_got_audio_samples (pts_, num_samples); + vpts = metronom->got_audio_samples (metronom, pts_, num_samples); /* * check if these samples "fit" in the audio output buffer @@ -465,7 +466,7 @@ static void ao_put_samples(int16_t* output_samples, */ audio_vpts = ao_get_current_vpts () ; - master_vpts = metronom_get_current_time (); + master_vpts = metronom->get_current_time (metronom); diff = audio_vpts - master_vpts; xprintf (VERBOSE|AUDIO,"audio_alsa_out: syncing on master clock: " @@ -485,7 +486,7 @@ static void ao_put_samples(int16_t* output_samples, if (abs(diff) > MAX_MASTER_CLOCK_DIV) { printf ("master clock adjust time %d -> %d\n", master_vpts, audio_vpts); - metronom_adjust_clock (audio_vpts); + metronom->adjust_clock (metronom, audio_vpts); } /* @@ -597,15 +598,21 @@ static int ao_is_mode_supported (int mode) { return 0; } +static char *ao_get_ident(void) { + return "ALSA"; +} + /* ------------------------------------------------------------------------- */ /* * */ static ao_functions_t audio_alsaout = { + AO_OUT_ALSA_IFACE_VERSION, ao_is_mode_supported, ao_open, ao_put_samples, - ao_close + ao_close, + ao_get_ident }; /* ------------------------------------------------------------------------- */ /* @@ -617,7 +624,7 @@ static void sighandler(int signum) { /* * */ -ao_functions_t *audio_alsaout_init(void) { +ao_functions_t *audio_alsaout_init(int iface, config_values_t *config) { int best_rate; int devnum; int err; @@ -636,6 +643,7 @@ ao_functions_t *audio_alsaout_init(void) { else { snd_default_card = snd_defaults_card(); if((err = snd_card_load(snd_default_card)) < 0) { + perr("snd_card_load() failed: %s\n", snd_strerror(err)); } xprintf (VERBOSE|AUDIO, "%d card(s) installed. Default = %d\n", @@ -759,3 +767,4 @@ ao_functions_t *audio_alsaout_init(void) { return &audio_alsaout; } + diff --git a/src/audio_out/audio_esd_out.c b/src/audio_out/audio_esd_out.c index 259364a55..6200d5d18 100644 --- a/src/audio_out/audio_esd_out.c +++ b/src/audio_out/audio_esd_out.c @@ -31,19 +31,19 @@ #include <sys/time.h> #include <inttypes.h> -#include "xine/xine.h" -#include "xine/monitor.h" -#include "xine/audio_out.h" +#include "xine_internal.h" +#include "monitor.h" +#include "audio_out.h" #include "resample.h" -#include "xine/metronom.h" -#include "xine/ac3.h" -#include "xine/utils.h" +#include "metronom.h" +#include "libac3/ac3.h" +#include "utils.h" + +#define AO_OUT_ESD_IFACE_VERSION 1 #define GAP_TOLERANCE 15000 #define MAX_MASTER_CLOCK_DIV 5000 -extern uint32_t xine_debug; - typedef struct _audio_esd_globals { int audio_fd; @@ -73,7 +73,8 @@ static audio_esd_globals_t gAudioESD; /* * open the audio device for writing to */ -static int ao_open(uint32_t bits, uint32_t rate, int mode) +static int ao_open(metronom_t *metronom, + uint32_t bits, uint32_t rate, int mode) { esd_format_t format; @@ -132,7 +133,7 @@ static int ao_open(uint32_t bits, uint32_t rate, int mode) xprintf (VERBOSE|AUDIO, "audio_out : audio_step %d pts per 32768 samples\n", gAudioESD.audio_step); - metronom_set_audio_rate (gAudioESD.audio_step); + metronom->set_audio_rate (metronom, gAudioESD.audio_step); return 1; } @@ -178,7 +179,8 @@ static void ao_fill_gap (uint32_t pts_len) { gAudioESD.last_vpts += pts_len; } -static void ao_write_audio_data(int16_t* output_samples, uint32_t num_samples, +static void ao_write_audio_data(metronom_t *metronom, + int16_t* output_samples, uint32_t num_samples, uint32_t pts_) { @@ -193,7 +195,7 @@ static void ao_write_audio_data(int16_t* output_samples, uint32_t num_samples, if (gAudioESD.audio_fd<0) return; - vpts = metronom_got_audio_samples (pts_, num_samples); + vpts = metronom->got_audio_samples (metronom, pts_, num_samples); xprintf (VERBOSE|AUDIO, "audio_esd_out: got %d samples, vpts=%d, last_vpts=%d\n", num_samples, vpts, gAudioESD.last_vpts); @@ -223,7 +225,7 @@ static void ao_write_audio_data(int16_t* output_samples, uint32_t num_samples, */ audio_vpts = ao_get_current_vpts () ; - master_vpts = metronom_get_current_time (); + master_vpts = metronom->get_current_time (metronom); diff = audio_vpts - master_vpts; xprintf (AUDIO|VERBOSE, "audio_esd_out: syncing on master clock: audio_vpts=%d master_vpts=%d\n", @@ -239,7 +241,7 @@ static void ao_write_audio_data(int16_t* output_samples, uint32_t num_samples, if (abs(diff)>MAX_MASTER_CLOCK_DIV) { printf ("master clock adjust time %d -> %d (diff: %d)\n", master_vpts, audio_vpts, diff); - metronom_adjust_clock (audio_vpts); + metronom->adjust_clock (metronom, audio_vpts); } /* @@ -289,15 +291,21 @@ static int ao_is_mode_supported (int mode) { return ((mode == AO_MODE_STEREO) || (mode == AO_MODE_MONO)); } +static char *ao_get_ident(void) { + return "ESD"; +} + static ao_functions_t audio_esdout = { + AO_OUT_ESD_IFACE_VERSION, ao_is_mode_supported, ao_open, ao_write_audio_data, ao_close, + ao_get_ident }; -ao_functions_t *audio_esdout_init (void) +ao_functions_t *audio_esdout_init (int iface, config_values_t *config) { int audio_fd; diff --git a/src/audio_out/audio_oss_out.c b/src/audio_out/audio_oss_out.c index 18d11ff5d..795a2c8d3 100644 --- a/src/audio_out/audio_oss_out.c +++ b/src/audio_out/audio_oss_out.c @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * - * $Id: audio_oss_out.c,v 1.1 2001/04/24 20:53:00 f1rmb Exp $ + * $Id: audio_oss_out.c,v 1.2 2001/04/27 10:42:38 f1rmb Exp $ */ #ifdef HAVE_CONFIG_H @@ -40,13 +40,16 @@ #include <sys/ioctl.h> #include <inttypes.h> -#include "xine/xine.h" -#include "xine/monitor.h" -#include "xine/audio_out.h" +#include "xine_internal.h" +#include "monitor.h" +#include "audio_out.h" #include "resample.h" -#include "xine/metronom.h" -#include "xine/ac3.h" -#include "xine/utils.h" +#include "metronom.h" +#include "libac3/ac3.h" +#include "utils.h" +#include "metronom.h" + +#define AO_OUT_OSS_IFACE_VERSION 1 #define AUDIO_NUM_FRAGMENTS 15 #define AUDIO_FRAGMENT_SIZE 8192 @@ -54,8 +57,6 @@ #define GAP_TOLERANCE 15000 #define MAX_MASTER_CLOCK_DIV 5000 -extern uint32_t xine_debug; - #define DSP_TEMPLATE "/dev/dsp%d" typedef struct _audio_oss_globals { @@ -88,7 +89,8 @@ static audio_oss_globals_t gAudioOSS; /* * open the audio device for writing to */ -static int ao_open(uint32_t bits, uint32_t rate, int mode) +static int ao_open(metronom_t *metronom, + uint32_t bits, uint32_t rate, int mode) { int tmp; int fsize; @@ -157,7 +159,7 @@ static int ao_open(uint32_t bits, uint32_t rate, int mode) xprintf (VERBOSE|AUDIO, "audio_out : audio_step %d pts per 32768 samples\n", gAudioOSS.audio_step); - metronom_set_audio_rate (gAudioOSS.audio_step); + metronom->set_audio_rate(metronom, gAudioOSS.audio_step); /* * audio buffer size handling @@ -230,7 +232,8 @@ static void ao_fill_gap (uint32_t pts_len) { gAudioOSS.last_vpts += pts_len; } -static void ao_write_audio_data(int16_t* output_samples, uint32_t num_samples, +static void ao_write_audio_data(metronom_t *metronom, + int16_t* output_samples, uint32_t num_samples, uint32_t pts_) { @@ -245,7 +248,7 @@ static void ao_write_audio_data(int16_t* output_samples, uint32_t num_samples, if (gAudioOSS.audio_fd<0) return; - vpts = metronom_got_audio_samples (pts_, num_samples); + vpts = metronom->got_audio_samples (metronom, pts_, num_samples); xprintf (VERBOSE|AUDIO, "audio_oss_out: got %d samples, vpts=%d, last_vpts=%d\n", num_samples, vpts, gAudioOSS.last_vpts); @@ -275,7 +278,7 @@ static void ao_write_audio_data(int16_t* output_samples, uint32_t num_samples, */ audio_vpts = ao_get_current_vpts () ; - master_vpts = metronom_get_current_time (); + master_vpts = metronom->get_current_time (metronom); diff = audio_vpts - master_vpts; xprintf (AUDIO|VERBOSE, "audio_oss_out: syncing on master clock: audio_vpts=%d master_vpts=%d\n", @@ -316,7 +319,7 @@ static void ao_write_audio_data(int16_t* output_samples, uint32_t num_samples, if (abs(diff)>MAX_MASTER_CLOCK_DIV) { printf ("master clock adjust time %d -> %d (diff: %d)\n", master_vpts, audio_vpts, diff); - metronom_adjust_clock (audio_vpts); + metronom->adjust_clock (metronom, audio_vpts); } @@ -367,16 +370,21 @@ static int ao_is_mode_supported (int mode) { return ((mode == AO_MODE_STEREO) || (mode == AO_MODE_MONO)); } +static char *ao_get_ident(void) { + return "OSS"; +} + static ao_functions_t audio_ossout = { + AO_OUT_OSS_IFACE_VERSION, ao_is_mode_supported, ao_open, ao_write_audio_data, ao_close, + ao_get_ident }; -ao_functions_t *audio_ossout_init (void) -{ +ao_functions_t *init_audio_out_plugin (int iface, config_values_t *config) { int caps; char devname[] = "/dev/dsp\0\0\0"; int best_rate; @@ -384,6 +392,9 @@ ao_functions_t *audio_ossout_init (void) int devnum; int audio_fd; + + /* FIXME: add iface check */ + /* * find best device driver/channel */ |