summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.tarball-version2
-rw-r--r--.version2
-rw-r--r--NEWS19
-rwxr-xr-xconfigure20
-rw-r--r--src/modules/alsa/alsa-mixer.c2
-rw-r--r--src/modules/alsa/mixer/profile-sets/default.conf15
-rw-r--r--src/modules/bluetooth/backend-native.c1
-rw-r--r--src/modules/bluetooth/module-bluez5-device.c12
-rw-r--r--src/modules/bluetooth/module-bluez5-discover.c2
-rw-r--r--src/pulse/version.h4
-rw-r--r--src/pulsecore/sink.c25
-rw-r--r--src/pulsecore/source.c23
12 files changed, 86 insertions, 41 deletions
diff --git a/.tarball-version b/.tarball-version
index 2dbc24b..ef32e32 100644
--- a/.tarball-version
+++ b/.tarball-version
@@ -1 +1 @@
-11.0
+11.1
diff --git a/.version b/.version
index 2dbc24b..ef32e32 100644
--- a/.version
+++ b/.version
@@ -1 +1 @@
-11.0
+11.1
diff --git a/NEWS b/NEWS
index 9a507a9..3a7c88f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,21 @@
+PulseAudio 11.1
+
+A bug fix release.
+
+ * Fix a crash in filter modules related to flat volumes and volume sharing
+ * Fix a crash when the bluetooth adapter reports weird MTU size
+ * Disable bluetooth MTU autodetection by default
+ * Add mixer handling back for hardware that doesn't have any alsa-lib
+ configuration
+ * Prioritize USB devices over built-in sound cards (11.0 was supposed to have
+ this feature, but the implementation turned out to be incomplete)
+
+Contributors
+
+ Arun Raghavan
+ Tanu Kaskinen
+
+
PulseAudio 11.0
Changes at a glance:
@@ -17,6 +35,7 @@ Changes at a glance:
module-virtual-surround-sink
* Fixed input device handling in module-waveout
* Improved bluetooth MTU configuration
+ * GNU Hurd support
* Applications can request LADSPA or virtual surround filtering for their
streams
* Support for 32-bit applications on 64-bit systems in padsp
diff --git a/configure b/configure
index 08a0192..6a48988 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for pulseaudio 11.0.
+# Generated by GNU Autoconf 2.69 for pulseaudio 11.1.
#
# Report bugs to <pulseaudio-discuss (at) lists (dot) freedesktop (dot) org>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='pulseaudio'
PACKAGE_TARNAME='pulseaudio'
-PACKAGE_VERSION='11.0'
-PACKAGE_STRING='pulseaudio 11.0'
+PACKAGE_VERSION='11.1'
+PACKAGE_STRING='pulseaudio 11.1'
PACKAGE_BUGREPORT='pulseaudio-discuss (at) lists (dot) freedesktop (dot) org'
PACKAGE_URL='http://pulseaudio.org/'
@@ -1753,7 +1753,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures pulseaudio 11.0 to adapt to many kinds of systems.
+\`configure' configures pulseaudio 11.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1824,7 +1824,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of pulseaudio 11.0:";;
+ short | recursive ) echo "Configuration of pulseaudio 11.1:";;
esac
cat <<\_ACEOF
@@ -2129,7 +2129,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-pulseaudio configure 11.0
+pulseaudio configure 11.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2902,7 +2902,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by pulseaudio $as_me 11.0, which was
+It was created by pulseaudio $as_me 11.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3858,7 +3858,7 @@ fi
# Define the identity of the package.
PACKAGE='pulseaudio'
- VERSION='11.0'
+ VERSION='11.1'
cat >>confdefs.h <<_ACEOF
@@ -30044,7 +30044,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by pulseaudio $as_me 11.0, which was
+This file was extended by pulseaudio $as_me 11.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -30111,7 +30111,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-pulseaudio config.status 11.0
+pulseaudio config.status 11.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
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/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..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))
@@ -2256,7 +2266,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/src/pulse/version.h b/src/pulse/version.h
index 06b09e1..2738cfe 100644
--- a/src/pulse/version.h
+++ b/src/pulse/version.h
@@ -33,7 +33,7 @@ PA_C_DECL_BEGIN
/** Return the version of the header files. Keep in mind that this is
a macro and not a function, so it is impossible to get the pointer of
it. */
-#define pa_get_headers_version() ("11.0.0")
+#define pa_get_headers_version() ("11.1.0")
/** Return the version of the library the current application is
* linked to. */
@@ -53,7 +53,7 @@ const char* pa_get_library_version(void);
#define PA_MAJOR 11
/** The minor version of PA. \since 0.9.15 */
-#define PA_MINOR 0
+#define PA_MINOR 1
/** The micro version of PA (will always be 0 from v1.0 onwards). \since 0.9.15 */
#define PA_MICRO 0
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index a8b4cd3..cbca889 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,11 +1951,12 @@ 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
- * that will be done later in update_shared_real_volume(). */
+ * that will be done later in update_real_volume(). */
continue;
}
@@ -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);
}
}
@@ -3527,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/src/pulsecore/source.c b/src/pulsecore/source.c
index b2936c5..e0d32af 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,11 +1525,12 @@ 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
- * that will be done later in update_shared_real_volume(). */
+ * that will be done later in update_real_volume(). */
continue;
}
@@ -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);
}
}