This is an automated email from the git hooks/post-receive script. fsateler pushed a commit to branch master in repository pulseaudio.
commit 0aec4395c08c64ecf23b303146eee6482683258c Author: Felipe Sateler <[email protected]> Date: Wed Sep 13 20:10:46 2017 -0300 Backport patches from pending 11.1 upstream bugfix release Closes: #875541 --- ...ixer-handling-to-the-fallback-stereo-case.patch | 75 +++++++++ .../bluez-Don-t-autodetect-MTU-by-default.patch | 57 +++++++ .../bluez-Don-t-crash-on-strange-MTU-sizes.patch | 33 ++++ debian/patches/series | 6 + ...iority-bonus-for-the-internal-form-factor.patch | 28 ++++ ...t-try-to-update-volumes-of-not-yet-linked.patch | 172 +++++++++++++++++++++ .../sink-source-fix-out-of-date-comments.patch | 40 +++++ 7 files changed, 411 insertions(+) diff --git a/debian/patches/alsa-mixer-add-mixer-handling-to-the-fallback-stereo-case.patch b/debian/patches/alsa-mixer-add-mixer-handling-to-the-fallback-stereo-case.patch new file mode 100644 index 0000000..3b995cd --- /dev/null +++ b/debian/patches/alsa-mixer-add-mixer-handling-to-the-fallback-stereo-case.patch @@ -0,0 +1,75 @@ +From: Tanu Kaskinen <[email protected]> +Date: Fri, 8 Sep 2017 15:10:41 +0300 +Subject: alsa-mixer: add mixer handling to the fallback stereo case + +Some sound cards don't have any alsa-lib configuration, but they used to +work well enough up to PulseAudio 10. PulseAudio 11 stopped using "hw:0" +for the analog-stereo mapping, and instead defined it as a fallback +mapping without any mixer handling. As a result, switching between +headphones and speakers stopped working without changing the mixer +settings manually at least on Toshiba Chromebook 2. This patch adds the +mixer handling back to the fallback mapping. + +I also renamed "unknown-stereo" to "stereo-fallback", because I like +that name more. + +BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=102560 +(cherry picked from commit b4d1c298a28f313d8ca72604ca05dfa68cc06e69) +--- + src/modules/alsa/alsa-mixer.c | 2 +- + src/modules/alsa/mixer/profile-sets/default.conf | 15 +++++++++------ + 2 files changed, 10 insertions(+), 7 deletions(-) + +diff --git a/src/modules/alsa/alsa-mixer.c b/src/modules/alsa/alsa-mixer.c +index f59cad3..986cc7d 100644 +--- a/src/modules/alsa/alsa-mixer.c ++++ b/src/modules/alsa/alsa-mixer.c +@@ -3989,6 +3989,7 @@ static int mapping_verify(pa_alsa_mapping *m, const pa_channel_map *bonus) { + static const struct description_map well_known_descriptions[] = { + { "analog-mono", N_("Analog Mono") }, + { "analog-stereo", N_("Analog Stereo") }, ++ { "stereo-fallback", N_("Stereo") }, + /* Note: Not translated to "Analog Stereo Input", because the source + * name gets "Input" appended to it automatically, so adding "Input" + * here would lead to the source name to become "Analog Stereo Input +@@ -4016,7 +4017,6 @@ static int mapping_verify(pa_alsa_mapping *m, const pa_channel_map *bonus) { + { "iec958-dts-surround-51", N_("Digital Surround 5.1 (IEC958/DTS)") }, + { "hdmi-stereo", N_("Digital Stereo (HDMI)") }, + { "hdmi-surround-51", N_("Digital Surround 5.1 (HDMI)") }, +- { "unknown-stereo", N_("Stereo") }, + }; + + pa_assert(m); +diff --git a/src/modules/alsa/mixer/profile-sets/default.conf b/src/modules/alsa/mixer/profile-sets/default.conf +index f412058..c360e77 100644 +--- a/src/modules/alsa/mixer/profile-sets/default.conf ++++ b/src/modules/alsa/mixer/profile-sets/default.conf +@@ -115,6 +115,15 @@ paths-output = analog-output analog-output-lineout analog-output-speaker analog- + 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 + ++# If everything else fails, try to use hw:0 as a stereo device. ++[Mapping stereo-fallback] ++device-strings = hw:%f ++fallback = yes ++channel-map = front-left,front-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 = 1 ++ + [Mapping analog-surround-21] + device-strings = surround21:%f + channel-map = front-left,front-right,lfe +@@ -460,12 +469,6 @@ priority = 1 + direction = input + paths-input = multichannel-input + +-[Mapping unknown-stereo] +-device-strings = hw:%f +-channel-map = front-left,front-right +-fallback = yes +-priority = 1 +- + ; An example for defining multiple-sink profiles + #[Profile output:analog-stereo+output:iec958-stereo+input:analog-stereo] + #description = Foobar diff --git a/debian/patches/bluez-Don-t-autodetect-MTU-by-default.patch b/debian/patches/bluez-Don-t-autodetect-MTU-by-default.patch new file mode 100644 index 0000000..41028b8 --- /dev/null +++ b/debian/patches/bluez-Don-t-autodetect-MTU-by-default.patch @@ -0,0 +1,57 @@ +From: Arun Raghavan <[email protected]> +Date: Wed, 13 Sep 2017 09:22:27 +0530 +Subject: bluez: Don't autodetect MTU by default + +This breaks a lot of headsets, so disabling by default. Can be +re-enabled in configuration for specific hardware where it is deemed +necessary. + +Also added some debug logging to be able to examine what MTU size is +reported by the device. + +BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=102660 +(cherry picked from commit 9e895b172569ce5c34d977dbb7fded8c7957782e) +--- + src/modules/bluetooth/backend-native.c | 1 + + src/modules/bluetooth/module-bluez5-device.c | 2 +- + src/modules/bluetooth/module-bluez5-discover.c | 2 +- + 3 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/modules/bluetooth/backend-native.c b/src/modules/bluetooth/backend-native.c +index 6eb4e16..0f0104d 100644 +--- a/src/modules/bluetooth/backend-native.c ++++ b/src/modules/bluetooth/backend-native.c +@@ -206,6 +206,7 @@ static int sco_acquire_cb(pa_bluetooth_transport *t, bool optional, size_t *imtu + if (getsockopt(sock, SOL_SCO, SCO_OPTIONS, &sco_opt, &len) < 0) + pa_log_warn("getsockopt(SCO_OPTIONS) failed, loading defaults"); + else { ++ pa_log_debug("autodetected imtu = omtu = %u", sco_opt.mtu); + if (imtu) *imtu = sco_opt.mtu; + if (omtu) *omtu = sco_opt.mtu; + } +diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c +index c0e681b..a37c3d5 100644 +--- a/src/modules/bluetooth/module-bluez5-device.c ++++ b/src/modules/bluetooth/module-bluez5-device.c +@@ -2256,7 +2256,7 @@ int pa__init(pa_module* m) { + goto fail_free_modargs; + } + +- autodetect_mtu = true; ++ autodetect_mtu = false; + if (pa_modargs_get_value_boolean(ma, "autodetect_mtu", &autodetect_mtu) < 0) { + pa_log("Invalid boolean value for autodetect_mtu parameter"); + goto fail_free_modargs; +diff --git a/src/modules/bluetooth/module-bluez5-discover.c b/src/modules/bluetooth/module-bluez5-discover.c +index 97ff943..c535ead 100644 +--- a/src/modules/bluetooth/module-bluez5-discover.c ++++ b/src/modules/bluetooth/module-bluez5-discover.c +@@ -124,7 +124,7 @@ int pa__init(pa_module *m) { + goto fail; + } + +- autodetect_mtu = true; ++ autodetect_mtu = false; + if (pa_modargs_get_value_boolean(ma, "autodetect_mtu", &autodetect_mtu) < 0) { + pa_log("Invalid boolean value for autodetect_mtu parameter"); + goto fail; diff --git a/debian/patches/bluez-Don-t-crash-on-strange-MTU-sizes.patch b/debian/patches/bluez-Don-t-crash-on-strange-MTU-sizes.patch new file mode 100644 index 0000000..b9aac18 --- /dev/null +++ b/debian/patches/bluez-Don-t-crash-on-strange-MTU-sizes.patch @@ -0,0 +1,33 @@ +From: Arun Raghavan <[email protected]> +Date: Wed, 13 Sep 2017 12:49:28 +0530 +Subject: bluez: Don't crash on strange MTU sizes + +We got reports of this with automatically detected MTUs that weren't +frame aligned. + +(cherry picked from commit 01f489c396ac3adfb95d57be48bc9f5b5a2a76c6) +--- + src/modules/bluetooth/module-bluez5-device.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/src/modules/bluetooth/module-bluez5-device.c b/src/modules/bluetooth/module-bluez5-device.c +index a37c3d5..530207a 100644 +--- a/src/modules/bluetooth/module-bluez5-device.c ++++ b/src/modules/bluetooth/module-bluez5-device.c +@@ -787,6 +787,16 @@ static void transport_config_mtu(struct userdata *u) { + if (u->profile == PA_BLUETOOTH_PROFILE_HEADSET_HEAD_UNIT || u->profile == PA_BLUETOOTH_PROFILE_HEADSET_AUDIO_GATEWAY) { + u->read_block_size = u->read_link_mtu; + u->write_block_size = u->write_link_mtu; ++ ++ if (!pa_frame_aligned(u->read_block_size, &u->source->sample_spec)) { ++ pa_log_debug("Got invalid read MTU: %lu, rounding down", u->read_block_size); ++ u->read_block_size = pa_frame_align(u->read_block_size, &u->source->sample_spec); ++ } ++ ++ if (!pa_frame_aligned(u->write_block_size, &u->sink->sample_spec)) { ++ pa_log_debug("Got invalid write MTU: %lu, rounding down", u->write_block_size); ++ u->write_block_size = pa_frame_align(u->write_block_size, &u->sink->sample_spec); ++ } + } else { + u->read_block_size = + (u->read_link_mtu - sizeof(struct rtp_header) - sizeof(struct rtp_payload)) diff --git a/debian/patches/series b/debian/patches/series new file mode 100644 index 0000000..4ddda17 --- /dev/null +++ b/debian/patches/series @@ -0,0 +1,6 @@ +sink-source-don-t-try-to-update-volumes-of-not-yet-linked.patch +sink-source-fix-out-of-date-comments.patch +sink-remove-priority-bonus-for-the-internal-form-factor.patch +alsa-mixer-add-mixer-handling-to-the-fallback-stereo-case.patch +bluez-Don-t-autodetect-MTU-by-default.patch +bluez-Don-t-crash-on-strange-MTU-sizes.patch diff --git a/debian/patches/sink-remove-priority-bonus-for-the-internal-form-factor.patch b/debian/patches/sink-remove-priority-bonus-for-the-internal-form-factor.patch new file mode 100644 index 0000000..c14a315 --- /dev/null +++ b/debian/patches/sink-remove-priority-bonus-for-the-internal-form-factor.patch @@ -0,0 +1,28 @@ +From: Tanu Kaskinen <[email protected]> +Date: Wed, 6 Sep 2017 16:08:29 +0300 +Subject: sink: remove priority bonus for the "internal" form factor + +We're supposed to prioritize USB sound cards over PCI sound cards, but +the priority bonus for the "internal" form factor prevents this from +happening. Not all (if any) USB sound cards have the form factor +property set, whereas at least on my laptop the on-board sound card has +the form factor set to "internal". + +(cherry picked from commit f30203c2d43eb16d76f25d87e1980e34a60753cf) +--- + src/pulsecore/sink.c | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c +index 2234289..cbca889 100644 +--- a/src/pulsecore/sink.c ++++ b/src/pulsecore/sink.c +@@ -3534,8 +3534,6 @@ unsigned pa_device_init_priority(pa_proplist *p) { + priority += 500; + else if (pa_streq(s, "portable")) + priority += 450; +- else if (pa_streq(s, "internal")) +- priority += 400; + } + + if ((s = pa_proplist_gets(p, PA_PROP_DEVICE_BUS))) { diff --git a/debian/patches/sink-source-don-t-try-to-update-volumes-of-not-yet-linked.patch b/debian/patches/sink-source-don-t-try-to-update-volumes-of-not-yet-linked.patch new file mode 100644 index 0000000..fc758e7 --- /dev/null +++ b/debian/patches/sink-source-don-t-try-to-update-volumes-of-not-yet-linked.patch @@ -0,0 +1,172 @@ +From: Tanu Kaskinen <[email protected]> +Date: Sun, 10 Sep 2017 22:32:56 +0300 +Subject: sink, source: don't try to update volumes of not-yet-linked devices + +The order of the pa_sink_input_put() and pa_sink_put() calls in filter +modules was swapped in commit edc465da77 ("virtual sources and sinks: +Don't double attach a sink input or source output on filter load"). +If flat volumes and volume sharing is enabled, the pa_sink_input_put() +call will update volumes of the whole tree of virtual sinks that are +connected to the root sink. The recursive updating procedure tried to +also update the volume of the new sink for which pa_sink_put() had not +yet been called, causing an assertion failure. + +This patch tries to make sure that the volume of not-yet-linked sinks +is never changed. pa_sink_put() will set the sink volume correctly, so +it's fine to skip the not-yet-linked sinks during pa_sink_input_put(). + +BugLink: https://bugs.freedesktop.org/show_bug.cgi?id=102549 +(cherry picked from commit 759705bc4f1bc819dbfbc1f68c1b0b4bd3a18734) +--- + src/pulsecore/sink.c | 21 ++++++++++++++------- + src/pulsecore/source.c | 21 ++++++++++++++------- + 2 files changed, 28 insertions(+), 14 deletions(-) + +diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c +index a8b4cd3..2ea874a 100644 +--- a/src/pulsecore/sink.c ++++ b/src/pulsecore/sink.c +@@ -1710,7 +1710,8 @@ static void compute_reference_ratios(pa_sink *s) { + PA_IDXSET_FOREACH(i, s->inputs, idx) { + compute_reference_ratio(i); + +- if (i->origin_sink && (i->origin_sink->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER)) ++ if (i->origin_sink && (i->origin_sink->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER) ++ && PA_SINK_IS_LINKED(i->origin_sink->state)) + compute_reference_ratios(i->origin_sink); + } + } +@@ -1737,7 +1738,8 @@ static void compute_real_ratios(pa_sink *s) { + pa_cvolume_reset(&i->real_ratio, i->real_ratio.channels); + i->soft_volume = i->volume_factor; + +- compute_real_ratios(i->origin_sink); ++ if (PA_SINK_IS_LINKED(i->origin_sink->state)) ++ compute_real_ratios(i->origin_sink); + + continue; + } +@@ -1836,7 +1838,8 @@ static void get_maximum_input_volume(pa_sink *s, pa_cvolume *max_volume, const p + pa_cvolume remapped; + + if (i->origin_sink && (i->origin_sink->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER)) { +- get_maximum_input_volume(i->origin_sink, max_volume, channel_map); ++ if (PA_SINK_IS_LINKED(i->origin_sink->state)) ++ get_maximum_input_volume(i->origin_sink, max_volume, channel_map); + + /* Ignore this input. The origin sink uses volume sharing, so this + * input's volume will be set to be equal to the root sink's real +@@ -1892,7 +1895,8 @@ static void update_real_volume(pa_sink *s, const pa_cvolume *new_volume, pa_chan + compute_reference_ratio(i); + } + +- update_real_volume(i->origin_sink, new_volume, channel_map); ++ if (PA_SINK_IS_LINKED(i->origin_sink->state)) ++ update_real_volume(i->origin_sink, new_volume, channel_map); + } + } + } +@@ -1947,7 +1951,8 @@ static void propagate_reference_volume(pa_sink *s) { + pa_cvolume new_volume; + + if (i->origin_sink && (i->origin_sink->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER)) { +- propagate_reference_volume(i->origin_sink); ++ if (PA_SINK_IS_LINKED(i->origin_sink->state)) ++ propagate_reference_volume(i->origin_sink); + + /* Since the origin sink uses volume sharing, this input's volume + * needs to be updated to match the root sink's real volume, but +@@ -2005,7 +2010,8 @@ static bool update_reference_volume(pa_sink *s, const pa_cvolume *v, const pa_ch + return false; + + PA_IDXSET_FOREACH(i, s->inputs, idx) { +- if (i->origin_sink && (i->origin_sink->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER)) ++ if (i->origin_sink && (i->origin_sink->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER) ++ && PA_SINK_IS_LINKED(i->origin_sink->state)) + update_reference_volume(i->origin_sink, v, channel_map, false); + } + +@@ -2176,7 +2182,8 @@ static void propagate_real_volume(pa_sink *s, const pa_cvolume *old_real_volume) + pa_sw_cvolume_multiply(&new_volume, &new_volume, &i->reference_ratio); + pa_sink_input_set_volume_direct(i, &new_volume); + +- if (i->origin_sink && (i->origin_sink->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER)) ++ if (i->origin_sink && (i->origin_sink->flags & PA_SINK_SHARE_VOLUME_WITH_MASTER) ++ && PA_SINK_IS_LINKED(i->origin_sink->state)) + propagate_real_volume(i->origin_sink, old_real_volume); + } + } +diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c +index b2936c5..b9db4c6 100644 +--- a/src/pulsecore/source.c ++++ b/src/pulsecore/source.c +@@ -1284,7 +1284,8 @@ static void compute_reference_ratios(pa_source *s) { + PA_IDXSET_FOREACH(o, s->outputs, idx) { + compute_reference_ratio(o); + +- if (o->destination_source && (o->destination_source->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER)) ++ if (o->destination_source && (o->destination_source->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER) ++ && PA_SOURCE_IS_LINKED(o->destination_source->state)) + compute_reference_ratios(o->destination_source); + } + } +@@ -1311,7 +1312,8 @@ static void compute_real_ratios(pa_source *s) { + pa_cvolume_reset(&o->real_ratio, o->real_ratio.channels); + o->soft_volume = o->volume_factor; + +- compute_real_ratios(o->destination_source); ++ if (PA_SOURCE_IS_LINKED(o->destination_source->state)) ++ compute_real_ratios(o->destination_source); + + continue; + } +@@ -1410,7 +1412,8 @@ static void get_maximum_output_volume(pa_source *s, pa_cvolume *max_volume, cons + pa_cvolume remapped; + + if (o->destination_source && (o->destination_source->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER)) { +- get_maximum_output_volume(o->destination_source, max_volume, channel_map); ++ if (PA_SOURCE_IS_LINKED(o->destination_source->state)) ++ get_maximum_output_volume(o->destination_source, max_volume, channel_map); + + /* Ignore this output. The origin source uses volume sharing, so this + * output's volume will be set to be equal to the root source's real +@@ -1466,7 +1469,8 @@ static void update_real_volume(pa_source *s, const pa_cvolume *new_volume, pa_ch + compute_reference_ratio(o); + } + +- update_real_volume(o->destination_source, new_volume, channel_map); ++ if (PA_SOURCE_IS_LINKED(o->destination_source->state)) ++ update_real_volume(o->destination_source, new_volume, channel_map); + } + } + } +@@ -1521,7 +1525,8 @@ static void propagate_reference_volume(pa_source *s) { + pa_cvolume new_volume; + + if (o->destination_source && (o->destination_source->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER)) { +- propagate_reference_volume(o->destination_source); ++ if (PA_SOURCE_IS_LINKED(o->destination_source->state)) ++ propagate_reference_volume(o->destination_source); + + /* Since the origin source uses volume sharing, this output's volume + * needs to be updated to match the root source's real volume, but +@@ -1579,7 +1584,8 @@ static bool update_reference_volume(pa_source *s, const pa_cvolume *v, const pa_ + return false; + + PA_IDXSET_FOREACH(o, s->outputs, idx) { +- if (o->destination_source && (o->destination_source->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER)) ++ if (o->destination_source && (o->destination_source->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER) ++ && PA_SOURCE_IS_LINKED(o->destination_source->state)) + update_reference_volume(o->destination_source, v, channel_map, false); + } + +@@ -1759,7 +1765,8 @@ static void propagate_real_volume(pa_source *s, const pa_cvolume *old_real_volum + pa_sw_cvolume_multiply(&new_volume, &new_volume, &o->reference_ratio); + pa_source_output_set_volume_direct(o, &new_volume); + +- if (o->destination_source && (o->destination_source->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER)) ++ if (o->destination_source && (o->destination_source->flags & PA_SOURCE_SHARE_VOLUME_WITH_MASTER) ++ && PA_SOURCE_IS_LINKED(o->destination_source->state)) + propagate_real_volume(o->destination_source, old_real_volume); + } + } diff --git a/debian/patches/sink-source-fix-out-of-date-comments.patch b/debian/patches/sink-source-fix-out-of-date-comments.patch new file mode 100644 index 0000000..6985576 --- /dev/null +++ b/debian/patches/sink-source-fix-out-of-date-comments.patch @@ -0,0 +1,40 @@ +From: Tanu Kaskinen <[email protected]> +Date: Sun, 10 Sep 2017 22:32:57 +0300 +Subject: sink, source: fix out of date comments + +update_shared_real_volume() doesn't exist. I checked that +update_real_volume() does what the comments claim +update_shared_real_volume() to do. + +(cherry picked from commit 0062bd860d83d18c34e867594b68de72d94a3259) +--- + src/pulsecore/sink.c | 2 +- + src/pulsecore/source.c | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c +index 2ea874a..2234289 100644 +--- a/src/pulsecore/sink.c ++++ b/src/pulsecore/sink.c +@@ -1956,7 +1956,7 @@ static void propagate_reference_volume(pa_sink *s) { + + /* Since the origin sink uses volume sharing, this input's volume + * needs to be updated to match the root sink's real volume, but +- * that will be done later in update_shared_real_volume(). */ ++ * that will be done later in update_real_volume(). */ + continue; + } + +diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c +index b9db4c6..e0d32af 100644 +--- a/src/pulsecore/source.c ++++ b/src/pulsecore/source.c +@@ -1530,7 +1530,7 @@ static void propagate_reference_volume(pa_source *s) { + + /* Since the origin source uses volume sharing, this output's volume + * needs to be updated to match the root source's real volume, but +- * that will be done later in update_shared_real_volume(). */ ++ * that will be done later in update_real_volume(). */ + continue; + } + -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-pulseaudio/pulseaudio.git _______________________________________________ pkg-pulseaudio-devel mailing list [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-pulseaudio-devel

