diff options
author | atmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-05-28 01:52:40 +0000 |
---|---|---|
committer | atmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-05-28 01:52:40 +0000 |
commit | d1981e9fa5c39ce069249489ec3336bad86a86a1 (patch) | |
tree | 4fb7fd0d12ad49079f3a3cafdef1fd67d7710f03 /libao2/ao_arts.c | |
parent | 1a2a9139f96333963abb21452a2241bd5e410167 (diff) | |
download | mpv-d1981e9fa5c39ce069249489ec3336bad86a86a1.tar.bz2 mpv-d1981e9fa5c39ce069249489ec3336bad86a86a1.tar.xz |
aRts audio out support by Michele Balistreri <brain at email.it>
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@6215 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2/ao_arts.c')
-rw-r--r-- | libao2/ao_arts.c | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/libao2/ao_arts.c b/libao2/ao_arts.c new file mode 100644 index 0000000000..6fa6b88cf0 --- /dev/null +++ b/libao2/ao_arts.c @@ -0,0 +1,117 @@ +/* + * ao_arts - aRts audio output driver for MPlayer + * + * Michele Balistreri <brain87@gmx.net> + * + * This driver is distribuited under terms of GPL + * + */ + +#include <artsc.h> +#include <stdio.h> + +#include "audio_out.h" +#include "audio_out_internal.h" +#include "afmt.h" +#include "../config.h" +#include "../mp_msg.h" + +#define OBTAIN_BITRATE(a) (((a != AFMT_U8) || (a != AFMT_S8)) ? 16 : 8) + +static arts_stream_t stream; + +static ao_info_t info = +{ + "aRts audio output", + "arts", + "Michele Balistreri <brain87@gmx.net>", + "" +}; + +LIBAO_EXTERN(arts) + +static int control(int cmd, int arg) +{ + return(CONTROL_UNKNOWN); +} + +static int init(int rate_hz, int channels, int format, int flags) +{ + int err; + int frag_spec; + + if(err=arts_init()) { + mp_msg(MSGT_AO, MSGL_ERR, "AO: [arts] %s\n", arts_error_text(err)); + return 0; + } + + else + mp_msg(MSGT_AO, MSGL_INFO, "AO: [arts] Connected to sound server\n"); + + ao_data.format = format; + ao_data.channels = channels; + ao_data.samplerate = rate_hz; + ao_data.bps = (rate_hz*channels); + ao_data.buffersize = 4096; + + if(format != AFMT_U8 && format != AFMT_S8) + ao_data.bps*=2; + + for (frag_spec = 0; (0x01<<frag_spec) < ao_data.buffersize; ++frag_spec) + ; + frag_spec |= 0x00020000; + stream=arts_play_stream(rate_hz, OBTAIN_BITRATE(format), channels, "Mplayer"); + arts_stream_set(stream, ARTS_P_PACKET_SETTINGS, frag_spec); + arts_stream_set(stream, ARTS_P_BLOCKING, 0); + + if(stream == NULL) { + mp_msg(MSGT_AO, MSGL_ERR, "AO: [arts] Unable to open a stream\n"); + return 0; + } + + else + mp_msg(MSGT_AO, MSGL_INFO, "AO: [arts] Stream opened\n"); + + + return 1; +} + +static void uninit() +{ + arts_close_stream(stream); + arts_free(); +} + +static int play(void* data,int len,int flags) +{ + arts_write(stream, data, len); +} + +static void audio_pause() +{ +} + +static void audio_resume() +{ +} + +static void reset() +{ +} + +static int get_space() +{ + return arts_stream_get(stream, ARTS_P_BUFFER_SPACE); +} + +static float get_delay() +{ + return ((float) arts_stream_get(stream, ARTS_P_BUFFER_SIZE) / (float) ao_data.bps); +} + + + + + + + |