changeset 8576:ed132c268686

- Fix 8-bit sound in arts audio driver (logic in OBTAIN_BITRATE macro was broken) - arts server always expects 16-bit sound in little endian byte order, even in the case the artsd server runs on a big endian machine. Make sure that mplayer's audio filters convert the samples into one of the arts supported sound formats.
author jkeil
date Fri, 27 Dec 2002 16:35:29 +0000
parents 1d15ca298dda
children e0b934c87745
files libao2/ao_arts.c
diffstat 1 files changed, 19 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/libao2/ao_arts.c	Fri Dec 27 16:29:11 2002 +0000
+++ b/libao2/ao_arts.c	Fri Dec 27 16:35:29 2002 +0000
@@ -16,7 +16,7 @@
 #include "../config.h"
 #include "../mp_msg.h"
 
-#define OBTAIN_BITRATE(a) (((a != AFMT_U8) || (a != AFMT_S8)) ? 16 : 8)
+#define OBTAIN_BITRATE(a) (((a != AFMT_U8) && (a != AFMT_S8)) ? 16 : 8)
 
 /* Feel free to experiment with the following values: */
 #define ARTS_PACKETS 10 /* Number of audio packets */
@@ -50,6 +50,24 @@
 	}
 	mp_msg(MSGT_AO, MSGL_INFO, "AO: [arts] Connected to sound server\n");
 
+	/*
+	 * arts supports 8bit unsigned and 16bit signed sample formats
+	 * (16bit apparently in little endian format, even in the case
+	 * when artsd runs on a big endian cpu).
+	 *
+	 * Unsupported formats are translated to one of these two formats
+	 * using mplayer's audio filters.
+	 */
+	switch (format) {
+	case AFMT_U8:
+	case AFMT_S8:
+	    format = AFMT_U8;
+	    break;
+	default:
+	    format = AFMT_S16_LE;    /* artsd always expects little endian?*/
+	    break;
+	}
+
 	ao_data.format = format;
 	ao_data.channels = channels;
 	ao_data.samplerate = rate_hz;