Accepting request 899946 from multimedia:libs

OBS-URL: https://build.opensuse.org/request/show/899946
OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/alsa?expand=0&rev=211
This commit is contained in:
Dominique Leuenberger 2021-06-16 18:33:28 +00:00 committed by Git OBS Bridge
commit 8664723074
7 changed files with 15 additions and 209 deletions

View File

@ -1,97 +0,0 @@
From ddfc32abf5697de1618b9e7ffdf57a0f97013090 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Wed, 2 Jun 2021 08:49:32 +0200
Subject: [PATCH] conf: fix load_for_all_cards()
The 63f7745b commit is loading the driver specific configuration
multiple times which ends with the array merges (see the bug).
Introduce the loaded compound which traces the already loaded
driver configurations and skip the multiple load requests.
Fixes: https://github.com/alsa-project/alsa-lib/issues/143
Fixes: 63f7745b ("conf: extend load_for_all_cards hook (id/value table)")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/conf.c | 33 ++++++++++++++++++++++++++++-----
1 file changed, 28 insertions(+), 5 deletions(-)
diff --git a/src/conf.c b/src/conf.c
index f6c80031032e..d863dec637cf 100644
--- a/src/conf.c
+++ b/src/conf.c
@@ -4325,18 +4325,23 @@ static int _snd_config_hook_table(snd_config_t *root, snd_config_t *config, snd_
int snd_config_hook_load_for_all_cards(snd_config_t *root, snd_config_t *config, snd_config_t **dst, snd_config_t *private_data ATTRIBUTE_UNUSED)
{
int card = -1, err;
+ snd_config_t *loaded; // trace loaded cards
+ err = snd_config_top(&loaded);
+ if (err < 0)
+ return err;
do {
err = snd_card_next(&card);
if (err < 0)
- return err;
+ goto __fin_err;
if (card >= 0) {
- snd_config_t *n, *private_data = NULL;
+ snd_config_t *n, *m, *private_data = NULL;
const char *driver;
char *fdriver = NULL;
+ bool load;
err = snd_determine_driver(card, &fdriver);
if (err < 0)
- return err;
+ goto __fin_err;
if (snd_config_search(root, fdriver, &n) >= 0) {
if (snd_config_get_string(n, &driver) < 0) {
if (snd_config_get_type(n) == SND_CONFIG_TYPE_COMPOUND) {
@@ -4357,6 +4362,19 @@ int snd_config_hook_load_for_all_cards(snd_config_t *root, snd_config_t *config,
driver = fdriver;
}
__std:
+ load = true;
+ err = snd_config_imake_integer(&m, driver, 1);
+ if (err < 0)
+ goto __err;
+ err = snd_config_add(loaded, m);
+ if (err < 0) {
+ if (err == -EEXIST) {
+ snd_config_delete(m);
+ load = false;
+ } else {
+ goto __err;
+ }
+ }
private_data = _snd_config_hook_private_data(card, driver);
if (!private_data) {
err = -ENOMEM;
@@ -4365,17 +4383,22 @@ int snd_config_hook_load_for_all_cards(snd_config_t *root, snd_config_t *config,
err = _snd_config_hook_table(root, config, private_data);
if (err < 0)
goto __err;
- err = snd_config_hook_load(root, config, &n, private_data);
+ if (load)
+ err = snd_config_hook_load(root, config, &n, private_data);
__err:
if (private_data)
snd_config_delete(private_data);
free(fdriver);
if (err < 0)
- return err;
+ goto __fin_err;
}
} while (card >= 0);
+ snd_config_delete(loaded);
*dst = NULL;
return 0;
+__fin_err:
+ snd_config_delete(loaded);
+ return err;
}
#ifndef DOC_HIDDEN
SND_DLSYM_BUILD_VERSION(snd_config_hook_load_for_all_cards, SND_CONFIG_DLSYM_VERSION_HOOK);
--
2.26.2

View File

@ -1,68 +0,0 @@
From 0e4ba2ea8c0402f12a645032a14693eb9b1278e6 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Wed, 2 Jun 2021 11:09:43 +0200
Subject: [PATCH] ucm: add _alibpref to get the private device prefix
It may be useful to get the device prefix for the local configuration.
Link: https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/1251
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
include/use-case.h | 1 +
src/ucm/main.c | 21 +++++++++++++++++++++
2 files changed, 22 insertions(+)
diff --git a/include/use-case.h b/include/use-case.h
index ec1a97b01e71..7890358b8d8f 100644
--- a/include/use-case.h
+++ b/include/use-case.h
@@ -258,6 +258,7 @@ int snd_use_case_get_list(snd_use_case_mgr_t *uc_mgr,
* - _verb - return current verb
* - _file - return configuration file loaded for current card
* - _alibcfg - return private alsa-lib's configuration for current card
+ * - _alibpref - return private alsa-lib's configuration device prefix for current card
*
* - [=]{NAME}[/[{modifier}|{/device}][/{verb}]]
* - value identifier {NAME}
diff --git a/src/ucm/main.c b/src/ucm/main.c
index 361952f62830..3c9ea15d5642 100644
--- a/src/ucm/main.c
+++ b/src/ucm/main.c
@@ -2138,6 +2138,25 @@ static int get_alibcfg(snd_use_case_mgr_t *uc_mgr, char **str)
return 0;
}
+/**
+ * \brief Get device prefix for private alsa-lib configuration
+ * \param uc_mgr Use case manager
+ * \param str Returned value string
+ * \return Zero on success (value is filled), otherwise a negative error code
+ */
+static int get_alibpref(snd_use_case_mgr_t *uc_mgr, char **str)
+{
+ const size_t l = 9;
+ char *s;
+
+ s = malloc(l);
+ if (s == NULL)
+ return -ENOMEM;
+ snprintf(s, l, "_ucm%04X", uc_mgr->ucm_card_number);
+ *str = s;
+ return 0;
+}
+
/**
* \brief Get current - string
* \param uc_mgr Use case manager
@@ -2193,6 +2212,8 @@ int snd_use_case_get(snd_use_case_mgr_t *uc_mgr,
} else if (strcmp(identifier, "_alibcfg") == 0) {
err = get_alibcfg(uc_mgr, (char **)value);
+ } else if (strcmp(identifier, "_alibpref") == 0) {
+ err = get_alibpref(uc_mgr, (char **)value);
} else if (identifier[0] == '_') {
err = -ENOENT;
} else {
--
2.26.2

View File

@ -1,34 +0,0 @@
From 9621d0bff2e60b43e329ffa5059ab19f2914ec14 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Wed, 2 Jun 2021 11:21:54 +0200
Subject: [PATCH] ucm: fix _alibpref string (add '.' delimiter to the end)
Fixes: 0e4ba2ea ("ucm: add _alibpref to get the private device prefix")
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/ucm/main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/ucm/main.c b/src/ucm/main.c
index 3c9ea15d5642..c9b37b68b655 100644
--- a/src/ucm/main.c
+++ b/src/ucm/main.c
@@ -2146,13 +2146,13 @@ static int get_alibcfg(snd_use_case_mgr_t *uc_mgr, char **str)
*/
static int get_alibpref(snd_use_case_mgr_t *uc_mgr, char **str)
{
- const size_t l = 9;
+ const size_t l = 10;
char *s;
s = malloc(l);
if (s == NULL)
return -ENOMEM;
- snprintf(s, l, "_ucm%04X", uc_mgr->ucm_card_number);
+ snprintf(s, l, "_ucm%04X.", uc_mgr->ucm_card_number);
*str = s;
return 0;
}
--
2.26.2

3
alsa-lib-1.2.5.1.tar.bz2 Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:628421d950cecaf234de3f899d520c0a6923313c964ad751ffac081df331438e
size 1069073

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9092894a8c083b33acf8d6deb901b58f5d20d6da583789f814e8e46f2850ef18
size 1068496

View File

@ -1,3 +1,14 @@
-------------------------------------------------------------------
Mon Jun 14 14:58:05 CEST 2021 - tiwai@suse.de
- Update to version 1.2.5.1:
a bug fix release, including previous patches:
https://www.alsa-project.org/wiki/Changes_v1.2.5_v1.2.5.1
- Drop obsoleted patches:
0001-conf-fix-load_for_all_cards.patch
0002-ucm-add-_alibpref-to-get-the-private-device-prefix.patch
0003-ucm-fix-_alibpref-string-add-.-delimiter-to-the-end.patch
-------------------------------------------------------------------
Wed Jun 9 08:58:26 CEST 2021 - tiwai@suse.de

View File

@ -32,7 +32,7 @@
%endif
Name: alsa
Version: 1.2.5
Version: 1.2.5.1
Release: 0
Summary: Advanced Linux Sound Architecture
License: LGPL-2.1-or-later
@ -52,9 +52,6 @@ Source30: all_notes_off
Source31: all_notes_off.bin
Source32: all_notes_off.mid
Source34: alsa-init.sh
Patch1: 0001-conf-fix-load_for_all_cards.patch
Patch2: 0002-ucm-add-_alibpref-to-get-the-private-device-prefix.patch
Patch3: 0003-ucm-fix-_alibpref-string-add-.-delimiter-to-the-end.patch
# rest suse fixes
Patch101: alsa-lib-ignore-non-accessible-ALSA_CONFIG_PATH.patch
BuildRequires: doxygen
@ -143,9 +140,6 @@ This package contains the library for ALSA topology support.
%prep
%setup -q -n alsa-lib-%{version}
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch101 -p1
%build