diff options
-rw-r--r-- | NEWS | 2 | ||||
-rw-r--r-- | configure.ac | 10 | ||||
-rw-r--r-- | src/output/alsa_output_plugin.c | 9 | ||||
-rw-r--r-- | src/output/openal_output_plugin.c | 18 |
4 files changed, 26 insertions, 13 deletions
@@ -39,6 +39,8 @@ ver 0.16.5 (2010/??/??) - ffmpeg: higher precision timestamps - ffmpeg: don't require key frame for seeking - fix CUE track seeking +* output: + - openal: auto-fallback to mono if channel count is unsupported * player: - make seeking to CUE track more reliable - the "seek" command works when MPD is stopped diff --git a/configure.ac b/configure.ac index 98062eea6..84f36f8fe 100644 --- a/configure.ac +++ b/configure.ac @@ -36,7 +36,15 @@ AC_PROG_MAKE_SET PKG_PROG_PKG_CONFIG AC_ARG_WITH([systemdsystemunitdir], AS_HELP_STRING([--with-systemdsystemunitdir=DIR], [Directory for systemd service files]), - [], [with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd)]) + [], [with_systemdsystemunitdir=no]) +if test "x$with_systemdsystemunitdir" = xyes; then + AC_MSG_CHECKING(for systemd) + with_systemdsystemunitdir=$($PKG_CONFIG --variable=systemdsystemunitdir systemd) + if test -z "$with_systemdsystemunitdir"; then + AC_MSG_ERROR([Failed to detect systemd]) + fi + AC_MSG_RESULT([$with_systemdsystemunitdir]) +fi if test "x$with_systemdsystemunitdir" != xno; then AC_SUBST([systemdsystemunitdir], [$with_systemdsystemunitdir]) fi diff --git a/src/output/alsa_output_plugin.c b/src/output/alsa_output_plugin.c index 41293272d..af6d1b184 100644 --- a/src/output/alsa_output_plugin.c +++ b/src/output/alsa_output_plugin.c @@ -193,6 +193,9 @@ static snd_pcm_format_t get_bitformat(enum sample_format sample_format) { switch (sample_format) { + case SAMPLE_FORMAT_UNDEFINED: + return SND_PCM_FORMAT_UNKNOWN; + case SAMPLE_FORMAT_S8: return SND_PCM_FORMAT_S8; @@ -209,10 +212,10 @@ get_bitformat(enum sample_format sample_format) case SAMPLE_FORMAT_S32: return SND_PCM_FORMAT_S32; - - default: - return SND_PCM_FORMAT_UNKNOWN; } + + assert(false); + return SND_PCM_FORMAT_UNKNOWN; } static snd_pcm_format_t diff --git a/src/output/openal_output_plugin.c b/src/output/openal_output_plugin.c index 1473659f0..622cf559e 100644 --- a/src/output/openal_output_plugin.c +++ b/src/output/openal_output_plugin.c @@ -67,26 +67,26 @@ openal_audio_format(struct audio_format *audio_format) return AL_FORMAT_STEREO16; if (audio_format->channels == 1) return AL_FORMAT_MONO16; - break; + + /* fall back to mono */ + 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; - break; + + /* 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; - if (audio_format->channels == 2) - return AL_FORMAT_STEREO16; - if (audio_format->channels == 1) - return AL_FORMAT_MONO16; - break; + return openal_audio_format(audio_format); } - - return 0; } static bool |