summaryrefslogtreecommitdiffstats
path: root/libao2/ao_arts.c
diff options
context:
space:
mode:
authoratmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-05-28 01:52:40 +0000
committeratmos4 <atmos4@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-05-28 01:52:40 +0000
commitd1981e9fa5c39ce069249489ec3336bad86a86a1 (patch)
tree4fb7fd0d12ad49079f3a3cafdef1fd67d7710f03 /libao2/ao_arts.c
parent1a2a9139f96333963abb21452a2241bd5e410167 (diff)
downloadmpv-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.c117
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);
+}
+
+
+
+
+
+
+