File alsa-lib-git-fixes.diff of Package alsa

diff --git a/configure.in b/configure.in
index e96058b..3cd6366 100644
--- a/configure.in
+++ b/configure.in
@@ -12,7 +12,7 @@ dnl add API = c+1:0:a+1
 dnl remove API = c+1:0:0
 dnl *************************************************
 AC_CANONICAL_HOST
-AM_INIT_AUTOMAKE(alsa-lib, 1.0.21)
+AM_INIT_AUTOMAKE(alsa-lib, 1.0.21a)
 eval LIBTOOL_VERSION_INFO="2:0:0"
 dnl *************************************************
 AM_CONDITIONAL(INSTALL_M4, test -n "${ACLOCAL}")
diff --git a/src/conf.c b/src/conf.c
index 3f0dfe1..570c90f 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -3477,8 +3477,9 @@ int snd_config_hook_load_for_all_cards(snd_config_t *root, snd_config_t *config,
 			err = snd_determine_driver(card, &fdriver);
 			if (err < 0)
 				return err;
-			if (snd_config_search(root, fdriver, &n) >= 0 &&
-			    snd_config_get_string(n, &driver) >= 0) {
+			if (snd_config_search(root, fdriver, &n) >= 0) {
+				if (snd_config_get_string(n, &driver) < 0)
+					goto __err;
 				assert(driver);
 				while (1) {
 					char *s = strchr(driver, '.');
diff --git a/src/conf/pcm/dmix.conf b/src/conf/pcm/dmix.conf
index 4108ddb..e62cb29 100644
--- a/src/conf/pcm/dmix.conf
+++ b/src/conf/pcm/dmix.conf
@@ -63,12 +63,12 @@ pcm.!dmix {
 			name {
 				@func concat
 				strings [
-					"cards."
+					"defaults.dmix."
 					{
 						@func card_driver
 						card $CARD
 					}
-					".pcm.dmix.period_size"
+					".period_size"
 				]
 			}
 			default 1024
@@ -78,12 +78,12 @@ pcm.!dmix {
 			name {
 				@func concat
 				strings [
-					"cards."
+					"defaults.dmix."
 					{
 						@func card_driver
 						card $CARD
 					}
-					".pcm.dmix.period_time"
+					".period_time"
 				]
 			}
 			default -1
@@ -93,12 +93,12 @@ pcm.!dmix {
 			name {
 				@func concat
 				strings [
-					"cards."
+					"defaults.dmix."
 					{
 						@func card_driver
 						card $CARD
 					}
-					".pcm.dmix.periods"
+					".periods"
 				]
 			}
 			default 16
diff --git a/src/mixer/simple_none.c b/src/mixer/simple_none.c
index 4802200..9259a08 100644
--- a/src/mixer/simple_none.c
+++ b/src/mixer/simple_none.c
@@ -134,6 +134,7 @@ static int get_compare_weight(const char *name, unsigned int idx)
 	static const char *const names[] = {
 		"Master",
 		"Headphone",
+		"Speaker",
 		"Tone",
 		"Bass",
 		"Treble",
@@ -158,6 +159,7 @@ static int get_compare_weight(const char *name, unsigned int idx)
 		"I2S",
 		"IEC958",
 		"PC Speaker",
+		"Beep",
 		"Aux",
 		"Mono",
 		"Playback",
diff --git a/src/pcm/pcm_params.c b/src/pcm/pcm_params.c
index 80b3fd2..0e1c3fc 100644
--- a/src/pcm/pcm_params.c
+++ b/src/pcm/pcm_params.c
@@ -1081,6 +1081,7 @@ int snd_pcm_hw_param_never_eq(const snd_pcm_hw_params_t *params,
 static int snd_pcm_hw_params_choose(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
 {
 	int err;
+	const char *compat = getenv("LIBASOUND_COMPAT");
 #ifdef CHOOSE_DEBUG
 	snd_output_t *log;
 	snd_output_stdio_attach(&log, stderr, 0);
@@ -1103,15 +1104,29 @@ static int snd_pcm_hw_params_choose(snd_pcm_t *pcm, snd_pcm_hw_params_t *params)
 	err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_RATE, NULL, 0);
 	if (err < 0)
 		return err;
-	err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_TIME, NULL, 0);
-	if (err < 0)
-		return err;
-	err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_SIZE, NULL, 0);
-	if (err < 0)
-		return err;
-	err = snd_pcm_hw_param_set_last(pcm, params, SND_PCM_HW_PARAM_BUFFER_SIZE, NULL, 0);
-	if (err < 0)
-		return err;
+	if (compat && *compat) {
+		/* old mode */
+		err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_TIME, NULL, 0);
+		if (err < 0)
+			return err;
+		err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_SIZE, NULL, 0);
+		if (err < 0)
+			return err;
+		err = snd_pcm_hw_param_set_last(pcm, params, SND_PCM_HW_PARAM_BUFFER_SIZE, NULL, 0);
+		if (err < 0)
+			return err;
+	} else {
+		/* determine buffer size first */
+		err = snd_pcm_hw_param_set_last(pcm, params, SND_PCM_HW_PARAM_BUFFER_SIZE, NULL, 0);
+		if (err < 0)
+			return err;
+		err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_SIZE, NULL, 0);
+		if (err < 0)
+			return err;
+		err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_PERIOD_TIME, NULL, 0);
+		if (err < 0)
+			return err;
+	}
 	err = snd_pcm_hw_param_set_first(pcm, params, SND_PCM_HW_PARAM_TICK_TIME, NULL, 0);
 	if (err < 0)
 		return err;
openSUSE Build Service is sponsored by