Hello community,

here is the log from the commit of package alsa for openSUSE:Factory checked in 
at 2020-05-09 19:51:51
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/alsa (Old)
 and      /work/SRC/openSUSE:Factory/.alsa.new.2738 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "alsa"

Sat May  9 19:51:51 2020 rev:200 rq:800956 version:1.2.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/alsa/alsa.changes        2020-04-27 
23:30:15.646572556 +0200
+++ /work/SRC/openSUSE:Factory/.alsa.new.2738/alsa.changes      2020-05-09 
19:52:03.516799785 +0200
@@ -1,0 +2,17 @@
+Wed May  6 16:01:32 CEST 2020 - [email protected]
+
+- Revert a problematic namehint change (boo#1171044)
+
+-------------------------------------------------------------------
+Wed May  6 12:16:00 CEST 2020 - [email protected]
+
+- 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
+
+-------------------------------------------------------------------

New:
----
  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

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ alsa.spec ++++++
--- /var/tmp/diff_new_pack.EnbMo6/_old  2020-05-09 19:52:04.688802300 +0200
+++ /var/tmp/diff_new_pack.EnbMo6/_new  2020-05-09 19:52:04.692802309 +0200
@@ -64,6 +64,11 @@
 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 @@
 %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

++++++ 0017-pcm-rate-fix-the-remaining-size-calculation-in-snd_p.patch ++++++
>From a43074ba17dd46878c7be447a50f9c4b5311929b Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <[email protected]>
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 <[email protected]>
---
 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

++++++ 0018-use-case.h-add-USB-as-allowed-device-name.patch ++++++
>From 4327660c7154344a0c6075d5a665a4e5b89fc78d Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <[email protected]>
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 <[email protected]>
---
 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

++++++ 0019-topology-Use-bool-parser-to-parse-boolean-value.patch ++++++
>From 496e239e65ecdab94358281b3b1346634a1476ef Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Amadeusz=20S=C5=82awi=C5=84ski?=
 <[email protected]>
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 <[email protected]>
Signed-off-by: Jaroslav Kysela <[email protected]>
---
 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

++++++ 0020-fix-infinite-draining-of-the-rate-plugin-in-SND_PCM_.patch ++++++
>From 29041c522071172af2c6bf086b3a0c19510a6660 Mon Sep 17 00:00:00 2001
From: "[email protected]" <[email protected]>
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 <[email protected]>
Signed-off-by: Jaroslav Kysela <[email protected]>
---
 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

++++++ 0021-test-pcm_min-add-snd_pcm_drain-call-and-indentation-.patch ++++++
>From 21e2fc3857b842e8b47f77da785248edbaa69f5f Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <[email protected]>
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 <[email protected]>
---
 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





Reply via email to