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:
parent
097e5dfbdc
commit
96ad5b8444
1
NEWS
1
NEWS
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue