From a458f2ccd85c99c43e4799a51deccce4366826f7 Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Nov 03 2020 12:00:32 +0000 Subject: import pulseaudio-13.99.1-1.el8 --- diff --git a/.gitignore b/.gitignore index 527e24f..628571a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/pulseaudio-11.1.tar.xz +SOURCES/pulseaudio-13.99.1.tar.xz diff --git a/.pulseaudio.metadata b/.pulseaudio.metadata index 70ef86f..b853168 100644 --- a/.pulseaudio.metadata +++ b/.pulseaudio.metadata @@ -1 +1 @@ -53bde72b6bfe715c19b1519db8845f7a58346b67 SOURCES/pulseaudio-11.1.tar.xz +3a8f0c81694eb423f7f9ab5f2cb16f81c0ffceb5 SOURCES/pulseaudio-13.99.1.tar.xz diff --git a/SOURCES/0001-X11-Add-xauthority-parameter.patch b/SOURCES/0001-X11-Add-xauthority-parameter.patch deleted file mode 100644 index 35cbd85..0000000 --- a/SOURCES/0001-X11-Add-xauthority-parameter.patch +++ /dev/null @@ -1,145 +0,0 @@ -From 2bb1f0dbd0772ba57ede8837c2f3856b4e7198c0 Mon Sep 17 00:00:00 2001 -From: Wim Taymans -Date: Thu, 12 Sep 2019 09:49:40 +0200 -Subject: [PATCH 1/3] X11: Add xauthority parameter - -Add an xauthority parameter and use it in the startup script. - -Based on patch by Alexander Kurtz ---- - src/daemon/start-pulseaudio-x11.in | 6 +++--- - src/modules/x11/module-x11-bell.c | 8 ++++++++ - src/modules/x11/module-x11-cork-request.c | 8 ++++++++ - src/modules/x11/module-x11-publish.c | 8 ++++++++ - src/modules/x11/module-x11-xsmp.c | 8 ++++++++ - 5 files changed, 35 insertions(+), 3 deletions(-) - -diff --git a/src/daemon/start-pulseaudio-x11.in b/src/daemon/start-pulseaudio-x11.in -index 15c79e187..2afa88563 100755 ---- a/src/daemon/start-pulseaudio-x11.in -+++ b/src/daemon/start-pulseaudio-x11.in -@@ -22,14 +22,14 @@ set -e - - if [ x"$DISPLAY" != x ] ; then - -- @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY" > /dev/null -- @PACTL_BINARY@ load-module module-x11-cork-request "display=$DISPLAY" > /dev/null -+ @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY xauthority=$XAUTHORITY" > /dev/null -+ @PACTL_BINARY@ load-module module-x11-cork-request "display=$DISPLAY xauthority=$XAUTHORITY" > /dev/null - - if [ x"$KDE_FULL_SESSION" = x"true" ]; then - @PACTL_BINARY@ load-module module-device-manager "do_routing=1" > /dev/null - fi - - if [ x"$SESSION_MANAGER" != x ] ; then -- @PACTL_BINARY@ load-module module-x11-xsmp "display=$DISPLAY session_manager=$SESSION_MANAGER" > /dev/null -+ @PACTL_BINARY@ load-module module-x11-xsmp "display=$DISPLAY xauthority=$XAUTHORITY session_manager=$SESSION_MANAGER" > /dev/null - fi - fi -diff --git a/src/modules/x11/module-x11-bell.c b/src/modules/x11/module-x11-bell.c -index 7b2be57bf..ec63c672f 100644 ---- a/src/modules/x11/module-x11-bell.c -+++ b/src/modules/x11/module-x11-bell.c -@@ -46,6 +46,7 @@ static const char* const valid_modargs[] = { - "sink", - "sample", - "display", -+ "xauthority", - NULL - }; - -@@ -127,6 +128,13 @@ int pa__init(pa_module*m) { - u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL)); - u->x11_client = NULL; - -+ if (pa_modargs_get_value(ma, "xauthority", NULL)) { -+ if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) { -+ pa_log("setenv() for $XAUTHORITY failed"); -+ goto fail; -+ } -+ } -+ - if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL)))) - goto fail; - -diff --git a/src/modules/x11/module-x11-cork-request.c b/src/modules/x11/module-x11-cork-request.c -index 5c76711f2..966907109 100644 ---- a/src/modules/x11/module-x11-cork-request.c -+++ b/src/modules/x11/module-x11-cork-request.c -@@ -48,6 +48,7 @@ PA_MODULE_USAGE("display="); - - static const char* const valid_modargs[] = { - "display", -+ "xauthority", - NULL - }; - -@@ -130,6 +131,13 @@ int pa__init(pa_module *m) { - m->userdata = u = pa_xnew0(struct userdata, 1); - u->module = m; - -+ if (pa_modargs_get_value(ma, "xauthority", NULL)) { -+ if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) { -+ pa_log("setenv() for $XAUTHORITY failed"); -+ goto fail; -+ } -+ } -+ - if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL)))) - goto fail; - -diff --git a/src/modules/x11/module-x11-publish.c b/src/modules/x11/module-x11-publish.c -index 553b3417e..fcf306bef 100644 ---- a/src/modules/x11/module-x11-publish.c -+++ b/src/modules/x11/module-x11-publish.c -@@ -58,6 +58,7 @@ static const char* const valid_modargs[] = { - "sink", - "source", - "cookie", -+ "xauthority", - NULL - }; - -@@ -158,6 +159,13 @@ int pa__init(pa_module*m) { - if (!(u->auth_cookie = pa_auth_cookie_get(m->core, pa_modargs_get_value(ma, "cookie", PA_NATIVE_COOKIE_FILE), true, PA_NATIVE_COOKIE_LENGTH))) - goto fail; - -+ if (pa_modargs_get_value(ma, "xauthority", NULL)) { -+ if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) { -+ pa_log("setenv() for $XAUTHORITY failed"); -+ goto fail; -+ } -+ } -+ - if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL)))) - goto fail; - -diff --git a/src/modules/x11/module-x11-xsmp.c b/src/modules/x11/module-x11-xsmp.c -index 29737c531..8f1d46ad3 100644 ---- a/src/modules/x11/module-x11-xsmp.c -+++ b/src/modules/x11/module-x11-xsmp.c -@@ -48,6 +48,7 @@ static bool ice_in_use = false; - static const char* const valid_modargs[] = { - "session_manager", - "display", -+ "xauthority", - NULL - }; - -@@ -141,6 +142,13 @@ int pa__init(pa_module*m) { - goto fail; - } - -+ if (pa_modargs_get_value(ma, "xauthority", NULL)) { -+ if (setenv("XAUTHORITY", pa_modargs_get_value(ma, "xauthority", NULL), 1)) { -+ pa_log("setenv() for $XAUTHORITY failed"); -+ goto fail; -+ } -+ } -+ - if (!(u->x11 = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL)))) - goto fail; - --- -2.21.0 - diff --git a/SOURCES/0001-qpaeq-fix-Qt5-mainloop-use.patch b/SOURCES/0001-qpaeq-fix-Qt5-mainloop-use.patch deleted file mode 100644 index 7e0e02f..0000000 --- a/SOURCES/0001-qpaeq-fix-Qt5-mainloop-use.patch +++ /dev/null @@ -1,35 +0,0 @@ -From ba2b748d40f78b9d9f945b5422ca74d05f8d0d07 Mon Sep 17 00:00:00 2001 -From: Felipe Sateler -Date: Wed, 11 Apr 2018 15:26:19 +0300 -Subject: [PATCH] qpaeq: fix Qt5 mainloop use - -This change was missed in the Qt4 -> Qt5 conversion. ---- - src/utils/qpaeq | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/utils/qpaeq b/src/utils/qpaeq -index 651d3a4e9..53b0ca3e3 100755 ---- a/src/utils/qpaeq -+++ b/src/utils/qpaeq -@@ -20,7 +20,7 @@ import os,math,sys - try: - import PyQt5,sip - from PyQt5 import QtWidgets,QtCore -- import dbus.mainloop.qt -+ import dbus.mainloop.pyqt5 - import dbus - except ImportError as e: - sys.stderr.write('There was an error importing needed libraries\n' -@@ -565,7 +565,7 @@ def subdivide(xs, t_points): - return left+right - - def main(): -- dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True) -+ dbus.mainloop.pyqt5.DBusQtMainLoop(set_as_default=True) - app=QtWidgets.QApplication(sys.argv) - qpaeq_main=QPaeq() - qpaeq_main.show() --- -2.17.1 - diff --git a/SOURCES/0002-alsa-Use-correct-header-path.patch b/SOURCES/0002-alsa-Use-correct-header-path.patch deleted file mode 100644 index 2a02d51..0000000 --- a/SOURCES/0002-alsa-Use-correct-header-path.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 24a9694bfb3734b410b81c4d1a4bdfe0ed16b00b Mon Sep 17 00:00:00 2001 -From: Olaf Hering -Date: Wed, 27 Mar 2019 09:35:05 +0100 -Subject: [PATCH 2/3] alsa: Use correct header path - -Consumers are expected to use instead of -. - -This is in preparation of an change to pkgconfig(alsa) to -not pollute CFLAGS with -I/usr/include/alsa anymore. - -Signed-off-by: Olaf Hering ---- - src/modules/alsa/alsa-mixer.c | 2 +- - src/modules/alsa/alsa-mixer.h | 2 +- - src/modules/alsa/alsa-sink.c | 2 +- - src/modules/alsa/alsa-source.c | 2 +- - src/modules/alsa/alsa-ucm.c | 2 +- - src/modules/alsa/alsa-util.c | 2 +- - src/modules/alsa/alsa-util.h | 2 +- - src/modules/alsa/module-alsa-source.c | 2 +- - 8 files changed, 8 insertions(+), 8 deletions(-) - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index 7de1c7deb..b2c50e611 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -23,7 +23,7 @@ - #endif - - #include --#include -+#include - #include - - #ifdef HAVE_VALGRIND_MEMCHECK_H -diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h -index 4ebf1922b..8474a3d19 100644 ---- a/src/modules/alsa/alsa-mixer.h -+++ b/src/modules/alsa/alsa-mixer.h -@@ -21,7 +21,7 @@ - along with PulseAudio; if not, see . - ***/ - --#include -+#include - - #include - #include -diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c -index 827a65081..9eb9913ff 100644 ---- a/src/modules/alsa/alsa-sink.c -+++ b/src/modules/alsa/alsa-sink.c -@@ -25,7 +25,7 @@ - #include - #include - --#include -+#include - - #ifdef HAVE_VALGRIND_MEMCHECK_H - #include -diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c -index 6bec188ea..ac919770a 100644 ---- a/src/modules/alsa/alsa-source.c -+++ b/src/modules/alsa/alsa-source.c -@@ -25,7 +25,7 @@ - #include - #include - --#include -+#include - - #include - #include -diff --git a/src/modules/alsa/alsa-ucm.c b/src/modules/alsa/alsa-ucm.c -index b42c04079..235276af2 100644 ---- a/src/modules/alsa/alsa-ucm.c -+++ b/src/modules/alsa/alsa-ucm.c -@@ -27,7 +27,7 @@ - #include - #include - #include --#include -+#include - - #ifdef HAVE_VALGRIND_MEMCHECK_H - #include -diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c -index 61fb4903c..f0e5b3642 100644 ---- a/src/modules/alsa/alsa-util.c -+++ b/src/modules/alsa/alsa-util.c -@@ -23,7 +23,7 @@ - #endif - - #include --#include -+#include - - #include - #include -diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h -index 8345a0ba5..24f8d70ee 100644 ---- a/src/modules/alsa/alsa-util.h -+++ b/src/modules/alsa/alsa-util.h -@@ -21,7 +21,7 @@ - along with PulseAudio; if not, see . - ***/ - --#include -+#include - - #include - #include -diff --git a/src/modules/alsa/module-alsa-source.c b/src/modules/alsa/module-alsa-source.c -index 45fb1aca8..bbf02af28 100644 ---- a/src/modules/alsa/module-alsa-source.c -+++ b/src/modules/alsa/module-alsa-source.c -@@ -24,7 +24,7 @@ - - #include - --#include -+#include - - #ifdef HAVE_VALGRIND_MEMCHECK_H - #include --- -2.21.0 - diff --git a/SOURCES/0003-alsa-Fix-inclusion-of-use-case.h.patch b/SOURCES/0003-alsa-Fix-inclusion-of-use-case.h.patch deleted file mode 100644 index d382b3c..0000000 --- a/SOURCES/0003-alsa-Fix-inclusion-of-use-case.h.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 93297a5a87014155540d19e4f619b57d86bcdf6d Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Sun, 21 Apr 2019 11:59:30 +0200 -Subject: [PATCH 3/3] alsa: Fix inclusion of use-case.h - -The recent change in ALSA upstream stripped -I$include/alsa path from -pkgconfig. We already fixed for this change in some places but still -the code for UCM was overlooked, and this resulted in the unresolved -symbols in alsa card module. Fix them as well. - -Signed-off-by: Takashi Iwai ---- - configure.ac | 2 +- - src/modules/alsa/alsa-ucm.h | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 3a71fd8c2..b09c138b4 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -830,7 +830,7 @@ AS_IF([test "x$enable_alsa" = "xyes" && test "x$HAVE_ALSA" = "x0"], - AS_IF([test "x$HAVE_ALSA" = "x1"], - [ - save_CPPFLAGS="$CPPFLAGS"; CPPFLAGS="$CPPFLAGS $ASOUNDLIB_CFLAGS" -- AC_CHECK_HEADERS([use-case.h], HAVE_ALSA_UCM=1, HAVE_ALSA_UCM=0) -+ AC_CHECK_HEADERS([alsa/use-case.h], HAVE_ALSA_UCM=1, HAVE_ALSA_UCM=0) - CPPFLAGS="$save_CPPFLAGS" - ], - HAVE_ALSA_UCM=0) -diff --git a/src/modules/alsa/alsa-ucm.h b/src/modules/alsa/alsa-ucm.h -index 53abf3f90..c926f3cc3 100644 ---- a/src/modules/alsa/alsa-ucm.h -+++ b/src/modules/alsa/alsa-ucm.h -@@ -23,7 +23,7 @@ - ***/ - - #ifdef HAVE_ALSA_UCM --#include -+#include - #else - typedef void snd_use_case_mgr_t; - #endif --- -2.21.0 - diff --git a/SOURCES/0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch b/SOURCES/0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch deleted file mode 100644 index 1d83034..0000000 --- a/SOURCES/0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch +++ /dev/null @@ -1,96 +0,0 @@ -From 60c0edd5286dbb731c671ad3e6886c1e3e1eb067 Mon Sep 17 00:00:00 2001 -From: Hui Wang -Date: Fri, 26 May 2017 15:42:40 +0800 -Subject: [PATCH 04/48] alsa-mixer: Add support for usb audio in the Dell dock - TB16 - -There are one headset jack on the front panel of TB16, through this -jack, we have one stereo headphone output (hw:%f,0,0) and one mono -headset-mic input (hw:%f,0,0); and there is one speaker output jack -(hw:%f,1,0) on the rear panel of TB16. - -The detail information of the Dell dock TB16: -http://www.dell.com/support/article/sg/en/sgbsdt1/SLN301105 - -Signed-off-by: Hui Wang ---- - .../alsa/mixer/profile-sets/90-pulseaudio.rules | 1 + - .../profile-sets/dell-dock-tb16-usb-audio.conf | 55 ++++++++++++++++++++++ - 2 files changed, 56 insertions(+) - create mode 100644 src/modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf - -diff --git a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -index 70e34e6f..805a05b2 100644 ---- a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -+++ b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -@@ -98,5 +98,6 @@ ATTRS{idVendor}=="17cc", ATTRS{idProduct}=="1021", ENV{PULSE_PROFILE_SET}="nativ - ATTRS{idVendor}=="0763", ATTRS{idProduct}=="2012", ENV{PULSE_PROFILE_SET}="maudio-fasttrack-pro.conf" - ATTRS{idVendor}=="045e", ATTRS{idProduct}=="02bb", ENV{PULSE_PROFILE_SET}="kinect-audio.conf" - ATTRS{idVendor}=="041e", ATTRS{idProduct}=="322c", ENV{PULSE_PROFILE_SET}="sb-omni-surround-5.1.conf" -+ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="4014", ENV{PULSE_PROFILE_SET}="dell-dock-tb16-usb-audio.conf" - - LABEL="pulseaudio_end" -diff --git a/src/modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf b/src/modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf -new file mode 100644 -index 00000000..11865524 ---- /dev/null -+++ b/src/modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf -@@ -0,0 +1,55 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, see . -+ -+; Dell Dock TB16 USB audio -+; -+; This card has two stereo pairs of output, One Mono input. -+; -+; See default.conf for an explanation on the directives used here. -+ -+[General] -+auto-profiles = no -+ -+[Mapping analog-stereo-headphone] -+description = Headphone -+device-strings = hw:%f,0,0 -+channel-map = left,right -+direction = output -+ -+[Mapping analog-stereo-speaker] -+description = Speaker -+device-strings = hw:%f,1,0 -+channel-map = left,right -+direction = output -+ -+[Mapping analog-stereo-mic] -+description = Headset-Mic -+device-strings = hw:%f,0,0 -+channel-map = left,right -+direction = input -+ -+ -+[Profile output:analog-stereo-speaker] -+description = Speaker -+output-mappings = analog-stereo-speaker -+priority = 60 -+skip-probe = yes -+ -+[Profile output:analog-stereo-headphone+input:analog-stereo-mic] -+description = Headset -+output-mappings = analog-stereo-headphone -+input-mappings = analog-stereo-mic -+priority = 80 -+skip-probe = yes --- -2.13.6 - diff --git a/SOURCES/0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch b/SOURCES/0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch deleted file mode 100644 index 4689456..0000000 --- a/SOURCES/0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch +++ /dev/null @@ -1,48 +0,0 @@ -From ec325304cdca5e2a46f5a84f93c8b614a204d87f Mon Sep 17 00:00:00 2001 -From: Tanu Kaskinen -Date: Fri, 4 Aug 2017 11:14:43 +0300 -Subject: [PATCH 09/48] alsa-mixer: set PCM Capture Source for iec958 input - -It was reported that on a certain USB card, identified as -"0d8c:0102 C-Media Electronics, Inc. CM106 Like Sound Device", -the "PCM Capture Source" element had to be set to "IEC958 In" before -the iec958 input would work. - -The iec958-stereo-input.conf file didn't exist before, although the path -was referenced in the default.conf profile configuration file. - -BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=101973 ---- - .../alsa/mixer/paths/iec958-stereo-input.conf | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) - create mode 100644 src/modules/alsa/mixer/paths/iec958-stereo-input.conf - -diff --git a/src/modules/alsa/mixer/paths/iec958-stereo-input.conf b/src/modules/alsa/mixer/paths/iec958-stereo-input.conf -new file mode 100644 -index 00000000..babc8398 ---- /dev/null -+++ b/src/modules/alsa/mixer/paths/iec958-stereo-input.conf -@@ -0,0 +1,20 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, see . -+ -+[Element PCM Capture Source] -+enumeration = select -+ -+[Option PCM Capture Source:IEC958 In] -+name = iec958-input --- -2.13.6 - diff --git a/SOURCES/0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch b/SOURCES/0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch deleted file mode 100644 index 3238bd5..0000000 --- a/SOURCES/0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 4e6d9e321400cbb660b4373db6b50bea71707641 Mon Sep 17 00:00:00 2001 -From: Tanu Kaskinen -Date: Fri, 4 Aug 2017 16:43:02 +0300 -Subject: [PATCH 10/48] build-sys: add iec958-stereo-input.conf to - dist_alsapaths_DATA - ---- - src/Makefile.am | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/Makefile.am b/src/Makefile.am -index 3ff1139f..1d974037 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -1343,6 +1343,7 @@ dist_alsapaths_DATA = \ - modules/alsa/mixer/paths/analog-output-headphones-2.conf \ - modules/alsa/mixer/paths/analog-output-lineout.conf \ - modules/alsa/mixer/paths/analog-output-mono.conf \ -+ modules/alsa/mixer/paths/iec958-stereo-input.conf \ - modules/alsa/mixer/paths/iec958-stereo-output.conf \ - modules/alsa/mixer/paths/hdmi-output-0.conf \ - modules/alsa/mixer/paths/hdmi-output-1.conf \ --- -2.13.6 - diff --git a/SOURCES/0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch b/SOURCES/0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch deleted file mode 100644 index 45fff8c..0000000 --- a/SOURCES/0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 739a4b3d2318f05eb7101c2baa861e5c636125a5 Mon Sep 17 00:00:00 2001 -From: Ian Ray -Date: Wed, 30 Aug 2017 11:09:48 +0300 -Subject: [PATCH 15/48] alsa-mixer: round, not truncate, in to_alsa_dB - -to_alsa_dB() returns a result rounded to two decimal places (instead of -using integer truncation) to avoid small errors when converting between -dB and volume. - -Consider playback at -22 dB (which is supported by ALSA) but results in -the higher level of -21 dB plus software attenuation. - - pa_sw_volume_from_dB(-22) = 28172 - pa_sw_volume_to_dB(28172) = -21.9997351 - to_alsa_dB(-21.9997351) = -2199 - - ALSA value 106 = -2200 - ALSA value 107 = -2100 - ... - - rounding = +1 /* "accurate or first above" */ - snd_mixer_selem_ask_playback_dB_vol(me, -2199, rounding, &alsa_val) - alsa_val = -2100 - -Signed-off-by: Ian Ray ---- - src/modules/alsa/alsa-mixer.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index f59cad39..aeaf12c4 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -700,7 +700,7 @@ void pa_alsa_path_set_free(pa_alsa_path_set *ps) { - } - - static long to_alsa_dB(pa_volume_t v) { -- return (long) (pa_sw_volume_to_dB(v) * 100.0); -+ return lround(pa_sw_volume_to_dB(v) * 100.0); - } - - static pa_volume_t from_alsa_dB(long v) { --- -2.13.6 - diff --git a/SOURCES/0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch b/SOURCES/0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch deleted file mode 100644 index 55e65b8..0000000 --- a/SOURCES/0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch +++ /dev/null @@ -1,193 +0,0 @@ -From 15386a710c1500f70085a6312fb4d84be4d254c9 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Johan=20Heikkil=C3=A4?= -Date: Sun, 27 Aug 2017 16:29:37 +0300 -Subject: [PATCH 16/48] alsa-mixer: add support for Steelseries Arctis 7 - headset - ---- - src/modules/alsa/alsa-mixer.c | 1 + - .../alsa/mixer/paths/steelseries-arctis-input.conf | 25 +++++++++++++ - .../paths/steelseries-arctis-output-mono.conf | 29 +++++++++++++++ - .../paths/steelseries-arctis-output-stereo.conf | 27 ++++++++++++++ - .../alsa/mixer/profile-sets/90-pulseaudio.rules | 1 + - .../profile-sets/steelseries-arctis-usb-audio.conf | 43 ++++++++++++++++++++++ - 6 files changed, 126 insertions(+) - create mode 100644 src/modules/alsa/mixer/paths/steelseries-arctis-input.conf - create mode 100644 src/modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf - create mode 100644 src/modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf - create mode 100644 src/modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index aeaf12c4..08ea45d3 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -2469,6 +2469,7 @@ static int path_verify(pa_alsa_path *p) { - { "analog-input-video", N_("Video") }, - { "analog-output", N_("Analog Output") }, - { "analog-output-headphones", N_("Headphones") }, -+ { "analog-output-headphones-mono", N_("Headphones Mono Output") }, - { "analog-output-lfe-on-mono", N_("LFE on Separate Mono Output") }, - { "analog-output-lineout", N_("Line Out") }, - { "analog-output-mono", N_("Analog Mono Output") }, -diff --git a/src/modules/alsa/mixer/paths/steelseries-arctis-input.conf b/src/modules/alsa/mixer/paths/steelseries-arctis-input.conf -new file mode 100644 -index 00000000..f3115ba6 ---- /dev/null -+++ b/src/modules/alsa/mixer/paths/steelseries-arctis-input.conf -@@ -0,0 +1,25 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, see . -+ -+; Steelseries Arctis 7 USB headset microphone path. -+ -+[General] -+description-key = analog-input-microphone-headset -+ -+[Element Headset] -+volume = merge -+switch = mute -+override-map.1 = all -+override-map.2 = all-left,all-right -diff --git a/src/modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf b/src/modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf -new file mode 100644 -index 00000000..67950618 ---- /dev/null -+++ b/src/modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf -@@ -0,0 +1,29 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, see . -+ -+; Steelseries Arctis 7 USB headset mono output path. The headset has two -+; output devices. The first one is mono, meant for voice audio, and the -+; second one is stereo, meant for everything else. The purpose of this -+; unusual design is to provide separate volume controls for voice and -+; other audio, which can be useful in gaming. -+ -+[General] -+description-key = analog-output-headphones-mono -+ -+[Element PCM] -+volume = merge -+switch = mute -+override-map.1 = all -+override-map.2 = all-left,all-right -diff --git a/src/modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf b/src/modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf -new file mode 100644 -index 00000000..4e10c800 ---- /dev/null -+++ b/src/modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf -@@ -0,0 +1,27 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, see . -+ -+; Steelseries Arctis 7 USB headset stereo output path. The headset has two -+; output devices. The first one is mono, meant for voice audio, and the -+; second one is stereo, meant for everything else. The purpose of this -+; unusual design is to provide separate volume controls for voice and -+; other audio, which can be useful in gaming. -+; -+; This path doesn't provide hardware volume control, because the stereo -+; output is controlled by the PCM element with index 1, and currently -+; PulseAudio only supports elements with index 0. -+ -+[General] -+description-key = analog-output-headphones -diff --git a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -index 805a05b2..2392ca50 100644 ---- a/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -+++ b/src/modules/alsa/mixer/profile-sets/90-pulseaudio.rules -@@ -99,5 +99,6 @@ ATTRS{idVendor}=="0763", ATTRS{idProduct}=="2012", ENV{PULSE_PROFILE_SET}="maudi - ATTRS{idVendor}=="045e", ATTRS{idProduct}=="02bb", ENV{PULSE_PROFILE_SET}="kinect-audio.conf" - ATTRS{idVendor}=="041e", ATTRS{idProduct}=="322c", ENV{PULSE_PROFILE_SET}="sb-omni-surround-5.1.conf" - ATTRS{idVendor}=="0bda", ATTRS{idProduct}=="4014", ENV{PULSE_PROFILE_SET}="dell-dock-tb16-usb-audio.conf" -+ATTRS{idVendor}=="1038", ATTRS{idProduct}=="1260", ENV{PULSE_PROFILE_SET}="steelseries-arctis-usb-audio.conf" - - LABEL="pulseaudio_end" -diff --git a/src/modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf b/src/modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf -new file mode 100644 -index 00000000..d3563a16 ---- /dev/null -+++ b/src/modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf -@@ -0,0 +1,43 @@ -+# This file is part of PulseAudio. -+# -+# PulseAudio is free software; you can redistribute it and/or modify -+# it under the terms of the GNU Lesser General Public License as -+# published by the Free Software Foundation; either version 2.1 of the -+# License, or (at your option) any later version. -+# -+# PulseAudio is distributed in the hope that it will be useful, but -+# WITHOUT ANY WARRANTY; without even the implied warranty of -+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+# General Public License for more details. -+# -+# You should have received a copy of the GNU Lesser General Public License -+# along with PulseAudio; if not, see . -+ -+; Steelseries Arctis 7 USB headset. The headset has a microphone and two output -+; devices. The first output device is mono, meant for voice audio, and the -+; second one is stereo, meant for everything else. The purpose of this unusual -+; design is to provide separate volume controls for voice and other audio, -+; which can be useful in gaming. -+; -+; See default.conf for an explanation on the directives used here. -+ -+[General] -+auto-profiles = yes -+ -+[Mapping analog-mono] -+device-strings = hw:%f,0,0 -+channel-map = mono -+paths-output = steelseries-arctis-output-mono -+paths-input = steelseries-arctis-input -+ -+[Mapping analog-stereo] -+device-strings = hw:%f,1,0 -+channel-map = left,right -+paths-output = steelseries-arctis-output-stereo -+direction = output -+ -+[Profile output:analog-mono+output:analog-stereo+input:analog-mono] -+output-mappings = analog-mono analog-stereo -+input-mappings = analog-mono -+priority = 5100 -+skip-probe = yes --- -2.13.6 - diff --git a/SOURCES/0018-build-sys-add-the-Arctis-configuration.patch b/SOURCES/0018-build-sys-add-the-Arctis-configuration.patch deleted file mode 100644 index 948aa38..0000000 --- a/SOURCES/0018-build-sys-add-the-Arctis-configuration.patch +++ /dev/null @@ -1,38 +0,0 @@ -From c7fe78c9f73ded2c3428666722ec9c1af4b82812 Mon Sep 17 00:00:00 2001 -From: Tanu Kaskinen -Date: Sat, 2 Sep 2017 18:23:12 +0300 -Subject: [PATCH 18/48] build-sys: add the Arctis configuration - ---- - src/Makefile.am | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/Makefile.am b/src/Makefile.am -index 1d974037..ba2ea97e 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -1310,7 +1310,8 @@ dist_alsaprofilesets_DATA = \ - modules/alsa/mixer/profile-sets/native-instruments-traktorkontrol-s4.conf \ - modules/alsa/mixer/profile-sets/native-instruments-korecontroller.conf \ - modules/alsa/mixer/profile-sets/kinect-audio.conf \ -- modules/alsa/mixer/profile-sets/sb-omni-surround-5.1.conf -+ modules/alsa/mixer/profile-sets/sb-omni-surround-5.1.conf \ -+ modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf - - if HAVE_UDEV - dist_udevrules_DATA = \ -@@ -1352,7 +1353,10 @@ dist_alsapaths_DATA = \ - modules/alsa/mixer/paths/hdmi-output-4.conf \ - modules/alsa/mixer/paths/hdmi-output-5.conf \ - modules/alsa/mixer/paths/hdmi-output-6.conf \ -- modules/alsa/mixer/paths/hdmi-output-7.conf -+ modules/alsa/mixer/paths/hdmi-output-7.conf \ -+ modules/alsa/mixer/paths/steelseries-arctis-input.conf \ -+ modules/alsa/mixer/paths/steelseries-arctis-output-mono.conf \ -+ modules/alsa/mixer/paths/steelseries-arctis-output-stereo.conf - - endif - --- -2.13.6 - diff --git a/SOURCES/0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch b/SOURCES/0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch deleted file mode 100644 index 5e4b46e..0000000 --- a/SOURCES/0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch +++ /dev/null @@ -1,740 +0,0 @@ -From 61217528a1cb5043ca3fa1051a73ad3268cfb3d8 Mon Sep 17 00:00:00 2001 -From: Tanu Kaskinen -Date: Tue, 19 Sep 2017 17:25:47 +0300 -Subject: [PATCH 033/106] qpaeq: change license from AGPL to LGPL v2.1 - -This removes one unnecessary exception in the PulseAudio licensing -terms. In December 2016 I asked permission from all qpaeq contributors -for the license change, and all gave the permission. I have archived the -emails here: -https://www.freedesktop.org/software/pulseaudio/misc/qpaeq_relicensing_emails.txt ---- - AGPL | 661 -------------------------------------------------------- - LICENSE | 4 - - Makefile.am | 1 - - src/utils/qpaeq | 8 +- - 4 files changed, 4 insertions(+), 670 deletions(-) - delete mode 100644 AGPL - -diff --git a/AGPL b/AGPL -deleted file mode 100644 -index dba13ed2..00000000 ---- a/AGPL -+++ /dev/null -@@ -1,661 +0,0 @@ -- GNU AFFERO GENERAL PUBLIC LICENSE -- Version 3, 19 November 2007 -- -- Copyright (C) 2007 Free Software Foundation, Inc. -- Everyone is permitted to copy and distribute verbatim copies -- of this license document, but changing it is not allowed. -- -- Preamble -- -- The GNU Affero General Public License is a free, copyleft license for --software and other kinds of works, specifically designed to ensure --cooperation with the community in the case of network server software. -- -- The licenses for most software and other practical works are designed --to take away your freedom to share and change the works. By contrast, --our General Public Licenses are intended to guarantee your freedom to --share and change all versions of a program--to make sure it remains free --software for all its users. -- -- When we speak of free software, we are referring to freedom, not --price. Our General Public Licenses are designed to make sure that you --have the freedom to distribute copies of free software (and charge for --them if you wish), that you receive source code or can get it if you --want it, that you can change the software or use pieces of it in new --free programs, and that you know you can do these things. -- -- Developers that use our General Public Licenses protect your rights --with two steps: (1) assert copyright on the software, and (2) offer --you this License which gives you legal permission to copy, distribute --and/or modify the software. -- -- A secondary benefit of defending all users' freedom is that --improvements made in alternate versions of the program, if they --receive widespread use, become available for other developers to --incorporate. Many developers of free software are heartened and --encouraged by the resulting cooperation. However, in the case of --software used on network servers, this result may fail to come about. --The GNU General Public License permits making a modified version and --letting the public access it on a server without ever releasing its --source code to the public. -- -- The GNU Affero General Public License is designed specifically to --ensure that, in such cases, the modified source code becomes available --to the community. It requires the operator of a network server to --provide the source code of the modified version running there to the --users of that server. Therefore, public use of a modified version, on --a publicly accessible server, gives the public access to the source --code of the modified version. -- -- An older license, called the Affero General Public License and --published by Affero, was designed to accomplish similar goals. This is --a different license, not a version of the Affero GPL, but Affero has --released a new version of the Affero GPL which permits relicensing under --this license. -- -- The precise terms and conditions for copying, distribution and --modification follow. -- -- TERMS AND CONDITIONS -- -- 0. Definitions. -- -- "This License" refers to version 3 of the GNU Affero General Public License. -- -- "Copyright" also means copyright-like laws that apply to other kinds of --works, such as semiconductor masks. -- -- "The Program" refers to any copyrightable work licensed under this --License. Each licensee is addressed as "you". "Licensees" and --"recipients" may be individuals or organizations. -- -- To "modify" a work means to copy from or adapt all or part of the work --in a fashion requiring copyright permission, other than the making of an --exact copy. The resulting work is called a "modified version" of the --earlier work or a work "based on" the earlier work. -- -- A "covered work" means either the unmodified Program or a work based --on the Program. -- -- To "propagate" a work means to do anything with it that, without --permission, would make you directly or secondarily liable for --infringement under applicable copyright law, except executing it on a --computer or modifying a private copy. Propagation includes copying, --distribution (with or without modification), making available to the --public, and in some countries other activities as well. -- -- To "convey" a work means any kind of propagation that enables other --parties to make or receive copies. Mere interaction with a user through --a computer network, with no transfer of a copy, is not conveying. -- -- An interactive user interface displays "Appropriate Legal Notices" --to the extent that it includes a convenient and prominently visible --feature that (1) displays an appropriate copyright notice, and (2) --tells the user that there is no warranty for the work (except to the --extent that warranties are provided), that licensees may convey the --work under this License, and how to view a copy of this License. If --the interface presents a list of user commands or options, such as a --menu, a prominent item in the list meets this criterion. -- -- 1. Source Code. -- -- The "source code" for a work means the preferred form of the work --for making modifications to it. "Object code" means any non-source --form of a work. -- -- A "Standard Interface" means an interface that either is an official --standard defined by a recognized standards body, or, in the case of --interfaces specified for a particular programming language, one that --is widely used among developers working in that language. -- -- The "System Libraries" of an executable work include anything, other --than the work as a whole, that (a) is included in the normal form of --packaging a Major Component, but which is not part of that Major --Component, and (b) serves only to enable use of the work with that --Major Component, or to implement a Standard Interface for which an --implementation is available to the public in source code form. A --"Major Component", in this context, means a major essential component --(kernel, window system, and so on) of the specific operating system --(if any) on which the executable work runs, or a compiler used to --produce the work, or an object code interpreter used to run it. -- -- The "Corresponding Source" for a work in object code form means all --the source code needed to generate, install, and (for an executable --work) run the object code and to modify the work, including scripts to --control those activities. However, it does not include the work's --System Libraries, or general-purpose tools or generally available free --programs which are used unmodified in performing those activities but --which are not part of the work. For example, Corresponding Source --includes interface definition files associated with source files for --the work, and the source code for shared libraries and dynamically --linked subprograms that the work is specifically designed to require, --such as by intimate data communication or control flow between those --subprograms and other parts of the work. -- -- The Corresponding Source need not include anything that users --can regenerate automatically from other parts of the Corresponding --Source. -- -- The Corresponding Source for a work in source code form is that --same work. -- -- 2. Basic Permissions. -- -- All rights granted under this License are granted for the term of --copyright on the Program, and are irrevocable provided the stated --conditions are met. This License explicitly affirms your unlimited --permission to run the unmodified Program. The output from running a --covered work is covered by this License only if the output, given its --content, constitutes a covered work. This License acknowledges your --rights of fair use or other equivalent, as provided by copyright law. -- -- You may make, run and propagate covered works that you do not --convey, without conditions so long as your license otherwise remains --in force. You may convey covered works to others for the sole purpose --of having them make modifications exclusively for you, or provide you --with facilities for running those works, provided that you comply with --the terms of this License in conveying all material for which you do --not control copyright. Those thus making or running the covered works --for you must do so exclusively on your behalf, under your direction --and control, on terms that prohibit them from making any copies of --your copyrighted material outside their relationship with you. -- -- Conveying under any other circumstances is permitted solely under --the conditions stated below. Sublicensing is not allowed; section 10 --makes it unnecessary. -- -- 3. Protecting Users' Legal Rights From Anti-Circumvention Law. -- -- No covered work shall be deemed part of an effective technological --measure under any applicable law fulfilling obligations under article --11 of the WIPO copyright treaty adopted on 20 December 1996, or --similar laws prohibiting or restricting circumvention of such --measures. -- -- When you convey a covered work, you waive any legal power to forbid --circumvention of technological measures to the extent such circumvention --is effected by exercising rights under this License with respect to --the covered work, and you disclaim any intention to limit operation or --modification of the work as a means of enforcing, against the work's --users, your or third parties' legal rights to forbid circumvention of --technological measures. -- -- 4. Conveying Verbatim Copies. -- -- You may convey verbatim copies of the Program's source code as you --receive it, in any medium, provided that you conspicuously and --appropriately publish on each copy an appropriate copyright notice; --keep intact all notices stating that this License and any --non-permissive terms added in accord with section 7 apply to the code; --keep intact all notices of the absence of any warranty; and give all --recipients a copy of this License along with the Program. -- -- You may charge any price or no price for each copy that you convey, --and you may offer support or warranty protection for a fee. -- -- 5. Conveying Modified Source Versions. -- -- You may convey a work based on the Program, or the modifications to --produce it from the Program, in the form of source code under the --terms of section 4, provided that you also meet all of these conditions: -- -- a) The work must carry prominent notices stating that you modified -- it, and giving a relevant date. -- -- b) The work must carry prominent notices stating that it is -- released under this License and any conditions added under section -- 7. This requirement modifies the requirement in section 4 to -- "keep intact all notices". -- -- c) You must license the entire work, as a whole, under this -- License to anyone who comes into possession of a copy. This -- License will therefore apply, along with any applicable section 7 -- additional terms, to the whole of the work, and all its parts, -- regardless of how they are packaged. This License gives no -- permission to license the work in any other way, but it does not -- invalidate such permission if you have separately received it. -- -- d) If the work has interactive user interfaces, each must display -- Appropriate Legal Notices; however, if the Program has interactive -- interfaces that do not display Appropriate Legal Notices, your -- work need not make them do so. -- -- A compilation of a covered work with other separate and independent --works, which are not by their nature extensions of the covered work, --and which are not combined with it such as to form a larger program, --in or on a volume of a storage or distribution medium, is called an --"aggregate" if the compilation and its resulting copyright are not --used to limit the access or legal rights of the compilation's users --beyond what the individual works permit. Inclusion of a covered work --in an aggregate does not cause this License to apply to the other --parts of the aggregate. -- -- 6. Conveying Non-Source Forms. -- -- You may convey a covered work in object code form under the terms --of sections 4 and 5, provided that you also convey the --machine-readable Corresponding Source under the terms of this License, --in one of these ways: -- -- a) Convey the object code in, or embodied in, a physical product -- (including a physical distribution medium), accompanied by the -- Corresponding Source fixed on a durable physical medium -- customarily used for software interchange. -- -- b) Convey the object code in, or embodied in, a physical product -- (including a physical distribution medium), accompanied by a -- written offer, valid for at least three years and valid for as -- long as you offer spare parts or customer support for that product -- model, to give anyone who possesses the object code either (1) a -- copy of the Corresponding Source for all the software in the -- product that is covered by this License, on a durable physical -- medium customarily used for software interchange, for a price no -- more than your reasonable cost of physically performing this -- conveying of source, or (2) access to copy the -- Corresponding Source from a network server at no charge. -- -- c) Convey individual copies of the object code with a copy of the -- written offer to provide the Corresponding Source. This -- alternative is allowed only occasionally and noncommercially, and -- only if you received the object code with such an offer, in accord -- with subsection 6b. -- -- d) Convey the object code by offering access from a designated -- place (gratis or for a charge), and offer equivalent access to the -- Corresponding Source in the same way through the same place at no -- further charge. You need not require recipients to copy the -- Corresponding Source along with the object code. If the place to -- copy the object code is a network server, the Corresponding Source -- may be on a different server (operated by you or a third party) -- that supports equivalent copying facilities, provided you maintain -- clear directions next to the object code saying where to find the -- Corresponding Source. Regardless of what server hosts the -- Corresponding Source, you remain obligated to ensure that it is -- available for as long as needed to satisfy these requirements. -- -- e) Convey the object code using peer-to-peer transmission, provided -- you inform other peers where the object code and Corresponding -- Source of the work are being offered to the general public at no -- charge under subsection 6d. -- -- A separable portion of the object code, whose source code is excluded --from the Corresponding Source as a System Library, need not be --included in conveying the object code work. -- -- A "User Product" is either (1) a "consumer product", which means any --tangible personal property which is normally used for personal, family, --or household purposes, or (2) anything designed or sold for incorporation --into a dwelling. In determining whether a product is a consumer product, --doubtful cases shall be resolved in favor of coverage. For a particular --product received by a particular user, "normally used" refers to a --typical or common use of that class of product, regardless of the status --of the particular user or of the way in which the particular user --actually uses, or expects or is expected to use, the product. A product --is a consumer product regardless of whether the product has substantial --commercial, industrial or non-consumer uses, unless such uses represent --the only significant mode of use of the product. -- -- "Installation Information" for a User Product means any methods, --procedures, authorization keys, or other information required to install --and execute modified versions of a covered work in that User Product from --a modified version of its Corresponding Source. The information must --suffice to ensure that the continued functioning of the modified object --code is in no case prevented or interfered with solely because --modification has been made. -- -- If you convey an object code work under this section in, or with, or --specifically for use in, a User Product, and the conveying occurs as --part of a transaction in which the right of possession and use of the --User Product is transferred to the recipient in perpetuity or for a --fixed term (regardless of how the transaction is characterized), the --Corresponding Source conveyed under this section must be accompanied --by the Installation Information. But this requirement does not apply --if neither you nor any third party retains the ability to install --modified object code on the User Product (for example, the work has --been installed in ROM). -- -- The requirement to provide Installation Information does not include a --requirement to continue to provide support service, warranty, or updates --for a work that has been modified or installed by the recipient, or for --the User Product in which it has been modified or installed. Access to a --network may be denied when the modification itself materially and --adversely affects the operation of the network or violates the rules and --protocols for communication across the network. -- -- Corresponding Source conveyed, and Installation Information provided, --in accord with this section must be in a format that is publicly --documented (and with an implementation available to the public in --source code form), and must require no special password or key for --unpacking, reading or copying. -- -- 7. Additional Terms. -- -- "Additional permissions" are terms that supplement the terms of this --License by making exceptions from one or more of its conditions. --Additional permissions that are applicable to the entire Program shall --be treated as though they were included in this License, to the extent --that they are valid under applicable law. If additional permissions --apply only to part of the Program, that part may be used separately --under those permissions, but the entire Program remains governed by --this License without regard to the additional permissions. -- -- When you convey a copy of a covered work, you may at your option --remove any additional permissions from that copy, or from any part of --it. (Additional permissions may be written to require their own --removal in certain cases when you modify the work.) You may place --additional permissions on material, added by you to a covered work, --for which you have or can give appropriate copyright permission. -- -- Notwithstanding any other provision of this License, for material you --add to a covered work, you may (if authorized by the copyright holders of --that material) supplement the terms of this License with terms: -- -- a) Disclaiming warranty or limiting liability differently from the -- terms of sections 15 and 16 of this License; or -- -- b) Requiring preservation of specified reasonable legal notices or -- author attributions in that material or in the Appropriate Legal -- Notices displayed by works containing it; or -- -- c) Prohibiting misrepresentation of the origin of that material, or -- requiring that modified versions of such material be marked in -- reasonable ways as different from the original version; or -- -- d) Limiting the use for publicity purposes of names of licensors or -- authors of the material; or -- -- e) Declining to grant rights under trademark law for use of some -- trade names, trademarks, or service marks; or -- -- f) Requiring indemnification of licensors and authors of that -- material by anyone who conveys the material (or modified versions of -- it) with contractual assumptions of liability to the recipient, for -- any liability that these contractual assumptions directly impose on -- those licensors and authors. -- -- All other non-permissive additional terms are considered "further --restrictions" within the meaning of section 10. If the Program as you --received it, or any part of it, contains a notice stating that it is --governed by this License along with a term that is a further --restriction, you may remove that term. If a license document contains --a further restriction but permits relicensing or conveying under this --License, you may add to a covered work material governed by the terms --of that license document, provided that the further restriction does --not survive such relicensing or conveying. -- -- If you add terms to a covered work in accord with this section, you --must place, in the relevant source files, a statement of the --additional terms that apply to those files, or a notice indicating --where to find the applicable terms. -- -- Additional terms, permissive or non-permissive, may be stated in the --form of a separately written license, or stated as exceptions; --the above requirements apply either way. -- -- 8. Termination. -- -- You may not propagate or modify a covered work except as expressly --provided under this License. Any attempt otherwise to propagate or --modify it is void, and will automatically terminate your rights under --this License (including any patent licenses granted under the third --paragraph of section 11). -- -- However, if you cease all violation of this License, then your --license from a particular copyright holder is reinstated (a) --provisionally, unless and until the copyright holder explicitly and --finally terminates your license, and (b) permanently, if the copyright --holder fails to notify you of the violation by some reasonable means --prior to 60 days after the cessation. -- -- Moreover, your license from a particular copyright holder is --reinstated permanently if the copyright holder notifies you of the --violation by some reasonable means, this is the first time you have --received notice of violation of this License (for any work) from that --copyright holder, and you cure the violation prior to 30 days after --your receipt of the notice. -- -- Termination of your rights under this section does not terminate the --licenses of parties who have received copies or rights from you under --this License. If your rights have been terminated and not permanently --reinstated, you do not qualify to receive new licenses for the same --material under section 10. -- -- 9. Acceptance Not Required for Having Copies. -- -- You are not required to accept this License in order to receive or --run a copy of the Program. Ancillary propagation of a covered work --occurring solely as a consequence of using peer-to-peer transmission --to receive a copy likewise does not require acceptance. However, --nothing other than this License grants you permission to propagate or --modify any covered work. These actions infringe copyright if you do --not accept this License. Therefore, by modifying or propagating a --covered work, you indicate your acceptance of this License to do so. -- -- 10. Automatic Licensing of Downstream Recipients. -- -- Each time you convey a covered work, the recipient automatically --receives a license from the original licensors, to run, modify and --propagate that work, subject to this License. You are not responsible --for enforcing compliance by third parties with this License. -- -- An "entity transaction" is a transaction transferring control of an --organization, or substantially all assets of one, or subdividing an --organization, or merging organizations. If propagation of a covered --work results from an entity transaction, each party to that --transaction who receives a copy of the work also receives whatever --licenses to the work the party's predecessor in interest had or could --give under the previous paragraph, plus a right to possession of the --Corresponding Source of the work from the predecessor in interest, if --the predecessor has it or can get it with reasonable efforts. -- -- You may not impose any further restrictions on the exercise of the --rights granted or affirmed under this License. For example, you may --not impose a license fee, royalty, or other charge for exercise of --rights granted under this License, and you may not initiate litigation --(including a cross-claim or counterclaim in a lawsuit) alleging that --any patent claim is infringed by making, using, selling, offering for --sale, or importing the Program or any portion of it. -- -- 11. Patents. -- -- A "contributor" is a copyright holder who authorizes use under this --License of the Program or a work on which the Program is based. The --work thus licensed is called the contributor's "contributor version". -- -- A contributor's "essential patent claims" are all patent claims --owned or controlled by the contributor, whether already acquired or --hereafter acquired, that would be infringed by some manner, permitted --by this License, of making, using, or selling its contributor version, --but do not include claims that would be infringed only as a --consequence of further modification of the contributor version. For --purposes of this definition, "control" includes the right to grant --patent sublicenses in a manner consistent with the requirements of --this License. -- -- Each contributor grants you a non-exclusive, worldwide, royalty-free --patent license under the contributor's essential patent claims, to --make, use, sell, offer for sale, import and otherwise run, modify and --propagate the contents of its contributor version. -- -- In the following three paragraphs, a "patent license" is any express --agreement or commitment, however denominated, not to enforce a patent --(such as an express permission to practice a patent or covenant not to --sue for patent infringement). To "grant" such a patent license to a --party means to make such an agreement or commitment not to enforce a --patent against the party. -- -- If you convey a covered work, knowingly relying on a patent license, --and the Corresponding Source of the work is not available for anyone --to copy, free of charge and under the terms of this License, through a --publicly available network server or other readily accessible means, --then you must either (1) cause the Corresponding Source to be so --available, or (2) arrange to deprive yourself of the benefit of the --patent license for this particular work, or (3) arrange, in a manner --consistent with the requirements of this License, to extend the patent --license to downstream recipients. "Knowingly relying" means you have --actual knowledge that, but for the patent license, your conveying the --covered work in a country, or your recipient's use of the covered work --in a country, would infringe one or more identifiable patents in that --country that you have reason to believe are valid. -- -- If, pursuant to or in connection with a single transaction or --arrangement, you convey, or propagate by procuring conveyance of, a --covered work, and grant a patent license to some of the parties --receiving the covered work authorizing them to use, propagate, modify --or convey a specific copy of the covered work, then the patent license --you grant is automatically extended to all recipients of the covered --work and works based on it. -- -- A patent license is "discriminatory" if it does not include within --the scope of its coverage, prohibits the exercise of, or is --conditioned on the non-exercise of one or more of the rights that are --specifically granted under this License. You may not convey a covered --work if you are a party to an arrangement with a third party that is --in the business of distributing software, under which you make payment --to the third party based on the extent of your activity of conveying --the work, and under which the third party grants, to any of the --parties who would receive the covered work from you, a discriminatory --patent license (a) in connection with copies of the covered work --conveyed by you (or copies made from those copies), or (b) primarily --for and in connection with specific products or compilations that --contain the covered work, unless you entered into that arrangement, --or that patent license was granted, prior to 28 March 2007. -- -- Nothing in this License shall be construed as excluding or limiting --any implied license or other defenses to infringement that may --otherwise be available to you under applicable patent law. -- -- 12. No Surrender of Others' Freedom. -- -- If conditions are imposed on you (whether by court order, agreement or --otherwise) that contradict the conditions of this License, they do not --excuse you from the conditions of this License. If you cannot convey a --covered work so as to satisfy simultaneously your obligations under this --License and any other pertinent obligations, then as a consequence you may --not convey it at all. For example, if you agree to terms that obligate you --to collect a royalty for further conveying from those to whom you convey --the Program, the only way you could satisfy both those terms and this --License would be to refrain entirely from conveying the Program. -- -- 13. Remote Network Interaction; Use with the GNU General Public License. -- -- Notwithstanding any other provision of this License, if you modify the --Program, your modified version must prominently offer all users --interacting with it remotely through a computer network (if your version --supports such interaction) an opportunity to receive the Corresponding --Source of your version by providing access to the Corresponding Source --from a network server at no charge, through some standard or customary --means of facilitating copying of software. This Corresponding Source --shall include the Corresponding Source for any work covered by version 3 --of the GNU General Public License that is incorporated pursuant to the --following paragraph. -- -- Notwithstanding any other provision of this License, you have --permission to link or combine any covered work with a work licensed --under version 3 of the GNU General Public License into a single --combined work, and to convey the resulting work. The terms of this --License will continue to apply to the part which is the covered work, --but the work with which it is combined will remain governed by version --3 of the GNU General Public License. -- -- 14. Revised Versions of this License. -- -- The Free Software Foundation may publish revised and/or new versions of --the GNU Affero General Public License from time to time. Such new versions --will be similar in spirit to the present version, but may differ in detail to --address new problems or concerns. -- -- Each version is given a distinguishing version number. If the --Program specifies that a certain numbered version of the GNU Affero General --Public License "or any later version" applies to it, you have the --option of following the terms and conditions either of that numbered --version or of any later version published by the Free Software --Foundation. If the Program does not specify a version number of the --GNU Affero General Public License, you may choose any version ever published --by the Free Software Foundation. -- -- If the Program specifies that a proxy can decide which future --versions of the GNU Affero General Public License can be used, that proxy's --public statement of acceptance of a version permanently authorizes you --to choose that version for the Program. -- -- Later license versions may give you additional or different --permissions. However, no additional obligations are imposed on any --author or copyright holder as a result of your choosing to follow a --later version. -- -- 15. Disclaimer of Warranty. -- -- THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY --APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT --HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY --OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, --THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR --PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM --IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF --ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -- -- 16. Limitation of Liability. -- -- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING --WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS --THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY --GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE --USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF --DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD --PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), --EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF --SUCH DAMAGES. -- -- 17. Interpretation of Sections 15 and 16. -- -- If the disclaimer of warranty and limitation of liability provided --above cannot be given local legal effect according to their terms, --reviewing courts shall apply local law that most closely approximates --an absolute waiver of all civil liability in connection with the --Program, unless a warranty or assumption of liability accompanies a --copy of the Program in return for a fee. -- -- END OF TERMS AND CONDITIONS -- -- How to Apply These Terms to Your New Programs -- -- If you develop a new program, and you want it to be of the greatest --possible use to the public, the best way to achieve this is to make it --free software which everyone can redistribute and change under these terms. -- -- To do so, attach the following notices to the program. It is safest --to attach them to the start of each source file to most effectively --state the exclusion of warranty; and each file should have at least --the "copyright" line and a pointer to where the full notice is found. -- -- -- Copyright (C) -- -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU Affero General Public License as published by -- the Free Software Foundation, either version 3 of the License, or -- (at your option) any later version. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU Affero General Public License for more details. -- -- You should have received a copy of the GNU Affero General Public License -- along with this program. If not, see . -- --Also add information on how to contact you by electronic and paper mail. -- -- If your software can interact with users remotely through a computer --network, you should also make sure that it provides a way for users to --get its source. For example, if your program is a web application, its --interface could display a "Source" link that leads users to an archive --of the code. There are many ways you could offer source, and different --solutions will be better for different programs; see section 13 for the --specific requirements. -- -- You should also get your employer (if you work as a programmer) or school, --if any, to sign a "copyright disclaimer" for the program, if necessary. --For more information on this, and how to apply and follow the GNU AGPL, see --. -diff --git a/LICENSE b/LICENSE -index 817427ae..8dfc62ad 100644 ---- a/LICENSE -+++ b/LICENSE -@@ -35,10 +35,6 @@ src/pulsecore/filter/LICENSE.WEBKIT for details. - Additionally, a more permissive Sun license is used for code that performs - u-law, A-law and linear PCM conversions. - --The qpaeq program (src/utils/qpaeq) is licensed under the GNU Affero General --Public License (version 3, or any later version at your discretion). See the --file AGPL for details. -- - While we attempt to provide a summary here, it is the ultimate responsibility of - the packager to ensure the components they use in their build of PulseAudio - meets their license requirements. -diff --git a/Makefile.am b/Makefile.am -index 1f460a97..9a6b42a9 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -16,7 +16,6 @@ - ACLOCAL_AMFLAGS = -I m4 - - EXTRA_DIST = \ -- AGPL \ - bootstrap.sh \ - coverity/model.c \ - git-version-gen \ -diff --git a/src/utils/qpaeq b/src/utils/qpaeq -index ac4b9e4a..f657659d 100755 ---- a/src/utils/qpaeq -+++ b/src/utils/qpaeq -@@ -3,16 +3,16 @@ - # Copyright (C) 2009 Jason Newton . - - --- -2.14.3 - diff --git a/SOURCES/0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch b/SOURCES/0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch deleted file mode 100644 index b2e54ba..0000000 --- a/SOURCES/0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch +++ /dev/null @@ -1,380 +0,0 @@ -From 184c28795bb98ad14bdfcef01a475d5ba11e40d5 Mon Sep 17 00:00:00 2001 -From: Kristian Klausen -Date: Fri, 22 Sep 2017 17:54:14 +0000 -Subject: [PATCH 35/48] alsa-mixer: Prioritize hdmi-* mappings over iec958-* - mappings - -Pulseaudio tries to pick the best profile (on startup or -hotplugged), the best profile is the profile with the highest -priority which isn't unavailable. -Due to the facts that iec958 ports available status always (?) -is unknown, and that it is generally more likely that a user use -hdmi than iec958, lets prioritze hdmi over iec958. - -This patch shift the analog-* mappings +5 and hdmi-* mappings +5. ---- - src/modules/alsa/mixer/profile-sets/default.conf | 80 ++++++++++++------------ - 1 file changed, 40 insertions(+), 40 deletions(-) - -diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf -index c360e772..f5093830 100644 ---- a/src/modules/alsa/mixer/profile-sets/default.conf -+++ b/src/modules/alsa/mixer/profile-sets/default.conf -@@ -106,14 +106,14 @@ device-strings = hw:%f - channel-map = mono - paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 analog-output-mono - paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headset-mic --priority = 2 -+priority = 7 - - [Mapping analog-stereo] - device-strings = front:%f - channel-map = left,right - paths-output = analog-output analog-output-lineout analog-output-speaker analog-output-headphones analog-output-headphones-2 - paths-input = analog-input-front-mic analog-input-rear-mic analog-input-internal-mic analog-input-dock-mic analog-input analog-input-mic analog-input-linein analog-input-aux analog-input-video analog-input-tvtuner analog-input-fm analog-input-mic-line analog-input-headphone-mic analog-input-headset-mic --priority = 10 -+priority = 15 - - # If everything else fails, try to use hw:0 as a stereo device. - [Mapping stereo-fallback] -@@ -128,35 +128,35 @@ priority = 1 - device-strings = surround21:%f - channel-map = front-left,front-right,lfe - paths-output = analog-output analog-output-lineout analog-output-speaker --priority = 8 -+priority = 13 - direction = output - - [Mapping analog-surround-40] - device-strings = surround40:%f - channel-map = front-left,front-right,rear-left,rear-right - paths-output = analog-output analog-output-lineout analog-output-speaker --priority = 7 -+priority = 12 - direction = output - - [Mapping analog-surround-41] - device-strings = surround41:%f - channel-map = front-left,front-right,rear-left,rear-right,lfe - paths-output = analog-output analog-output-lineout analog-output-speaker --priority = 8 -+priority = 13 - direction = output - - [Mapping analog-surround-50] - device-strings = surround50:%f - channel-map = front-left,front-right,rear-left,rear-right,front-center - paths-output = analog-output analog-output-lineout analog-output-speaker --priority = 7 -+priority = 12 - direction = output - - [Mapping analog-surround-51] - device-strings = surround51:%f - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe - paths-output = analog-output analog-output-lineout analog-output-speaker --priority = 8 -+priority = 13 - direction = output - - [Mapping analog-surround-71] -@@ -164,7 +164,7 @@ device-strings = surround71:%f - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right - description = Analog Surround 7.1 - paths-output = analog-output analog-output-lineout analog-output-speaker --priority = 7 -+priority = 12 - direction = output - - [Mapping iec958-stereo] -@@ -200,7 +200,7 @@ description = Digital Stereo (HDMI) - device-strings = hdmi:%f - paths-output = hdmi-output-0 - channel-map = left,right --priority = 4 -+priority = 9 - direction = output - - [Mapping hdmi-surround] -@@ -208,7 +208,7 @@ description = Digital Surround 5.1 (HDMI) - device-strings = hdmi:%f - paths-output = hdmi-output-0 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 3 -+priority = 8 - direction = output - - [Mapping hdmi-surround71] -@@ -216,7 +216,7 @@ description = Digital Surround 7.1 (HDMI) - device-strings = hdmi:%f - paths-output = hdmi-output-0 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right --priority = 3 -+priority = 8 - direction = output - - [Mapping hdmi-dts-surround] -@@ -224,7 +224,7 @@ description = Digital Surround 5.1 (HDMI/DTS) - device-strings = dcahdmi:%f - paths-output = hdmi-output-0 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-stereo-extra1] -@@ -232,7 +232,7 @@ description = Digital Stereo (HDMI 2) - device-strings = hdmi:%f,1 - paths-output = hdmi-output-1 - channel-map = left,right --priority = 2 -+priority = 7 - direction = output - - [Mapping hdmi-surround-extra1] -@@ -240,7 +240,7 @@ description = Digital Surround 5.1 (HDMI 2) - device-strings = hdmi:%f,1 - paths-output = hdmi-output-1 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-surround71-extra1] -@@ -248,7 +248,7 @@ description = Digital Surround 7.1 (HDMI 2) - device-strings = hdmi:%f,1 - paths-output = hdmi-output-1 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-dts-surround-extra1] -@@ -256,7 +256,7 @@ description = Digital Surround 5.1 (HDMI 2/DTS) - device-strings = dcahdmi:%f,1 - paths-output = hdmi-output-1 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-stereo-extra2] -@@ -264,7 +264,7 @@ description = Digital Stereo (HDMI 3) - device-strings = hdmi:%f,2 - paths-output = hdmi-output-2 - channel-map = left,right --priority = 2 -+priority = 7 - direction = output - - [Mapping hdmi-surround-extra2] -@@ -272,7 +272,7 @@ description = Digital Surround 5.1 (HDMI 3) - device-strings = hdmi:%f,2 - paths-output = hdmi-output-2 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-surround71-extra2] -@@ -280,7 +280,7 @@ description = Digital Surround 7.1 (HDMI 3) - device-strings = hdmi:%f,2 - paths-output = hdmi-output-2 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-dts-surround-extra2] -@@ -288,7 +288,7 @@ description = Digital Surround 5.1 (HDMI 3/DTS) - device-strings = dcahdmi:%f,2 - paths-output = hdmi-output-2 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-stereo-extra3] -@@ -296,7 +296,7 @@ description = Digital Stereo (HDMI 4) - device-strings = hdmi:%f,3 - paths-output = hdmi-output-3 - channel-map = left,right --priority = 2 -+priority = 7 - direction = output - - [Mapping hdmi-surround-extra3] -@@ -304,7 +304,7 @@ description = Digital Surround 5.1 (HDMI 4) - device-strings = hdmi:%f,3 - paths-output = hdmi-output-3 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-surround71-extra3] -@@ -312,7 +312,7 @@ description = Digital Surround 7.1 (HDMI 4) - device-strings = hdmi:%f,3 - paths-output = hdmi-output-3 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-dts-surround-extra3] -@@ -320,7 +320,7 @@ description = Digital Surround 5.1 (HDMI 4/DTS) - device-strings = dcahdmi:%f,3 - paths-output = hdmi-output-3 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-stereo-extra4] -@@ -328,7 +328,7 @@ description = Digital Stereo (HDMI 5) - device-strings = hdmi:%f,4 - paths-output = hdmi-output-4 - channel-map = left,right --priority = 2 -+priority = 7 - direction = output - - [Mapping hdmi-surround-extra4] -@@ -336,7 +336,7 @@ description = Digital Surround 5.1 (HDMI 5) - device-strings = hdmi:%f,4 - paths-output = hdmi-output-4 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-surround71-extra4] -@@ -344,7 +344,7 @@ description = Digital Surround 7.1 (HDMI 5) - device-strings = hdmi:%f,4 - paths-output = hdmi-output-4 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-dts-surround-extra4] -@@ -352,7 +352,7 @@ description = Digital Surround 5.1 (HDMI 5/DTS) - device-strings = dcahdmi:%f,4 - paths-output = hdmi-output-4 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-stereo-extra5] -@@ -360,7 +360,7 @@ description = Digital Stereo (HDMI 6) - device-strings = hdmi:%f,5 - paths-output = hdmi-output-5 - channel-map = left,right --priority = 2 -+priority = 7 - direction = output - - [Mapping hdmi-surround-extra5] -@@ -368,7 +368,7 @@ description = Digital Surround 5.1 (HDMI 6) - device-strings = hdmi:%f,5 - paths-output = hdmi-output-5 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-surround71-extra5] -@@ -376,7 +376,7 @@ description = Digital Surround 7.1 (HDMI 6) - device-strings = hdmi:%f,5 - paths-output = hdmi-output-5 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-dts-surround-extra5] -@@ -384,7 +384,7 @@ description = Digital Surround 5.1 (HDMI 6/DTS) - device-strings = dcahdmi:%f,5 - paths-output = hdmi-output-5 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-stereo-extra6] -@@ -392,7 +392,7 @@ description = Digital Stereo (HDMI 7) - device-strings = hdmi:%f,6 - paths-output = hdmi-output-6 - channel-map = left,right --priority = 2 -+priority = 7 - direction = output - - [Mapping hdmi-surround-extra6] -@@ -400,7 +400,7 @@ description = Digital Surround 5.1 (HDMI 7) - device-strings = hdmi:%f,6 - paths-output = hdmi-output-6 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-surround71-extra6] -@@ -408,7 +408,7 @@ description = Digital Surround 7.1 (HDMI 7) - device-strings = hdmi:%f,6 - paths-output = hdmi-output-6 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-dts-surround-extra6] -@@ -416,7 +416,7 @@ description = Digital Surround 5.1 (HDMI 7/DTS) - device-strings = dcahdmi:%f,6 - paths-output = hdmi-output-6 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-stereo-extra7] -@@ -424,7 +424,7 @@ description = Digital Stereo (HDMI 8) - device-strings = hdmi:%f,7 - paths-output = hdmi-output-7 - channel-map = left,right --priority = 2 -+priority = 7 - direction = output - - [Mapping hdmi-surround-extra7] -@@ -432,7 +432,7 @@ description = Digital Surround 5.1 (HDMI 8) - device-strings = hdmi:%f,7 - paths-output = hdmi-output-7 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-surround71-extra7] -@@ -440,7 +440,7 @@ description = Digital Surround 7.1 (HDMI 8) - device-strings = hdmi:%f,7 - paths-output = hdmi-output-7 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe,side-left,side-right --priority = 1 -+priority = 6 - direction = output - - [Mapping hdmi-dts-surround-extra7] -@@ -448,7 +448,7 @@ description = Digital Surround 5.1 (HDMI 8/DTS) - device-strings = dcahdmi:%f,7 - paths-output = hdmi-output-7 - channel-map = front-left,front-right,rear-left,rear-right,front-center,lfe --priority = 1 -+priority = 6 - direction = output - - [Mapping multichannel-output] --- -2.13.6 - diff --git a/SOURCES/0074-build-sys-add-the-Dell-dock-TB16-configuration.patch b/SOURCES/0074-build-sys-add-the-Dell-dock-TB16-configuration.patch deleted file mode 100644 index dd5dc96..0000000 --- a/SOURCES/0074-build-sys-add-the-Dell-dock-TB16-configuration.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 2f1dcea363342154a1f6af7bd4ade3f87403b744 Mon Sep 17 00:00:00 2001 -From: Hui Wang -Date: Mon, 13 Nov 2017 10:17:19 +0800 -Subject: [PATCH 74/85] build-sys: add the Dell dock TB16 configuration - -Signed-off-by: Hui Wang ---- - src/Makefile.am | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/Makefile.am b/src/Makefile.am -index e610db74..03482502 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -1312,7 +1312,8 @@ dist_alsaprofilesets_DATA = \ - modules/alsa/mixer/profile-sets/native-instruments-korecontroller.conf \ - modules/alsa/mixer/profile-sets/kinect-audio.conf \ - modules/alsa/mixer/profile-sets/sb-omni-surround-5.1.conf \ -- modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf -+ modules/alsa/mixer/profile-sets/steelseries-arctis-usb-audio.conf \ -+ modules/alsa/mixer/profile-sets/dell-dock-tb16-usb-audio.conf - - if HAVE_UDEV - dist_udevrules_DATA = \ --- -2.14.3 - diff --git a/SOURCES/0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch b/SOURCES/0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch deleted file mode 100644 index afd14bc..0000000 --- a/SOURCES/0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 59d264ac56d644f626251daa44ef7b39a9a9fe03 Mon Sep 17 00:00:00 2001 -From: Georg Chini -Date: Sun, 3 Dec 2017 22:29:09 +0100 -Subject: [PATCH 84/85] sink, source: Don't finish move if unlink happens after - pa_*_move_all_start() - -When a sink input was unlinked between the calls to pa_sink_move_all_start() and -pa_sink_move_all_finish(), pa_sink_move_all_finish() tried to finish the move -of the already unlinked sink input, which lead to an assertion in -pa_sink_input_finish_move(). The same applies for the source side. - -This patch fixes the problem by checking the state of the sink input or -source output in pa_*_move_all_finish(). - -Bug report: https://bugs.freedesktop.org/show_bug.cgi?id=103752 ---- - src/pulsecore/sink.c | 6 ++++-- - src/pulsecore/source.c | 6 ++++-- - 2 files changed, 8 insertions(+), 4 deletions(-) - -diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c -index 017b9539..39bf18f1 100644 ---- a/src/pulsecore/sink.c -+++ b/src/pulsecore/sink.c -@@ -920,9 +920,11 @@ void pa_sink_move_all_finish(pa_sink *s, pa_queue *q, bool save) { - pa_assert(q); - - while ((i = PA_SINK_INPUT(pa_queue_pop(q)))) { -- if (pa_sink_input_finish_move(i, s, save) < 0) -- pa_sink_input_fail_move(i); -+ if (PA_SINK_INPUT_IS_LINKED(i->state)) { -+ if (pa_sink_input_finish_move(i, s, save) < 0) -+ pa_sink_input_fail_move(i); - -+ } - pa_sink_input_unref(i); - } - -diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c -index d579c357..6099c10d 100644 ---- a/src/pulsecore/source.c -+++ b/src/pulsecore/source.c -@@ -860,9 +860,11 @@ void pa_source_move_all_finish(pa_source *s, pa_queue *q, bool save) { - pa_assert(q); - - while ((o = PA_SOURCE_OUTPUT(pa_queue_pop(q)))) { -- if (pa_source_output_finish_move(o, s, save) < 0) -- pa_source_output_fail_move(o); -+ if (PA_SOURCE_OUTPUT_IS_LINKED(o->state)) { -+ if (pa_source_output_finish_move(o, s, save) < 0) -+ pa_source_output_fail_move(o); - -+ } - pa_source_output_unref(o); - } - --- -2.14.3 - diff --git a/SOURCES/0085-client-conf-Add-a-default-value-for-disable-memfd.patch b/SOURCES/0085-client-conf-Add-a-default-value-for-disable-memfd.patch deleted file mode 100644 index e298aae..0000000 --- a/SOURCES/0085-client-conf-Add-a-default-value-for-disable-memfd.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 2062fc8b0e69f383cfd4c4773bf8b9dcef20e035 Mon Sep 17 00:00:00 2001 -From: Arun Raghavan -Date: Fri, 27 Oct 2017 09:29:19 +0530 -Subject: [PATCH 085/106] client-conf: Add a default value for disable-memfd - -This got missed while adding the client option. ---- - src/pulse/client-conf.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/pulse/client-conf.c b/src/pulse/client-conf.c -index a3c9486d..1daaf911 100644 ---- a/src/pulse/client-conf.c -+++ b/src/pulse/client-conf.c -@@ -65,6 +65,7 @@ static const pa_client_conf default_conf = { - .cookie_file_from_client_conf = NULL, - .autospawn = true, - .disable_shm = false, -+ .disable_memfd = false, - .shm_size = 0, - .auto_connect_localhost = false, - .auto_connect_display = false --- -2.14.3 - diff --git a/SOURCES/0090-qpaeq-port-to-PyQt5.patch b/SOURCES/0090-qpaeq-port-to-PyQt5.patch deleted file mode 100644 index aa4495e..0000000 --- a/SOURCES/0090-qpaeq-port-to-PyQt5.patch +++ /dev/null @@ -1,201 +0,0 @@ -From 480e0e74f43565d7ece72141666961ae8cc2ed75 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andrius=20=C5=A0tikonas?= -Date: Mon, 20 Nov 2017 19:56:53 +0000 -Subject: [PATCH 090/106] qpaeq: port to PyQt5 - ---- - src/utils/qpaeq | 68 ++++++++++++++++++++++++++++----------------------------- - 1 file changed, 34 insertions(+), 34 deletions(-) - -diff --git a/src/utils/qpaeq b/src/utils/qpaeq -index f657659d..651d3a4e 100755 ---- a/src/utils/qpaeq -+++ b/src/utils/qpaeq -@@ -18,13 +18,13 @@ - - import os,math,sys - try: -- import PyQt4,sip -- from PyQt4 import QtGui,QtCore -+ import PyQt5,sip -+ from PyQt5 import QtWidgets,QtCore - import dbus.mainloop.qt - import dbus - except ImportError as e: - sys.stderr.write('There was an error importing needed libraries\n' -- 'Make sure you have qt4 and dbus-python installed\n' -+ 'Make sure you have qt5 and dbus-python installed\n' - 'The error that occured was:\n' - '\t%s\n' % (str(e))) - sys.exit(-1) -@@ -62,7 +62,7 @@ def connect(): - prop_iface='org.freedesktop.DBus.Properties' - eq_iface='org.PulseAudio.Ext.Equalizing1.Equalizer' - device_iface='org.PulseAudio.Core1.Device' --class QPaeq(QtGui.QWidget): -+class QPaeq(QtWidgets.QWidget): - manager_path='/org/pulseaudio/equalizing1' - manager_iface='org.PulseAudio.Ext.Equalizing1.Manager' - core_iface='org.PulseAudio.Core1' -@@ -70,7 +70,7 @@ class QPaeq(QtGui.QWidget): - module_name='module-equalizer-sink' - - def __init__(self): -- QtGui.QWidget.__init__(self) -+ QtWidgets.QWidget.__init__(self) - self.setWindowTitle('qpaeq') - self.slider_widget=None - self.sink_name=None -@@ -84,50 +84,50 @@ class QPaeq(QtGui.QWidget): - self.setMinimumSize(self.sizeHint()) - - def create_layout(self): -- self.main_layout=QtGui.QVBoxLayout() -+ self.main_layout=QtWidgets.QVBoxLayout() - self.setLayout(self.main_layout) -- toprow_layout=QtGui.QHBoxLayout() -- sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Fixed) -+ toprow_layout=QtWidgets.QHBoxLayout() -+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) - sizePolicy.setHorizontalStretch(0) - sizePolicy.setVerticalStretch(0) - #sizePolicy.setHeightForWidth(self.profile_box.sizePolicy().hasHeightForWidth()) - -- toprow_layout.addWidget(QtGui.QLabel('Sink')) -- self.sink_box = QtGui.QComboBox() -+ toprow_layout.addWidget(QtWidgets.QLabel('Sink')) -+ self.sink_box = QtWidgets.QComboBox() - self.sink_box.setSizePolicy(sizePolicy) - self.sink_box.setDuplicatesEnabled(False) -- self.sink_box.setInsertPolicy(QtGui.QComboBox.InsertAlphabetically) -- #self.sink_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) -+ self.sink_box.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically) -+ #self.sink_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents) - toprow_layout.addWidget(self.sink_box) - -- toprow_layout.addWidget(QtGui.QLabel('Channel')) -- self.channel_box = QtGui.QComboBox() -+ toprow_layout.addWidget(QtWidgets.QLabel('Channel')) -+ self.channel_box = QtWidgets.QComboBox() - self.channel_box.setSizePolicy(sizePolicy) - toprow_layout.addWidget(self.channel_box) - -- toprow_layout.addWidget(QtGui.QLabel('Preset')) -- self.profile_box = QtGui.QComboBox() -+ toprow_layout.addWidget(QtWidgets.QLabel('Preset')) -+ self.profile_box = QtWidgets.QComboBox() - self.profile_box.setSizePolicy(sizePolicy) -- self.profile_box.setInsertPolicy(QtGui.QComboBox.InsertAlphabetically) -- #self.profile_box.setSizeAdjustPolicy(QtGui.QComboBox.AdjustToContents) -+ self.profile_box.setInsertPolicy(QtWidgets.QComboBox.InsertAlphabetically) -+ #self.profile_box.setSizeAdjustPolicy(QtWidgets.QComboBox.AdjustToContents) - toprow_layout.addWidget(self.profile_box) - -- large_icon_size=self.style().pixelMetric(QtGui.QStyle.PM_LargeIconSize) -+ large_icon_size=self.style().pixelMetric(QtWidgets.QStyle.PM_LargeIconSize) - large_icon_size=QtCore.QSize(large_icon_size,large_icon_size) -- save_profile=QtGui.QToolButton() -- save_profile.setIcon(self.style().standardIcon(QtGui.QStyle.SP_DriveFDIcon)) -+ save_profile=QtWidgets.QToolButton() -+ save_profile.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_DriveFDIcon)) - save_profile.setIconSize(large_icon_size) - save_profile.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) - save_profile.clicked.connect(self.save_profile) -- remove_profile=QtGui.QToolButton() -- remove_profile.setIcon(self.style().standardIcon(QtGui.QStyle.SP_TrashIcon)) -+ remove_profile=QtWidgets.QToolButton() -+ remove_profile.setIcon(self.style().standardIcon(QtWidgets.QStyle.SP_TrashIcon)) - remove_profile.setIconSize(large_icon_size) - remove_profile.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) - remove_profile.clicked.connect(self.remove_profile) - toprow_layout.addWidget(save_profile) - toprow_layout.addWidget(remove_profile) - -- reset_button = QtGui.QPushButton('Reset') -+ reset_button = QtWidgets.QPushButton('Reset') - reset_button.clicked.connect(self.reset) - toprow_layout.addStretch() - toprow_layout.addWidget(reset_button) -@@ -192,11 +192,11 @@ class QPaeq(QtGui.QWidget): - def save_profile(self): - #popup dialog box for name - current=self.profile_box.currentIndex() -- profile,ok=QtGui.QInputDialog.getItem(self,'Preset Name','Preset',self.profiles,current) -+ profile,ok=QtWidgets.QInputDialog.getItem(self,'Preset Name','Preset',self.profiles,current) - if not ok or profile=='': - return - if profile in self.profiles: -- mbox=QtGui.QMessageBox(self) -+ mbox=QtWidgets.QMessageBox(self) - mbox.setText('%s preset already exists'%(profile,)) - mbox.setInformativeText('Do you want to save over it?') - mbox.setStandardButtons(mbox.Save|mbox.Discard|mbox.Cancel) -@@ -217,7 +217,7 @@ class QPaeq(QtGui.QWidget): - profile=self.profile_box.itemText(x) - self.filter_state.load_profile(profile) - def select_channel(self,x): -- self.filter_state.channel = self.channel_box.itemData(x).toPyObject() -+ self.filter_state.channel = self.channel_box.itemData(x) - self._set_profile_name() - self.filter_state.readback() - -@@ -295,13 +295,13 @@ class QPaeq(QtGui.QWidget): - self.profile_box.blockSignals(False) - - --class SliderArray(QtGui.QWidget): -+class SliderArray(QtWidgets.QWidget): - def __init__(self,filter_state,parent=None): - super(SliderArray,self).__init__(parent) - #self.setStyleSheet('padding: 0px; border-width: 0px; margin: 0px;') - #self.setStyleSheet('font-family: monospace;'+outline%('blue')) - self.filter_state=filter_state -- self.setLayout(QtGui.QHBoxLayout()) -+ self.setLayout(QtWidgets.QHBoxLayout()) - self.sub_array=None - self.set_sub_array(SliderArraySub(self.filter_state)) - self.inhibit_resize=0 -@@ -359,11 +359,11 @@ class SliderArray(QtGui.QWidget): - self.set_sub_array(SliderArraySub(self.filter_state)) - self.inhibit_resize-=1 - --class SliderArraySub(QtGui.QWidget): -+class SliderArraySub(QtWidgets.QWidget): - def __init__(self,filter_state,parent=None): - super(SliderArraySub,self).__init__(parent) - self.filter_state=filter_state -- self.setLayout(QtGui.QGridLayout()) -+ self.setLayout(QtWidgets.QGridLayout()) - self.slider=[None]*len(self.filter_state.frequencies) - self.label=[None]*len(self.slider) - #self.setStyleSheet('padding: 0px; border-width: 0px; margin: 0px;') -@@ -375,7 +375,7 @@ class SliderArraySub(QtGui.QWidget): - self.layout().addWidget(label,1,c,qt.AlignHCenter) - self.layout().setColumnMinimumWidth(c,max(label.sizeHint().width(),slider.sizeHint().width())) - def create_slider(slider_label): -- slider=QtGui.QSlider(QtCore.Qt.Vertical,self) -+ slider=QtWidgets.QSlider(QtCore.Qt.Vertical,self) - label=SliderLabel(slider_label,filter_state,self) - slider.setRange(-1000,2000) - slider.setSingleStep(1) -@@ -461,7 +461,7 @@ class SliderArraySub(QtGui.QWidget): - return int((x-1.0)*1000) - outline='border-width: 1px; border-style: solid; border-color: %s;' - --class SliderLabel(QtGui.QLabel): -+class SliderLabel(QtWidgets.QLabel): - clicked=QtCore.pyqtSignal() - def __init__(self,label_text,filter_state,parent=None): - super(SliderLabel,self).__init__(parent) -@@ -566,7 +566,7 @@ def subdivide(xs, t_points): - - def main(): - dbus.mainloop.qt.DBusQtMainLoop(set_as_default=True) -- app=QtGui.QApplication(sys.argv) -+ app=QtWidgets.QApplication(sys.argv) - qpaeq_main=QPaeq() - qpaeq_main.show() - sys.exit(app.exec_()) --- -2.14.3 - diff --git a/SOURCES/0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch b/SOURCES/0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch deleted file mode 100644 index ddd7abd..0000000 --- a/SOURCES/0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch +++ /dev/null @@ -1,142 +0,0 @@ -From 94fc586c011537536cfb434376354699357af785 Mon Sep 17 00:00:00 2001 -From: Tanu Kaskinen -Date: Thu, 28 Dec 2017 12:09:17 +0200 -Subject: [PATCH 093/106] alsa: fix infinite loop with Intel HDMI LPE - -The Intel HDMI LPE driver works in a peculiar way when the HDMI cable is -not plugged in: any written audio is immediately discarded and underrun -is reported. That resulted in an infinite loop, because PulseAudio tried -to keep the buffer filled, which was futile since the written audio was -immediately consumed/discarded. - -This patch adds special handling for the LPE driver: if the active port -of the sink is unavailable, the sink suspends itself. A new suspend -cause is added: PA_SUSPEND_UNAVAILABLE. - -BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488 ---- - src/modules/alsa/alsa-mixer.h | 1 + - src/modules/alsa/alsa-sink.c | 22 ++++++++++++++++++++++ - src/modules/alsa/module-alsa-card.c | 34 ++++++++++++++++++++++++++++++++++ - src/pulsecore/core.h | 1 + - 4 files changed, 58 insertions(+) - -diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h -index 4ebf1922..3577f435 100644 ---- a/src/modules/alsa/alsa-mixer.h -+++ b/src/modules/alsa/alsa-mixer.h -@@ -364,6 +364,7 @@ int pa_alsa_set_mixer_rtpoll(struct pa_alsa_mixer_pdata *pd, snd_mixer_t *mixer, - struct pa_alsa_port_data { - pa_alsa_path *path; - pa_alsa_setting *setting; -+ bool suspend_when_unavailable; - }; - - void pa_alsa_add_ports(void *sink_or_source_new_data, pa_alsa_path_set *ps, pa_card *card); -diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c -index 7936cfac..a80caab2 100644 ---- a/src/modules/alsa/alsa-sink.c -+++ b/src/modules/alsa/alsa-sink.c -@@ -1527,6 +1527,11 @@ static int sink_set_port_cb(pa_sink *s, pa_device_port *p) { - s->set_volume(s); - } - -+ if (data->suspend_when_unavailable && p->available == PA_AVAILABLE_NO) -+ pa_sink_suspend(s, true, PA_SUSPEND_UNAVAILABLE); -+ else -+ pa_sink_suspend(s, false, PA_SUSPEND_UNAVAILABLE); -+ - return 0; - } - -@@ -2460,6 +2465,23 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca - if (profile_set) - pa_alsa_profile_set_free(profile_set); - -+ /* Suspend if necessary. FIXME: It would be better to start suspended, but -+ * that would require some core changes. It's possible to set -+ * pa_sink_new_data.suspend_cause, but that has to be done before the -+ * pa_sink_new() call, and we know if we need to suspend only after the -+ * pa_sink_new() call when the initial port has been chosen. Calling -+ * pa_sink_suspend() between pa_sink_new() and pa_sink_put() would -+ * otherwise work, but currently pa_sink_suspend() will crash if -+ * pa_sink_put() hasn't been called. */ -+ if (u->sink->active_port) { -+ pa_alsa_port_data *port_data; -+ -+ port_data = PA_DEVICE_PORT_DATA(u->sink->active_port); -+ -+ if (port_data->suspend_when_unavailable && u->sink->active_port->available == PA_AVAILABLE_NO) -+ pa_sink_suspend(u->sink, true, PA_SUSPEND_UNAVAILABLE); -+ } -+ - return u->sink; - - fail: -diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c -index 804b4f87..b193d40c 100644 ---- a/src/modules/alsa/module-alsa-card.c -+++ b/src/modules/alsa/module-alsa-card.c -@@ -426,6 +426,22 @@ static int report_jack_state(snd_mixer_elem_t *melem, unsigned int mask) { - if (tp->avail == PA_AVAILABLE_NO) - pa_device_port_set_available(tp->port, tp->avail); - -+ for (tp = tports; tp->port; tp++) { -+ pa_alsa_port_data *data; -+ pa_sink *sink; -+ uint32_t idx; -+ -+ data = PA_DEVICE_PORT_DATA(tp->port); -+ -+ if (!data->suspend_when_unavailable) -+ continue; -+ -+ PA_IDXSET_FOREACH(sink, u->core->sinks, idx) { -+ if (sink->active_port == tp->port) -+ pa_sink_suspend(sink, tp->avail == PA_AVAILABLE_NO, PA_SUSPEND_UNAVAILABLE); -+ } -+ } -+ - /* Update profile availabilities. The logic could be improved; for now we - * only set obviously unavailable profiles (those that contain only - * unavailable ports) to PA_AVAILABLE_NO and all others to -@@ -836,6 +852,24 @@ int pa__init(pa_module *m) { - goto fail; - } - -+ /* The Intel HDMI LPE driver needs some special handling. When the HDMI -+ * cable is not plugged in, trying to play audio doesn't work. Any written -+ * audio is immediately discarded and an underrun is reported, and that -+ * results in an infinite loop of "fill buffer, handle underrun". To work -+ * around this issue, the suspend_when_unavailable flag is used to stop -+ * playback when the HDMI cable is unplugged. */ -+ if (pa_safe_streq(pa_proplist_gets(data.proplist, "alsa.driver_name"), "snd_hdmi_lpe_audio")) { -+ pa_device_port *port; -+ void *state; -+ -+ PA_HASHMAP_FOREACH(port, data.ports, state) { -+ pa_alsa_port_data *port_data; -+ -+ port_data = PA_DEVICE_PORT_DATA(port); -+ port_data->suspend_when_unavailable = true; -+ } -+ } -+ - u->card = pa_card_new(m->core, &data); - pa_card_new_data_done(&data); - -diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h -index 79a095d2..afe6c25e 100644 ---- a/src/pulsecore/core.h -+++ b/src/pulsecore/core.h -@@ -34,6 +34,7 @@ typedef enum pa_suspend_cause { - PA_SUSPEND_SESSION = 8, /* Used by module-hal for mark inactive sessions */ - PA_SUSPEND_PASSTHROUGH = 16, /* Used to suspend monitor sources when the sink is in passthrough mode */ - PA_SUSPEND_INTERNAL = 32, /* This is used for short period server-internal suspends, such as for sample rate updates */ -+ PA_SUSPEND_UNAVAILABLE = 64, /* Used by device implementations that have to suspend when the device is unavailable */ - PA_SUSPEND_ALL = 0xFFFF /* Magic cause that can be used to resume forcibly */ - } pa_suspend_cause_t; - --- -2.14.3 - diff --git a/SOURCES/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch b/SOURCES/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch deleted file mode 100644 index f3d3b61..0000000 --- a/SOURCES/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch +++ /dev/null @@ -1,63 +0,0 @@ -From dfb0460fb4743aec047cdf755a660a9ac2d0f3fb Mon Sep 17 00:00:00 2001 -From: Tanu Kaskinen -Date: Wed, 24 Jan 2018 03:51:49 +0200 -Subject: [PATCH 106/106] memfd-wrappers: only define memfd_create() if not - already defined - -glibc 2.27 is to be released soon, and it will provide memfd_create(). -If glibc provides the function, we must not define it ourselves, -otherwise building fails due to conflict between the two implementations -of the same function. - -BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=104733 ---- - configure.ac | 3 +++ - src/pulsecore/memfd-wrappers.h | 7 ++++--- - 2 files changed, 7 insertions(+), 3 deletions(-) - -diff --git a/configure.ac b/configure.ac -index 0084c86e..0eb44b08 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -610,6 +610,9 @@ AS_IF([test "x$enable_memfd" = "xyes" && test "x$HAVE_MEMFD" = "x0"], - [AC_MSG_ERROR([*** Your Linux kernel does not support memfd shared memory. - *** Use linux v3.17 or higher for such a feature.])]) - -+AS_IF([test "x$HAVE_MEMFD" = "x1"], -+ AC_CHECK_FUNCS([memfd_create])) -+ - AC_SUBST(HAVE_MEMFD) - AM_CONDITIONAL([HAVE_MEMFD], [test "x$HAVE_MEMFD" = x1]) - AS_IF([test "x$HAVE_MEMFD" = "x1"], AC_DEFINE([HAVE_MEMFD], 1, [Have memfd shared memory.])) -diff --git a/src/pulsecore/memfd-wrappers.h b/src/pulsecore/memfd-wrappers.h -index 3bed9b2b..c7aadfd3 100644 ---- a/src/pulsecore/memfd-wrappers.h -+++ b/src/pulsecore/memfd-wrappers.h -@@ -20,13 +20,14 @@ - License along with PulseAudio; if not, see . - ***/ - --#ifdef HAVE_MEMFD -+#if defined(HAVE_MEMFD) && !defined(HAVE_MEMFD_CREATE) - - #include - #include - - /* -- * No glibc wrappers exist for memfd_create(2), so provide our own. -+ * Before glibc version 2.27 there was no wrapper for memfd_create(2), -+ * so we have to provide our own. - * - * Also define memfd fcntl sealing macros. While they are already - * defined in the kernel header file , that file as -@@ -63,6 +64,6 @@ static inline int memfd_create(const char *name, unsigned int flags) { - #define F_SEAL_WRITE 0x0008 /* prevent writes */ - #endif - --#endif /* HAVE_MEMFD */ -+#endif /* HAVE_MEMFD && !HAVE_MEMFD_CREATE */ - - #endif --- -2.14.3 - diff --git a/SOURCES/Fix-Intel-HDMI-LPE-problems.patch b/SOURCES/Fix-Intel-HDMI-LPE-problems.patch deleted file mode 100644 index cb31b30..0000000 --- a/SOURCES/Fix-Intel-HDMI-LPE-problems.patch +++ /dev/null @@ -1,621 +0,0 @@ -From patchwork Sun Oct 8 16:48:24 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [v2,1/3] alsa-mixer: add hw_device_index to pa_alsa_mapping -From: Tanu Kaskinen -X-Patchwork-Id: 181163 -Message-Id: <20171008164826.7588-2-tanuk@iki.fi> -To: pulseaudio-discuss@lists.freedesktop.org -Date: Sun, 8 Oct 2017 19:48:24 +0300 - -We have so far assumed that HDMI always uses device indexes 3, 7, 8, 9, -10, 11, 12 and 13. These values are hardcoded in the path configuration. -The Intel HDMI LPE driver, however, uses different device numbering -scheme. Since the indexes aren't always the same, we need to query the -hw device index from ALSA. - -Later patches will use the queried index for HDMI jack detection and ELD -information reading. - -BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488 ---- - src/modules/alsa/alsa-mixer.c | 26 ++++++++++++++++++++++++++ - src/modules/alsa/alsa-mixer.h | 4 ++++ - 2 files changed, 30 insertions(+) - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index 7de1c7deb..02ab4a611 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -3505,6 +3505,7 @@ pa_alsa_mapping *pa_alsa_mapping_get(pa_alsa_profile_set *ps, const char *name) - pa_sample_spec_init(&m->sample_spec); - pa_channel_map_init(&m->channel_map); - m->proplist = pa_proplist_new(); -+ m->hw_device_index = -1; - - pa_hashmap_put(ps->mappings, m->name, m); - -@@ -4532,6 +4533,25 @@ static int add_profiles_to_probe( - return i; - } - -+static void mapping_query_hw_device(pa_alsa_mapping *mapping, snd_pcm_t *pcm) { -+ int r; -+ snd_pcm_info_t* pcm_info; -+ snd_pcm_info_alloca(&pcm_info); -+ -+ r = snd_pcm_info(pcm, pcm_info); -+ if (r < 0) { -+ pa_log("Mapping %s: snd_pcm_info() failed %s: ", mapping->name, pa_alsa_strerror(r)); -+ return; -+ } -+ -+ /* XXX: It's not clear what snd_pcm_info_get_device() does if the device is -+ * not backed by a hw device or if it's backed by multiple hw devices. We -+ * only use hw_device_index for HDMI devices, however, and for those the -+ * return value is expected to be always valid, so this shouldn't be a -+ * significant problem. */ -+ mapping->hw_device_index = snd_pcm_info_get_device(pcm_info); -+} -+ - void pa_alsa_profile_set_probe( - pa_alsa_profile_set *ps, - const char *dev_id, -@@ -4622,6 +4642,9 @@ void pa_alsa_profile_set_probe( - } - break; - } -+ -+ if (m->hw_device_index < 0) -+ mapping_query_hw_device(m, m->output_pcm); - } - - if (p->input_mappings && p->supported) -@@ -4643,6 +4666,9 @@ void pa_alsa_profile_set_probe( - } - break; - } -+ -+ if (m->hw_device_index < 0) -+ mapping_query_hw_device(m, m->input_pcm); - } - - last = p; -diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h -index 4ebf1922b..cb482906b 100644 ---- a/src/modules/alsa/alsa-mixer.h -+++ b/src/modules/alsa/alsa-mixer.h -@@ -275,6 +275,10 @@ struct pa_alsa_mapping { - bool exact_channels:1; - bool fallback:1; - -+ /* The "y" in "hw:x,y". This is set to -1 before the device index has been -+ * queried, or if the query failed. */ -+ int hw_device_index; -+ - /* Temporarily used during probing */ - snd_pcm_t *input_pcm; - snd_pcm_t *output_pcm; - -From patchwork Sun Oct 8 16:48:25 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [v2,2/3] alsa-mixer: autodetect the HDMI jack PCM device -From: Tanu Kaskinen -X-Patchwork-Id: 181164 -Message-Id: <20171008164826.7588-3-tanuk@iki.fi> -To: pulseaudio-discuss@lists.freedesktop.org -Date: Sun, 8 Oct 2017 19:48:25 +0300 - -This removes the need to hardcode the PCM device index in the HDMI jack -names. The hardcoded values don't work with the Intel HDMI LPE driver. - -BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488 ---- - src/modules/alsa/alsa-mixer.c | 53 ++++++++++++++++++++-- - src/modules/alsa/alsa-mixer.h | 4 +- - src/modules/alsa/alsa-sink.c | 2 +- - src/modules/alsa/alsa-source.c | 2 +- - .../alsa/mixer/paths/analog-output.conf.common | 4 ++ - src/modules/alsa/mixer/paths/hdmi-output-0.conf | 3 +- - src/modules/alsa/mixer/paths/hdmi-output-1.conf | 3 +- - src/modules/alsa/mixer/paths/hdmi-output-2.conf | 3 +- - src/modules/alsa/mixer/paths/hdmi-output-3.conf | 3 +- - src/modules/alsa/mixer/paths/hdmi-output-4.conf | 3 +- - src/modules/alsa/mixer/paths/hdmi-output-5.conf | 3 +- - src/modules/alsa/mixer/paths/hdmi-output-6.conf | 3 +- - src/modules/alsa/mixer/paths/hdmi-output-7.conf | 3 +- - 13 files changed, 73 insertions(+), 16 deletions(-) - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index 02ab4a611..eaee7ea0a 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -1812,12 +1812,31 @@ static int element_probe(pa_alsa_element *e, snd_mixer_t *m) { - return 0; - } - --static int jack_probe(pa_alsa_jack *j, snd_mixer_t *m) { -+static int jack_probe(pa_alsa_jack *j, pa_alsa_mapping *mapping, snd_mixer_t *m) { - bool has_control; - - pa_assert(j); - pa_assert(j->path); - -+ if (j->append_pcm_to_name) { -+ char *new_name; -+ -+ if (!mapping) { -+ /* This could also be an assertion, because this should never -+ * happen. At the time of writing, mapping can only be NULL when -+ * module-alsa-sink/source synthesizes a path, and those -+ * synthesized paths never have any jacks, so jack_probe() should -+ * never be called with a NULL mapping. */ -+ pa_log("Jack %s: append_pcm_to_name is set, but mapping is NULL. Can't use this jack.", j->name); -+ return -1; -+ } -+ -+ new_name = pa_sprintf_malloc("%s,pcm=%i Jack", j->name, mapping->hw_device_index); -+ pa_xfree(j->alsa_name); -+ j->alsa_name = new_name; -+ j->append_pcm_to_name = false; -+ } -+ - has_control = pa_alsa_mixer_find(m, j->alsa_name, 0) != NULL; - pa_alsa_jack_set_has_control(j, has_control); - -@@ -2326,6 +2345,30 @@ static int jack_parse_state(pa_config_parser_state *state) { - return 0; - } - -+static int jack_parse_append_pcm_to_name(pa_config_parser_state *state) { -+ pa_alsa_path *path; -+ pa_alsa_jack *jack; -+ int b; -+ -+ pa_assert(state); -+ -+ path = state->userdata; -+ if (!(jack = jack_get(path, state->section))) { -+ pa_log("[%s:%u] Option 'append_pcm_to_name' not expected in section '%s'", -+ state->filename, state->lineno, state->section); -+ return -1; -+ } -+ -+ b = pa_parse_boolean(state->rvalue); -+ if (b < 0) { -+ pa_log("[%s:%u] Invalid value for 'append_pcm_to_name': %s", state->filename, state->lineno, state->rvalue); -+ return -1; -+ } -+ -+ jack->append_pcm_to_name = b; -+ return 0; -+} -+ - static int element_set_option(pa_alsa_element *e, snd_mixer_t *m, int alsa_idx) { - snd_mixer_selem_id_t *sid; - snd_mixer_elem_t *me; -@@ -2534,6 +2577,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa - /* [Jack ...] */ - { "state.plugged", jack_parse_state, NULL, NULL }, - { "state.unplugged", jack_parse_state, NULL, NULL }, -+ { "append-pcm-to-name", jack_parse_append_pcm_to_name, NULL, NULL }, - - /* [Element ...] */ - { "switch", element_parse_switch, NULL, NULL }, -@@ -2746,7 +2790,7 @@ static void path_create_settings(pa_alsa_path *p) { - element_create_settings(p->elements, NULL); - } - --int pa_alsa_path_probe(pa_alsa_path *p, snd_mixer_t *m, bool ignore_dB) { -+int pa_alsa_path_probe(pa_alsa_path *p, pa_alsa_mapping *mapping, snd_mixer_t *m, bool ignore_dB) { - pa_alsa_element *e; - pa_alsa_jack *j; - double min_dB[PA_CHANNEL_POSITION_MAX], max_dB[PA_CHANNEL_POSITION_MAX]; -@@ -2766,7 +2810,7 @@ int pa_alsa_path_probe(pa_alsa_path *p, snd_mixer_t *m, bool ignore_dB) { - pa_log_debug("Probing path '%s'", p->name); - - PA_LLIST_FOREACH(j, p->jacks) { -- if (jack_probe(j, m) < 0) { -+ if (jack_probe(j, mapping, m) < 0) { - p->supported = false; - pa_log_debug("Probe of jack '%s' failed.", j->alsa_name); - return -1; -@@ -3968,9 +4012,8 @@ static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile, - } - - PA_HASHMAP_FOREACH(p, ps->paths, state) { -- if (pa_alsa_path_probe(p, mixer_handle, m->profile_set->ignore_dB) < 0) { -+ if (pa_alsa_path_probe(p, m, mixer_handle, m->profile_set->ignore_dB) < 0) - pa_hashmap_remove(ps->paths, p); -- } - } - - path_set_condense(ps, mixer_handle); -diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h -index cb482906b..7ae40511c 100644 ---- a/src/modules/alsa/alsa-mixer.h -+++ b/src/modules/alsa/alsa-mixer.h -@@ -171,6 +171,8 @@ struct pa_alsa_jack { - - pa_dynarray *ucm_devices; /* pa_alsa_ucm_device */ - pa_dynarray *ucm_hw_mute_devices; /* pa_alsa_ucm_device */ -+ -+ bool append_pcm_to_name; - }; - - pa_alsa_jack *pa_alsa_jack_new(pa_alsa_path *path, const char *name); -@@ -234,7 +236,7 @@ void pa_alsa_element_dump(pa_alsa_element *e); - - pa_alsa_path *pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa_direction_t direction); - pa_alsa_path *pa_alsa_path_synthesize(const char *element, pa_alsa_direction_t direction); --int pa_alsa_path_probe(pa_alsa_path *p, snd_mixer_t *m, bool ignore_dB); -+int pa_alsa_path_probe(pa_alsa_path *p, pa_alsa_mapping *mapping, snd_mixer_t *m, bool ignore_dB); - void pa_alsa_path_dump(pa_alsa_path *p); - int pa_alsa_path_get_volume(pa_alsa_path *p, snd_mixer_t *m, const pa_channel_map *cm, pa_cvolume *v); - int pa_alsa_path_get_mute(pa_alsa_path *path, snd_mixer_t *m, bool *muted); -diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c -index 827a65081..99ca5061b 100644 ---- a/src/modules/alsa/alsa-sink.c -+++ b/src/modules/alsa/alsa-sink.c -@@ -1912,7 +1912,7 @@ static void find_mixer(struct userdata *u, pa_alsa_mapping *mapping, const char - if (!(u->mixer_path = pa_alsa_path_synthesize(element, PA_ALSA_DIRECTION_OUTPUT))) - goto fail; - -- if (pa_alsa_path_probe(u->mixer_path, u->mixer_handle, ignore_dB) < 0) -+ if (pa_alsa_path_probe(u->mixer_path, NULL, u->mixer_handle, ignore_dB) < 0) - goto fail; - - pa_log_debug("Probed mixer path %s:", u->mixer_path->name); -diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c -index 6bec188ea..84abbf1d9 100644 ---- a/src/modules/alsa/alsa-source.c -+++ b/src/modules/alsa/alsa-source.c -@@ -1615,7 +1615,7 @@ static void find_mixer(struct userdata *u, pa_alsa_mapping *mapping, const char - if (!(u->mixer_path = pa_alsa_path_synthesize(element, PA_ALSA_DIRECTION_INPUT))) - goto fail; - -- if (pa_alsa_path_probe(u->mixer_path, u->mixer_handle, ignore_dB) < 0) -+ if (pa_alsa_path_probe(u->mixer_path, NULL, u->mixer_handle, ignore_dB) < 0) - goto fail; - - pa_log_debug("Probed mixer path %s:", u->mixer_path->name); -diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common -index 17b45278a..baf37660e 100644 ---- a/src/modules/alsa/mixer/paths/analog-output.conf.common -+++ b/src/modules/alsa/mixer/paths/analog-output.conf.common -@@ -122,6 +122,10 @@ - ; # the required-any are present. - ; state.plugged = yes | no | unknown # Normally a plugged jack would mean the port becomes available, and an unplugged means it's - ; state.unplugged = yes | no | unknown # unavailable, but the port status can be overridden by specifying state.plugged and/or state.unplugged. -+; append-pcm-to-name = no | yes # Add ",pcm=N" to the jack name? N is the hw PCM device index. HDMI jacks have -+; # the PCM device index in their name, but different drivers use different -+; # numbering schemes, so we can't hardcode the full jack name in our configuration -+; # files. - - [Element PCM] - switch = mute -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-0.conf b/src/modules/alsa/mixer/paths/hdmi-output-0.conf -index 331014709..a87205cea 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-0.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-0.conf -@@ -6,5 +6,6 @@ eld-device = 3 - [Properties] - device.icon_name = video-display - --[Jack HDMI/DP,pcm=3] -+[Jack HDMI/DP] -+append-pcm-to-name = yes - required = ignore -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-1.conf b/src/modules/alsa/mixer/paths/hdmi-output-1.conf -index d81ee789c..b513ffd70 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-1.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-1.conf -@@ -6,5 +6,6 @@ eld-device = 7 - [Properties] - device.icon_name = video-display - --[Jack HDMI/DP,pcm=7] -+[Jack HDMI/DP] -+append-pcm-to-name = yes - required = ignore -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-2.conf b/src/modules/alsa/mixer/paths/hdmi-output-2.conf -index 349812fc2..a2386650e 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-2.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-2.conf -@@ -6,5 +6,6 @@ eld-device = 8 - [Properties] - device.icon_name = video-display - --[Jack HDMI/DP,pcm=8] -+[Jack HDMI/DP] -+append-pcm-to-name = yes - required = ignore -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-3.conf b/src/modules/alsa/mixer/paths/hdmi-output-3.conf -index 81463c946..edceb36e1 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-3.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-3.conf -@@ -6,5 +6,6 @@ eld-device = 9 - [Properties] - device.icon_name = video-display - --[Jack HDMI/DP,pcm=9] -+[Jack HDMI/DP] -+append-pcm-to-name = yes - required = ignore -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-4.conf b/src/modules/alsa/mixer/paths/hdmi-output-4.conf -index d61ec7547..0d1401eef 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-4.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-4.conf -@@ -6,5 +6,6 @@ eld-device = 10 - [Properties] - device.icon_name = video-display - --[Jack HDMI/DP,pcm=10] -+[Jack HDMI/DP] -+append-pcm-to-name = yes - required = ignore -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-5.conf b/src/modules/alsa/mixer/paths/hdmi-output-5.conf -index 02c15e893..883cccc20 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-5.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-5.conf -@@ -6,5 +6,6 @@ eld-device = 11 - [Properties] - device.icon_name = video-display - --[Jack HDMI/DP,pcm=11] -+[Jack HDMI/DP] -+append-pcm-to-name = yes - required = ignore -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-6.conf b/src/modules/alsa/mixer/paths/hdmi-output-6.conf -index 188a1adb3..d8ac2f55c 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-6.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-6.conf -@@ -6,5 +6,6 @@ eld-device = 12 - [Properties] - device.icon_name = video-display - --[Jack HDMI/DP,pcm=12] -+[Jack HDMI/DP] -+append-pcm-to-name = yes - required = ignore -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-7.conf b/src/modules/alsa/mixer/paths/hdmi-output-7.conf -index 80f4e3722..dd090855f 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-7.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-7.conf -@@ -6,5 +6,6 @@ eld-device = 13 - [Properties] - device.icon_name = video-display - --[Jack HDMI/DP,pcm=13] -+[Jack HDMI/DP] -+append-pcm-to-name = yes - required = ignore - -From patchwork Sun Oct 8 16:48:26 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [v2,3/3] alsa-mixer: autodetect the ELD device -From: Tanu Kaskinen -X-Patchwork-Id: 181165 -Message-Id: <20171008164826.7588-4-tanuk@iki.fi> -To: pulseaudio-discuss@lists.freedesktop.org -Date: Sun, 8 Oct 2017 19:48:26 +0300 - -This removes the need to hardcode the ELD device index in the path -configuration. The hardcoded values don't work with the Intel HDMI LPE -driver. - -BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=100488 ---- - src/modules/alsa/alsa-mixer.c | 28 ++++++++++++++++++++-- - src/modules/alsa/alsa-mixer.h | 1 + - .../alsa/mixer/paths/analog-output.conf.common | 8 +++++-- - src/modules/alsa/mixer/paths/hdmi-output-0.conf | 2 +- - src/modules/alsa/mixer/paths/hdmi-output-1.conf | 2 +- - src/modules/alsa/mixer/paths/hdmi-output-2.conf | 2 +- - src/modules/alsa/mixer/paths/hdmi-output-3.conf | 2 +- - src/modules/alsa/mixer/paths/hdmi-output-4.conf | 2 +- - src/modules/alsa/mixer/paths/hdmi-output-5.conf | 2 +- - src/modules/alsa/mixer/paths/hdmi-output-6.conf | 2 +- - src/modules/alsa/mixer/paths/hdmi-output-7.conf | 2 +- - 11 files changed, 41 insertions(+), 12 deletions(-) - -diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c -index eaee7ea0a..a524d6d64 100644 ---- a/src/modules/alsa/alsa-mixer.c -+++ b/src/modules/alsa/alsa-mixer.c -@@ -2051,6 +2051,28 @@ static int element_parse_enumeration(pa_config_parser_state *state) { - return 0; - } - -+static int parse_eld_device(pa_config_parser_state *state) { -+ pa_alsa_path *path; -+ uint32_t eld_device; -+ -+ path = state->userdata; -+ -+ if (pa_atou(state->rvalue, &eld_device) >= 0) { -+ path->autodetect_eld_device = false; -+ path->eld_device = eld_device; -+ return 0; -+ } -+ -+ if (pa_streq(state->rvalue, "auto")) { -+ path->autodetect_eld_device = true; -+ path->eld_device = -1; -+ return 0; -+ } -+ -+ pa_log("[%s:%u] Invalid value for option 'eld-device': %s", state->filename, state->lineno, state->rvalue); -+ return -1; -+} -+ - static int option_parse_priority(pa_config_parser_state *state) { - pa_alsa_path *p; - pa_alsa_option *o; -@@ -2568,7 +2590,7 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa - { "description-key", pa_config_parse_string, NULL, "General" }, - { "description", pa_config_parse_string, NULL, "General" }, - { "mute-during-activation", pa_config_parse_bool, NULL, "General" }, -- { "eld-device", pa_config_parse_int, NULL, "General" }, -+ { "eld-device", parse_eld_device, NULL, "General" }, - - /* [Option ...] */ - { "priority", option_parse_priority, NULL, NULL }, -@@ -2608,7 +2630,6 @@ pa_alsa_path* pa_alsa_path_new(const char *paths_dir, const char *fname, pa_alsa - items[1].data = &p->description_key; - items[2].data = &p->description; - items[3].data = &mute_during_activation; -- items[4].data = &p->eld_device; - - if (!paths_dir) - paths_dir = get_default_paths_dir(); -@@ -4012,6 +4033,9 @@ static void mapping_paths_probe(pa_alsa_mapping *m, pa_alsa_profile *profile, - } - - PA_HASHMAP_FOREACH(p, ps->paths, state) { -+ if (p->autodetect_eld_device) -+ p->eld_device = m->hw_device_index; -+ - if (pa_alsa_path_probe(p, m, mixer_handle, m->profile_set->ignore_dB) < 0) - pa_hashmap_remove(ps->paths, p); - } -diff --git a/src/modules/alsa/alsa-mixer.h b/src/modules/alsa/alsa-mixer.h -index 7ae40511c..15615a615 100644 ---- a/src/modules/alsa/alsa-mixer.h -+++ b/src/modules/alsa/alsa-mixer.h -@@ -193,6 +193,7 @@ struct pa_alsa_path { - char *description_key; - char *description; - unsigned priority; -+ bool autodetect_eld_device; - int eld_device; - pa_proplist *proplist; - -diff --git a/src/modules/alsa/mixer/paths/analog-output.conf.common b/src/modules/alsa/mixer/paths/analog-output.conf.common -index baf37660e..e52830d99 100644 ---- a/src/modules/alsa/mixer/paths/analog-output.conf.common -+++ b/src/modules/alsa/mixer/paths/analog-output.conf.common -@@ -64,8 +64,12 @@ - ; mute-during-activation = yes | no # If this path supports hardware mute, should the hw mute be used while activating this - ; # path? In some cases this can reduce extra noises during port switching, while in other - ; # cases this can increase such noises. Default: no. --; eld-device = ... # If this is an HDMI port, here's where to specify the device number for the ELD mixer --; # control. The default is to not make use of ELD information. -+; eld-device = ... # If this is an HDMI port, set to "auto" so that PulseAudio will try to read -+; # the monitor ELD information from the ALSA mixer. By default the ELD information -+; # is not read, because it's only applicable with HDMI. Earlier the "auto" option -+; # didn't exist, and the hw device index had to be manually configured. For -+; # backwards compatibility, it's still possible to manually configure the device -+; # index using this option. - ; - ; [Properties] # Property list for this path. The list is merged into the port property list. - ; = # Each property is defined on its own line. -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-0.conf b/src/modules/alsa/mixer/paths/hdmi-output-0.conf -index a87205cea..95b1342e9 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-0.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-0.conf -@@ -1,7 +1,7 @@ - [General] - description = HDMI / DisplayPort - priority = 59 --eld-device = 3 -+eld-device = auto - - [Properties] - device.icon_name = video-display -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-1.conf b/src/modules/alsa/mixer/paths/hdmi-output-1.conf -index b513ffd70..37b945204 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-1.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-1.conf -@@ -1,7 +1,7 @@ - [General] - description = HDMI / DisplayPort 2 - priority = 58 --eld-device = 7 -+eld-device = auto - - [Properties] - device.icon_name = video-display -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-2.conf b/src/modules/alsa/mixer/paths/hdmi-output-2.conf -index a2386650e..19c38f2e8 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-2.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-2.conf -@@ -1,7 +1,7 @@ - [General] - description = HDMI / DisplayPort 3 - priority = 57 --eld-device = 8 -+eld-device = auto - - [Properties] - device.icon_name = video-display -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-3.conf b/src/modules/alsa/mixer/paths/hdmi-output-3.conf -index edceb36e1..8551570ac 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-3.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-3.conf -@@ -1,7 +1,7 @@ - [General] - description = HDMI / DisplayPort 4 - priority = 56 --eld-device = 9 -+eld-device = auto - - [Properties] - device.icon_name = video-display -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-4.conf b/src/modules/alsa/mixer/paths/hdmi-output-4.conf -index 0d1401eef..e36128921 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-4.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-4.conf -@@ -1,7 +1,7 @@ - [General] - description = HDMI / DisplayPort 5 - priority = 55 --eld-device = 10 -+eld-device = auto - - [Properties] - device.icon_name = video-display -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-5.conf b/src/modules/alsa/mixer/paths/hdmi-output-5.conf -index 883cccc20..82dc3be79 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-5.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-5.conf -@@ -1,7 +1,7 @@ - [General] - description = HDMI / DisplayPort 6 - priority = 54 --eld-device = 11 -+eld-device = auto - - [Properties] - device.icon_name = video-display -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-6.conf b/src/modules/alsa/mixer/paths/hdmi-output-6.conf -index d8ac2f55c..92e8fd1e2 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-6.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-6.conf -@@ -1,7 +1,7 @@ - [General] - description = HDMI / DisplayPort 7 - priority = 53 --eld-device = 12 -+eld-device = auto - - [Properties] - device.icon_name = video-display -diff --git a/src/modules/alsa/mixer/paths/hdmi-output-7.conf b/src/modules/alsa/mixer/paths/hdmi-output-7.conf -index dd090855f..abe2b60e6 100644 ---- a/src/modules/alsa/mixer/paths/hdmi-output-7.conf -+++ b/src/modules/alsa/mixer/paths/hdmi-output-7.conf -@@ -1,7 +1,7 @@ - [General] - description = HDMI / DisplayPort 8 - priority = 52 --eld-device = 13 -+eld-device = auto - - [Properties] - device.icon_name = video-display diff --git a/SOURCES/Fix-realtime-scheduling-on-byt-cht.patch b/SOURCES/Fix-realtime-scheduling-on-byt-cht.patch deleted file mode 100644 index 810c1ce..0000000 --- a/SOURCES/Fix-realtime-scheduling-on-byt-cht.patch +++ /dev/null @@ -1,62 +0,0 @@ -From patchwork Wed Nov 8 12:20:22 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [1/2] card-restore: log the correct profile name -From: Tanu Kaskinen -X-Patchwork-Id: 187101 -Message-Id: <20171108122023.8147-2-tanuk@iki.fi> -To: pulseaudio-discuss@lists.freedesktop.org -Date: Wed, 8 Nov 2017 14:20:22 +0200 - ---- - src/modules/module-card-restore.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/modules/module-card-restore.c b/src/modules/module-card-restore.c -index 3c0307bee..2d3a91c01 100644 ---- a/src/modules/module-card-restore.c -+++ b/src/modules/module-card-restore.c -@@ -561,7 +561,7 @@ static pa_hook_result_t card_choose_initial_profile_callback(pa_core *core, pa_c - - profile = pa_hashmap_get(card->profiles, e->profile); - if (profile) { -- pa_log_info("Restoring profile '%s' for card %s.", card->active_profile->name, card->name); -+ pa_log_info("Restoring profile '%s' for card %s.", profile->name, card->name); - pa_card_set_profile(card, profile, true); - } else { - pa_log_debug("Tried to restore profile %s for card %s, but the card doesn't have such profile.", -From patchwork Wed Nov 8 12:20:23 2017 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [2/2] card-restore: don't restore unavailable profiles -From: Tanu Kaskinen -X-Patchwork-Id: 187102 -Message-Id: <20171108122023.8147-3-tanuk@iki.fi> -To: pulseaudio-discuss@lists.freedesktop.org -Date: Wed, 8 Nov 2017 14:20:23 +0200 - ---- - src/modules/module-card-restore.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/modules/module-card-restore.c b/src/modules/module-card-restore.c -index 2d3a91c01..b7189ad53 100644 ---- a/src/modules/module-card-restore.c -+++ b/src/modules/module-card-restore.c -@@ -561,8 +561,12 @@ static pa_hook_result_t card_choose_initial_profile_callback(pa_core *core, pa_c - - profile = pa_hashmap_get(card->profiles, e->profile); - if (profile) { -- pa_log_info("Restoring profile '%s' for card %s.", profile->name, card->name); -- pa_card_set_profile(card, profile, true); -+ if (profile->available != PA_AVAILABLE_NO) { -+ pa_log_info("Restoring profile '%s' for card %s.", profile->name, card->name); -+ pa_card_set_profile(card, profile, true); -+ } else -+ pa_log_debug("Not restoring profile %s for card %s, because the profile is currently unavailable.", -+ profile->name, card->name); - } else { - pa_log_debug("Tried to restore profile %s for card %s, but the card doesn't have such profile.", - e->profile, card->name); diff --git a/SOURCES/pulseaudio-11.1-exit_idle_time-2.patch b/SOURCES/pulseaudio-11.1-exit_idle_time-2.patch deleted file mode 100644 index e648398..0000000 --- a/SOURCES/pulseaudio-11.1-exit_idle_time-2.patch +++ /dev/null @@ -1,102 +0,0 @@ -diff -up pulseaudio-11.1/src/modules/module-console-kit.c.foo pulseaudio-11.1/src/modules/module-console-kit.c ---- pulseaudio-11.1/src/modules/module-console-kit.c.foo 2016-08-23 07:50:10.000000000 -0500 -+++ pulseaudio-11.1/src/modules/module-console-kit.c 2018-02-28 11:01:50.138465311 -0600 -@@ -120,6 +120,19 @@ static void add_session(struct userdata - - pa_log_debug("Added new session %s", id); - -+ /* Positive exit_idle_time is only useful when we have no session tracking -+ * capability, so we can set it to 0 now that we have detected a session. -+ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit -+ * immediately when the session ends. That in turn is useful, because some -+ * systems (those that use pam_systemd but don't use systemd for managing -+ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all -+ * services that depend on the files in $XDG_RUNTIME_DIR. The directory -+ * contains our sockets, and if the sockets are removed without terminating -+ * pulseaudio, a quick relogin will likely cause trouble, because a new -+ * instance will be spawned while the old instance is still running. */ -+ if (u->core->exit_idle_time > 0) -+ pa_core_set_exit_idle_time(u->core, 0); -+ - fail: - - if (m) -diff -up pulseaudio-11.1/src/modules/module-systemd-login.c.foo pulseaudio-11.1/src/modules/module-systemd-login.c ---- pulseaudio-11.1/src/modules/module-systemd-login.c.foo 2018-02-28 11:01:50.138465311 -0600 -+++ pulseaudio-11.1/src/modules/module-systemd-login.c 2018-02-28 11:03:06.053396460 -0600 -@@ -86,6 +86,20 @@ static int add_session(struct userdata * - pa_hashmap_put(u->sessions, session->id, session); - - pa_log_debug("Added new session %s", id); -+ -+ /* Positive exit_idle_time is only useful when we have no session tracking -+ * capability, so we can set it to 0 now that we have detected a session. -+ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit -+ * immediately when the session ends. That in turn is useful, because some -+ * systems (those that use pam_systemd but don't use systemd for managing -+ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all -+ * services that depend on the files in $XDG_RUNTIME_DIR. The directory -+ * contains our sockets, and if the sockets are removed without terminating -+ * pulseaudio, a quick relogin will likely cause trouble, because a new -+ * instance will be spawned while the old instance is still running. */ -+ if (u->core->exit_idle_time > 0) -+ pa_core_set_exit_idle_time(u->core, 0); -+ - return 0; - } - -diff -up pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c.foo pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c ---- pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c.foo 2016-08-23 07:50:10.000000000 -0500 -+++ pulseaudio-11.1/src/modules/x11/module-x11-xsmp.c 2018-02-28 11:01:50.138465311 -0600 -@@ -208,6 +208,19 @@ int pa__init(pa_module*m) { - if (!u->client) - goto fail; - -+ /* Positive exit_idle_time is only useful when we have no session tracking -+ * capability, so we can set it to 0 now that we have detected a session. -+ * The benefit of setting exit_idle_time to 0 is that pulseaudio will exit -+ * immediately when the session ends. That in turn is useful, because some -+ * systems (those that use pam_systemd but don't use systemd for managing -+ * pulseaudio) clean $XDG_RUNTIME_DIR on logout, but fail to terminate all -+ * services that depend on the files in $XDG_RUNTIME_DIR. The directory -+ * contains our sockets, and if the sockets are removed without terminating -+ * pulseaudio, a quick relogin will likely cause trouble, because a new -+ * instance will be spawned while the old instance is still running. */ -+ if (u->core->exit_idle_time > 0) -+ pa_core_set_exit_idle_time(u->core, 0); -+ - pa_modargs_free(ma); - - return 0; -diff -up pulseaudio-11.1/src/pulsecore/core.c.foo pulseaudio-11.1/src/pulsecore/core.c ---- pulseaudio-11.1/src/pulsecore/core.c.foo 2018-02-28 11:01:50.137465298 -0600 -+++ pulseaudio-11.1/src/pulsecore/core.c 2018-02-28 11:01:50.139465323 -0600 -@@ -426,6 +426,16 @@ void pa_core_update_default_source(pa_co - pa_hook_fire(&core->hooks[PA_CORE_HOOK_DEFAULT_SOURCE_CHANGED], core->default_source); - } - -+void pa_core_set_exit_idle_time(pa_core *core, int time) { -+ pa_assert(core); -+ -+ if (time == core->exit_idle_time) -+ return; -+ -+ pa_log_info("exit_idle_time: %i -> %i", core->exit_idle_time, time); -+ core->exit_idle_time = time; -+} -+ - static void exit_callback(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) { - pa_core *c = userdata; - pa_assert(c->exit_event == e); -diff -up pulseaudio-11.1/src/pulsecore/core.h.foo pulseaudio-11.1/src/pulsecore/core.h ---- pulseaudio-11.1/src/pulsecore/core.h.foo 2018-02-28 11:01:50.120465090 -0600 -+++ pulseaudio-11.1/src/pulsecore/core.h 2018-02-28 11:01:50.139465323 -0600 -@@ -255,6 +255,8 @@ void pa_core_set_configured_default_sour - void pa_core_update_default_sink(pa_core *core); - void pa_core_update_default_source(pa_core *core); - -+void pa_core_set_exit_idle_time(pa_core *core, int time); -+ - /* Check whether no one is connected to this core */ - void pa_core_check_idle(pa_core *c); - diff --git a/SOURCES/pulseaudio-11.1-glibc_memfd.patch b/SOURCES/pulseaudio-11.1-glibc_memfd.patch deleted file mode 100644 index 085b7c9..0000000 --- a/SOURCES/pulseaudio-11.1-glibc_memfd.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff -up pulseaudio-11.1/src/pulsecore/memfd-wrappers.h.glibc_memfd pulseaudio-11.1/src/pulsecore/memfd-wrappers.h ---- pulseaudio-11.1/src/pulsecore/memfd-wrappers.h.glibc_memfd 2016-08-23 07:50:11.000000000 -0500 -+++ pulseaudio-11.1/src/pulsecore/memfd-wrappers.h 2018-01-22 12:30:23.322574380 -0600 -@@ -33,9 +33,9 @@ - * a whole conflicts with the original glibc header . - */ - --static inline int memfd_create(const char *name, unsigned int flags) { -+/* static inline int memfd_create(const char *name, unsigned int flags) { - return syscall(SYS_memfd_create, name, flags); --} -+} */ - - /* memfd_create(2) flags */ - diff --git a/SOURCES/pulseaudio-11.1.tar.xz.md5 b/SOURCES/pulseaudio-11.1.tar.xz.md5 deleted file mode 100644 index b9ad33e..0000000 --- a/SOURCES/pulseaudio-11.1.tar.xz.md5 +++ /dev/null @@ -1 +0,0 @@ -390de38231d5cdd6b43ada8939eb74f1 pulseaudio-11.1.tar.xz diff --git a/SOURCES/pulseaudio-11.1.tar.xz.sha1 b/SOURCES/pulseaudio-11.1.tar.xz.sha1 deleted file mode 100644 index ce5f6d9..0000000 --- a/SOURCES/pulseaudio-11.1.tar.xz.sha1 +++ /dev/null @@ -1 +0,0 @@ -53bde72b6bfe715c19b1519db8845f7a58346b67 pulseaudio-11.1.tar.xz diff --git a/SOURCES/pulseaudio-13.99.1.tar.xz.sha256 b/SOURCES/pulseaudio-13.99.1.tar.xz.sha256 new file mode 100644 index 0000000..146d114 --- /dev/null +++ b/SOURCES/pulseaudio-13.99.1.tar.xz.sha256 @@ -0,0 +1 @@ +e6a111cc078e6039bf657a3fd1f73dc804c8ee362ca03a0732dc5c38c13e0a0c pulseaudio-13.99.1.tar.xz diff --git a/SOURCES/pulseaudio-8.99.2-getaffinity.patch b/SOURCES/pulseaudio-8.99.2-getaffinity.patch deleted file mode 100644 index adc0f14..0000000 --- a/SOURCES/pulseaudio-8.99.2-getaffinity.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up pulseaudio-8.99.2/src/tests/once-test.c.than pulseaudio-8.99.2/src/tests/once-test.c ---- pulseaudio-8.99.2/src/tests/once-test.c.than 2016-06-22 10:20:57.127583628 -0400 -+++ pulseaudio-8.99.2/src/tests/once-test.c 2016-06-22 10:59:38.905573634 -0400 -@@ -70,7 +70,7 @@ static void thread_func(void *data) { - #endif - - CPU_ZERO(&mask); -- CPU_SET((size_t) (pa_atomic_inc(&i_cpu) % n_cpu), &mask); -+ CPU_SET(pthread_getaffinity_np(pthread_self(), sizeof(mask), &mask), &mask); - fail_unless(pthread_setaffinity_np(pthread_self(), sizeof(mask), &mask) == 0); - #endif - diff --git a/SOURCES/pulseaudio-9.0-disable_flat_volumes.patch b/SOURCES/pulseaudio-9.0-disable_flat_volumes.patch deleted file mode 100644 index 3e489d6..0000000 --- a/SOURCES/pulseaudio-9.0-disable_flat_volumes.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff -up pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in.disable_flat_volumes pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in ---- pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in.disable_flat_volumes 2016-05-26 23:21:17.000000000 -0500 -+++ pulseaudio-8.99.2/man/pulse-daemon.conf.5.xml.in 2016-05-31 10:01:55.679976730 -0500 -@@ -220,7 +220,7 @@ License along with PulseAudio; if not, s -

