From 5ed0eb51d16507dcca9764771af8f05f08a078f9 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Sat, 8 Oct 2011 14:39:40 +0200
Subject: [PATCH] output/openal: auto-fallback to mono if channel count is
 unsupported

.. instead of failing playback completely.
---
 NEWS                       |  2 ++
 src/output/openal_plugin.c | 18 +++++++++---------
 2 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/NEWS b/NEWS
index 17169a617..725d3801c 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,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/src/output/openal_plugin.c b/src/output/openal_plugin.c
index 767b3eb17..0a8f253b2 100644
--- a/src/output/openal_plugin.c
+++ b/src/output/openal_plugin.c
@@ -64,26 +64,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