alsa/alsa-lib-git-fixes.diff

150 lines
4.3 KiB
Diff

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;