Takashi Iwai
73989bbf02
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=40
150 lines
4.3 KiB
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;
|