Mercurial > mplayer.hg
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;