diff --git a/0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch b/0004-alsa-mixer-Add-support-for-usb-audio-in-the-Dell-doc.patch deleted file mode 100644 index 1d83034..0000000 --- a/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/0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch b/0009-alsa-mixer-set-PCM-Capture-Source-for-iec958-input.patch deleted file mode 100644 index 4689456..0000000 --- a/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/0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch b/0010-build-sys-add-iec958-stereo-input.conf-to-dist_alsap.patch deleted file mode 100644 index 3238bd5..0000000 --- a/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/0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch b/0015-alsa-mixer-round-not-truncate-in-to_alsa_dB.patch deleted file mode 100644 index 45fff8c..0000000 --- a/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/0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch b/0016-alsa-mixer-add-support-for-Steelseries-Arctis-7-head.patch deleted file mode 100644 index 55e65b8..0000000 --- a/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/0018-build-sys-add-the-Arctis-configuration.patch b/0018-build-sys-add-the-Arctis-configuration.patch deleted file mode 100644 index 948aa38..0000000 --- a/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/0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch b/0033-qpaeq-change-license-from-AGPL-to-LGPL-v2.1.patch deleted file mode 100644 index 5e4b46e..0000000 --- a/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/0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch b/0035-alsa-mixer-Prioritize-hdmi-mappings-over-iec958-mapp.patch deleted file mode 100644 index b2e54ba..0000000 --- a/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/0074-build-sys-add-the-Dell-dock-TB16-configuration.patch b/0074-build-sys-add-the-Dell-dock-TB16-configuration.patch deleted file mode 100644 index dd5dc96..0000000 --- a/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/0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch b/0084-sink-source-Don-t-finish-move-if-unlink-happens-afte.patch deleted file mode 100644 index afd14bc..0000000 --- a/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/0085-client-conf-Add-a-default-value-for-disable-memfd.patch b/0085-client-conf-Add-a-default-value-for-disable-memfd.patch deleted file mode 100644 index e298aae..0000000 --- a/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/0090-qpaeq-port-to-PyQt5.patch b/0090-qpaeq-port-to-PyQt5.patch deleted file mode 100644 index aa4495e..0000000 --- a/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/0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch b/0093-alsa-fix-infinite-loop-with-Intel-HDMI-LPE.patch deleted file mode 100644 index ddd7abd..0000000 --- a/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/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch b/0106-memfd-wrappers-only-define-memfd_create-if-not-alrea.patch deleted file mode 100644 index f3d3b61..0000000 --- a/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/pulseaudio.spec b/pulseaudio.spec index 0c54c32..15d35f5 100644 --- a/pulseaudio.spec +++ b/pulseaudio.spec @@ -1,10 +1,10 @@ %global pa_major 11.1 #global pa_minor 0 -#global snap 20141103 -#global gitrel 327 -#global gitcommit aec811798cd883a454b9b5cd82c77831906bbd2d -#global shortcommit (c=%{gitcommit}; echo ${c:0:5}) +%global snap 20180411 +%global gitrel 129 +%global gitcommit ba2b748d40f78b9d9f945b5422ca74d05f8d0d07 +%global shortcommit %(c=%{gitcommit}; echo ${c:0:5}) # webrtc bits go wonky without this # see also https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/thread/JQQ66XJSIT2FGTK2YQY7AXMEH5IXMPUX/ @@ -39,7 +39,7 @@ Name: pulseaudio Summary: Improved Linux Sound Server Version: %{pa_major}%{?pa_minor:.%{pa_minor}} -Release: 19%{?snap:.%{snap}git%{shortcommit}}%{?dist} +Release: 20%{?snap:.%{snap}git%{shortcommit}}%{?dist} License: LGPLv2+ URL: http://www.freedesktop.org/wiki/Software/PulseAudio %if 0%{?gitrel} @@ -79,32 +79,13 @@ Patch205: pulseaudio-11.1-glibc_memfd.patch Patch206: pulseaudio-11.1-autospawn_disable.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 ## 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 BuildRequires: automake libtool BuildRequires: gcc-c++ @@ -299,25 +280,8 @@ This package contains GDM integration hooks for the PulseAudio sound server. %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 ## 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} > 27 %patch101 -p1 @@ -325,7 +289,6 @@ This package contains GDM integration hooks for the PulseAudio sound server. %patch103 -p1 %patch104 -p1 %endif -%patch106 -p1 %patch201 -p1 -b .autostart %patch202 -p1 -b .disable_flat_volumes @@ -571,6 +534,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 @@ -718,6 +682,13 @@ exit 0 %changelog +* Mon Apr 23 2018 Hans de Goede - 11.1-20 +- Fix Intel LPE HDMI problems: +- Update to upstream gitsnapshot which contains a fix for the crash caused + by patch93 (and contains patch93 fixing the Intel LPE HDMI pa crash) +- Fix-realtime-scheduling-on-byt-cht.patch, Fix-Intel-HDMI-LPE-problems.patch: + drop both, both fixes are included in the git snapshot + * Fri Mar 23 2018 Iryna Shcherbina - 11.1-19 - Update Python 2 dependency declarations to new packaging standards (See https://fedoraproject.org/wiki/FinalizingFedoraSwitchtoPython3) diff --git a/sources b/sources index 6e49e20..2bc98d7 100644 --- a/sources +++ b/sources @@ -1,3 +1 @@ -SHA512 (pulseaudio-11.1.tar.xz) = 8863d8d7aede0d9a4d158e84e7bece91747c335f9ac98c7b21fafe76b762f8817e1125307aa46e561e540d2c40525e91f51a55ec34ac55d58fd5980199856a7a -SHA512 (pulseaudio-11.1.tar.xz.md5) = d4fcd1476eb0b0856feb311584cf9623fcb87a1495c335696cf9371871d23e1076d33c138413e2a76f34711fd57fe6d277ed7e6a5d069baa9c6afc5e991d2675 -SHA512 (pulseaudio-11.1.tar.xz.sha1) = c8d5c3923ff67e795d4c0f56f561b1637244eca1b91540f49052a9bc6c2c617eb0f05a7ceb1055852f1dfbbe41706ef1baf81f68c7556c0241373168f7030d56 +SHA512 (pulseaudio-11.1-129-gba2b7.tar.xz) = 2395e30fd939ce45a95c6466c44deb2c0e76b309640b70f094d6ada63c650386f6c43d655bf4f3b2704b6ce6faa3567a9900f07beb3588f408de28ad29e961bf diff --git a/v5-1-4-bluetooth-use-consistent-profile-names.patch b/v5-1-4-bluetooth-use-consistent-profile-names.patch index 2d4c730..c9a71b0 100644 --- a/v5-1-4-bluetooth-use-consistent-profile-names.patch +++ b/v5-1-4-bluetooth-use-consistent-profile-names.patch @@ -119,13 +119,14 @@ diff --git a/src/modules/bluetooth/bluez5-util.c b/src/modules/bluetooth/bluez5- 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 +@@ -174,11 +174,11 @@ 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_HSP_HS_ALT) || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF); - case PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY: + case PA_BLUETOOTH_PROFILE_HFP_AG: @@ -235,8 +236,8 @@ index 530207a2..d076fbad 100644 * 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; + u->source->set_state_in_io_thread = source_set_state_in_io_thread_cb; - 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) { @@ -274,8 +275,8 @@ index 530207a2..d076fbad 100644 * 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; + u->sink->set_state_in_io_thread = sink_set_state_in_io_thread_cb; - 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) { @@ -336,7 +337,7 @@ index 530207a2..d076fbad 100644 - 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->priority = 30; 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); @@ -345,12 +346,12 @@ index 530207a2..d076fbad 100644 - 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->priority = 10; 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)) + else if (pa_bluetooth_uuid_is_hsp_hs(uuid) || 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)) diff --git a/v5-2-4-bluetooth-separate-HSP-and-HFP.patch b/v5-2-4-bluetooth-separate-HSP-and-HFP.patch index aac2954..419dbf6 100644 --- a/v5-2-4-bluetooth-separate-HSP-and-HFP.patch +++ b/v5-2-4-bluetooth-separate-HSP-and-HFP.patch @@ -80,7 +80,7 @@ index 4470f2ef..80a025d5 100644 }; 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 +@@ -169,15 +170,29 @@ 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) { @@ -103,8 +103,11 @@ index 4470f2ef..80a025d5 100644 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_HSP_HS_ALT) - || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HFP_HF); -+ return show_hsp && !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS); ++ return show_hsp && ( ++ !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS) ++ || !!pa_hashmap_get(device->uuids, PA_BLUETOOTH_UUID_HSP_HS_ALT)); + 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: @@ -238,8 +241,8 @@ index d076fbad..d37ce9ce 100644 * 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; + u->source->set_state_in_io_thread = source_set_state_in_io_thread_cb; - if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { + if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS @@ -267,8 +270,8 @@ index d076fbad..d37ce9ce 100644 * 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; + u->sink->set_state_in_io_thread = sink_set_state_in_io_thread_cb; - if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS || u->profile == PA_BLUETOOTH_PROFILE_HFP_AG) { + if (u->profile == PA_BLUETOOTH_PROFILE_HSP_HS @@ -302,7 +305,7 @@ index d076fbad..d37ce9ce 100644 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->priority = 30; + cp->n_sinks = 1; + cp->n_sources = 1; + cp->max_sink_channels = 1; @@ -314,16 +317,16 @@ index d076fbad..d37ce9ce 100644 + 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 = pa_card_profile_new(name, _("Headset Handsfree (HFP)"), sizeof(pa_bluetooth_profile_t)); + cp->priority = 30; 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)) +- else if (pa_bluetooth_uuid_is_hsp_hs(uuid) || pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF)) ++ else if (pa_bluetooth_uuid_is_hsp_hs(uuid)) *_r = PA_BLUETOOTH_PROFILE_HSP_HS; + else if (pa_streq(uuid, PA_BLUETOOTH_UUID_HFP_HF)) + *_r = PA_BLUETOOTH_PROFILE_HFP_HF;