output/openal: force 16 bit playback, as 8 bit doesn't work

The OpenAL specification says that AL_FORMAT_MONO8 and
AL_FORMAT_STEREO8 expect unsigned 8 bit samples, but MPD uses unsigned
samples.
This commit is contained in:
Max Kellermann 2011-12-13 21:32:19 +01:00
parent 097e5dfbdc
commit 96ad5b8444
2 changed files with 5 additions and 10 deletions

1
NEWS
View File

@ -1,6 +1,7 @@
ver 0.16.7 (2011/??/??)
* output:
- httpd: fix excessive buffering
- openal: force 16 bit playback, as 8 bit doesn't work
ver 0.16.6 (2011/12/01)

View File

@ -58,6 +58,10 @@ openal_output_quark(void)
static ALenum
openal_audio_format(struct audio_format *audio_format)
{
/* note: cannot map SAMPLE_FORMAT_S8 to AL_FORMAT_STEREO8 or
AL_FORMAT_MONO8 since OpenAL expects unsigned 8 bit
samples, while MPD uses signed samples */
switch (audio_format->format) {
case SAMPLE_FORMAT_S16:
if (audio_format->channels == 2)
@ -69,16 +73,6 @@ openal_audio_format(struct audio_format *audio_format)
audio_format->channels = 1;
return openal_audio_format(audio_format);
case SAMPLE_FORMAT_S8:
if (audio_format->channels == 2)
return AL_FORMAT_STEREO8;
if (audio_format->channels == 1)
return AL_FORMAT_MONO8;
/* fall back to mono */
audio_format->channels = 1;
return openal_audio_format(audio_format);
default:
/* fall back to 16 bit */
audio_format->format = SAMPLE_FORMAT_S16;