diff options
-rw-r--r-- | .tarball-version | 2 | ||||
-rw-r--r-- | .version | 2 | ||||
-rw-r--r-- | NEWS | 19 | ||||
-rwxr-xr-x | configure | 20 | ||||
-rw-r--r-- | src/modules/alsa/alsa-mixer.c | 2 | ||||
-rw-r--r-- | src/modules/alsa/mixer/profile-sets/default.conf | 15 | ||||
-rw-r--r-- | src/modules/bluetooth/backend-native.c | 1 | ||||
-rw-r--r-- | src/modules/bluetooth/module-bluez5-device.c | 12 | ||||
-rw-r--r-- | src/modules/bluetooth/module-bluez5-discover.c | 2 | ||||
-rw-r--r-- | src/pulse/version.h | 4 | ||||
-rw-r--r-- | src/pulsecore/sink.c | 25 | ||||
-rw-r--r-- | src/pulsecore/source.c | 23 |
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 @@ -1 +1 @@ -11.0 +11.1 @@ -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 @@ -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); } } |