flat-volumes= Enable 'flat' volumes, i.e. where - possible let the sink volume equal the maximum of the volumes of - the inputs connected to it. Takes a boolean argument, defaults -- to yes.

-+ to no.

- - - -diff -up pulseaudio-8.99.2/src/daemon/daemon-conf.c.disable_flat_volumes pulseaudio-8.99.2/src/daemon/daemon-conf.c ---- pulseaudio-8.99.2/src/daemon/daemon-conf.c.disable_flat_volumes 2016-05-26 23:21:17.000000000 -0500 -+++ pulseaudio-8.99.2/src/daemon/daemon-conf.c 2016-05-31 10:01:55.680976735 -0500 -@@ -68,7 +68,7 @@ static const pa_daemon_conf default_conf - .realtime_priority = 5, /* Half of JACK's default rtprio */ - .disallow_module_loading = false, - .disallow_exit = false, -- .flat_volumes = true, -+ .flat_volumes = false, - .exit_idle_time = 20, - .scache_idle_time = 20, - .script_commands = NULL, -diff -up pulseaudio-8.99.2/src/daemon/daemon.conf.in.disable_flat_volumes pulseaudio-8.99.2/src/daemon/daemon.conf.in ---- pulseaudio-8.99.2/src/daemon/daemon.conf.in.disable_flat_volumes 2016-05-31 10:01:55.680976735 -0500 -+++ pulseaudio-8.99.2/src/daemon/daemon.conf.in 2016-05-31 10:02:28.048133267 -0500 -@@ -57,7 +57,7 @@ ifelse(@HAVE_DBUS@, 1, [dnl - ; enable-lfe-remixing = no - ; lfe-crossover-freq = 0 - --; flat-volumes = yes -+; flat-volumes = no - - ifelse(@HAVE_SYS_RESOURCE_H@, 1, [dnl - ; rlimit-fsize = -1 -diff -up pulseaudio-8.99.2/src/pulsecore/core.c.disable_flat_volumes pulseaudio-8.99.2/src/pulsecore/core.c ---- pulseaudio-8.99.2/src/pulsecore/core.c.disable_flat_volumes 2016-05-26 23:21:17.000000000 -0500 -+++ pulseaudio-8.99.2/src/pulsecore/core.c 2016-05-31 10:01:55.681976740 -0500 -@@ -135,7 +135,7 @@ pa_core* pa_core_new(pa_mainloop_api *m, - c->exit_idle_time = -1; - c->scache_idle_time = 20; - -- c->flat_volumes = true; -+ c->flat_volumes = false; - c->disallow_module_loading = false; - c->disallow_exit = false; - c->running_as_daemon = false; diff --git a/SOURCES/pulseaudio-autostart.patch b/SOURCES/pulseaudio-autostart.patch index eb44bdb..6b18fce 100644 --- a/SOURCES/pulseaudio-autostart.patch +++ b/SOURCES/pulseaudio-autostart.patch @@ -1,6 +1,5 @@ -diff -up pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in ---- pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart 2015-02-12 08:10:35.000000000 -0600 -+++ pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in 2015-06-22 11:24:13.561614127 -0500 +--- pulseaudio-13.99.1/src/daemon/start-pulseaudio-x11.in 2020-05-11 17:35:39.857484912 +0200 ++++ pulseaudio-13.99.1.new/src/daemon/start-pulseaudio-x11.in 2020-05-11 17:35:53.041199783 +0200 @@ -17,6 +17,9 @@ set -e @@ -10,4 +9,4 @@ diff -up pulseaudio-6.0/src/daemon/start-pulseaudio-x11.in.autostart pulseaudio- + if [ x"$DISPLAY" != x ] ; then - @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY" > /dev/null + @PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY xauthority=$XAUTHORITY" > /dev/null diff --git a/SOURCES/pulseaudio-python3.patch b/SOURCES/pulseaudio-python3.patch deleted file mode 100644 index adec1d4..0000000 --- a/SOURCES/pulseaudio-python3.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff -up pulseaudio-11.1/src/depmod.py.me pulseaudio-11.1/src/depmod.py ---- pulseaudio-11.1/src/depmod.py.me 2018-06-22 11:18:07.718411268 +0200 -+++ pulseaudio-11.1/src/depmod.py 2018-06-22 11:36:42.575023103 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/python -+#!/usr/bin/python3 - - # This file is part of PulseAudio. - # -@@ -60,11 +60,10 @@ for fn in imported_symbols: - else: - unresolved_symbols[sym] = [fn] - --for sym, files in unresolved_symbols.iteritems(): -- print "WARNING: Unresolved symbol '%s' in %s" % (sym, `files`) -+for sym, files in unresolved_symbols.items(): -+ print ("WARNING: Unresolved symbol '%s' in %s" % (sym, files)) - --k = dependencies.keys() --k.sort() -+k = sorted(dependencies) - for fn in k: - dependencies[fn].sort() -- print "%s: %s" % (fn, string.join(dependencies[fn], " ")) -+ print ("%s: %s" % (fn, string.join(dependencies[fn], " "))) -diff -up pulseaudio-11.1/src/utils/qpaeq.me pulseaudio-11.1/src/utils/qpaeq ---- pulseaudio-11.1/src/utils/qpaeq.me 2018-06-22 11:16:31.966787327 +0200 -+++ pulseaudio-11.1/src/utils/qpaeq 2018-06-22 11:17:57.482451346 +0200 -@@ -1,4 +1,4 @@ --#!/usr/bin/env python -+#!/usr/bin/python3 - # qpaeq is a equalizer interface for pulseaudio's equalizer sinks - # Copyright (C) 2009 Jason Newton profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) { -+ if (t->profile == PA_BLUETOOTH_PROFILE_HSP_HS) { - len = sprintf(buf, "\r\n+VGS=%d\r\n", gain); - pa_log_debug("RFCOMM >> +VGS=%d", gain); - } else { -@@ -476,7 +476,7 @@ static void set_microphone_gain(pa_bluetooth_transport *t, uint16_t gain) { - /* If we are in the AG role, we send a command to the head set to change - * the microphone gain. In the HS role, source and sink are swapped, so - * in this case we notify the AG that the speaker gain has changed */ -- if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) { -+ if (t->profile == PA_BLUETOOTH_PROFILE_HSP_HS) { - len = sprintf(buf, "\r\n+VGM=%d\r\n", gain); - pa_log_debug("RFCOMM >> +VGM=%d", gain); - } else { -@@ -509,9 +509,9 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m, - - handler = dbus_message_get_path(m); - if (pa_streq(handler, HSP_AG_PROFILE)) { -- p = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT; -+ p = PA_BLUETOOTH_PROFILE_HSP_HS; - } else if (pa_streq(handler, HSP_HS_PROFILE)) { -- p = PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY; -+ p = PA_BLUETOOTH_PROFILE_HFP_AG; - } else { - pa_log_error("Invalid handler"); - goto fail; -@@ -626,11 +626,11 @@ static void profile_init(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile - pa_assert(b); - - switch (profile) { -- case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT: -+ case PA_BLUETOOTH_PROFILE_HSP_HS: - object_name = HSP_AG_PROFILE; - uuid = PA_BLUETOOTH_UUID_HSP_AG; - break; -- case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY: -+ case PA_BLUETOOTH_PROFILE_HFP_AG: - object_name = HSP_HS_PROFILE; - uuid = PA_BLUETOOTH_UUID_HSP_HS; - break; -@@ -647,10 +647,10 @@ static void profile_done(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile - pa_assert(b); - - switch (profile) { -- case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT: -+ case PA_BLUETOOTH_PROFILE_HSP_HS: - dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HSP_AG_PROFILE); - break; -- case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY: -+ case PA_BLUETOOTH_PROFILE_HFP_AG: - dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HSP_HS_PROFILE); - break; - default: -@@ -665,9 +665,9 @@ void pa_bluetooth_native_backend_enable_hs_role(pa_bluetooth_backend *native_bac - return; - - if (enable_hs_role) -- profile_init(native_backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY); -+ profile_init(native_backend, PA_BLUETOOTH_PROFILE_HFP_AG); - else -- profile_done(native_backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY); -+ profile_done(native_backend, PA_BLUETOOTH_PROFILE_HFP_AG); - - native_backend->enable_hs_role = enable_hs_role; - } -@@ -693,8 +693,8 @@ pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_d - backend->enable_hs_role = enable_hs_role; - - if (enable_hs_role) -- profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY); -- profile_init(backend, PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT); -+ profile_init(backend, PA_BLUETOOTH_PROFILE_HFP_AG); -+ profile_init(backend, PA_BLUETOOTH_PROFILE_HSP_HS); - - return backend; - } -@@ -705,8 +705,8 @@ void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) { - pa_dbus_free_pending_list(&backend->pending); - - if (backend->enable_hs_role) -- profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY); -- profile_done(backend, PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT); -+ profile_done(backend, PA_BLUETOOTH_PROFILE_HFP_AG); -+ profile_done(backend, PA_BLUETOOTH_PROFILE_HSP_HS); - - pa_dbus_connection_unref(backend->connection); - -diff --git a/src/modules/bluetooth/backend-ofono.c b/src/modules/bluetooth/backend-ofono.c -index 2c51497f..85b9c477 100644 ---- a/src/modules/bluetooth/backend-ofono.c -+++ b/src/modules/bluetooth/backend-ofono.c -@@ -223,7 +223,7 @@ static void hf_audio_agent_card_found(pa_bluetooth_backend *backend, const char - const char *key, *value; - struct hf_audio_card *card; - pa_bluetooth_device *d; -- pa_bluetooth_profile_t p = PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY; -+ pa_bluetooth_profile_t p = PA_BLUETOOTH_PROFILE_HFP_AG; - - pa_assert(backend); - pa_assert(path); -@@ -257,7 +257,7 @@ static void hf_audio_agent_card_found(pa_bluetooth_backend *backend, const char - card->local_address = pa_xstrdup(value); - } else if (pa_streq(key, "Type")) { - if (pa_streq(value, "gateway")) -- p = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT; -+ p = PA_BLUETOOTH_PROFILE_HSP_HS; - } - - pa_log_debug("%s: %s", key, value); -diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c -index c9283232..4470f2ef 100644 ---- a/src/modules/bluetooth/bluez5-util.c -+++ b/src/modules/bluetooth/bluez5-util.c -@@ -174,10 +174,10 @@ static bool device_supports_profile(pa_bluetooth_device *device, pa_bluetooth_pr - return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_A2DP_SINK); - case PA_BLUETOOTH_PROFILE_A2DP_SOURCE: - return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_A2DP_SOURCE); -- case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT: -+ case PA_BLUETOOTH_PROFILE_HSP_HS: - return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS) - || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF); -- case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY: -+ case PA_BLUETOOTH_PROFILE_HFP_AG: - return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_AG) - || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_AG); - case PA_BLUETOOTH_PROFILE_OFF: -@@ -1018,7 +1018,7 @@ void pa_bluetooth_discovery_set_ofono_running(pa_bluetooth_discovery *y, bool is - pa_bluetooth_device *d; - - PA_HASHMAP_FOREACH(d, y->devices, state) { -- if (device_supports_profile(d, PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY)) { -+ if (device_supports_profile(d, PA_BLUETOOTH_PROFILE_HFP_AG)) { - DBusMessage *m; - - pa_assert_se(m = dbus_message_new_method_call(BLUEZ_SERVICE, d->path, "org.bluez.Device1", "Disconnect")); -@@ -1304,9 +1304,9 @@ const char *pa_bluetooth_profile_to_string(pa_bluetooth_profile_t profile) { - return "a2dp_sink"; - case PA_BLUETOOTH_PROFILE_A2DP_SOURCE: - return "a2dp_source"; -- case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT: -+ case PA_BLUETOOTH_PROFILE_HSP_HS: - return "headset_head_unit"; -- case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY: -+ case PA_BLUETOOTH_PROFILE_HFP_AG: - return "headset_audio_gateway"; - case PA_BLUETOOTH_PROFILE_OFF: - return "off"; -diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h -index a3e7bf3d..84c0c3f1 100644 ---- a/src/modules/bluetooth/bluez5-util.h -+++ b/src/modules/bluetooth/bluez5-util.h -@@ -46,8 +46,8 @@ typedef enum pa_bluetooth_hook { - typedef enum profile { - PA_BLUETOOTH_PROFILE_A2DP_SINK, - PA_BLUETOOTH_PROFILE_A2DP_SOURCE, -- PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT, -- PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY, -+ PA_BLUETOOTH_PROFILE_HSP_HS, -+ PA_BLUETOOTH_PROFILE_HFP_AG, - PA_BLUETOOTH_PROFILE_OFF - } pa_bluetooth_profile_t; - #define PA_BLUETOOTH_PROFILE_COUNT PA_BLUETOOTH_PROFILE_OFF -diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c -index 530207a2..d076fbad 100644 ---- a/src/modules/bluetooth/module-bluez5-device.c -+++ b/src/modules/bluetooth/module-bluez5-device.c -@@ -257,8 +257,8 @@ static int sco_process_render(struct userdata *u) { - pa_memchunk memchunk; - - pa_assert(u); -- pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || -- u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY); -+ pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || -+ u->profile == PA_BLUETOOTH_PROFILE_HFP_AG); - pa_assert(u->sink); - - pa_sink_render_full(u->sink, u->write_block_size, &memchunk); -@@ -317,8 +317,8 @@ static int sco_process_push(struct userdata *u) { - pa_usec_t tstamp = 0; - - pa_assert(u); -- pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || -- u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY); -+ pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || -+ u->profile == PA_BLUETOOTH_PROFILE_HFP_AG); - pa_assert(u->source); - pa_assert(u->read_smoother); - -@@ -784,7 +784,7 @@ static void transport_release(struct userdata *u) { - - /* Run from I/O thread */ - static void transport_config_mtu(struct userdata *u) { -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) { -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { - u->read_block_size = u->read_link_mtu; - u->write_block_size = u->write_link_mtu; - -@@ -981,7 +981,7 @@ static void source_set_volume_cb(pa_source *s) { - pa_cvolume_set(&s->real_volume, u->sample_spec.channels, volume); - - /* Set soft volume when in headset role */ -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) -+ if (u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) - pa_cvolume_set(&s->soft_volume, u->sample_spec.channels, volume); - - /* If we are in the AG role, we send a command to the head set to change -@@ -1004,7 +1004,7 @@ static int add_source(struct userdata *u) { - data.namereg_fail = false; - pa_proplist_sets(data.proplist, "bluetooth.protocol", pa_bluetooth_profile_to_string(u->profile)); - pa_source_new_data_set_sample_spec(&data, &u->sample_spec); -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS) - pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone"); - - connect_ports(u, &data, PA_DIRECTION_INPUT); -@@ -1012,10 +1012,10 @@ static int add_source(struct userdata *u) { - if (!u->transport_acquired) - switch (u->profile) { - case PA_BLUETOOTH_PROFILE_A2DP_SOURCE: -- case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY: -+ case PA_BLUETOOTH_PROFILE_HFP_AG: - data.suspend_cause = PA_SUSPEND_USER; - break; -- case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT: -+ case PA_BLUETOOTH_PROFILE_HSP_HS: - /* u->stream_fd contains the error returned by the last transport_acquire() - * EAGAIN means we are waiting for a NewConnection signal */ - if (u->stream_fd == -EAGAIN) -@@ -1039,7 +1039,7 @@ static int add_source(struct userdata *u) { - u->source->userdata = u; - u->source->parent.process_msg = source_process_msg; - -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) { -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { - pa_source_set_set_volume_callback(u->source, source_set_volume_cb); - u->source->n_volume_steps = 16; - } -@@ -1151,7 +1151,7 @@ static void sink_set_volume_cb(pa_sink *s) { - pa_cvolume_set(&s->real_volume, u->sample_spec.channels, volume); - - /* Set soft volume when in headset role */ -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) -+ if (u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) - pa_cvolume_set(&s->soft_volume, u->sample_spec.channels, volume); - - /* If we are in the AG role, we send a command to the head set to change -@@ -1174,17 +1174,17 @@ static int add_sink(struct userdata *u) { - data.namereg_fail = false; - pa_proplist_sets(data.proplist, "bluetooth.protocol", pa_bluetooth_profile_to_string(u->profile)); - pa_sink_new_data_set_sample_spec(&data, &u->sample_spec); -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS) - pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone"); - - connect_ports(u, &data, PA_DIRECTION_OUTPUT); - - if (!u->transport_acquired) - switch (u->profile) { -- case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY: -+ case PA_BLUETOOTH_PROFILE_HFP_AG: - data.suspend_cause = PA_SUSPEND_USER; - break; -- case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT: -+ case PA_BLUETOOTH_PROFILE_HSP_HS: - /* u->stream_fd contains the error returned by the last transport_acquire() - * EAGAIN means we are waiting for a NewConnection signal */ - if (u->stream_fd == -EAGAIN) -@@ -1210,7 +1210,7 @@ static int add_sink(struct userdata *u) { - u->sink->userdata = u; - u->sink->parent.process_msg = sink_process_msg; - -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) { -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { - pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb); - u->sink->n_volume_steps = 16; - } -@@ -1219,7 +1219,7 @@ static int add_sink(struct userdata *u) { - - /* Run from main thread */ - static void transport_config(struct userdata *u) { -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) { -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { - u->sample_spec.format = PA_SAMPLE_S16LE; - u->sample_spec.channels = 1; - u->sample_spec.rate = 8000; -@@ -1349,7 +1349,7 @@ static int setup_transport(struct userdata *u) { - - u->transport = t; - -- if (u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) -+ if (u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) - transport_acquire(u, true); /* In case of error, the sink/sources will be created suspended */ - else { - int transport_error; -@@ -1369,8 +1369,8 @@ static pa_direction_t get_profile_direction(pa_bluetooth_profile_t p) { - static const pa_direction_t profile_direction[] = { - [PA_BLUETOOTH_PROFILE_A2DP_SINK] = PA_DIRECTION_OUTPUT, - [PA_BLUETOOTH_PROFILE_A2DP_SOURCE] = PA_DIRECTION_INPUT, -- [PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT, -- [PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT, -+ [PA_BLUETOOTH_PROFILE_HSP_HS] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT, -+ [PA_BLUETOOTH_PROFILE_HFP_AG] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT, - [PA_BLUETOOTH_PROFILE_OFF] = 0 - }; - -@@ -1620,7 +1620,7 @@ static int start_thread(struct userdata *u) { - - /* If we are in the headset role, the sink should not become default - * unless there is no other sound device available. */ -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) -+ if (u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) - u->sink->priority = 1500; - - pa_sink_put(u->sink); -@@ -1636,7 +1636,7 @@ static int start_thread(struct userdata *u) { - /* If we are in the headset role or the device is an a2dp source, - * the source should not become default unless there is no other - * sound device available. */ -- if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY || u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE) -+ if (u->profile == PA_BLUETOOTH_PROFILE_HFP_AG || u->profile == PA_BLUETOOTH_PROFILE_A2DP_SOURCE) - u->source->priority = 1500; - - pa_source_put(u->source); -@@ -1873,7 +1873,7 @@ static pa_card_profile *create_card_profile(struct userdata *u, pa_bluetooth_pro - p = PA_CARD_PROFILE_DATA(cp); - break; - -- case PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT: -+ case PA_BLUETOOTH_PROFILE_HSP_HS: - cp = pa_card_profile_new(name, _("Headset Head Unit (HSP/HFP)"), sizeof(pa_bluetooth_profile_t)); - cp->priority = 20; - cp->n_sinks = 1; -@@ -1886,7 +1886,7 @@ static pa_card_profile *create_card_profile(struct userdata *u, pa_bluetooth_pro - p = PA_CARD_PROFILE_DATA(cp); - break; - -- case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY: -+ case PA_BLUETOOTH_PROFILE_HFP_AG: - cp = pa_card_profile_new(name, _("Headset Audio Gateway (HSP/HFP)"), sizeof(pa_bluetooth_profile_t)); - cp->priority = 20; - cp->n_sinks = 1; -@@ -1961,9 +1961,9 @@ static int uuid_to_profile(const char *uuid, pa_bluetooth_profile_t *_r) { - else if (pa_streq(uuid, PA_BLUETOOTH_UUID_A2DP_SOURCE)) - *_r = PA_BLUETOOTH_PROFILE_A2DP_SOURCE; - else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_HS) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF)) -- *_r = PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT; -+ *_r = PA_BLUETOOTH_PROFILE_HSP_HS; - else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_AG) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_AG)) -- *_r = PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY; -+ *_r = PA_BLUETOOTH_PROFILE_HFP_AG; - else - return -PA_ERR_INVALID; - -@@ -2174,7 +2174,7 @@ static pa_hook_result_t transport_speaker_gain_changed_cb(pa_bluetooth_discovery - volume++; - - pa_cvolume_set(&v, u->sample_spec.channels, volume); -- if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) -+ if (t->profile == PA_BLUETOOTH_PROFILE_HSP_HS) - pa_sink_volume_changed(u->sink, &v); - else - pa_sink_set_volume(u->sink, &v, true, true); -@@ -2202,7 +2202,7 @@ static pa_hook_result_t transport_microphone_gain_changed_cb(pa_bluetooth_discov - - pa_cvolume_set(&v, u->sample_spec.channels, volume); - -- if (t->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT) -+ if (t->profile == PA_BLUETOOTH_PROFILE_HSP_HS) - pa_source_volume_changed(u->source, &v); - else - pa_source_set_volume(u->source, &v, true, true); diff --git a/SOURCES/v5-2-4-bluetooth-separate-HSP-and-HFP.patch b/SOURCES/v5-2-4-bluetooth-separate-HSP-and-HFP.patch deleted file mode 100644 index aac2954..0000000 --- a/SOURCES/v5-2-4-bluetooth-separate-HSP-and-HFP.patch +++ /dev/null @@ -1,394 +0,0 @@ -diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c -index f2009bfd..9ec9244b 100644 ---- a/src/modules/bluetooth/backend-native.c -+++ b/src/modules/bluetooth/backend-native.c -@@ -62,6 +62,7 @@ struct transport_data { - #define BLUEZ_PROFILE_INTERFACE BLUEZ_SERVICE ".Profile1" - - #define HSP_AG_PROFILE "/Profile/HSPAGProfile" -+#define HFP_AG_PROFILE "/Profile/HFPAGProfile" - #define HSP_HS_PROFILE "/Profile/HSPHSProfile" - - /* RFCOMM channel for HSP headset role -@@ -512,6 +513,8 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m, - p = PA_BLUETOOTH_PROFILE_HSP_HS; - } else if (pa_streq(handler, HSP_HS_PROFILE)) { - p = PA_BLUETOOTH_PROFILE_HFP_AG; -+ } else if (pa_streq(handler, HFP_AG_PROFILE)) { -+ p = PA_BLUETOOTH_PROFILE_HFP_HF; - } else { - pa_log_error("Invalid handler"); - goto fail; -@@ -589,7 +592,8 @@ static DBusHandlerResult profile_handler(DBusConnection *c, DBusMessage *m, void - - pa_log_debug("dbus: path=%s, interface=%s, member=%s", path, interface, member); - -- if (!pa_streq(path, HSP_AG_PROFILE) && !pa_streq(path, HSP_HS_PROFILE)) -+ if (!pa_streq(path, HSP_AG_PROFILE) && !pa_streq(path, HSP_HS_PROFILE) -+ && !pa_streq(path, HFP_AG_PROFILE)) - return DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - - if (dbus_message_is_method_call(m, "org.freedesktop.DBus.Introspectable", "Introspect")) { -@@ -634,6 +638,10 @@ static void profile_init(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile - object_name = HSP_HS_PROFILE; - uuid = PA_BLUETOOTH_UUID_HSP_HS; - break; -+ case PA_BLUETOOTH_PROFILE_HFP_HF: -+ object_name = HFP_AG_PROFILE; -+ uuid = PA_BLUETOOTH_UUID_HFP_AG; -+ break; - default: - pa_assert_not_reached(); - break; -@@ -653,6 +661,9 @@ static void profile_done(pa_bluetooth_backend *b, pa_bluetooth_profile_t profile - case PA_BLUETOOTH_PROFILE_HFP_AG: - dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HSP_HS_PROFILE); - break; -+ case PA_BLUETOOTH_PROFILE_HFP_HF: -+ dbus_connection_unregister_object_path(pa_dbus_connection_get(b->connection), HFP_AG_PROFILE); -+ break; - default: - pa_assert_not_reached(); - break; -@@ -695,6 +706,8 @@ pa_bluetooth_backend *pa_bluetooth_native_backend_new(pa_core *c, pa_bluetooth_d - if (enable_hs_role) - profile_init(backend, PA_BLUETOOTH_PROFILE_HFP_AG); - profile_init(backend, PA_BLUETOOTH_PROFILE_HSP_HS); -+ if (pa_bluetooth_discovery_get_enable_native_hfp_hf(y)) -+ profile_init(backend, PA_BLUETOOTH_PROFILE_HFP_HF); - - return backend; - } -@@ -707,6 +720,8 @@ void pa_bluetooth_native_backend_free(pa_bluetooth_backend *backend) { - if (backend->enable_hs_role) - profile_done(backend, PA_BLUETOOTH_PROFILE_HFP_AG); - profile_done(backend, PA_BLUETOOTH_PROFILE_HSP_HS); -+ if (pa_bluetooth_discovery_get_enable_native_hfp_hf(backend->discovery)) -+ profile_done(backend, PA_BLUETOOTH_PROFILE_HFP_HF); - - pa_dbus_connection_unref(backend->connection); - -diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c -index 4470f2ef..80a025d5 100644 ---- a/src/modules/bluetooth/bluez5-util.c -+++ b/src/modules/bluetooth/bluez5-util.c -@@ -92,6 +92,7 @@ struct pa_bluetooth_discovery { - int headset_backend; - pa_bluetooth_backend *ofono_backend, *native_backend; - PA_LLIST_HEAD(pa_dbus_pending, pending); -+ bool enable_native_hfp_hf; - }; - - static pa_dbus_pending* send_and_add_to_pending(pa_bluetooth_discovery *y, DBusMessage *m, -@@ -169,14 +170,27 @@ static const char *transport_state_to_string(pa_bluetooth_transport_state_t stat - } - - static bool device_supports_profile(pa_bluetooth_device *device, pa_bluetooth_profile_t profile) { -+ bool show_hfp, show_hsp, enable_native_hfp_hf; -+ -+ enable_native_hfp_hf = pa_bluetooth_discovery_get_enable_native_hfp_hf(device->discovery); -+ -+ if (enable_native_hfp_hf) { -+ show_hfp = pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF); -+ show_hsp = !show_hfp; -+ } else { -+ show_hfp = false; -+ show_hsp = true; -+ } -+ - switch (profile) { - case PA_BLUETOOTH_PROFILE_A2DP_SINK: - return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_A2DP_SINK); - case PA_BLUETOOTH_PROFILE_A2DP_SOURCE: - return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_A2DP_SOURCE); - case PA_BLUETOOTH_PROFILE_HSP_HS: -- return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS) -- || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF); -+ return show_hsp && !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS); -+ case PA_BLUETOOTH_PROFILE_HFP_HF: -+ return show_hfp && !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF); - case PA_BLUETOOTH_PROFILE_HFP_AG: - return !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_AG) - || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_AG); -@@ -536,6 +550,14 @@ pa_bluetooth_device* pa_bluetooth_discovery_get_device_by_path(pa_bluetooth_disc - return NULL; - } - -+bool pa_bluetooth_discovery_get_enable_native_hfp_hf(pa_bluetooth_discovery *y) -+{ -+ pa_assert(y); -+ pa_assert(PA_REFCNT_VALUE(y) > 0); -+ -+ return y->enable_native_hfp_hf; -+} -+ - pa_bluetooth_device* pa_bluetooth_discovery_get_device_by_address(pa_bluetooth_discovery *y, const char *remote, const char *local) { - pa_bluetooth_device *d; - void *state = NULL; -@@ -1306,6 +1328,8 @@ const char *pa_bluetooth_profile_to_string(pa_bluetooth_profile_t profile) { - return "a2dp_source"; - case PA_BLUETOOTH_PROFILE_HSP_HS: - return "headset_head_unit"; -+ case PA_BLUETOOTH_PROFILE_HFP_HF: -+ return "headset_handsfree"; - case PA_BLUETOOTH_PROFILE_HFP_AG: - return "headset_audio_gateway"; - case PA_BLUETOOTH_PROFILE_OFF: -@@ -1727,7 +1751,7 @@ static void endpoint_done(pa_bluetooth_discovery *y, pa_bluetooth_profile_t prof - } - } - --pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c, int headset_backend) { -+pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c, int headset_backend, bool enable_native_hfp_hf) { - pa_bluetooth_discovery *y; - DBusError err; - DBusConnection *conn; -@@ -1737,6 +1761,7 @@ pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *c, int headset_backe - PA_REFCNT_INIT(y); - y->core = c; - y->headset_backend = headset_backend; -+ y->enable_native_hfp_hf = enable_native_hfp_hf; - y->adapters = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, - (pa_free_cb_t) adapter_free); - y->devices = pa_hashmap_new_full(pa_idxset_string_hash_func, pa_idxset_string_compare_func, NULL, -diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h -index 84c0c3f1..b077ca2c 100644 ---- a/src/modules/bluetooth/bluez5-util.h -+++ b/src/modules/bluetooth/bluez5-util.h -@@ -47,6 +47,7 @@ typedef enum profile { - PA_BLUETOOTH_PROFILE_A2DP_SINK, - PA_BLUETOOTH_PROFILE_A2DP_SOURCE, - PA_BLUETOOTH_PROFILE_HSP_HS, -+ PA_BLUETOOTH_PROFILE_HFP_HF, - PA_BLUETOOTH_PROFILE_HFP_AG, - PA_BLUETOOTH_PROFILE_OFF - } pa_bluetooth_profile_t; -@@ -161,8 +162,9 @@ const char *pa_bluetooth_profile_to_string(pa_bluetooth_profile_t profile); - #define HEADSET_BACKEND_NATIVE 1 - #define HEADSET_BACKEND_AUTO 2 - --pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *core, int headset_backend); -+pa_bluetooth_discovery* pa_bluetooth_discovery_get(pa_core *core, int headset_backend, bool default_profile_hfp); - pa_bluetooth_discovery* pa_bluetooth_discovery_ref(pa_bluetooth_discovery *y); - void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y); - void pa_bluetooth_discovery_set_ofono_running(pa_bluetooth_discovery *y, bool is_running); -+bool pa_bluetooth_discovery_get_enable_native_hfp_hf(pa_bluetooth_discovery *y); - #endif -diff --git a/src/modules/bluetooth/module-bluetooth-policy.c b/src/modules/bluetooth/module-bluetooth-policy.c -index 316b9a82..b17c5d39 100644 ---- a/src/modules/bluetooth/module-bluetooth-policy.c -+++ b/src/modules/bluetooth/module-bluetooth-policy.c -@@ -365,7 +365,8 @@ static pa_hook_result_t profile_available_hook_callback(pa_core *c, pa_card_prof - /* Do not automatically switch profiles for headsets, just in case */ - /* TODO: remove a2dp and hsp when we remove BlueZ 4 support */ - if (pa_streq(profile->name, "hsp") || pa_streq(profile->name, "a2dp") || pa_streq(profile->name, "a2dp_sink") || -- pa_streq(profile->name, "headset_head_unit")) -+ pa_streq(profile->name, "headset_head_unit") || -+ pa_streq(profile->name, "headset_handsfree")) - return PA_HOOK_OK; - - is_active_profile = card->active_profile == profile; -diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c -index d076fbad..d37ce9ce 100644 ---- a/src/modules/bluetooth/module-bluez5-device.c -+++ b/src/modules/bluetooth/module-bluez5-device.c -@@ -258,6 +258,7 @@ static int sco_process_render(struct userdata *u) { - - pa_assert(u); - pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || -+ u->profile == PA_BLUETOOTH_PROFILE_HFP_HF || - u->profile == PA_BLUETOOTH_PROFILE_HFP_AG); - pa_assert(u->sink); - -@@ -318,6 +319,7 @@ static int sco_process_push(struct userdata *u) { - - pa_assert(u); - pa_assert(u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || -+ u->profile == PA_BLUETOOTH_PROFILE_HFP_HF|| - u->profile == PA_BLUETOOTH_PROFILE_HFP_AG); - pa_assert(u->source); - pa_assert(u->read_smoother); -@@ -784,7 +786,9 @@ static void transport_release(struct userdata *u) { - - /* Run from I/O thread */ - static void transport_config_mtu(struct userdata *u) { -- if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { - u->read_block_size = u->read_link_mtu; - u->write_block_size = u->write_link_mtu; - -@@ -1004,7 +1008,8 @@ static int add_source(struct userdata *u) { - data.namereg_fail = false; - pa_proplist_sets(data.proplist, "bluetooth.protocol", pa_bluetooth_profile_to_string(u->profile)); - pa_source_new_data_set_sample_spec(&data, &u->sample_spec); -- if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS) -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF) - pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone"); - - connect_ports(u, &data, PA_DIRECTION_INPUT); -@@ -1016,6 +1021,7 @@ static int add_source(struct userdata *u) { - data.suspend_cause = PA_SUSPEND_USER; - break; - case PA_BLUETOOTH_PROFILE_HSP_HS: -+ case PA_BLUETOOTH_PROFILE_HFP_HF: - /* u->stream_fd contains the error returned by the last transport_acquire() - * EAGAIN means we are waiting for a NewConnection signal */ - if (u->stream_fd == -EAGAIN) -@@ -1039,7 +1045,9 @@ static int add_source(struct userdata *u) { - u->source->userdata = u; - u->source->parent.process_msg = source_process_msg; - -- if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF) { - pa_source_set_set_volume_callback(u->source, source_set_volume_cb); - u->source->n_volume_steps = 16; - } -@@ -1174,7 +1182,8 @@ static int add_sink(struct userdata *u) { - data.namereg_fail = false; - pa_proplist_sets(data.proplist, "bluetooth.protocol", pa_bluetooth_profile_to_string(u->profile)); - pa_sink_new_data_set_sample_spec(&data, &u->sample_spec); -- if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS) -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF) - pa_proplist_sets(data.proplist, PA_PROP_DEVICE_INTENDED_ROLES, "phone"); - - connect_ports(u, &data, PA_DIRECTION_OUTPUT); -@@ -1185,6 +1194,7 @@ static int add_sink(struct userdata *u) { - data.suspend_cause = PA_SUSPEND_USER; - break; - case PA_BLUETOOTH_PROFILE_HSP_HS: -+ case PA_BLUETOOTH_PROFILE_HFP_HF: - /* u->stream_fd contains the error returned by the last transport_acquire() - * EAGAIN means we are waiting for a NewConnection signal */ - if (u->stream_fd == -EAGAIN) -@@ -1210,7 +1220,9 @@ static int add_sink(struct userdata *u) { - u->sink->userdata = u; - u->sink->parent.process_msg = sink_process_msg; - -- if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF) { - pa_sink_set_set_volume_callback(u->sink, sink_set_volume_cb); - u->sink->n_volume_steps = 16; - } -@@ -1219,7 +1231,9 @@ static int add_sink(struct userdata *u) { - - /* Run from main thread */ - static void transport_config(struct userdata *u) { -- if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { -+ if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_HF -+ || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { - u->sample_spec.format = PA_SAMPLE_S16LE; - u->sample_spec.channels = 1; - u->sample_spec.rate = 8000; -@@ -1370,6 +1384,7 @@ static pa_direction_t get_profile_direction(pa_bluetooth_profile_t p) { - [PA_BLUETOOTH_PROFILE_A2DP_SINK] = PA_DIRECTION_OUTPUT, - [PA_BLUETOOTH_PROFILE_A2DP_SOURCE] = PA_DIRECTION_INPUT, - [PA_BLUETOOTH_PROFILE_HSP_HS] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT, -+ [PA_BLUETOOTH_PROFILE_HFP_HF] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT, - [PA_BLUETOOTH_PROFILE_HFP_AG] = PA_DIRECTION_INPUT | PA_DIRECTION_OUTPUT, - [PA_BLUETOOTH_PROFILE_OFF] = 0 - }; -@@ -1874,7 +1889,20 @@ static pa_card_profile *create_card_profile(struct userdata *u, pa_bluetooth_pro - break; - - case PA_BLUETOOTH_PROFILE_HSP_HS: -- cp = pa_card_profile_new(name, _("Headset Head Unit (HSP/HFP)"), sizeof(pa_bluetooth_profile_t)); -+ cp = pa_card_profile_new(name, _("Headset Head Unit (HSP)"), sizeof(pa_bluetooth_profile_t)); -+ cp->priority = 20; -+ cp->n_sinks = 1; -+ cp->n_sources = 1; -+ cp->max_sink_channels = 1; -+ cp->max_source_channels = 1; -+ pa_hashmap_put(input_port->profiles, cp->name, cp); -+ pa_hashmap_put(output_port->profiles, cp->name, cp); -+ -+ p = PA_CARD_PROFILE_DATA(cp); -+ break; -+ -+ case PA_BLUETOOTH_PROFILE_HFP_HF: -+ cp = pa_card_profile_new(name, _("Headset Handsfree (HFP)"), sizeof(pa_bluetooth_profile_t)); - cp->priority = 20; - cp->n_sinks = 1; - cp->n_sources = 1; -@@ -1960,8 +1988,10 @@ static int uuid_to_profile(const char *uuid, pa_bluetooth_profile_t *_r) { - *_r = PA_BLUETOOTH_PROFILE_A2DP_SINK; - else if (pa_streq(uuid, PA_BLUETOOTH_UUID_A2DP_SOURCE)) - *_r = PA_BLUETOOTH_PROFILE_A2DP_SOURCE; -- else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_HS) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF)) -+ else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_HS)) - *_r = PA_BLUETOOTH_PROFILE_HSP_HS; -+ else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF)) -+ *_r = PA_BLUETOOTH_PROFILE_HFP_HF; - else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_AG) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_AG)) - *_r = PA_BLUETOOTH_PROFILE_HFP_AG; - else -@@ -1980,6 +2010,7 @@ static int add_card(struct userdata *u) { - pa_bluetooth_profile_t *p; - const char *uuid; - void *state; -+ bool enable_native_hfp_hf, has_both; - - pa_assert(u); - pa_assert(u->device); -@@ -2010,9 +2041,22 @@ static int add_card(struct userdata *u) { - - create_card_ports(u, data.ports); - -+ enable_native_hfp_hf = pa_bluetooth_discovery_get_enable_native_hfp_hf(u->discovery); -+ -+ has_both = enable_native_hfp_hf && pa_hashmap_get(d->uuids, PA_BLUETOOTH_UUID_HFP_HF) && pa_hashmap_get(d->uuids, PA_BLUETOOTH_UUID_HSP_HS); - PA_HASHMAP_FOREACH(uuid, d->uuids, state) { - pa_bluetooth_profile_t profile; - -+ if (!enable_native_hfp_hf && pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF)) { -+ pa_log_info("device supports HFP but disabling profile as requested"); -+ continue; -+ } -+ -+ if (has_both && pa_streq(uuid, PA_BLUETOOTH_UUID_HSP_HS)) { -+ pa_log_info("device support HSP and HFP, selecting HFP only"); -+ continue; -+ } -+ - if (uuid_to_profile(uuid, &profile) < 0) - continue; - -diff --git a/src/modules/bluetooth/module-bluez5-discover.c b/src/modules/bluetooth/module-bluez5-discover.c -index c535ead4..bfb361ae 100644 ---- a/src/modules/bluetooth/module-bluez5-discover.c -+++ b/src/modules/bluetooth/module-bluez5-discover.c -@@ -104,6 +104,7 @@ int pa__init(pa_module *m) { - const char *headset_str; - int headset_backend; - bool autodetect_mtu; -+ bool enable_native_hfp_hf = true; - - pa_assert(m); - -@@ -127,6 +128,9 @@ int pa__init(pa_module *m) { - autodetect_mtu = false; - if (pa_modargs_get_value_boolean(ma, "autodetect_mtu", &autodetect_mtu) < 0) { - pa_log("Invalid boolean value for autodetect_mtu parameter"); -+ } -+ if (pa_modargs_get_value_boolean(ma, "enable_native_hfp_hf", &enable_native_hfp_hf) < 0) { -+ pa_log("enable_native_hfp_hf must be true or false"); - goto fail; - } - -@@ -136,7 +140,7 @@ int pa__init(pa_module *m) { - u->autodetect_mtu = autodetect_mtu; - u->loaded_device_paths = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func); - -- if (!(u->discovery = pa_bluetooth_discovery_get(u->core, headset_backend))) -+ if (!(u->discovery = pa_bluetooth_discovery_get(u->core, headset_backend, enable_native_hfp_hf))) - goto fail; - - u->device_connection_changed_slot = diff --git a/SOURCES/v5-3-4-bluetooth-add-correct-HFP-rfcomm-negotiation.patch b/SOURCES/v5-3-4-bluetooth-add-correct-HFP-rfcomm-negotiation.patch deleted file mode 100644 index c93c0f1..0000000 --- a/SOURCES/v5-3-4-bluetooth-add-correct-HFP-rfcomm-negotiation.patch +++ /dev/null @@ -1,199 +0,0 @@ -diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c -index 9ec9244b..99efa066 100644 ---- a/src/modules/bluetooth/backend-native.c -+++ b/src/modules/bluetooth/backend-native.c -@@ -53,6 +53,43 @@ struct transport_data { - pa_mainloop_api *mainloop; - }; - -+struct hfp_config { -+ uint32_t capabilities; -+ int state; -+}; -+ -+/* -+ * the separate hansfree headset (HF) and Audio Gateway (AG) features -+ */ -+enum hfp_hf_features { -+ HFP_HF_EC_NR = 0, -+ HFP_HF_CALL_WAITING = 1, -+ HFP_HF_CLI = 2, -+ HFP_HF_VR = 3, -+ HFP_HF_RVOL = 4, -+ HFP_HF_ESTATUS = 5, -+ HFP_HF_ECALL = 6, -+ HFP_HF_CODECS = 7, -+}; -+ -+enum hfp_ag_features { -+ HFP_AG_THREE_WAY = 0, -+ HFP_AG_EC_NR = 1, -+ HFP_AG_VR = 2, -+ HFP_AG_RING = 3, -+ HFP_AG_NUM_TAG = 4, -+ HFP_AG_REJECT = 5, -+ HFP_AG_ESTATUS = 6, -+ HFP_AG_ECALL = 7, -+ HFP_AG_EERR = 8, -+ HFP_AG_CODECS = 9, -+}; -+ -+/* gateway features we support, which is as little as we can get away with */ -+static uint32_t hfp_features = -+ /* HFP 1.6 requires this */ -+ (1 << HFP_AG_ESTATUS ); -+ - #define BLUEZ_SERVICE "org.bluez" - #define BLUEZ_MEDIA_TRANSPORT_INTERFACE BLUEZ_SERVICE ".MediaTransport1" - -@@ -109,6 +146,27 @@ static pa_dbus_pending* send_and_add_to_pending(pa_bluetooth_backend *backend, D - return p; - } - -+static void rfcomm_write(int fd, const char *str) -+{ -+ size_t len; -+ char buf[512]; -+ -+ pa_log_debug("RFCOMM >> %s", str); -+ sprintf(buf, "\r\n%s\r\n", str); -+ len = write(fd, buf, strlen(buf)); -+ -+ if (len != strlen(buf)) -+ pa_log_error("RFCOMM write error: %s", pa_cstrerror(errno)); -+} -+ -+static void hfp_send_features(int fd) -+{ -+ char buf[512]; -+ -+ sprintf(buf, "+BRSF: %d", hfp_features); -+ rfcomm_write(fd, buf); -+} -+ - static int sco_do_connect(pa_bluetooth_transport *t) { - pa_bluetooth_device *d = t->device; - struct sockaddr_sco addr; -@@ -352,6 +410,61 @@ static void register_profile(pa_bluetooth_backend *b, const char *profile, const - send_and_add_to_pending(b, m, register_profile_reply, pa_xstrdup(profile)); - } - -+static void transport_put(pa_bluetooth_transport *t) -+{ -+ pa_bluetooth_transport_put(t); -+ -+ pa_log_debug("Transport %s available for profile %s", t->path, pa_bluetooth_profile_to_string(t->profile)); -+} -+ -+static bool hfp_rfcomm_handle(int fd, pa_bluetooth_transport *t, const char *buf) -+{ -+ struct hfp_config *c = t->config; -+ int val; -+ -+ /* stateful negotiation */ -+ if (c->state == 0 && sscanf(buf, "AT+BRSF=%d", &val) == 1) { -+ c->capabilities = val; -+ pa_log_info("HFP capabilities returns 0x%x", val); -+ hfp_send_features(fd); -+ c->state = 1; -+ return true; -+ } else if (c->state == 1 && pa_startswith(buf, "AT+CIND=?")) { -+ /* we declare minimal no indicators */ -+ rfcomm_write(fd, "+CIND: " -+ /* many indicators can be supported, only call and -+ * callheld are mandatory, so that's all we repy */ -+ "(\"call\",(0-1))," -+ "(\"callheld\",(0-2))"); -+ c->state = 2; -+ return true; -+ } else if (c->state == 2 && pa_startswith(buf, "AT+CIND?")) { -+ rfcomm_write(fd, "+CIND: 0,0"); -+ c->state = 3; -+ return true; -+ } else if ((c->state == 2 || c->state == 3) && pa_startswith(buf, "AT+CMER=")) { -+ rfcomm_write(fd, "\r\nOK\r\n"); -+ c->state = 4; -+ transport_put(t); -+ return false; -+ } -+ -+ /* if we get here, negotiation should be complete */ -+ if (c->state != 4) { -+ pa_log_error("HFP negotiation failed in state %d with inbound %s\n", -+ c->state, buf); -+ rfcomm_write(fd, "ERROR"); -+ return false; -+ } -+ -+ /* -+ * once we're fully connected, just reply OK to everything -+ * it will just be the headset sending the occasional status -+ * update, but we process only the ones we care about -+ */ -+ return true; -+} -+ - static void rfcomm_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_io_event_flags_t events, void *userdata) { - pa_bluetooth_transport *t = userdata; - -@@ -398,6 +511,8 @@ static void rfcomm_io_callback(pa_mainloop_api *io, pa_io_event *e, int fd, pa_i - do_reply = true; - } else if (sscanf(buf, "AT+CKPD=%d", &dummy) == 1) { - do_reply = true; -+ } else if (t->config) { /* t->config is only non-null for hfp profile */ -+ do_reply = hfp_rfcomm_handle(fd, t, buf); - } else { - do_reply = false; - } -@@ -540,7 +655,9 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m, - sender = dbus_message_get_sender(m); - - pathfd = pa_sprintf_malloc ("%s/fd%d", path, fd); -- t = pa_bluetooth_transport_new(d, sender, pathfd, p, NULL, 0); -+ t = pa_bluetooth_transport_new(d, sender, pathfd, p, NULL, -+ p == PA_BLUETOOTH_PROFILE_HFP_HF ? -+ sizeof(struct hfp_config) : 0); - pa_xfree(pathfd); - - t->acquire = sco_acquire_cb; -@@ -558,9 +675,8 @@ static DBusMessage *profile_new_connection(DBusConnection *conn, DBusMessage *m, - - sco_listen(t); - -- pa_bluetooth_transport_put(t); -- -- pa_log_debug("Transport %s available for profile %s", t->path, pa_bluetooth_profile_to_string(t->profile)); -+ if (p != PA_BLUETOOTH_PROFILE_HFP_HF) -+ transport_put(t); - - pa_assert_se(r = dbus_message_new_method_return(m)); - -diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5-util.c -index 80a025d5..8be8a11d 100644 ---- a/src/modules/bluetooth/bluez5-util.c -+++ b/src/modules/bluetooth/bluez5-util.c -@@ -150,7 +150,10 @@ pa_bluetooth_transport *pa_bluetooth_transport_new(pa_bluetooth_device *d, const - - if (size > 0) { - t->config = pa_xnew(uint8_t, size); -- memcpy(t->config, config, size); -+ if (config) -+ memcpy(t->config, config, size); -+ else -+ memset(t->config, 0, size); - } - - return t; -diff --git a/src/modules/bluetooth/bluez5-util.h b/src/modules/bluetooth/bluez5-util.h -index b077ca2c..23f9a798 100644 ---- a/src/modules/bluetooth/bluez5-util.h -+++ b/src/modules/bluetooth/bluez5-util.h -@@ -73,7 +73,7 @@ struct pa_bluetooth_transport { - pa_bluetooth_profile_t profile; - - uint8_t codec; -- uint8_t *config; -+ void *config; - size_t config_size; - - uint16_t microphone_gain; diff --git a/SOURCES/v5-4-4-bluetooth-make-native-the-default-backend.patch b/SOURCES/v5-4-4-bluetooth-make-native-the-default-backend.patch deleted file mode 100644 index b11d4c6..0000000 --- a/SOURCES/v5-4-4-bluetooth-make-native-the-default-backend.patch +++ /dev/null @@ -1,32 +0,0 @@ -diff --git a/src/modules/bluetooth/module-bluez5-discover.c b/src/modules/bluetooth/module-bluez5-discover.c -index bfb361ae..d2a0420d 100644 ---- a/src/modules/bluetooth/module-bluez5-discover.c -+++ b/src/modules/bluetooth/module-bluez5-discover.c -@@ -93,7 +93,7 @@ static pa_hook_result_t device_connection_changed_cb(pa_bluetooth_discovery *y, - } - - #ifdef HAVE_BLUEZ_5_NATIVE_HEADSET --const char *default_headset_backend = "auto"; -+const char *default_headset_backend = "native"; - #else - const char *default_headset_backend = "ofono"; - #endif -@@ -104,7 +104,7 @@ int pa__init(pa_module *m) { - const char *headset_str; - int headset_backend; - bool autodetect_mtu; -- bool enable_native_hfp_hf = true; -+ bool enable_native_hfp_hf; - - pa_assert(m); - -@@ -125,6 +125,9 @@ int pa__init(pa_module *m) { - goto fail; - } - -+ /* default value if no module parameter */ -+ enable_native_hfp_hf = (headset_backend == HEADSET_BACKEND_NATIVE); -+ - autodetect_mtu = false; - if (pa_modargs_get_value_boolean(ma, "autodetect_mtu", &autodetect_mtu) < 0) { - pa_log("Invalid boolean value for autodetect_mtu parameter"); diff --git a/SPECS/pulseaudio.spec b/SPECS/pulseaudio.spec index 94d360f..cde8520 100644 --- a/SPECS/pulseaudio.spec +++ b/SPECS/pulseaudio.spec @@ -1,5 +1,5 @@ -%global pa_major 11.1 -#global pa_minor 0 +%global pa_major 13.99 +%global pa_minor 1 #global snap 20141103 #global gitrel 327 @@ -16,19 +16,6 @@ ## support systemd activation %global systemd 1 -## enable systemd activation by default (instead of autospawn) -%if 0%{?fedora} || 0%{?rhel} > 7 -%global systemd_activation 1 -## TODO: ship preset to explicitly disable .service, enable .socket -%else -# gdm-hooks moved to gdm packaging f28+ -%global gdm_hooks 1 -%endif - -## tcp_wrapper support -%if 0%{?fedora} < 28 && 0%{?rhel} <= 7 -%global tcpwrap 1 -%endif ## comment to disable tests %global tests 1 @@ -39,7 +26,7 @@ Name: pulseaudio Summary: Improved Linux Sound Server Version: %{pa_major}%{?pa_minor:.%{pa_minor}} -Release: 23%{?snap:.%{snap}git%{shortcommit}}%{?dist} +Release: 1%{?snap:.%{snap}git%{shortcommit}}%{?dist} License: LGPLv2+ URL: http://www.freedesktop.org/wiki/Software/PulseAudio %if 0%{?gitrel} @@ -48,8 +35,7 @@ URL: http://www.freedesktop.org/wiki/Software/PulseAudio Source0: pulseaudio-%{version}-%{gitrel}-g%{shortcommit}.tar.xz %else Source0: http://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz -Source1: http://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz.md5 -Source2: http://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz.sha1 +Source1: http://freedesktop.org/software/pulseaudio/releases/pulseaudio-%{version}.tar.xz.sha256 %endif Source5: default.pa-for-gdm @@ -60,57 +46,10 @@ Source5: default.pa-for-gdm # valid even when using systemd socket activation too Patch201: pulseaudio-autostart.patch -# disable flat-volumes by default -# https://bugzilla.redhat.com/show_bug.cgi?id=1265267 -Patch202: pulseaudio-9.0-disable_flat_volumes.patch - -# bz#1067470, only start threads on activ CPUs -# see also https://bugs.freedesktop.org/show_bug.cgi?id=96638 -Patch203: pulseaudio-8.99.2-getaffinity.patch - -# upstreamed exit_idle_time solution, set to 0 in managed environments -Patch204: pulseaudio-11.1-exit_idle_time-2.patch - -# workaround rawhide build failures, avoid dup'd memfd_create declaration -# https://bugs.freedesktop.org/show_bug.cgi?id=104733 -Patch205: pulseaudio-11.1-glibc_memfd.patch - # disable autospawn Patch206: pulseaudio-11.1-autospawn_disable.patch -Patch207: 0001-X11-Add-xauthority-parameter.patch -Patch208: 0002-alsa-Use-correct-header-path.patch -Patch209: 0003-alsa-Fix-inclusion-of-use-case.h.patch - ## upstream patches -Patch4: 0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch -Patch9: 0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch -Patch10: 0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch -Patch15: 0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch -Patch16: 0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch -Patch18: 0018-build-sys-add-the-Arctis-configuration.patch -Patch33: 0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch -Patch35: 0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch -Patch74: 0074-build-sys-add-the-Dell-dock-TB16-configuration.patch -Patch84: 0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch -Patch85: 0085-client-conf-Add-a-default-value-for-disable-memfd.patch -Patch90: 0090-qpaeq-port-to-PyQt5.patch -Patch93: 0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch -Patch96: 0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch -Patch97: pulseaudio-python3.patch - -## upstreamable patches -# patchset from https://bugs.freedesktop.org/show_bug.cgi?id=100488 -Patch100: Fix-Intel-HDMI-LPE-problems.patch -# patchset from https://bugs.freedesktop.org/show_bug.cgi?id=93898 -Patch101: v5-1-4-bluetooth-use-consistent-profile-names.patch -Patch102: v5-2-4-bluetooth-separate-HSP-and-HFP.patch -Patch103: v5-3-4-bluetooth-add-correct-HFP-rfcomm-negotiation.patch -Patch104: v5-4-4-bluetooth-make-native-the-default-backend.patch -# patchset from https://bugs.freedesktop.org/show_bug.cgi?id=100488 fixing pa -# crashing on Bay/Cherry Trail unless realtime-scheduling=no is set -Patch106: Fix-realtime-scheduling-on-byt-cht.patch -Patch107: 0001-qpaeq-fix-Qt5-mainloop-use.patch BuildRequires: automake libtool BuildRequires: gcc-c++ @@ -122,10 +61,6 @@ BuildRequires: intltool BuildRequires: pkgconfig BuildRequires: doxygen BuildRequires: xmltoman -# https://bugzilla.redhat.com/show_bug.cgi?id=1518777 -%if 0%{?tcpwrap} -BuildRequires: tcp_wrappers-devel -%endif BuildRequires: libsndfile-devel BuildRequires: alsa-lib-devel BuildRequires: glib2-devel @@ -158,8 +93,6 @@ BuildRequires: libasyncns-devel %if 0%{?systemd} BuildRequires: systemd-devel >= 184 BuildRequires: systemd -%endif -%if 0%{?systemd_activation} %{?systemd_requires} %endif BuildRequires: dbus-devel @@ -186,13 +119,8 @@ Enlightened Sound Daemon (ESOUND). %package qpaeq Summary: Pulseaudio equalizer interface Requires: %{name}%{?_isa} = %{version}-%{release} -%if 0%{?fedora} || 0%{?rhel} > 7 Requires: python3-qt5 Requires: python3-dbus -%else -Requires: python-qt5 -Requires: dbus-python -%endif %description qpaeq qpaeq is a equalizer interface for pulseaudio's equalizer sinks. @@ -252,6 +180,12 @@ Requires: %{name}%{?_isa} = %{version}-%{release} %description module-gconf GConf configuration backend for the PulseAudio sound server. +%package module-gsettings +Summary: Gsettings support for the PulseAudio sound server +Requires: %{name}%{?_isa} = %{version}-%{release} +%description module-gsettings +GSettings configuration backend for the PulseAudio sound server. + %package libs Summary: Libraries for PulseAudio clients License: LGPLv2+ @@ -289,69 +223,18 @@ Obsoletes: pulseaudio-utils < 3.0-3 %description utils This package contains command line utilities for the PulseAudio sound server. -%if 0%{?gdm_hooks} -%package gdm-hooks -Summary: PulseAudio GDM integration -License: LGPLv2+ -Requires: gdm >= 1:2.22.0 -# for the gdm user -Requires(pre): gdm - -%description gdm-hooks -This package contains GDM integration hooks for the PulseAudio sound server. -%endif - - %prep %setup -q -T -b0 -n %{name}-%{version}%{?gitrel:-%{gitrel}-g%{shortcommit}} ## upstream patches -%patch4 -p1 -%patch9 -p1 -%patch10 -p1 -%patch15 -p1 -%patch16 -p1 -%patch18 -p1 -%patch33 -p1 -%patch35 -p1 -%patch74 -p1 -%patch84 -p1 -%patch85 -p1 -%patch90 -p1 -# skip patch, possibly regressionish, https://bugzilla.redhat.com/show_bug.cgi?id=1551270 -#patch93 -p1 -%patch96 -p1 -# python3 -%patch97 -p1 + ## upstreamable patches -## per comments in the upstream bug, it would *appear* this one is no longer needed after applying patch93 -#patch100 -p1 -# rawhide-only, for now, on hadess' advice --rex -%if 0%{?fedora} || 0%{?rhel} > 7 -%patch101 -p1 -%patch102 -p1 -%patch103 -p1 -%patch104 -p1 -%endif -%patch106 -p1 -%patch107 -p1 %patch201 -p1 -b .autostart -%patch202 -p1 -b .disable_flat_volumes -#patch203 -p1 -b .affinity -%patch204 -p1 -b .exit_idle_time -#if 0%{?fedora} > 27 -#patch205 -p1 -b .glibc_memfd -#endif -%if 0%{?systemd_activation} +%if 0%{?systemd} %patch206 -p1 -b .autospawn_disable %endif -%patch207 -p1 -%patch208 -p1 -%patch209 -p1 - - sed -i.no_consolekit -e \ 's/^load-module module-console-kit/#load-module module-console-kit/' \ src/daemon/default.pa.in @@ -381,9 +264,11 @@ NOCONFIGURE=1 ./bootstrap.sh --disable-oss-output \ %{?enable_jack:--enable-jack}%{!?enable_jack:--disable-jack} \ %{?enable_lirc:--enable-lirc}%{!?enable_lirc:--disable-lirc} \ - %{?tcpwrap:--enable-tcpwrap}%{!?tcpwrap:--disable-tcpwrap} \ + --disable-tcpwrap \ --disable-bluez4 \ --enable-bluez5 \ + --enable-gconf \ + --enable-gsettings \ %ifarch %{arm} --disable-neon-opt \ %endif @@ -421,18 +306,6 @@ popd mkdir -p $RPM_BUILD_ROOT%{_prefix}/lib/udev/rules.d mv -fv $RPM_BUILD_ROOT/lib/udev/rules.d/90-pulseaudio.rules $RPM_BUILD_ROOT%{_prefix}/lib/udev/rules.d -%if 0%{?gdm_hooks} -install -p -m644 -D %{SOURCE5} $RPM_BUILD_ROOT%{_localstatedir}/lib/gdm/.pulse/default.pa -%endif - -# take cue from dbus and manually place wants symlink instead of -# relying on scriptlets exclusively. Helps handle upgrade cases -# that standard scriptlets miss. -%if 0%{?systemd_activation} -mkdir %{buildroot}%{_userunitdir}/sockets.target.wants -ln -s ../pulseaudio.socket %{buildroot}%{_userunitdir}/sockets.target.wants/pulseaudio.socket -%endif - ## unpackaged files # extraneous libtool crud rm -fv $RPM_BUILD_ROOT%{_libdir}/lib*.la @@ -485,14 +358,14 @@ exit 0 %post %{?ldconfig} -%if 0%{?systemd_activation} +%if 0%{?systemd} # unsure if we want both .socket and .service here (or only socket) # play it safe and do both for now -- rex %systemd_user_post pulseaudio.service %systemd_user_post pulseaudio.socket %endif -%if 0%{?systemd_activation} +%if 0%{?systemd} %preun %systemd_user_preun pulseaudio.service %systemd_user_preun pulseaudio.socket @@ -500,6 +373,14 @@ exit 0 %ldconfig_postun +%if 0%{?systemd} +%triggerun -- pulseaudio < 12.2-4 +# This is for upgrades from previous versions which had a static symlink. +# The %%post scriptlet above only does anything on initial package installation. +# Remove before F33. +systemctl --no-reload preset --global pulseaudio.socket >/dev/null 2>&1 || : +%endif + %files %doc README %license LICENSE GPL LGPL @@ -511,8 +392,8 @@ exit 0 %if 0%{?systemd} %{_userunitdir}/pulseaudio.service %{_userunitdir}/pulseaudio.socket -%{_userunitdir}/sockets.target.wants/pulseaudio.socket %endif +%{_bindir}/pa-info %{_bindir}/pulseaudio %{_libdir}/pulseaudio/libpulsecore-%{pa_major}.so %dir %{_libdir}/pulse-%{pa_major}/ @@ -528,7 +409,6 @@ exit 0 %if 0%{?with_webrtc} %{_libdir}/pulse-%{pa_major}/modules/libwebrtc-util.so %endif -#{_libdir}/pulse-%{pa_major}/modules/module-access.so %{_libdir}/pulse-%{pa_major}/modules/module-allow-passthrough.so %{_libdir}/pulse-%{pa_major}/modules/module-alsa-sink.so %{_libdir}/pulse-%{pa_major}/modules/module-alsa-source.so @@ -541,7 +421,6 @@ exit 0 %{_libdir}/pulse-%{pa_major}/modules/module-dbus-protocol.so %{_libdir}/pulse-%{pa_major}/modules/module-filter-apply.so %{_libdir}/pulse-%{pa_major}/modules/module-filter-heuristics.so -#{_libdir}/pulse-%{pa_major}/modules/module-flatpak.so %{_libdir}/pulse-%{pa_major}/modules/module-device-manager.so %{_libdir}/pulse-%{pa_major}/modules/module-loopback.so %{_libdir}/pulse-%{pa_major}/modules/module-esound-compat-spawnfd.so @@ -585,6 +464,7 @@ exit 0 %{_libdir}/pulse-%{pa_major}/modules/module-ladspa-sink.so %{_libdir}/pulse-%{pa_major}/modules/module-remap-sink.so %{_libdir}/pulse-%{pa_major}/modules/module-always-sink.so +%{_libdir}/pulse-%{pa_major}/modules/module-always-source.so %{_libdir}/pulse-%{pa_major}/modules/module-console-kit.so %{_libdir}/pulse-%{pa_major}/modules/module-position-event-sounds.so %{_libdir}/pulse-%{pa_major}/modules/module-augment-properties.so @@ -661,8 +541,13 @@ exit 0 %{_libdir}/pulse-%{pa_major}/modules/module-gconf.so %{_libexecdir}/pulse/gconf-helper -%post libs -p /sbin/ldconfig -%postun libs -p /sbin/ldconfig +%files module-gsettings +%{_libdir}/pulse-%{pa_major}/modules/module-gsettings.so +%{_libexecdir}/pulse/gsettings-helper +%{_datadir}/GConf/gsettings/pulseaudio.convert +%{_datadir}/glib-2.0/schemas/org.freedesktop.pulseaudio.gschema.xml + +%ldconfig_scriptlets libs %files libs -f %{name}.lang %doc README LICENSE GPL LGPL @@ -674,8 +559,7 @@ exit 0 %{_libdir}/pulseaudio/libpulsecommon-%{pa_major}.so %{_libdir}/pulseaudio/libpulsedsp.so -%post libs-glib2 -p /sbin/ldconfig -%postun libs-glib2 -p /sbin/ldconfig +%ldconfig_scriptlets libs-glib2 %files libs-glib2 %{_libdir}/libpulse-mainloop-glib.so.0* @@ -724,14 +608,11 @@ exit 0 %{_mandir}/man1/pasuspender.1* %{_mandir}/man1/pax11publish.1* -%if 0%{?gdm_hooks} -%files gdm-hooks -%attr(0700, gdm, gdm) %dir %{_localstatedir}/lib/gdm/.pulse -%attr(0600, gdm, gdm) %{_localstatedir}/lib/gdm/.pulse/default.pa -%endif - - %changelog +* Mon May 11 2020 Wim Taymans - 13.99.1-1 +- Update to 13.99.1 +- Resolves: rhbz#1817378 + * Thu Sep 12 2019 Wim Taymans - 11.1-23 - Add xauthority parameter to X11 modules - Fix compilation against newer alsa-lib