From 8c0c93db9fbe27c19d94b1deadb0b3afadc006ba Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 3 Nov 2011 22:31:15 +0100 Subject: [PATCH] new upstream --- .gitignore | 6 +- ...-fixed-latency-range-in-alsa-modules.patch | 218 ++++++++++++++++++ ...tency-range-handling-for-udev-detect.patch | 78 +++++++ ...cy_range-modarg-for-module-alsa-card.patch | 32 +++ pulseaudio.spec | 48 ++-- sources | 2 +- 6 files changed, 358 insertions(+), 26 deletions(-) create mode 100644 0001-alsa-support-fixed-latency-range-in-alsa-modules.patch create mode 100644 0002-alsa-fixed-latency-range-handling-for-udev-detect.patch create mode 100644 0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch diff --git a/.gitignore b/.gitignore index a7a89ff..e1d3f22 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ -pulseaudio-0.9.21.tar.gz +/.*.log +/pulseaudio-0.9.21.tar.gz /pulseaudio-0.9.22.tar.gz /pulseaudio-0.99.1.tar.gz /pulseaudio-0.9.23.tar.gz +/*.src.rpm +/x86_64/ +/pulseaudio-1.1.tar.xz diff --git a/0001-alsa-support-fixed-latency-range-in-alsa-modules.patch b/0001-alsa-support-fixed-latency-range-in-alsa-modules.patch new file mode 100644 index 0000000..2c71ab0 --- /dev/null +++ b/0001-alsa-support-fixed-latency-range-in-alsa-modules.patch @@ -0,0 +1,218 @@ +From 7a387fed36ed5bc0b925269fb76b5e8e3a738a5f Mon Sep 17 00:00:00 2001 +From: "Lars R. Damerow" +Date: Thu, 3 Nov 2011 21:14:45 +0100 +Subject: [PATCH 1/3] alsa: support fixed latency range in alsa modules + +This adds a boolean module parameter to disable automatic dynamic +latency readjustments on underruns, but leaves automatic dynamic +watermark readjustments untouched. +--- + src/modules/alsa/alsa-sink.c | 23 +++++++++++++++++++---- + src/modules/alsa/alsa-source.c | 22 ++++++++++++++++++---- + src/modules/alsa/module-alsa-sink.c | 4 +++- + src/modules/alsa/module-alsa-source.c | 4 +++- + src/pulsecore/protocol-native.c | 4 ++++ + 5 files changed, 47 insertions(+), 10 deletions(-) + +diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c +index 7b31b1b..1386196 100644 +--- a/src/modules/alsa/alsa-sink.c ++++ b/src/modules/alsa/alsa-sink.c +@@ -134,7 +134,7 @@ struct userdata { + char *device_name; /* name of the PCM device */ + char *control_device; /* name of the control device */ + +- pa_bool_t use_mmap:1, use_tsched:1, deferred_volume:1; ++ pa_bool_t use_mmap:1, use_tsched:1, deferred_volume:1, fixed_latency_range:1; + + pa_bool_t first, after_rewind; + +@@ -331,7 +331,12 @@ static void increase_watermark(struct userdata *u) { + return; + } + +- /* Hmm, we cannot increase the watermark any further, hence let's raise the latency */ ++ /* Hmm, we cannot increase the watermark any further, hence let's ++ raise the latency, unless doing so was disabled in ++ configuration */ ++ if (u->fixed_latency_range) ++ return; ++ + old_min_latency = u->sink->thread_info.min_latency; + new_min_latency = PA_MIN(old_min_latency * 2, old_min_latency + TSCHED_WATERMARK_INC_STEP_USEC); + new_min_latency = PA_MIN(new_min_latency, u->sink->thread_info.max_latency); +@@ -1969,7 +1974,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca + uint32_t nfrags, frag_size, buffer_size, tsched_size, tsched_watermark, rewind_safeguard; + snd_pcm_uframes_t period_frames, buffer_frames, tsched_frames; + size_t frame_size; +- pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, deferred_volume = FALSE, set_formats = FALSE; ++ pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, deferred_volume = FALSE, set_formats = FALSE, fixed_latency_range = FALSE; + pa_sink_new_data data; + pa_alsa_profile_set *profile_set = NULL; + +@@ -2039,6 +2044,11 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca + goto fail; + } + ++ if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) { ++ pa_log("Failed to parse fixed_latency_range argument."); ++ goto fail; ++ } ++ + use_tsched = pa_alsa_may_tsched(use_tsched); + + u = pa_xnew0(struct userdata, 1); +@@ -2047,6 +2057,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca + u->use_mmap = use_mmap; + u->use_tsched = use_tsched; + u->deferred_volume = deferred_volume; ++ u->fixed_latency_range = fixed_latency_range; + u->first = TRUE; + u->rewind_safeguard = rewind_safeguard; + u->rtpoll = pa_rtpoll_new(); +@@ -2143,9 +2154,13 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca + if (u->use_mmap) + pa_log_info("Successfully enabled mmap() mode."); + +- if (u->use_tsched) ++ if (u->use_tsched) { + pa_log_info("Successfully enabled timer-based scheduling mode."); + ++ if (u->fixed_latency_range) ++ pa_log_info("Disabling latency range changes on underrun"); ++ } ++ + if (is_iec958(u) || is_hdmi(u)) + set_formats = TRUE; + +diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c +index 7a51572..255a61d 100644 +--- a/src/modules/alsa/alsa-source.c ++++ b/src/modules/alsa/alsa-source.c +@@ -121,7 +121,7 @@ struct userdata { + char *device_name; /* name of the PCM device */ + char *control_device; /* name of the control device */ + +- pa_bool_t use_mmap:1, use_tsched:1, deferred_volume:1; ++ pa_bool_t use_mmap:1, use_tsched:1, deferred_volume:1, fixed_latency_range:1; + + pa_bool_t first; + +@@ -306,7 +306,12 @@ static void increase_watermark(struct userdata *u) { + return; + } + +- /* Hmm, we cannot increase the watermark any further, hence let's raise the latency */ ++ /* Hmm, we cannot increase the watermark any further, hence let's ++ raise the latency unless doing so was disabled in ++ configuration */ ++ if (u->fixed_latency_range) ++ return; ++ + old_min_latency = u->source->thread_info.min_latency; + new_min_latency = PA_MIN(old_min_latency * 2, old_min_latency + TSCHED_WATERMARK_INC_STEP_USEC); + new_min_latency = PA_MIN(new_min_latency, u->source->thread_info.max_latency); +@@ -1710,7 +1715,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p + uint32_t nfrags, frag_size, buffer_size, tsched_size, tsched_watermark; + snd_pcm_uframes_t period_frames, buffer_frames, tsched_frames; + size_t frame_size; +- pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, deferred_volume = FALSE; ++ pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE, namereg_fail = FALSE, deferred_volume = FALSE, fixed_latency_range = FALSE; + pa_source_new_data data; + pa_alsa_profile_set *profile_set = NULL; + +@@ -1774,6 +1779,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p + goto fail; + } + ++ if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) { ++ pa_log("Failed to parse fixed_latency_range argument."); ++ goto fail; ++ } ++ + use_tsched = pa_alsa_may_tsched(use_tsched); + + u = pa_xnew0(struct userdata, 1); +@@ -1782,6 +1792,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p + u->use_mmap = use_mmap; + u->use_tsched = use_tsched; + u->deferred_volume = deferred_volume; ++ u->fixed_latency_range = fixed_latency_range; + u->first = TRUE; + u->rtpoll = pa_rtpoll_new(); + pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll); +@@ -1877,8 +1888,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p + if (u->use_mmap) + pa_log_info("Successfully enabled mmap() mode."); + +- if (u->use_tsched) ++ if (u->use_tsched) { + pa_log_info("Successfully enabled timer-based scheduling mode."); ++ if (u->fixed_latency_range) ++ pa_log_info("Disabling latency range changes on overrun"); ++ } + + /* ALSA might tweak the sample spec, so recalculate the frame size */ + frame_size = pa_frame_size(&ss); +diff --git a/src/modules/alsa/module-alsa-sink.c b/src/modules/alsa/module-alsa-sink.c +index 019ccf0..927f075 100644 +--- a/src/modules/alsa/module-alsa-sink.c ++++ b/src/modules/alsa/module-alsa-sink.c +@@ -59,7 +59,8 @@ PA_MODULE_USAGE( + "rewind_safeguard= " + "deferred_volume= " + "deferred_volume_safety_margin= " +- "deferred_volume_extra_delay="); ++ "deferred_volume_extra_delay= " ++ "fixed_latency_range="); + + static const char* const valid_modargs[] = { + "name", +@@ -85,6 +86,7 @@ static const char* const valid_modargs[] = { + "deferred_volume", + "deferred_volume_safety_margin", + "deferred_volume_extra_delay", ++ "fixed_latency_range", + NULL + }; + +diff --git a/src/modules/alsa/module-alsa-source.c b/src/modules/alsa/module-alsa-source.c +index 2d2c8b6..efb2d0c 100644 +--- a/src/modules/alsa/module-alsa-source.c ++++ b/src/modules/alsa/module-alsa-source.c +@@ -67,7 +67,8 @@ PA_MODULE_USAGE( + "control=" + "deferred_volume= " + "deferred_volume_safety_margin= " +- "deferred_volume_extra_delay="); ++ "deferred_volume_extra_delay= " ++ "fixed_latency_range="); + + static const char* const valid_modargs[] = { + "name", +@@ -92,6 +93,7 @@ static const char* const valid_modargs[] = { + "deferred_volume", + "deferred_volume_safety_margin", + "deferred_volume_extra_delay", ++ "fixed_latency_range", + NULL + }; + +diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c +index 0ee4ead..d6bff11 100644 +--- a/src/pulsecore/protocol-native.c ++++ b/src/pulsecore/protocol-native.c +@@ -1008,6 +1008,10 @@ static void fix_playback_buffer_attr(playback_stream *s) { + tlength_usec -= s->configured_sink_latency; + } + ++ pa_log_debug("Requested latency=%0.2f ms, Received latency=%0.2f ms", ++ (double) sink_usec / PA_USEC_PER_MSEC, ++ (double) s->configured_sink_latency / PA_USEC_PER_MSEC); ++ + /* FIXME: This is actually larger than necessary, since not all of + * the sink latency is actually rewritable. */ + if (tlength_usec < s->configured_sink_latency + 2*minreq_usec) +-- +1.7.6.4 + diff --git a/0002-alsa-fixed-latency-range-handling-for-udev-detect.patch b/0002-alsa-fixed-latency-range-handling-for-udev-detect.patch new file mode 100644 index 0000000..e75cecf --- /dev/null +++ b/0002-alsa-fixed-latency-range-handling-for-udev-detect.patch @@ -0,0 +1,78 @@ +From c07c4b353dffe17607fee89e294181bb4e2da40d Mon Sep 17 00:00:00 2001 +From: "Lars R. Damerow" +Date: Thu, 3 Nov 2011 21:29:03 +0100 +Subject: [PATCH 2/3] alsa: fixed latency range handling for udev-detect + +--- + src/modules/module-udev-detect.c | 13 ++++++++++++- + 1 files changed, 12 insertions(+), 1 deletions(-) + +diff --git a/src/modules/module-udev-detect.c b/src/modules/module-udev-detect.c +index c5312a8..1192194 100644 +--- a/src/modules/module-udev-detect.c ++++ b/src/modules/module-udev-detect.c +@@ -45,6 +45,7 @@ PA_MODULE_VERSION(PACKAGE_VERSION); + PA_MODULE_LOAD_ONCE(TRUE); + PA_MODULE_USAGE( + "tsched= " ++ "fixed_latency_range= " + "ignore_dB= " + "deferred_volume="); + +@@ -62,6 +63,7 @@ struct userdata { + pa_hashmap *devices; + + pa_bool_t use_tsched:1; ++ pa_bool_t fixed_latency_range:1; + pa_bool_t ignore_dB:1; + pa_bool_t deferred_volume:1; + +@@ -75,6 +77,7 @@ struct userdata { + + static const char* const valid_modargs[] = { + "tsched", ++ "fixed_latency_range", + "ignore_dB", + "deferred_volume", + NULL +@@ -388,6 +391,7 @@ static void card_changed(struct userdata *u, struct udev_device *dev) { + "card_name=\"%s\" " + "namereg_fail=false " + "tsched=%s " ++ "fixed_latency_range=%s " + "ignore_dB=%s " + "deferred_volume=%s " + "card_properties=\"module-udev-detect.discovered=1\"", +@@ -395,6 +399,7 @@ static void card_changed(struct userdata *u, struct udev_device *dev) { + n, + d->card_name, + pa_yes_no(u->use_tsched), ++ pa_yes_no(u->fixed_latency_range), + pa_yes_no(u->ignore_dB), + pa_yes_no(u->deferred_volume)); + pa_xfree(n); +@@ -665,7 +670,7 @@ int pa__init(pa_module *m) { + struct udev_enumerate *enumerate = NULL; + struct udev_list_entry *item = NULL, *first = NULL; + int fd; +- pa_bool_t use_tsched = TRUE, ignore_dB = FALSE, deferred_volume = m->core->deferred_volume; ++ pa_bool_t use_tsched = TRUE, fixed_latency_range = FALSE, ignore_dB = FALSE, deferred_volume = m->core->deferred_volume; + + + pa_assert(m); +@@ -686,6 +691,12 @@ int pa__init(pa_module *m) { + } + u->use_tsched = use_tsched; + ++ if (pa_modargs_get_value_boolean(ma, "fixed_latency_range", &fixed_latency_range) < 0) { ++ pa_log("Failed to parse fixed_latency_range= argument."); ++ goto fail; ++ } ++ u->fixed_latency_range = fixed_latency_range; ++ + if (pa_modargs_get_value_boolean(ma, "ignore_dB", &ignore_dB) < 0) { + pa_log("Failed to parse ignore_dB= argument."); + goto fail; +-- +1.7.6.4 + diff --git a/0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch b/0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch new file mode 100644 index 0000000..d9665c2 --- /dev/null +++ b/0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch @@ -0,0 +1,32 @@ +From 1e6eda8eda615ec1275a1f208e5f3c9b41238f10 Mon Sep 17 00:00:00 2001 +From: "Lars R. Damerow" +Date: Thu, 3 Nov 2011 21:31:48 +0100 +Subject: [PATCH 3/3] alsa: fixed_latency_range modarg for module-alsa-card + +--- + src/modules/alsa/module-alsa-card.c | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c +index 5bf6480..344563f 100644 +--- a/src/modules/alsa/module-alsa-card.c ++++ b/src/modules/alsa/module-alsa-card.c +@@ -64,6 +64,7 @@ PA_MODULE_USAGE( + "tsched_buffer_size= " + "tsched_buffer_watermark= " + "profile= " ++ "fixed_latency_range= " + "ignore_dB= " + "deferred_volume= " + "profile_set= "); +@@ -88,6 +89,7 @@ static const char* const valid_modargs[] = { + "tsched", + "tsched_buffer_size", + "tsched_buffer_watermark", ++ "fixed_latency_range", + "profile", + "ignore_dB", + "deferred_volume", +-- +1.7.6.4 + diff --git a/pulseaudio.spec b/pulseaudio.spec index d767a28..1f6e4f9 100644 --- a/pulseaudio.spec +++ b/pulseaudio.spec @@ -1,14 +1,17 @@ Name: pulseaudio Summary: Improved Linux Sound Server -Version: 0.9.23 +Version: 1.1 Release: 1%{?dist} License: LGPLv2+ Group: System Environment/Daemons -Source0: http://0pointer.de/lennart/projects/pulseaudio/pulseaudio-%{version}.tar.gz +Source0: http://0pointer.de/lennart/projects/pulseaudio/pulseaudio-%{version}.tar.xz Source1: default.pa-for-gdm # activate pulseaudio early at login Patch0: pulseaudio-activation.patch +Patch1: 0001-alsa-support-fixed-latency-range-in-alsa-modules.patch +Patch2: 0002-alsa-fixed-latency-range-handling-for-udev-detect.patch +Patch3: 0003-alsa-fixed_latency_range-modarg-for-module-alsa-card.patch URL: http://pulseaudio.org/ BuildRequires: m4 # Libtool is dragging in rpaths. Fedora's libtool should get rid of the @@ -48,6 +51,7 @@ BuildRequires: libtdb-devel BuildRequires: speex-devel >= 1.2 BuildRequires: libasyncns-devel BuildRequires: libudev-devel >= 143 +BuildRequires: json-c-devel BuildRequires: dbus-devel BuildRequires: autoconf BuildRequires: automake @@ -167,24 +171,12 @@ Obsoletes: pulseaudio-lib-glib2 This package contains bindings to integrate the PulseAudio client library with a GLIB 2.x based application. -%package libs-zeroconf -Summary: Zeroconf support for PulseAudio clients -License: LGPLv2+ -Group: System Environment/Libraries -Provides: pulseaudio-lib-zeroconf -Obsoletes: pulseaudio-lib-zeroconf - -%description libs-zeroconf -This package contains the runtime libraries and tools that allow PulseAudio -clients to automatically detect PulseAudio servers using Zeroconf. - %package libs-devel Summary: Headers and libraries for PulseAudio client development License: LGPLv2+ Group: Development/Libraries Requires: %{name}-libs = %{version}-%{release} Requires: %{name}-libs-glib2 = %{version}-%{release} -Requires: %{name}-libs-zeroconf = %{version}-%{release} Requires: pkgconfig Requires: glib2-devel %if 0%{?rhel} == 0 @@ -220,6 +212,9 @@ This package contains GDM integration hooks for the PulseAudio sound server. %prep %setup -q -T -b0 %patch0 -p1 -b .activation +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 %build autoreconf @@ -273,9 +268,6 @@ exit 0 %post libs-glib2 -p /sbin/ldconfig %postun libs-glib2 -p /sbin/ldconfig -%post libs-zeroconf -p /sbin/ldconfig -%postun libs-zeroconf -p /sbin/ldconfig - %files %defattr(-,root,root) %doc README LICENSE GPL LGPL @@ -303,6 +295,10 @@ exit 0 %{_libdir}/pulse-%{version}/modules/module-cli-protocol-unix.so %{_libdir}/pulse-%{version}/modules/module-cli.so %{_libdir}/pulse-%{version}/modules/module-combine.so +%{_libdir}/pulse-%{version}/modules/module-combine-sink.so +%{_libdir}/pulse-%{version}/modules/module-dbus-protocol.so +%{_libdir}/pulse-%{version}/modules/module-filter-apply.so +%{_libdir}/pulse-%{version}/modules/module-filter-heuristics.so %{_libdir}/pulse-%{version}/modules/module-device-manager.so %{_libdir}/pulse-%{version}/modules/module-loopback.so %{_libdir}/pulse-%{version}/modules/module-esound-compat-spawnfd.so @@ -320,6 +316,7 @@ exit 0 %{_libdir}/pulse-%{version}/modules/module-native-protocol-tcp.so %{_libdir}/pulse-%{version}/modules/module-native-protocol-unix.so %{_libdir}/pulse-%{version}/modules/module-null-sink.so +%{_libdir}/pulse-%{version}/modules/module-null-source.so %{_libdir}/pulse-%{version}/modules/module-rescue-streams.so %{_libdir}/pulse-%{version}/modules/module-rtp-recv.so %{_libdir}/pulse-%{version}/modules/module-rtp-send.so @@ -346,6 +343,9 @@ exit 0 %{_libdir}/pulse-%{version}/modules/module-rygel-media-server.so %{_libdir}/pulse-%{version}/modules/module-echo-cancel.so %{_libdir}/pulse-%{version}/modules/module-jackdbus-detect.so +%{_libdir}/pulse-%{version}/modules/module-switch-on-connect.so +%{_libdir}/pulse-%{version}/modules/module-virtual-sink.so +%{_libdir}/pulse-%{version}/modules/module-virtual-source.so %dir %{_datadir}/pulseaudio/ %dir %{_datadir}/pulseaudio/alsa-mixer/ %{_datadir}/pulseaudio/alsa-mixer/paths/ @@ -379,6 +379,8 @@ exit 0 %{_libdir}/pulse-%{version}/modules/module-x11-publish.so %{_libdir}/pulse-%{version}/modules/module-x11-xsmp.so %{_libdir}/pulse-%{version}/modules/module-x11-cork-request.so +%{_mandir}/man1/start-pulseaudio-kde.1.gz +%{_mandir}/man1/start-pulseaudio-x11.1.gz %files module-zeroconf %defattr(-,root,root) @@ -426,12 +428,6 @@ exit 0 %defattr(-,root,root) %{_libdir}/libpulse-mainloop-glib.so.* -%files libs-zeroconf -%defattr(-,root,root) -%{_bindir}/pabrowse -%{_libdir}/libpulse-browse.so.* -%{_mandir}/man1/pabrowse.1.gz - %files libs-devel %defattr(-,root,root) %doc doxygen/html @@ -439,12 +435,13 @@ exit 0 %{_libdir}/libpulse.so %{_libdir}/libpulse-mainloop-glib.so %{_libdir}/libpulse-simple.so -%{_libdir}/libpulse-browse.so %{_libdir}/pkgconfig/libpulse*.pc %{_datadir}/vala/vapi/libpulse.vapi %{_datadir}/vala/vapi/libpulse.deps %{_datadir}/vala/vapi/libpulse-mainloop-glib.vapi %{_datadir}/vala/vapi/libpulse-mainloop-glib.deps +%{_libdir}/cmake/PulseAudio/PulseAudioConfig.cmake +%{_libdir}/cmake/PulseAudio/PulseAudioConfigVersion.cmake %files utils %defattr(-,root,root) @@ -473,6 +470,9 @@ exit 0 %attr(0600, gdm, gdm) %{_localstatedir}/lib/gdm/.pulse/default.pa %changelog +* Thu Nov 3 2011 Lennart Poettering - 1.1-1 +- New upstream release + * Mon Aug 15 2011 Matthias Clasen - 0.9.23-1 - Update to 0.9.23 diff --git a/sources b/sources index 12711f7..13f9bf8 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -7391205a337d1e04a9ff38025f684034 pulseaudio-0.9.23.tar.gz +17d21df798cee407b769c6355fae397a pulseaudio-1.1.tar.xz