diff --git a/.files b/.files index 75ae81e..363a79d 100644 Binary files a/.files and b/.files differ diff --git a/.rev b/.rev index bd3857c..33ef97d 100644 --- a/.rev +++ b/.rev @@ -1613,4 +1613,12 @@ 796547 + + 840c0caead9a5e6c5569b3e0ed4437f3 + 1.2.2 + + dimstar_suse + + 800956 + diff --git a/0017-pcm-rate-fix-the-remaining-size-calculation-in-snd_p.patch b/0017-pcm-rate-fix-the-remaining-size-calculation-in-snd_p.patch new file mode 100644 index 0000000..4d3d62f --- /dev/null +++ b/0017-pcm-rate-fix-the-remaining-size-calculation-in-snd_p.patch @@ -0,0 +1,27 @@ +From a43074ba17dd46878c7be447a50f9c4b5311929b Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Thu, 23 Apr 2020 13:43:32 +0200 +Subject: [PATCH 17/21] pcm: rate - fix the remaining size calculation in + snd_pcm_rate_drain() + +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_rate.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c +index fdcaa8de7382..21611f62c370 100644 +--- a/src/pcm/pcm_rate.c ++++ b/src/pcm/pcm_rate.c +@@ -1060,6 +1060,8 @@ static int snd_pcm_rate_drain(snd_pcm_t *pcm) + snd_pcm_sw_params(rate->gen.slave, &sw_params); + + size = rate->appl_ptr - rate->last_commit_ptr; ++ if (size > pcm->boundary) ++ size -= pcm->boundary; + ofs = rate->last_commit_ptr % pcm->buffer_size; + while (size > 0) { + snd_pcm_uframes_t psize, spsize; +-- +2.16.4 + diff --git a/0018-use-case.h-add-USB-as-allowed-device-name.patch b/0018-use-case.h-add-USB-as-allowed-device-name.patch new file mode 100644 index 0000000..ead18fb --- /dev/null +++ b/0018-use-case.h-add-USB-as-allowed-device-name.patch @@ -0,0 +1,28 @@ +From 4327660c7154344a0c6075d5a665a4e5b89fc78d Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Tue, 28 Apr 2020 12:58:41 +0200 +Subject: [PATCH 18/21] use-case.h: add USB as allowed device name + +Some USB devices are really generic where the +PCM stream can be routed to different paths. + +Signed-off-by: Jaroslav Kysela +--- + include/use-case.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/use-case.h b/include/use-case.h +index c2ba79a9fdb1..21df1de472d6 100644 +--- a/include/use-case.h ++++ b/include/use-case.h +@@ -140,6 +140,7 @@ extern "C" { + #define SND_USE_CASE_DEV_EARPIECE "Earpiece" /**< Earpiece Device */ + #define SND_USE_CASE_DEV_SPDIF "SPDIF" /**< SPDIF Device */ + #define SND_USE_CASE_DEV_HDMI "HDMI" /**< HDMI Device */ ++#define SND_USE_CASE_DEV_USB "USB" /**< USB Device (multifunctional) */ + /* add new devices to end of list */ + + +-- +2.16.4 + diff --git a/0019-topology-Use-bool-parser-to-parse-boolean-value.patch b/0019-topology-Use-bool-parser-to-parse-boolean-value.patch new file mode 100644 index 0000000..8cda11e --- /dev/null +++ b/0019-topology-Use-bool-parser-to-parse-boolean-value.patch @@ -0,0 +1,35 @@ +From 496e239e65ecdab94358281b3b1346634a1476ef Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Amadeusz=20S=C5=82awi=C5=84ski?= + +Date: Fri, 17 Apr 2020 12:47:47 -0400 +Subject: [PATCH 19/21] topology: Use bool parser to parse boolean value +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It should be safe to change this as correct values with int would be 0 +or 1 and bool parser handles them correctly. + +Signed-off-by: Amadeusz Sławiński +Signed-off-by: Jaroslav Kysela +--- + src/topology/dapm.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/topology/dapm.c b/src/topology/dapm.c +index 70645126d0bc..cd1a87704681 100644 +--- a/src/topology/dapm.c ++++ b/src/topology/dapm.c +@@ -595,7 +595,8 @@ int tplg_parse_dapm_widget(snd_tplg_t *tplg, + } + + if (strcmp(id, "invert") == 0) { +- if (tplg_get_integer(n, &ival, 0)) ++ ival = snd_config_get_bool(n); ++ if (ival < 0) + return -EINVAL; + + widget->invert = ival; +-- +2.16.4 + diff --git a/0020-fix-infinite-draining-of-the-rate-plugin-in-SND_PCM_.patch b/0020-fix-infinite-draining-of-the-rate-plugin-in-SND_PCM_.patch new file mode 100644 index 0000000..11e115d --- /dev/null +++ b/0020-fix-infinite-draining-of-the-rate-plugin-in-SND_PCM_.patch @@ -0,0 +1,64 @@ +From 29041c522071172af2c6bf086b3a0c19510a6660 Mon Sep 17 00:00:00 2001 +From: "sylvain.bertrand@gmail.com" +Date: Tue, 28 Apr 2020 12:09:18 +0000 +Subject: [PATCH 20/21] fix infinite draining of the rate plugin in + SND_PCM_NONBLOCK mode + +The draining function of the rate plugin does not handle properly the +SND_PCM_NONBLOCK case. It can write data to the slave plugin each time the +function is called, but does not update its internal state in order to +reach a stopping condition. Use a last_commit_ptr workaround to reach such +condition. + +Signed-off-by: Sylvain BERTRAND +Signed-off-by: Jaroslav Kysela +--- + src/pcm/pcm_rate.c | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/pcm/pcm_rate.c b/src/pcm/pcm_rate.c +index 21611f62c370..4f99a95b325f 100644 +--- a/src/pcm/pcm_rate.c ++++ b/src/pcm/pcm_rate.c +@@ -1051,6 +1051,7 @@ static int snd_pcm_rate_drain(snd_pcm_t *pcm) + /* commit the remaining fraction (if any) */ + snd_pcm_uframes_t size, ofs, saved_avail_min; + snd_pcm_sw_params_t sw_params; ++ int commit_err; + + __snd_pcm_lock(pcm); + /* temporarily set avail_min to one */ +@@ -1079,14 +1080,29 @@ static int snd_pcm_rate_drain(snd_pcm_t *pcm) + if (! spsize) + break; + } +- snd_pcm_rate_commit_area(pcm, rate, ofs, ++ commit_err = snd_pcm_rate_commit_area(pcm, rate, ofs, + psize, spsize); ++ if (commit_err == 1) { ++ rate->last_commit_ptr += psize; ++ if (rate->last_commit_ptr >= pcm->boundary) ++ rate->last_commit_ptr = 0; ++ } else if (commit_err == 0) { ++ if (pcm->mode & SND_PCM_NONBLOCK != 0) { ++ commit_err = -EAGAIN; ++ break; ++ } ++ continue; ++ } else ++ break; ++ + ofs = (ofs + psize) % pcm->buffer_size; + size -= psize; + } + sw_params.avail_min = saved_avail_min; + snd_pcm_sw_params(rate->gen.slave, &sw_params); + __snd_pcm_unlock(pcm); ++ if (commit_err < 0) ++ return commit_err; + } + return snd_pcm_drain(rate->gen.slave); + } +-- +2.16.4 + diff --git a/0021-test-pcm_min-add-snd_pcm_drain-call-and-indentation-.patch b/0021-test-pcm_min-add-snd_pcm_drain-call-and-indentation-.patch new file mode 100644 index 0000000..1460cfb --- /dev/null +++ b/0021-test-pcm_min-add-snd_pcm_drain-call-and-indentation-.patch @@ -0,0 +1,93 @@ +From 21e2fc3857b842e8b47f77da785248edbaa69f5f Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Sun, 3 May 2020 20:07:29 +0200 +Subject: [PATCH 21/21] test: pcm_min - add snd_pcm_drain() call and + indentation fixes + +Fixes: https://github.com/alsa-project/alsa-lib/issues/46 +Signed-off-by: Jaroslav Kysela +--- + test/pcm_min.c | 50 ++++++++++++++++++++++++++------------------------ + 1 file changed, 26 insertions(+), 24 deletions(-) + +diff --git a/test/pcm_min.c b/test/pcm_min.c +index 7462a45fef33..4c120b4c2b27 100644 +--- a/test/pcm_min.c ++++ b/test/pcm_min.c +@@ -5,47 +5,49 @@ + #include "../include/asoundlib.h" + + static char *device = "default"; /* playback device */ +- +-snd_output_t *output = NULL; + unsigned char buffer[16*1024]; /* some random data */ + + int main(void) + { +- int err; +- unsigned int i; +- snd_pcm_t *handle; +- snd_pcm_sframes_t frames; ++ int err; ++ unsigned int i; ++ snd_pcm_t *handle; ++ snd_pcm_sframes_t frames; + +- for (i = 0; i < sizeof(buffer); i++) +- buffer[i] = random() & 0xff; ++ for (i = 0; i < sizeof(buffer); i++) ++ buffer[i] = random() & 0xff; + + if ((err = snd_pcm_open(&handle, device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) { + printf("Playback open error: %s\n", snd_strerror(err)); + exit(EXIT_FAILURE); + } + if ((err = snd_pcm_set_params(handle, +- SND_PCM_FORMAT_U8, +- SND_PCM_ACCESS_RW_INTERLEAVED, +- 1, +- 48000, +- 1, +- 500000)) < 0) { /* 0.5sec */ ++ SND_PCM_FORMAT_U8, ++ SND_PCM_ACCESS_RW_INTERLEAVED, ++ 1, ++ 48000, ++ 1, ++ 500000)) < 0) { /* 0.5sec */ + printf("Playback open error: %s\n", snd_strerror(err)); + exit(EXIT_FAILURE); + } + + for (i = 0; i < 16; i++) { +- frames = snd_pcm_writei(handle, buffer, sizeof(buffer)); +- if (frames < 0) +- frames = snd_pcm_recover(handle, frames, 0); +- if (frames < 0) { +- printf("snd_pcm_writei failed: %s\n", snd_strerror(frames)); +- break; +- } +- if (frames > 0 && frames < (long)sizeof(buffer)) +- printf("Short write (expected %li, wrote %li)\n", (long)sizeof(buffer), frames); +- } ++ frames = snd_pcm_writei(handle, buffer, sizeof(buffer)); ++ if (frames < 0) ++ frames = snd_pcm_recover(handle, frames, 0); ++ if (frames < 0) { ++ printf("snd_pcm_writei failed: %s\n", snd_strerror(frames)); ++ break; ++ } ++ if (frames > 0 && frames < (long)sizeof(buffer)) ++ printf("Short write (expected %li, wrote %li)\n", (long)sizeof(buffer), frames); ++ } + ++ /* pass the remaining samples, otherwise they're dropped in close */ ++ err = snd_pcm_drain(handle); ++ if (err < 0) ++ printf("snd_pcm_drain failed: %s\n", snd_strerror(err)); + snd_pcm_close(handle); + return 0; + } +-- +2.16.4 + diff --git a/alsa.changes b/alsa.changes index 9315a82..0a6cf96 100644 --- a/alsa.changes +++ b/alsa.changes @@ -1,4 +1,21 @@ ------------------------------------------------------------------- +Wed May 6 16:01:32 CEST 2020 - tiwai@suse.de + +- Revert a problematic namehint change (boo#1171044) + +------------------------------------------------------------------- +Wed May 6 12:16:00 CEST 2020 - tiwai@suse.de + +- Backport upstream fixes: + fixes for PCM rate plugin, draining fix, topology parameter parser + fix, USB device name for UCM: + 0017-pcm-rate-fix-the-remaining-size-calculation-in-snd_p.patch + 0018-use-case.h-add-USB-as-allowed-device-name.patch + 0019-topology-Use-bool-parser-to-parse-boolean-value.patch + 0020-fix-infinite-draining-of-the-rate-plugin-in-SND_PCM_.patch + 0021-test-pcm_min-add-snd_pcm_drain-call-and-indentation-.patch + +------------------------------------------------------------------- Mon Apr 20 17:55:24 CEST 2020 - tiwai@suse.de - Backport recent upstream fixes: diff --git a/alsa.spec b/alsa.spec index aa518a9..65136e3 100644 --- a/alsa.spec +++ b/alsa.spec @@ -64,6 +64,11 @@ Patch13: 0013-ucm-fix-the-device-remove-operation.patch Patch14: 0014-ucm-fix-copy-n-paste-typo-RemoveDevice-list.patch Patch15: 0015-pcm-dmix-fix-sw_params-handling-of-timestamp-types-i.patch Patch16: 0016-conf-USB-Audio-Fix-S-PDIF-output-of-ASUS-Xonar-AE.patch +Patch17: 0017-pcm-rate-fix-the-remaining-size-calculation-in-snd_p.patch +Patch18: 0018-use-case.h-add-USB-as-allowed-device-name.patch +Patch19: 0019-topology-Use-bool-parser-to-parse-boolean-value.patch +Patch20: 0020-fix-infinite-draining-of-the-rate-plugin-in-SND_PCM_.patch +Patch21: 0021-test-pcm_min-add-snd_pcm_drain-call-and-indentation-.patch # rest suse fixes Patch101: alsa-lib-ignore-non-accessible-ALSA_CONFIG_PATH.patch BuildRequires: doxygen @@ -157,13 +162,21 @@ This package contains the library for ALSA topology support. %patch7 -p1 %patch8 -p1 %patch9 -p1 +# causing a regression for capture streams on some apps (boo#1171044) +%if 0 %patch10 -p1 +%endif %patch11 -p1 %patch12 -p1 %patch13 -p1 %patch14 -p1 %patch15 -p1 %patch16 -p1 +%patch17 -p1 +%patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 %patch101 -p1 %build