[pulseaudio-commits] [SCM] PulseAudio Sound Server branch, master-tx, updated. v0.9.15-test2-135-g7126392

Lennart Poettering gitmailer-noreply at 0pointer.de
Tue Feb 24 02:39:30 PST 2009


This is an automated email from the git hooks/post-receive script. It was
generated because of a push to the "PulseAudio Sound Server" repository.

The master-tx branch has been updated
      from  b063e53c9c93a7cee5fc2d12d438f905cca25b8d (commit)

- Log -----------------------------------------------------------------
7126392... ignore tags file
07a45c7... run make update-po
364786e... Merge commit 'origin/master-tx'
8314858... set reserve interface application device name
03ac71b... don't put both the card and the pcm name in the description of a device if one contains the other
ba3c766... update reserve.c from upstream git
c341010... implement device reservation scheme
3c73025... in case alsa lies to use don't spin forever
ec9f8f1... if ALSA gives us nonsensical data at least try to fix it up a little
9eb5070... introduce new well-known role 'a11y'
fb49399... Merge commit 'coling/master'
c73887d... update gitignore
9372733... Make .desktop and .policy file in src/daemon translatable
1ddf64a... Make pulseaudio.desktop and org.pulseaudio.policy translatable.
998aa40... fix handling of stereo
e0b5507... it's probably more appropriate to return the configured latency instead of the actual latency
385a560... complete esd suspend/resume implementation
2e9479b... implement esd sample panning. closes #428
73c763c... set esound.byte_order property
5fa3f0c... allow scache entries to have arbitrary names
023ba89... use pa_alsa_safe_delay() where appropriate
33601af... print driver name when we encounter driver bugs
557a90c...  add new wrapper pa_alsa_safe_delay() around snd_pcm_delay()
5cc9d97... add new function pa_alsa_get_driver_name_by_pcm()
2a0d252... Add the module dir to the libpulse pkgconfig file (needed for paprefs)
4ebc6cf... Remove references to trademarked terms.
3bc60ca... a couple of boring updates
3bccb70... Allow passing a NULL proplist to pa_xxxx_update_proplist() to just fire a notification
e335b3d... prepare test for tracking down ens1371 issue
2d9ae49... rework suspending/resuming
504384a... initialize selem index
194d899... make sure we don't choke on overly long lines in .desktop files
edfa39a... make sure we don't choke on PULSE_PROP_OVERRIDE
77779ea... rework logging to make it more modular
9b74afc... make string translatable (fixes #483)
fa5e10f... fix wording, closes #484
1a45569... prefer profiles that match the default channel map
14ee8d4... print warnings about driver bugs at most once
4505bc9... introduce default channel map in addition to the default sample spec
27bfa60... add new property PA_PROP_APPLICATION_PROCESS_SESSION_ID and initialize it by default
2d0c68a... check for ENABLE_LEGACY_RUNTIME_DIR with #ifdef, not #if
e4e6e28... split off foreign code into a convenience library to make gcc warnings go away
4c3648a... tell gcc to ignore invalid gtk header files
ed67b07... simplify some code
9f89907... bluetooth: fix suspend on a2dp (to do on HSP non SCO over PCM)
-----------------------------------------------------------------------

Summary of changes:
 libpulse.pc.in                                     |    1 +
 man/pulse-daemon.conf.5.xml.in                     |    4 +
 po/.gitignore                                      |    1 +
 po/POTFILES.in                                     |    2 +
 po/ca.po                                           |  351 +++++----
 po/cs.po                                           |  354 +++++----
 po/de.po                                           |  362 +++++----
 po/el.po                                           |  327 +++++---
 po/es.po                                           |  355 +++++----
 po/fi.po                                           |  330 +++++---
 po/fr.po                                           |  357 +++++----
 po/it.po                                           |  871 +++++++++++++-------
 po/pl.po                                           |  362 +++++----
 po/pt_BR.po                                        |  355 +++++----
 po/sv.po                                           |  334 +++++---
 po/zh_CN.po                                        |  351 +++++----
 src/.gitignore                                     |    2 +
 src/Makefile.am                                    |   42 +-
 src/daemon/.gitignore                              |    2 +
 src/daemon/cmdline.c                               |    6 +-
 src/daemon/daemon-conf.c                           |  223 +++---
 src/daemon/daemon-conf.h                           |    5 +-
 src/daemon/daemon.conf.in                          |    1 +
 src/daemon/main.c                                  |   21 +-
 ....pulseaudio.policy => org.pulseaudio.policy.in} |    8 +-
 .../{pulseaudio.desktop => pulseaudio.desktop.in}  |    4 +-
 src/modules/alsa/alsa-sink.c                       |  148 ++++-
 src/modules/alsa/alsa-source.c                     |  143 +++-
 src/modules/alsa/alsa-util.c                       |  123 +++-
 src/modules/alsa/alsa-util.h                       |    5 +
 src/modules/alsa/module-alsa-card.c                |   52 +-
 src/modules/bluetooth/module-bluetooth-device.c    |  188 +++--
 src/modules/module-augment-properties.c            |    2 +
 src/modules/module-combine.c                       |    3 +-
 src/modules/module-jack-sink.c                     |   10 +-
 src/modules/module-jack-source.c                   |   10 +-
 src/modules/module-null-sink.c                     |    1 +
 src/modules/module-pipe-sink.c                     |    1 +
 src/modules/module-pipe-source.c                   |    1 +
 src/modules/module-raop-discover.c                 |    6 +-
 src/modules/module-raop-sink.c                     |    6 +-
 src/modules/module-tunnel.c                        |    1 +
 src/modules/module-zeroconf-discover.c             |    2 +-
 src/modules/oss/module-oss.c                       |    1 +
 src/modules/reserve-wrap.c                         |  168 ++++
 src/{pulsecore/bitset.h => modules/reserve-wrap.h} |   21 +-
 src/modules/reserve.c                              |  635 ++++++++++++++
 src/modules/reserve.h                              |   68 ++
 src/pulse/context.c                                |    4 +-
 src/pulse/introspect.c                             |    5 +
 src/pulse/introspect.h                             |    1 +
 src/pulse/proplist.h                               |    5 +-
 src/pulsecore/cli-command.c                        |   13 +-
 src/pulsecore/client.c                             |    7 +-
 src/pulsecore/conf-parser.c                        |    4 +-
 src/pulsecore/core.c                               |    1 +
 src/pulsecore/core.h                               |    1 +
 src/pulsecore/log.c                                |  197 +++--
 src/pulsecore/log.h                                |   44 +-
 src/pulsecore/modargs.c                            |   20 +-
 src/pulsecore/namereg.c                            |    6 +-
 src/pulsecore/proplist-util.c                      |   16 +-
 src/pulsecore/protocol-esound.c                    |  154 +++-
 src/pulsecore/protocol-native.c                    |    3 +
 src/pulsecore/rtpoll.c                             |   77 +-
 src/pulsecore/sink-input.c                         |    4 +-
 src/pulsecore/source-output.c                      |    4 +-
 src/tests/alsa-time-test.c                         |   27 +-
 src/tests/envelope-test.c                          |    2 +-
 src/tests/gtk-test.c                               |    2 +
 src/tests/memblockq-test.c                         |    2 +-
 src/tests/mix-test.c                               |    2 +-
 src/tests/remix-test.c                             |    2 +-
 src/tests/resampler-test.c                         |    2 +-
 src/utils/pactl.c                                  |   23 +-
 75 files changed, 4897 insertions(+), 2357 deletions(-)
 create mode 100644 src/daemon/.gitignore
 rename src/daemon/{org.pulseaudio.policy => org.pulseaudio.policy.in} (79%)
 rename src/daemon/{pulseaudio.desktop => pulseaudio.desktop.in} (63%)
 create mode 100644 src/modules/reserve-wrap.c
 copy src/{pulsecore/bitset.h => modules/reserve-wrap.h} (63%)
 create mode 100644 src/modules/reserve.c
 create mode 100644 src/modules/reserve.h

-----------------------------------------------------------------------

commit 9f89907bfa671a5d924c3fe1acd1ea433a87fc71
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date:   Tue Feb 17 12:59:34 2009 +0200

    bluetooth: fix suspend on a2dp (to do on HSP non SCO over PCM)
    
     - s/setup_stream_fd/start_stream_fd
    
     - introduce stop_stream_fd to suspend properly the stream_fd (does
       not seem necessary when shuting down)
    
     - move {start,stop}_stream_fd to IO thread, it is also a good idea
       because it takes about 1s to setup.

diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index ac8344f..559d95b 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -653,7 +653,8 @@ static int set_conf(struct userdata *u) {
     return 0;
 }
 
-static int setup_stream_fd(struct userdata *u) {
+/* from IO thread */
+static int start_stream_fd(struct userdata *u) {
     union {
         bt_audio_msg_header_t rsp;
         struct bt_start_stream_req start_req;
@@ -662,8 +663,11 @@ static int setup_stream_fd(struct userdata *u) {
         bt_audio_error_t error;
         uint8_t buf[BT_SUGGESTED_BUFFER_SIZE];
     } msg;
+    struct pollfd *pollfd;
 
     pa_assert(u);
+    pa_assert(u->rtpoll);
+    pa_assert(!u->rtpoll_item);
     pa_assert(u->stream_fd < 0);
 
     memset(msg.buf, 0, BT_SUGGESTED_BUFFER_SIZE);
@@ -691,6 +695,47 @@ static int setup_stream_fd(struct userdata *u) {
     pa_make_fd_nonblock(u->stream_fd);
     pa_make_socket_low_delay(u->stream_fd);
 
+    u->rtpoll_item = pa_rtpoll_item_new(u->rtpoll, PA_RTPOLL_NEVER, 1);
+    pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
+    pollfd->fd = u->stream_fd;
+    pollfd->events = pollfd->revents = 0;
+
+    return 0;
+}
+
+/* from IO thread */
+static int stop_stream_fd(struct userdata *u) {
+    union {
+        bt_audio_msg_header_t rsp;
+        struct bt_stop_stream_req start_req;
+        struct bt_stop_stream_rsp start_rsp;
+        bt_audio_error_t error;
+        uint8_t buf[BT_SUGGESTED_BUFFER_SIZE];
+    } msg;
+
+    pa_assert(u);
+    pa_assert(u->rtpoll);
+    pa_assert(u->rtpoll_item);
+    pa_assert(u->stream_fd >= 0);
+
+    /* FIXME: HSP, only when sink&source suspended */
+    pa_rtpoll_item_free(u->rtpoll_item);
+    u->rtpoll_item = NULL;
+
+    memset(msg.buf, 0, BT_SUGGESTED_BUFFER_SIZE);
+    msg.start_req.h.type = BT_REQUEST;
+    msg.start_req.h.name = BT_STOP_STREAM;
+    msg.start_req.h.length = sizeof(msg.start_req);
+
+    if (service_send(u, &msg.start_req.h) < 0)
+        return -1;
+
+    if (service_expect(u, &msg.rsp, sizeof(msg), BT_STOP_STREAM, sizeof(msg.start_rsp)) < 0)
+        return -1;
+
+    pa_close(u->stream_fd);
+    u->stream_fd = -1;
+
     return 0;
 }
 
@@ -707,12 +752,19 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
 
                 case PA_SINK_SUSPENDED:
                     pa_assert(PA_SINK_IS_OPENED(u->sink->thread_info.state));
+
+                    stop_stream_fd(u); /* FIXME: return value */
+
                     break;
 
                 case PA_SINK_IDLE:
                 case PA_SINK_RUNNING:
-                    if (!PA_SINK_IS_OPENED(u->sink->thread_info.state))
-                        u->started_at = pa_rtclock_usec();
+                    if (PA_SINK_IS_OPENED(u->sink->thread_info.state))
+                        break;
+
+                    if (u->rtpoll_item == NULL)
+                        start_stream_fd(u); /* FIXME: return value */
+                    u->started_at = pa_rtclock_usec();
 
                     break;
 
@@ -994,6 +1046,9 @@ static void thread_func(void *userdata) {
     if (u->core->realtime_scheduling)
         pa_make_realtime(u->core->realtime_priority);
 
+    if (start_stream_fd(u) < 0)
+        goto fail;
+
     pa_thread_mq_install(&u->thread_mq);
     pa_rtpoll_install(u->rtpoll);
 
@@ -1074,12 +1129,18 @@ static void thread_func(void *userdata) {
         pollfd->events = (short) (((u->sink && PA_SINK_IS_OPENED(u->sink->thread_info.state) && !writable) ? POLLOUT : 0) |
                                   (u->source && PA_SOURCE_IS_OPENED(u->source->thread_info.state) ? POLLIN : 0));
 
+    poll_run:
         if ((ret = pa_rtpoll_run(u->rtpoll, TRUE)) < 0)
             goto fail;
 
         if (ret == 0)
             goto finish;
 
+        if (!u->rtpoll_item) {
+            pa_rtpoll_set_timer_disabled(u->rtpoll);
+            goto poll_run;
+        }
+
         pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
 
         if (pollfd->revents & ~(POLLOUT|POLLIN)) {
@@ -1463,9 +1524,6 @@ static int setup_bt(struct userdata *u) {
         return 0;
     }
 
-    if (setup_stream_fd(u) < 0)
-        return -1;
-
     pa_log_debug("Got the stream socket");
 
     return 0;
@@ -1533,8 +1591,6 @@ static void stop_thread(struct userdata *u) {
 }
 
 static int start_thread(struct userdata *u) {
-    struct pollfd *pollfd;
-
     pa_assert(u);
     pa_assert(!u->thread);
     pa_assert(!u->rtpoll);
@@ -1549,11 +1605,6 @@ static int start_thread(struct userdata *u) {
     u->rtpoll = pa_rtpoll_new();
     pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll);
 
-    u->rtpoll_item = pa_rtpoll_item_new(u->rtpoll, PA_RTPOLL_NEVER, 1);
-    pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
-    pollfd->fd = u->stream_fd;
-    pollfd->events = pollfd->revents = 0;
-
     if (!(u->thread = pa_thread_new(thread_func, u))) {
         pa_log_error("Failed to create IO thread");
         stop_thread(u);

commit ed67b07c4189e33223f1fb981a519a1af2992ebc
Author: Lennart Poettering <lennart at poettering.net>
Date:   Fri Feb 20 21:39:46 2009 +0100

    simplify some code

diff --git a/src/pulsecore/rtpoll.c b/src/pulsecore/rtpoll.c
index 01dfd62..aa8ca32 100644
--- a/src/pulsecore/rtpoll.c
+++ b/src/pulsecore/rtpoll.c
@@ -478,59 +478,56 @@ static void update_timer(pa_rtpoll *p) {
 #ifdef HAVE_PPOLL
 
 #ifdef __linux__
-    if (!p->dont_use_ppoll) {
+    if (p->dont_use_ppoll)
+        return;
 #endif
 
-        if (p->timer == (timer_t) -1) {
-            struct sigevent se;
-
-            memset(&se, 0, sizeof(se));
-            se.sigev_notify = SIGEV_SIGNAL;
-            se.sigev_signo = p->rtsig;
+    if (p->timer == (timer_t) -1) {
+        struct sigevent se;
 
-            if (timer_create(CLOCK_MONOTONIC, &se, &p->timer) < 0)
-                if (timer_create(CLOCK_REALTIME, &se, &p->timer) < 0) {
-                    pa_log_warn("Failed to allocate POSIX timer: %s", pa_cstrerror(errno));
-                    p->timer = (timer_t) -1;
-                }
-        }
+        memset(&se, 0, sizeof(se));
+        se.sigev_notify = SIGEV_SIGNAL;
+        se.sigev_signo = p->rtsig;
 
-        if (p->timer != (timer_t) -1) {
-            struct itimerspec its;
-            struct timespec ts = { .tv_sec = 0, .tv_nsec = 0 };
-            sigset_t ss;
+        if (timer_create(CLOCK_MONOTONIC, &se, &p->timer) < 0)
+            if (timer_create(CLOCK_REALTIME, &se, &p->timer) < 0) {
+                pa_log_warn("Failed to allocate POSIX timer: %s", pa_cstrerror(errno));
+                p->timer = (timer_t) -1;
+            }
+    }
 
-            if (p->timer_armed) {
-                /* First disarm timer */
-                memset(&its, 0, sizeof(its));
-                pa_assert_se(timer_settime(p->timer, TIMER_ABSTIME, &its, NULL) == 0);
+    if (p->timer != (timer_t) -1) {
+        struct itimerspec its;
+        struct timespec ts = { .tv_sec = 0, .tv_nsec = 0 };
+        sigset_t ss;
 
-                /* Remove a signal that might be waiting in the signal q */
-                pa_assert_se(sigemptyset(&ss) == 0);
-                pa_assert_se(sigaddset(&ss, p->rtsig) == 0);
-                sigtimedwait(&ss, NULL, &ts);
-            }
+        if (p->timer_armed) {
+            /* First disarm timer */
+            memset(&its, 0, sizeof(its));
+            pa_assert_se(timer_settime(p->timer, TIMER_ABSTIME, &its, NULL) == 0);
 
-            /* And install the new timer */
-            if (p->timer_enabled) {
-                memset(&its, 0, sizeof(its));
+            /* Remove a signal that might be waiting in the signal q */
+            pa_assert_se(sigemptyset(&ss) == 0);
+            pa_assert_se(sigaddset(&ss, p->rtsig) == 0);
+            sigtimedwait(&ss, NULL, &ts);
+        }
 
-                its.it_value.tv_sec = p->next_elapse.tv_sec;
-                its.it_value.tv_nsec = p->next_elapse.tv_usec*1000;
+        /* And install the new timer */
+        if (p->timer_enabled) {
+            memset(&its, 0, sizeof(its));
 
-                /* Make sure that 0,0 is not understood as
-                 * "disarming" */
-                if (its.it_value.tv_sec == 0 && its.it_value.tv_nsec == 0)
-                    its.it_value.tv_nsec = 1;
-                pa_assert_se(timer_settime(p->timer, TIMER_ABSTIME, &its, NULL) == 0);
-            }
+            its.it_value.tv_sec = p->next_elapse.tv_sec;
+            its.it_value.tv_nsec = p->next_elapse.tv_usec*1000;
 
-            p->timer_armed = p->timer_enabled;
+            /* Make sure that 0,0 is not understood as
+             * "disarming" */
+            if (its.it_value.tv_sec == 0 && its.it_value.tv_nsec == 0)
+                its.it_value.tv_nsec = 1;
+            pa_assert_se(timer_settime(p->timer, TIMER_ABSTIME, &its, NULL) == 0);
         }
 
-#ifdef __linux__
+        p->timer_armed = p->timer_enabled;
     }
-#endif
 
 #endif
 }

commit 4c3648aea3d76a3050aa5e534cf588bf60650d9e
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 04:12:52 2009 +0100

    tell gcc to ignore invalid gtk header files

diff --git a/src/pulsecore/proplist-util.c b/src/pulsecore/proplist-util.c
index bdae0e6..d78eac0 100644
--- a/src/pulsecore/proplist-util.c
+++ b/src/pulsecore/proplist-util.c
@@ -48,6 +48,7 @@ static G_CONST_RETURN gchar* _g_get_application_name(void) PA_GCC_WEAKREF(g_get_
 #endif
 
 #if defined(HAVE_GTK) && defined(PA_GCC_WEAKREF)
+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
 #include <gtk/gtk.h>
 #include <gdk/gdkx.h>
 static G_CONST_RETURN gchar* _gtk_window_get_default_icon_name(void) PA_GCC_WEAKREF(gtk_window_get_default_icon_name);
diff --git a/src/tests/gtk-test.c b/src/tests/gtk-test.c
index a2d3e69..092ba25 100644
--- a/src/tests/gtk-test.c
+++ b/src/tests/gtk-test.c
@@ -17,6 +17,8 @@
   USA.
 ***/
 
+#pragma GCC diagnostic ignored "-Wstrict-prototypes"
+
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif

commit e4e6e28bad538f19c27837c84442a73ad0800bd7
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 04:13:41 2009 +0100

    split off foreign code into a convenience library to make gcc warnings go away

diff --git a/src/Makefile.am b/src/Makefile.am
index ceafdf7..46c3d2e 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -86,6 +86,7 @@ AM_LDFLAGS+=-Wl,--export-all-symbols
 WINSOCK_LIBS=-lwsock32 -lws2_32 -lwininet
 endif
 
+FOREIGN_CLFGAS = -w
 MODULE_LDFLAGS = -module -disable-static -avoid-version
 
 ###################################
@@ -765,7 +766,6 @@ libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES = \
 		pulsecore/core.c pulsecore/core.h \
 		pulsecore/envelope.c pulsecore/envelope.h \
 		pulsecore/fdsem.c pulsecore/fdsem.h \
-		pulsecore/ffmpeg/resample2.c pulsecore/ffmpeg/avcodec.h pulsecore/ffmpeg/dsputil.h \
 		pulsecore/g711.c pulsecore/g711.h \
 		pulsecore/hook-list.c pulsecore/hook-list.h \
 		pulsecore/ltdl-helper.c pulsecore/ltdl-helper.h \
@@ -799,7 +799,7 @@ libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES = \
 
 libpulsecore_ at PA_MAJORMINORMICRO@_la_CFLAGS = $(AM_CFLAGS) $(LIBOIL_CFLAGS)
 libpulsecore_ at PA_MAJORMINORMICRO@_la_LDFLAGS = -avoid-version
-libpulsecore_ at PA_MAJORMINORMICRO@_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) $(LIBSAMPLERATE_LIBS) $(LIBSNDFILE_LIBS) $(LIBSPEEX_LIBS) $(WINSOCK_LIBS) $(LIBOIL_LIBS) $(LTLIBICONV) libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+libpulsecore_ at PA_MAJORMINORMICRO@_la_LIBADD = $(AM_LIBADD) $(LIBLTDL) $(LIBSAMPLERATE_LIBS) $(LIBSNDFILE_LIBS) $(LIBSPEEX_LIBS) $(WINSOCK_LIBS) $(LIBOIL_LIBS) $(LTLIBICONV) libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la libpulsecore-foreign.la
 
 if HAVE_X11
 libpulsecore_ at PA_MAJORMINORMICRO@_la_SOURCES += pulsecore/x11wrap.c pulsecore/x11wrap.h
@@ -807,6 +807,14 @@ libpulsecore_ at PA_MAJORMINORMICRO@_la_CFLAGS += $(X11_CFLAGS)
 libpulsecore_ at PA_MAJORMINORMICRO@_la_LDFLAGS += $(X11_LIBS)
 endif
 
+# We split the foreign code off to not be annoyed by warnings we don't care about
+noinst_LTLIBRARIES = libpulsecore-foreign.la
+
+libpulsecore_foreign_la_SOURCES = \
+		pulsecore/ffmpeg/resample2.c pulsecore/ffmpeg/avcodec.h pulsecore/ffmpeg/dsputil.h
+
+libpulsecore_foreign_la_CFLAGS = $(AM_CFLAGS) -w
+
 ###################################
 #   Plug-in support libraries     #
 ###################################

commit 2d0c68af933c8d68328d627bf0904365cdc8c86d
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 04:14:51 2009 +0100

    check for ENABLE_LEGACY_RUNTIME_DIR with #ifdef, not #if

diff --git a/src/pulse/context.c b/src/pulse/context.c
index 9309c6b..62fe535 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -554,7 +554,7 @@ static void setup_context(pa_context *c, pa_iochannel *io) {
     pa_context_unref(c);
 }
 
-#if ENABLE_LEGACY_RUNTIME_DIR
+#ifdef ENABLE_LEGACY_RUNTIME_DIR
 static char *get_old_legacy_runtime_dir(void) {
     char *p, u[128];
     struct stat st;
@@ -603,7 +603,7 @@ static char *get_very_old_legacy_runtime_dir(void) {
 static pa_strlist *prepend_per_user(pa_strlist *l) {
     char *ufn;
 
-#if ENABLE_LEGACY_RUNTIME_DIR
+#ifdef ENABLE_LEGACY_RUNTIME_DIR
     static char *legacy_dir;
 
     /* The very old per-user instance path (< 0.9.11). This is supported only to ease upgrades */

commit 27bfa607b90b25aa4fdefc0882091093164297a5
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 16:26:09 2009 +0100

    add new property PA_PROP_APPLICATION_PROCESS_SESSION_ID and initialize it by default

diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h
index c0c3459..7a58568 100644
--- a/src/pulse/proplist.h
+++ b/src/pulse/proplist.h
@@ -132,6 +132,9 @@ PA_C_DECL_BEGIN
 /** For clients/streams: the D-Bus host id the application runs on. e.g. "543679e7b01393ed3e3e650047d78f6e" */
 #define PA_PROP_APPLICATION_PROCESS_MACHINE_ID "application.process.machine_id"
 
+/** For clients/streams: an id for the login session the application runs in. On Unix the value of $XDG_SESSION_COOKIE. e.g. "543679e7b01393ed3e3e650047d78f6e-1235159798.76193-190367717" */
+#define PA_PROP_APPLICATION_PROCESS_SESSION_ID "application.process.session_id"
+
 /** For devices: device string in the underlying audio layer's format. e.g. "surround51:0" */
 #define PA_PROP_DEVICE_STRING                  "device.string"
 
diff --git a/src/pulsecore/proplist-util.c b/src/pulsecore/proplist-util.c
index d78eac0..7ba2fd7 100644
--- a/src/pulsecore/proplist-util.c
+++ b/src/pulsecore/proplist-util.c
@@ -228,4 +228,14 @@ void pa_init_proplist(pa_proplist *p) {
             pa_xfree(m);
         }
     }
+
+    if (!pa_proplist_contains(p, PA_PROP_APPLICATION_PROCESS_SESSION_ID)) {
+        const char *t;
+
+        if ((t = getenv("XDG_SESSION_COOKIE"))) {
+            char *c = pa_utf8_filter(t);
+            pa_proplist_sets(p, PA_PROP_APPLICATION_PROCESS_SESSION_ID, c);
+            pa_xfree(c);
+        }
+    }
 }

commit 4505bc9cc6bb1f9206f922a992a9be0e17703df1
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 16:32:42 2009 +0100

    introduce default channel map in addition to the default sample spec

diff --git a/man/pulse-daemon.conf.5.xml.in b/man/pulse-daemon.conf.5.xml.in
index 9ddcd6a..afa7ca0 100644
--- a/man/pulse-daemon.conf.5.xml.in
+++ b/man/pulse-daemon.conf.5.xml.in
@@ -388,6 +388,10 @@ USA.
       <p><opt>default-sample-channels</opt> The default number of channels.</p>
     </option>
 
+    <option>
+      <p><opt>default-channel-map</opt> The default channel map.</p>
+    </option>
+
   </section>
 
   <section name="Default Fragment Settings">
diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
index 7dfef27..10144ea 100644
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@ -88,6 +88,7 @@ static const pa_daemon_conf default_conf = {
     .default_n_fragments = 4,
     .default_fragment_size_msec = 25,
     .default_sample_spec = { .format = PA_SAMPLE_S16NE, .rate = 44100, .channels = 2 },
+    .default_channel_map = { .channels = 2, .map = { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT } },
     .shm_size = 0
 #ifdef HAVE_SYS_RESOURCE_H
    ,.rlimit_fsize = { .value = 0, .is_set = FALSE },
@@ -313,8 +314,14 @@ static int parse_sample_rate(const char *filename, unsigned line, const char *se
     return 0;
 }
 
+struct channel_conf_info {
+    pa_daemon_conf *conf;
+    pa_bool_t default_sample_spec_set;
+    pa_bool_t default_channel_map_set;
+};
+
 static int parse_sample_channels(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata) {
-    pa_daemon_conf *c = data;
+    struct channel_conf_info *i = data;
     int32_t n;
 
     pa_assert(filename);
@@ -327,7 +334,25 @@ static int parse_sample_channels(const char *filename, unsigned line, const char
         return -1;
     }
 
-    c->default_sample_spec.channels = (uint8_t) n;
+    i->conf->default_sample_spec.channels = (uint8_t) n;
+    i->default_sample_spec_set = TRUE;
+    return 0;
+}
+
+static int parse_channel_map(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata) {
+    struct channel_conf_info *i = data;
+
+    pa_assert(filename);
+    pa_assert(lvalue);
+    pa_assert(rvalue);
+    pa_assert(data);
+
+    if (!pa_channel_map_parse(&i->conf->default_channel_map, rvalue)) {
+        pa_log(_("[%s:%u] Invalid channel map '%s'."), filename, line, rvalue);
+        return -1;
+    }
+
+    i->default_channel_map_set = TRUE;
     return 0;
 }
 
@@ -406,155 +431,82 @@ static int parse_rtprio(const char *filename, unsigned line, const char *section
 int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) {
     int r = -1;
     FILE *f = NULL;
-    unsigned i = 0;
-
+    struct channel_conf_info ci;
     pa_config_item table[] = {
-        { "daemonize",                  pa_config_parse_bool,     NULL, NULL },
-        { "fail",                       pa_config_parse_bool,     NULL, NULL },
-        { "high-priority",              pa_config_parse_bool,     NULL, NULL },
-        { "realtime-scheduling",        pa_config_parse_bool,     NULL, NULL },
-        { "disallow-module-loading",    pa_config_parse_bool,     NULL, NULL },
-        { "disallow-exit",              pa_config_parse_bool,     NULL, NULL },
-        { "use-pid-file",               pa_config_parse_bool,     NULL, NULL },
-        { "system-instance",            pa_config_parse_bool,     NULL, NULL },
-        { "no-cpu-limit",               pa_config_parse_bool,     NULL, NULL },
-        { "disable-shm",                pa_config_parse_bool,     NULL, NULL },
-        { "flat-volumes",               pa_config_parse_bool,     NULL, NULL },
-        { "exit-idle-time",             pa_config_parse_int,      NULL, NULL },
-        { "scache-idle-time",           pa_config_parse_int,      NULL, NULL },
-        { "realtime-priority",          parse_rtprio,             NULL, NULL },
-        { "dl-search-path",             pa_config_parse_string,   NULL, NULL },
-        { "default-script-file",        pa_config_parse_string,   NULL, NULL },
-        { "log-target",                 parse_log_target,         NULL, NULL },
-        { "log-level",                  parse_log_level,          NULL, NULL },
-        { "verbose",                    parse_log_level,          NULL, NULL },
-        { "resample-method",            parse_resample_method,    NULL, NULL },
-        { "default-sample-format",      parse_sample_format,      NULL, NULL },
-        { "default-sample-rate",        parse_sample_rate,        NULL, NULL },
-        { "default-sample-channels",    parse_sample_channels,    NULL, NULL },
-        { "default-fragments",          parse_fragments,          NULL, NULL },
-        { "default-fragment-size-msec", parse_fragment_size_msec, NULL, NULL },
-        { "nice-level",                 parse_nice_level,         NULL, NULL },
-        { "disable-remixing",           pa_config_parse_bool,     NULL, NULL },
-        { "disable-lfe-remixing",       pa_config_parse_bool,     NULL, NULL },
-        { "load-default-script-file",   pa_config_parse_bool,     NULL, NULL },
-        { "shm-size-bytes",             pa_config_parse_size,     NULL, NULL },
-        { "log-meta",                   pa_config_parse_bool,     NULL, NULL },
-        { "log-time",                   pa_config_parse_bool,     NULL, NULL },
-        { "log-backtrace",              pa_config_parse_unsigned, NULL, NULL },
+        { "daemonize",                  pa_config_parse_bool,     &c->daemonize, NULL },
+        { "fail",                       pa_config_parse_bool,     &c->fail, NULL },
+        { "high-priority",              pa_config_parse_bool,     &c->high_priority, NULL },
+        { "realtime-scheduling",        pa_config_parse_bool,     &c->realtime_scheduling, NULL },
+        { "disallow-module-loading",    pa_config_parse_bool,     &c->disallow_module_loading, NULL },
+        { "disallow-exit",              pa_config_parse_bool,     &c->disallow_exit, NULL },
+        { "use-pid-file",               pa_config_parse_bool,     &c->use_pid_file, NULL },
+        { "system-instance",            pa_config_parse_bool,     &c->system_instance, NULL },
+        { "no-cpu-limit",               pa_config_parse_bool,     &c->no_cpu_limit, NULL },
+        { "disable-shm",                pa_config_parse_bool,     &c->disable_shm, NULL },
+        { "flat-volumes",               pa_config_parse_bool,     &c->flat_volumes, NULL },
+        { "exit-idle-time",             pa_config_parse_int,      &c->exit_idle_time, NULL },
+        { "scache-idle-time",           pa_config_parse_int,      &c->scache_idle_time, NULL },
+        { "realtime-priority",          parse_rtprio,             c, NULL },
+        { "dl-search-path",             pa_config_parse_string,   &c->dl_search_path, NULL },
+        { "default-script-file",        pa_config_parse_string,   &c->default_script_file, NULL },
+        { "log-target",                 parse_log_target,         c, NULL },
+        { "log-level",                  parse_log_level,          c, NULL },
+        { "verbose",                    parse_log_level,          c, NULL },
+        { "resample-method",            parse_resample_method,    c, NULL },
+        { "default-sample-format",      parse_sample_format,      c, NULL },
+        { "default-sample-rate",        parse_sample_rate,        c, NULL },
+        { "default-sample-channels",    parse_sample_channels,    &ci,  NULL },
+        { "default-channel-map",        parse_channel_map,        &ci,  NULL },
+        { "default-fragments",          parse_fragments,          c, NULL },
+        { "default-fragment-size-msec", parse_fragment_size_msec, c, NULL },
+        { "nice-level",                 parse_nice_level,         c, NULL },
+        { "disable-remixing",           pa_config_parse_bool,     &c->disable_remixing, NULL },
+        { "disable-lfe-remixing",       pa_config_parse_bool,     &c->disable_lfe_remixing, NULL },
+        { "load-default-script-file",   pa_config_parse_bool,     &c->load_default_script_file, NULL },
+        { "shm-size-bytes",             pa_config_parse_size,     &c->shm_size, NULL },
+        { "log-meta",                   pa_config_parse_bool,     &c->log_meta, NULL },
+        { "log-time",                   pa_config_parse_bool,     &c->log_time, NULL },
+        { "log-backtrace",              pa_config_parse_unsigned, &c->log_backtrace, NULL },
 #ifdef HAVE_SYS_RESOURCE_H
-        { "rlimit-fsize",               parse_rlimit,             NULL, NULL },
-        { "rlimit-data",                parse_rlimit,             NULL, NULL },
-        { "rlimit-stack",               parse_rlimit,             NULL, NULL },
-        { "rlimit-core",                parse_rlimit,             NULL, NULL },
-        { "rlimit-rss",                 parse_rlimit,             NULL, NULL },
+        { "rlimit-fsize",               parse_rlimit,             &c->rlimit_fsize, NULL },
+        { "rlimit-data",                parse_rlimit,             &c->rlimit_data, NULL },
+        { "rlimit-stack",               parse_rlimit,             &c->rlimit_stack, NULL },
+        { "rlimit-core",                parse_rlimit,             &c->rlimit_core, NULL },
+        { "rlimit-rss",                 parse_rlimit,             &c->rlimit_rss, NULL },
 #ifdef RLIMIT_NOFILE
-        { "rlimit-nofile",              parse_rlimit,             NULL, NULL },
+        { "rlimit-nofile",              parse_rlimit,             &c->rlimit_nofile, NULL },
 #endif
 #ifdef RLIMIT_AS
-        { "rlimit-as",                  parse_rlimit,             NULL, NULL },
+        { "rlimit-as",                  parse_rlimit,             &c->rlimit_as, NULL },
 #endif
 #ifdef RLIMIT_NPROC
-        { "rlimit-nproc",               parse_rlimit,             NULL, NULL },
+        { "rlimit-nproc",               parse_rlimit,             &c->rlimit_nproc, NULL },
 #endif
 #ifdef RLIMIT_MEMLOCK
-        { "rlimit-memlock",             parse_rlimit,             NULL, NULL },
+        { "rlimit-memlock",             parse_rlimit,             &c->rlimit_memlock, NULL },
 #endif
 #ifdef RLIMIT_LOCKS
-        { "rlimit-locks",               parse_rlimit,             NULL, NULL },
+        { "rlimit-locks",               parse_rlimit,             &c->rlimit_locks, NULL },
 #endif
 #ifdef RLIMIT_SIGPENDING
-        { "rlimit-sigpending",          parse_rlimit,             NULL, NULL },
+        { "rlimit-sigpending",          parse_rlimit,             &c->rlimit_sigpending, NULL },
 #endif
 #ifdef RLIMIT_MSGQUEUE
-        { "rlimit-msgqueue",            parse_rlimit,             NULL, NULL },
+        { "rlimit-msgqueue",            parse_rlimit,             &c->rlimit_msgqueue, NULL },
 #endif
 #ifdef RLIMIT_NICE
-        { "rlimit-nice",                parse_rlimit,             NULL, NULL },
+        { "rlimit-nice",                parse_rlimit,             &c->rlimit_nice, NULL },
 #endif
 #ifdef RLIMIT_RTPRIO
-        { "rlimit-rtprio",              parse_rlimit,             NULL, NULL },
+        { "rlimit-rtprio",              parse_rlimit,             &c->rlimit_rtprio, NULL },
 #endif
 #ifdef RLIMIT_RTTIME
-        { "rlimit-rttime",              parse_rlimit,             NULL, NULL },
+        { "rlimit-rttime",              parse_rlimit,             &c->rlimit_rttime, NULL },
 #endif
 #endif
         { NULL,                         NULL,                     NULL, NULL },
     };
 
-    table[i++].data = &c->daemonize;
-    table[i++].data = &c->fail;
-    table[i++].data = &c->high_priority;
-    table[i++].data = &c->realtime_scheduling;
-    table[i++].data = &c->disallow_module_loading;
-    table[i++].data = &c->disallow_exit;
-    table[i++].data = &c->use_pid_file;
-    table[i++].data = &c->system_instance;
-    table[i++].data = &c->no_cpu_limit;
-    table[i++].data = &c->disable_shm;
-    table[i++].data = &c->flat_volumes;
-    table[i++].data = &c->exit_idle_time;
-    table[i++].data = &c->scache_idle_time;
-    table[i++].data = c;
-    table[i++].data = &c->dl_search_path;
-    table[i++].data = &c->default_script_file;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = c;
-    table[i++].data = &c->disable_remixing;
-    table[i++].data = &c->disable_lfe_remixing;
-    table[i++].data = &c->load_default_script_file;
-    table[i++].data = &c->shm_size;
-    table[i++].data = &c->log_meta;
-    table[i++].data = &c->log_time;
-    table[i++].data = &c->log_backtrace;
-#ifdef HAVE_SYS_RESOURCE_H
-    table[i++].data = &c->rlimit_fsize;
-    table[i++].data = &c->rlimit_data;
-    table[i++].data = &c->rlimit_stack;
-    table[i++].data = &c->rlimit_core;
-    table[i++].data = &c->rlimit_rss;
-#ifdef RLIMIT_NOFILE
-    table[i++].data = &c->rlimit_nofile;
-#endif
-#ifdef RLIMIT_AS
-    table[i++].data = &c->rlimit_as;
-#endif
-#ifdef RLIMIT_NPROC
-    table[i++].data = &c->rlimit_nproc;
-#endif
-#ifdef RLIMIT_MEMLOCK
-    table[i++].data = &c->rlimit_memlock;
-#endif
-#ifdef RLIMIT_LOCKS
-    table[i++].data = &c->rlimit_locks;
-#endif
-#ifdef RLIMIT_SIGPENDING
-    table[i++].data = &c->rlimit_sigpending;
-#endif
-#ifdef RLIMIT_MSGQUEUE
-    table[i++].data = &c->rlimit_msgqueue;
-#endif
-#ifdef RLIMIT_NICE
-    table[i++].data = &c->rlimit_nice;
-#endif
-#ifdef RLIMIT_RTPRIO
-    table[i++].data = &c->rlimit_rtprio;
-#endif
-#ifdef RLIMIT_RTTIME
-    table[i++].data = &c->rlimit_rttime;
-#endif
-#endif
-
-    pa_assert(i == PA_ELEMENTSOF(table)-1);
-
     pa_xfree(c->config_file);
     c->config_file = NULL;
 
@@ -567,8 +519,27 @@ int pa_daemon_conf_load(pa_daemon_conf *c, const char *filename) {
         goto finish;
     }
 
+    ci.default_channel_map_set = ci.default_sample_spec_set = FALSE;
+    ci.conf = c;
+
     r = f ? pa_config_parse(c->config_file, f, table, NULL) : 0;
 
+    if (r >= 0) {
+
+        /* Make sure that channel map and sample spec fit together */
+
+        if (ci.default_sample_spec_set &&
+            ci.default_channel_map_set &&
+            c->default_channel_map.channels != c->default_sample_spec.channels) {
+            pa_log_error(_("The specified default channel map has a different number of channels than the specified default number of channels."));
+            r = -1;
+            goto finish;
+        } else if (ci.default_sample_spec_set)
+            pa_channel_map_init_extend(&c->default_channel_map, c->default_sample_spec.channels, PA_CHANNEL_MAP_DEFAULT);
+        else if (ci.default_channel_map_set)
+            c->default_sample_spec.channels = c->default_channel_map.channels;
+    }
+
 finish:
     if (f)
         fclose(f);
@@ -631,6 +602,7 @@ static const char* const log_level_to_string[] = {
 
 char *pa_daemon_conf_dump(pa_daemon_conf *c) {
     pa_strbuf *s;
+    char cm[PA_CHANNEL_MAP_SNPRINT_MAX];
 
     pa_assert(c);
 
@@ -667,6 +639,7 @@ char *pa_daemon_conf_dump(pa_daemon_conf *c) {
     pa_strbuf_printf(s, "default-sample-format = %s\n", pa_sample_format_to_string(c->default_sample_spec.format));
     pa_strbuf_printf(s, "default-sample-rate = %u\n", c->default_sample_spec.rate);
     pa_strbuf_printf(s, "default-sample-channels = %u\n", c->default_sample_spec.channels);
+    pa_strbuf_printf(s, "default-channel-map = %s\n", pa_channel_map_snprint(cm, sizeof(cm), &c->default_channel_map));
     pa_strbuf_printf(s, "default-fragments = %u\n", c->default_n_fragments);
     pa_strbuf_printf(s, "default-fragment-size-msec = %u\n", c->default_fragment_size_msec);
     pa_strbuf_printf(s, "shm-size-bytes = %lu\n", (unsigned long) c->shm_size);
diff --git a/src/daemon/daemon-conf.h b/src/daemon/daemon-conf.h
index aa9d298..9331280 100644
--- a/src/daemon/daemon-conf.h
+++ b/src/daemon/daemon-conf.h
@@ -23,10 +23,12 @@
   USA.
 ***/
 
+#include <pulse/sample.h>
+#include <pulse/channelmap.h>
+
 #include <pulsecore/log.h>
 #include <pulsecore/macro.h>
 #include <pulsecore/core-util.h>
-#include <pulse/sample.h>
 
 #ifdef HAVE_SYS_RESOURCE_H
 #include <sys/resource.h>
@@ -121,6 +123,7 @@ typedef struct pa_daemon_conf {
 
     unsigned default_n_fragments, default_fragment_size_msec;
     pa_sample_spec default_sample_spec;
+    pa_channel_map default_channel_map;
     size_t shm_size;
 } pa_daemon_conf;
 
diff --git a/src/daemon/daemon.conf.in b/src/daemon/daemon.conf.in
index 69d17f2..fcd2513 100644
--- a/src/daemon/daemon.conf.in
+++ b/src/daemon/daemon.conf.in
@@ -76,6 +76,7 @@
 ; default-sample-format = s16le
 ; default-sample-rate = 44100
 ; default-sample-channels = 2
+; default-channel-map = front-left,front-right
 
 ; default-fragments = 4
 ; default-fragment-size-msec = 25
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 5f94ec6..d176f45 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -908,6 +908,7 @@ int main(int argc, char *argv[]) {
     }
 
     c->default_sample_spec = conf->default_sample_spec;
+    c->default_channel_map = conf->default_channel_map;
     c->default_n_fragments = conf->default_n_fragments;
     c->default_fragment_size_msec = conf->default_fragment_size_msec;
     c->exit_idle_time = conf->exit_idle_time;
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 239a9d7..ed25a6f 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1378,6 +1378,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
     pa_assert(ma);
 
     ss = m->core->default_sample_spec;
+    map = m->core->default_channel_map;
     if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_ALSA) < 0) {
         pa_log("Failed to parse sample specification and channel map");
         goto fail;
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 50cdb31..4562689 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -1229,6 +1229,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
     pa_assert(ma);
 
     ss = m->core->default_sample_spec;
+    map = m->core->default_channel_map;
     if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_ALSA) < 0) {
         pa_log("Failed to parse sample specification");
         goto fail;
diff --git a/src/modules/module-combine.c b/src/modules/module-combine.c
index 7f1ef24..6ed4f14 100644
--- a/src/modules/module-combine.c
+++ b/src/modules/module-combine.c
@@ -1052,8 +1052,9 @@ int pa__init(pa_module*m) {
 
     slaves = pa_modargs_get_value(ma, "slaves", NULL);
     u->automatic = !slaves;
-    ss = m->core->default_sample_spec;
 
+    ss = m->core->default_sample_spec;
+    map = m->core->default_channel_map;
     if ((pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0)) {
         pa_log("Invalid sample specification.");
         goto fail;
diff --git a/src/modules/module-jack-sink.c b/src/modules/module-jack-sink.c
index b448e84..1739f46 100644
--- a/src/modules/module-jack-sink.c
+++ b/src/modules/module-jack-sink.c
@@ -329,12 +329,18 @@ int pa__init(pa_module*m) {
     if (!channels)
         channels = m->core->default_sample_spec.channels;
 
-    if (pa_modargs_get_value_u32(ma, "channels", &channels) < 0 || channels <= 0 || channels >= PA_CHANNELS_MAX) {
+    if (pa_modargs_get_value_u32(ma, "channels", &channels) < 0 ||
+        channels <= 0 ||
+        channels > PA_CHANNELS_MAX) {
         pa_log("Failed to parse channels= argument.");
         goto fail;
     }
 
-    pa_channel_map_init_extend(&map, channels, PA_CHANNEL_MAP_ALSA);
+    if (channels == m->core->default_channel_map.channels)
+        map = m->core->default_channel_map;
+    else
+        pa_channel_map_init_extend(&map, channels, PA_CHANNEL_MAP_ALSA);
+
     if (pa_modargs_get_channel_map(ma, NULL, &map) < 0 || map.channels != channels) {
         pa_log("Failed to parse channel_map= argument.");
         goto fail;
diff --git a/src/modules/module-jack-source.c b/src/modules/module-jack-source.c
index 0c7ee53..38b6375 100644
--- a/src/modules/module-jack-source.c
+++ b/src/modules/module-jack-source.c
@@ -296,12 +296,18 @@ int pa__init(pa_module*m) {
     if (!channels)
         channels = m->core->default_sample_spec.channels;
 
-    if (pa_modargs_get_value_u32(ma, "channels", &channels) < 0 || channels <= 0 || channels >= PA_CHANNELS_MAX) {
+    if (pa_modargs_get_value_u32(ma, "channels", &channels) < 0 ||
+        channels <= 0 ||
+        channels >= PA_CHANNELS_MAX) {
         pa_log("failed to parse channels= argument.");
         goto fail;
     }
 
-    pa_channel_map_init_extend(&map, channels, PA_CHANNEL_MAP_ALSA);
+    if (channels == m->core->default_channel_map.channels)
+        map = m->core->default_channel_map;
+    else
+        pa_channel_map_init_extend(&map, channels, PA_CHANNEL_MAP_ALSA);
+
     if (pa_modargs_get_channel_map(ma, NULL, &map) < 0 || map.channels != channels) {
         pa_log("failed to parse channel_map= argument.");
         goto fail;
diff --git a/src/modules/module-null-sink.c b/src/modules/module-null-sink.c
index 570f8be..e18da5f 100644
--- a/src/modules/module-null-sink.c
+++ b/src/modules/module-null-sink.c
@@ -262,6 +262,7 @@ int pa__init(pa_module*m) {
     }
 
     ss = m->core->default_sample_spec;
+    map = m->core->default_channel_map;
     if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
         pa_log("Invalid sample format specification or channel map");
         goto fail;
diff --git a/src/modules/module-pipe-sink.c b/src/modules/module-pipe-sink.c
index 7dd4409..f3b0e8b 100644
--- a/src/modules/module-pipe-sink.c
+++ b/src/modules/module-pipe-sink.c
@@ -234,6 +234,7 @@ int pa__init(pa_module*m) {
     }
 
     ss = m->core->default_sample_spec;
+    map = m->core->default_channel_map;
     if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
         pa_log("Invalid sample format specification or channel map");
         goto fail;
diff --git a/src/modules/module-pipe-source.c b/src/modules/module-pipe-source.c
index 975090c..a42c53c 100644
--- a/src/modules/module-pipe-source.c
+++ b/src/modules/module-pipe-source.c
@@ -221,6 +221,7 @@ int pa__init(pa_module*m) {
     }
 
     ss = m->core->default_sample_spec;
+    map = m->core->default_channel_map;
     if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
         pa_log("invalid sample format specification or channel map");
         goto fail;
diff --git a/src/modules/module-tunnel.c b/src/modules/module-tunnel.c
index 26da257..63ae740 100644
--- a/src/modules/module-tunnel.c
+++ b/src/modules/module-tunnel.c
@@ -1717,6 +1717,7 @@ int pa__init(pa_module*m) {
     }
 
     ss = m->core->default_sample_spec;
+    map = m->core->default_channel_map;
     if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_DEFAULT) < 0) {
         pa_log("Invalid sample format specification");
         goto fail;
diff --git a/src/modules/module-zeroconf-discover.c b/src/modules/module-zeroconf-discover.c
index 9a867cb..5123ead 100644
--- a/src/modules/module-zeroconf-discover.c
+++ b/src/modules/module-zeroconf-discover.c
@@ -162,7 +162,7 @@ static void resolver_cb(
         pa_module *m;
 
         ss = u->core->default_sample_spec;
-        pa_channel_map_init_extend(&cm, ss.channels, PA_CHANNEL_MAP_DEFAULT);
+        cm = u->core->default_channel_map;
 
         for (l = txt; l; l = l->next) {
             char *key, *value;
diff --git a/src/modules/oss/module-oss.c b/src/modules/oss/module-oss.c
index eac0c8e..54d1679 100644
--- a/src/modules/oss/module-oss.c
+++ b/src/modules/oss/module-oss.c
@@ -1185,6 +1185,7 @@ int pa__init(pa_module*m) {
     mode = (playback && record) ? O_RDWR : (playback ? O_WRONLY : (record ? O_RDONLY : 0));
 
     ss = m->core->default_sample_spec;
+    map = m->core->default_channel_map;
     if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_OSS) < 0) {
         pa_log("Failed to parse sample specification or channel map");
         goto fail;
diff --git a/src/pulse/introspect.c b/src/pulse/introspect.c
index 04bcd4f..befeb24 100644
--- a/src/pulse/introspect.c
+++ b/src/pulse/introspect.c
@@ -110,12 +110,17 @@ static void context_get_server_info_callback(pa_pdispatch *pd, uint32_t command,
                pa_tagstruct_gets(t, &i.default_sink_name) < 0 ||
                pa_tagstruct_gets(t, &i.default_source_name) < 0 ||
                pa_tagstruct_getu32(t, &i.cookie) < 0 ||
+               (o->context->version >= 15 &&
+                pa_tagstruct_get_channel_map(t, &i.channel_map) < 0) ||
                !pa_tagstruct_eof(t)) {
 
         pa_context_fail(o->context, PA_ERR_PROTOCOL);
         goto finish;
     }
 
+    if (p && o->context->version < 15)
+        pa_channel_map_init_extend(&i.channel_map, i.sample_spec.channels, PA_CHANNEL_MAP_DEFAULT);
+
     if (o->callback) {
         pa_server_info_cb_t cb = (pa_server_info_cb_t) o->callback;
         cb(o->context, p, o->userdata);
diff --git a/src/pulse/introspect.h b/src/pulse/introspect.h
index b873a84..aa67e43 100644
--- a/src/pulse/introspect.h
+++ b/src/pulse/introspect.h
@@ -317,6 +317,7 @@ typedef struct pa_server_info {
     const char *default_sink_name;      /**< Name of default sink. */
     const char *default_source_name;    /**< Name of default sink. */
     uint32_t cookie;                    /**< A random cookie for identifying this instance of PulseAudio. */
+    pa_channel_map channel_map;         /**< Default channel map. \since 0.9.15 */
 } pa_server_info;
 
 /** Callback prototype for pa_context_get_server_info() */
diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c
index 5e45c1a..7066e7e 100644
--- a/src/pulsecore/cli-command.c
+++ b/src/pulsecore/cli-command.c
@@ -321,6 +321,8 @@ static int pa_cli_command_source_outputs(pa_core *c, pa_tokenizer *t, pa_strbuf
 }
 
 static int pa_cli_command_stat(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail) {
+    char ss[PA_SAMPLE_SPEC_SNPRINT_MAX];
+    char cm[PA_CHANNEL_MAP_SNPRINT_MAX];
     char s[256];
     const pa_mempool_stat *stat;
     unsigned k;
@@ -363,7 +365,10 @@ static int pa_cli_command_stat(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_b
                      pa_bytes_snprint(s, sizeof(s), (unsigned) pa_scache_total_size(c)));
 
     pa_strbuf_printf(buf, "Default sample spec: %s\n",
-                     pa_sample_spec_snprint(s, sizeof(s), &c->default_sample_spec));
+                     pa_sample_spec_snprint(ss, sizeof(ss), &c->default_sample_spec));
+
+    pa_strbuf_printf(buf, "Default channel map: %s\n",
+                     pa_channel_map_snprint(cm, sizeof(cm), &c->default_channel_map));
 
     def_sink = pa_namereg_get_default_sink(c);
     def_source = pa_namereg_get_default_source(c);
diff --git a/src/pulsecore/core.c b/src/pulsecore/core.c
index 5fd2bdf..eef967a 100644
--- a/src/pulsecore/core.c
+++ b/src/pulsecore/core.c
@@ -111,6 +111,7 @@ pa_core* pa_core_new(pa_mainloop_api *m, pa_bool_t shared, size_t shm_size) {
     c->default_sample_spec.format = PA_SAMPLE_S16NE;
     c->default_sample_spec.rate = 44100;
     c->default_sample_spec.channels = 2;
+    pa_channel_map_init_extend(&c->default_channel_map, c->default_sample_spec.channels, PA_CHANNEL_MAP_DEFAULT);
     c->default_n_fragments = 4;
     c->default_fragment_size_msec = 25;
 
diff --git a/src/pulsecore/core.h b/src/pulsecore/core.h
index 53e2d2c..7660bd3 100644
--- a/src/pulsecore/core.h
+++ b/src/pulsecore/core.h
@@ -122,6 +122,7 @@ struct pa_core {
     pa_source *default_source;
     pa_sink *default_sink;
 
+    pa_channel_map default_channel_map;
     pa_sample_spec default_sample_spec;
     unsigned default_n_fragments, default_fragment_size_msec;
 
diff --git a/src/pulsecore/modargs.c b/src/pulsecore/modargs.c
index 866e6e0..4a30f52 100644
--- a/src/pulsecore/modargs.c
+++ b/src/pulsecore/modargs.c
@@ -274,11 +274,15 @@ int pa_modargs_get_sample_spec(pa_modargs *ma, pa_sample_spec *rss) {
     pa_assert(rss);
 
     ss = *rss;
-    if ((pa_modargs_get_value_u32(ma, "rate", &ss.rate)) < 0)
+    if ((pa_modargs_get_value_u32(ma, "rate", &ss.rate)) < 0 ||
+        ss.rate <= 0 ||
+        ss.rate > PA_RATE_MAX)
         return -1;
 
     channels = ss.channels;
-    if ((pa_modargs_get_value_u32(ma, "channels", &channels)) < 0)
+    if ((pa_modargs_get_value_u32(ma, "channels", &channels)) < 0 ||
+        channels <= 0 ||
+        channels >= PA_CHANNELS_MAX)
         return -1;
     ss.channels = (uint8_t) channels;
 
@@ -314,7 +318,12 @@ int pa_modargs_get_channel_map(pa_modargs *ma, const char *name, pa_channel_map
     return 0;
 }
 
-int pa_modargs_get_sample_spec_and_channel_map(pa_modargs *ma, pa_sample_spec *rss, pa_channel_map *rmap, pa_channel_map_def_t def) {
+int pa_modargs_get_sample_spec_and_channel_map(
+        pa_modargs *ma,
+        pa_sample_spec *rss,
+        pa_channel_map *rmap,
+        pa_channel_map_def_t def) {
+
     pa_sample_spec ss;
     pa_channel_map map;
 
@@ -327,7 +336,10 @@ int pa_modargs_get_sample_spec_and_channel_map(pa_modargs *ma, pa_sample_spec *r
     if (pa_modargs_get_sample_spec(ma, &ss) < 0)
         return -1;
 
-    pa_channel_map_init_extend(&map, ss.channels, def);
+    map = *rmap;
+
+    if (ss.channels != map.channels)
+        pa_channel_map_init_extend(&map, ss.channels, def);
 
     if (pa_modargs_get_channel_map(ma, NULL, &map) < 0)
         return -1;
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index a963f78..10b9e7d 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -3125,6 +3125,9 @@ static void command_get_server_info(pa_pdispatch *pd, uint32_t command, uint32_t
 
     pa_tagstruct_putu32(reply, c->protocol->core->cookie);
 
+    if (c->version >= 15)
+        pa_tagstruct_put_channel_map(reply, &c->protocol->core->default_channel_map);
+
     pa_pstream_send_tagstruct(c->pstream, reply);
 }
 
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index d3da90e..6524bf9 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -123,7 +123,7 @@ static void stat_callback(pa_context *c, const pa_stat_info *i, void *userdata)
 }
 
 static void get_server_info_callback(pa_context *c, const pa_server_info *i, void *useerdata) {
-    char s[PA_SAMPLE_SPEC_SNPRINT_MAX];
+    char ss[PA_SAMPLE_SPEC_SNPRINT_MAX], cm[PA_CHANNEL_MAP_SNPRINT_MAX];
 
     if (!i) {
         fprintf(stderr, _("Failed to get server information: %s\n"), pa_strerror(pa_context_errno(c)));
@@ -131,21 +131,24 @@ static void get_server_info_callback(pa_context *c, const pa_server_info *i, voi
         return;
     }
 
-    pa_sample_spec_snprint(s, sizeof(s), &i->sample_spec);
+    pa_sample_spec_snprint(ss, sizeof(ss), &i->sample_spec);
+    pa_channel_map_snprint(cm, sizeof(cm), &i->channel_map);
 
     printf(_("User name: %s\n"
-           "Host Name: %s\n"
-           "Server Name: %s\n"
-           "Server Version: %s\n"
-           "Default Sample Specification: %s\n"
-           "Default Sink: %s\n"
-           "Default Source: %s\n"
-           "Cookie: %08x\n"),
+             "Host Name: %s\n"
+             "Server Name: %s\n"
+             "Server Version: %s\n"
+             "Default Sample Specification: %s\n"
+             "Default Channel Map: %s\n"
+             "Default Sink: %s\n"
+             "Default Source: %s\n"
+             "Cookie: %08x\n"),
            i->user_name,
            i->host_name,
            i->server_name,
            i->server_version,
-           s,
+           ss,
+           cm,
            i->default_sink_name,
            i->default_source_name,
            i->cookie);

commit 14ee8d471aa5aa2eeefd9de0911ee51d0439409e
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 16:33:46 2009 +0100

    print warnings about driver bugs at most once

diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index ed25a6f..ef51f1d 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -304,10 +304,12 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
 
         if (PA_UNLIKELY(n_bytes <= u->hwbuf_unused)) {
 
-            if (polled && pa_log_ratelimit())
-                pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
-                         "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
-                         "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
+            if (polled)
+                PA_ONCE_BEGIN {
+                    pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
+                             "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
+                             "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
+                } PA_ONCE_END;
 
 #ifdef DEBUG_TIMING
             pa_log_debug("Not filling up, because not necessary.");
@@ -431,10 +433,12 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
 
         if (PA_UNLIKELY(n_bytes <= u->hwbuf_unused)) {
 
-            if (polled && pa_log_ratelimit())
-                pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
-                         "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
-                         "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
+            if (polled)
+                PA_ONCE_BEGIN {
+                    pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
+                             "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
+                             "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
+                } PA_ONCE_END;
 
             break;
         }
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 4562689..fbc21f7 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -287,10 +287,12 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
 
         if (PA_UNLIKELY(n_bytes <= 0)) {
 
-            if (polled && pa_log_ratelimit())
-                pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
-                         "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
-                         "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
+            if (polled)
+                PA_ONCE_BEGIN {
+                    pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
+                             "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
+                             "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
+                } PA_ONCE_END;
 
 #ifdef DEBUG_TIMING
             pa_log_debug("Not reading, because not necessary.");
@@ -406,10 +408,12 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
 
         if (PA_UNLIKELY(n_bytes <= 0)) {
 
-            if (polled && pa_log_ratelimit())
-                pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
-                         "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
-                         "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
+            if (polled)
+                PA_ONCE_BEGIN {
+                    pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
+                             "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
+                             "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
+                } PA_ONCE_END;
 
             break;
         }
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index d00a80f..4340cb3 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -39,6 +39,7 @@
 #include <pulsecore/core-util.h>
 #include <pulsecore/atomic.h>
 #include <pulsecore/core-error.h>
+#include <pulsecore/once.h>
 
 #include "alsa-util.h"
 
@@ -1574,9 +1575,12 @@ snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa
 
     if (k >= hwbuf_size * 3 ||
         k >= pa_bytes_per_second(ss)*10)
-        pa_log(_("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms). "
-                 "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
-               (unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
+
+        PA_ONCE_BEGIN {
+            pa_log(_("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms). "
+                     "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
+                   (unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
+        } PA_ONCE_END;
 
     return n;
 }
@@ -1606,9 +1610,11 @@ int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas
         k >= hwbuf_size * 3 ||
         k >= pa_bytes_per_second(ss)*10)
 
-        pa_log(_("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms). "
-                 "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
-               (unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
+        PA_ONCE_BEGIN {
+            pa_log(_("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms). "
+                     "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
+                   (unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
+        } PA_ONCE_END;
 
     return r;
 }

commit 1a45569b3e60807ee57ba2e6c15fbbb441871c61
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 16:36:48 2009 +0100

    prefer profiles that match the default channel map

diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c
index e517ddc..c949435 100644
--- a/src/modules/alsa/module-alsa-card.c
+++ b/src/modules/alsa/module-alsa-card.c
@@ -88,6 +88,8 @@ struct userdata {
     pa_source *source;
 
     pa_modargs *modargs;
+
+    pa_hashmap *profiles;
 };
 
 struct profile_data {
@@ -99,10 +101,11 @@ static void enumerate_cb(
         const pa_alsa_profile_info *source,
         void *userdata) {
 
-    pa_hashmap *profiles = (pa_hashmap *) userdata;
+    struct userdata *u = userdata;
     char *t, *n;
     pa_card_profile *p;
     struct profile_data *d;
+    unsigned bonus = 0;
 
     if (sink && source) {
         n = pa_sprintf_malloc("output-%s+input-%s", sink->name, source->name);
@@ -116,6 +119,20 @@ static void enumerate_cb(
         t = pa_sprintf_malloc(_("Input %s"), _(source->description));
     }
 
+    if (sink) {
+        if (pa_channel_map_equal(&sink->map, &u->core->default_channel_map))
+            bonus += 50000;
+        else if (sink->map.channels == u->core->default_channel_map.channels)
+            bonus += 40000;
+    }
+
+    if (source) {
+        if (pa_channel_map_equal(&source->map, &u->core->default_channel_map))
+            bonus += 30000;
+        else if (source->map.channels == u->core->default_channel_map.channels)
+            bonus += 20000;
+    }
+
     pa_log_info("Found output profile '%s'", t);
 
     p = pa_card_profile_new(n, t, sizeof(struct profile_data));
@@ -123,7 +140,11 @@ static void enumerate_cb(
     pa_xfree(t);
     pa_xfree(n);
 
-    p->priority = (sink ? sink->priority : 0)*100 + (source ? source->priority : 0);
+    p->priority =
+        (sink ? sink->priority : 0) * 100 +
+        (source ? source->priority : 0) +
+        bonus;
+
     p->n_sinks = !!sink;
     p->n_sources = !!source;
 
@@ -137,7 +158,7 @@ static void enumerate_cb(
     d->sink_profile = sink;
     d->source_profile = source;
 
-    pa_hashmap_put(profiles, p->name, p);
+    pa_hashmap_put(u->profiles, p->name, p);
 }
 
 static void add_disabled_profile(pa_hashmap *profiles) {
@@ -289,8 +310,8 @@ int pa__init(pa_module*m) {
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, u->device_id);
     set_card_name(&data, ma, u->device_id);
 
-    data.profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
-    if (pa_alsa_probe_profiles(u->device_id, &m->core->default_sample_spec, enumerate_cb, data.profiles) < 0) {
+    u->profiles = data.profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
+    if (pa_alsa_probe_profiles(u->device_id, &m->core->default_sample_spec, enumerate_cb, u) < 0) {
         pa_card_new_data_done(&data);
         goto fail;
     }

commit fa5e10f5fa1418457e40fd0debf4bd42d4650910
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 16:58:24 2009 +0100

    fix wording, closes #484

diff --git a/src/daemon/cmdline.c b/src/daemon/cmdline.c
index 43a4a32..f4224ea 100644
--- a/src/daemon/cmdline.c
+++ b/src/daemon/cmdline.c
@@ -299,7 +299,7 @@ int pa_cmdline_parse(pa_daemon_conf *conf, int argc, char *const argv [], int *d
 
             case ARG_DISALLOW_EXIT:
                 if ((conf->disallow_exit = optarg ? pa_parse_boolean(optarg) : TRUE) < 0) {
-                    pa_log(_("--disallow-exit boolean argument"));
+                    pa_log(_("--disallow-exit expects boolean argument"));
                     goto fail;
                 }
                 break;
@@ -330,14 +330,14 @@ int pa_cmdline_parse(pa_daemon_conf *conf, int argc, char *const argv [], int *d
 
             case ARG_LOG_TIME:
                 if ((conf->log_time = optarg ? pa_parse_boolean(optarg) : TRUE) < 0) {
-                    pa_log(_("--log-time boolean argument"));
+                    pa_log(_("--log-time expects boolean argument"));
                     goto fail;
                 }
                 break;
 
             case ARG_LOG_META:
                 if ((conf->log_meta = optarg ? pa_parse_boolean(optarg) : TRUE) < 0) {
-                    pa_log(_("--log-meta boolean argument"));
+                    pa_log(_("--log-meta expects boolean argument"));
                     goto fail;
                 }
                 break;

commit 9b74afcfa3fd3a870aa485fe7f70b5751bfb5158
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 17:01:01 2009 +0100

    make string translatable (fixes #483)

diff --git a/src/daemon/main.c b/src/daemon/main.c
index d176f45..0675f19 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -506,8 +506,9 @@ int main(int argc, char *argv[]) {
         if ((conf->high_priority && !allow_high_priority) ||
             (conf->realtime_scheduling && !allow_realtime))
             pa_log_notice(_("Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
-                            "We are not in group '"PA_REALTIME_GROUP"', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
-                            "For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '"PA_REALTIME_GROUP"', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."));
+                            "We are not in group '%s', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
+                            "For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '%s', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."),
+                          PA_REALTIME_GROUP, PA_REALTIME_GROUP);
 
 
         if (!allow_realtime)

commit 77779ead6d09604573b7170fa27fb9a5926cd02e
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 22:45:56 2009 +0100

    rework logging to make it more modular

diff --git a/src/daemon/main.c b/src/daemon/main.c
index 0675f19..b630bd1 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -351,8 +351,9 @@ int main(int argc, char *argv[]) {
     int autospawn_fd = -1;
     pa_bool_t autospawn_locked = FALSE;
 
-    pa_log_set_maximal_level(PA_LOG_INFO);
     pa_log_set_ident("pulseaudio");
+    pa_log_set_level(PA_LOG_INFO);
+    pa_log_set_flags(PA_LOG_COLORS|PA_LOG_PRINT_FILE|PA_LOG_PRINT_LEVEL, PA_LOG_RESET);
 
 #if defined(__linux__) && defined(__OPTIMIZE__)
     /*
@@ -432,11 +433,13 @@ int main(int argc, char *argv[]) {
         goto finish;
     }
 
-    pa_log_set_maximal_level(conf->log_level);
-    pa_log_set_target(conf->auto_log_target ? PA_LOG_STDERR : conf->log_target, NULL);
-    pa_log_set_show_meta(conf->log_meta);
+    pa_log_set_level(conf->log_level);
+    pa_log_set_target(conf->auto_log_target ? PA_LOG_STDERR : conf->log_target);
+    if (conf->log_meta)
+        pa_log_set_flags(PA_LOG_PRINT_META, PA_LOG_SET);
+    if (conf->log_time)
+        pa_log_set_flags(PA_LOG_PRINT_TIME, PA_LOG_SET);
     pa_log_set_show_backtrace(conf->log_backtrace);
-    pa_log_set_show_time(conf->log_time);
 
     pa_log_debug("Started as real root: %s, suid root: %s", pa_yes_no(real_root), pa_yes_no(suid_root));
 
@@ -771,7 +774,7 @@ int main(int argc, char *argv[]) {
 #endif
 
         if (conf->auto_log_target)
-            pa_log_set_target(PA_LOG_SYSLOG, NULL);
+            pa_log_set_target(PA_LOG_SYSLOG);
 
 #ifdef HAVE_SETSID
         setsid();
diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c
index 7066e7e..4ce87d6 100644
--- a/src/pulsecore/cli-command.c
+++ b/src/pulsecore/cli-command.c
@@ -1350,7 +1350,7 @@ static int pa_cli_command_log_level(pa_core *c, pa_tokenizer *t, pa_strbuf *buf,
         return -1;
     }
 
-    pa_log_set_maximal_level(level);
+    pa_log_set_level(level);
 
     return 0;
 }
@@ -1374,7 +1374,7 @@ static int pa_cli_command_log_meta(pa_core *c, pa_tokenizer *t, pa_strbuf *buf,
         return -1;
     }
 
-    pa_log_set_show_meta(b);
+    pa_log_set_flags(PA_LOG_PRINT_META, b ? PA_LOG_SET : PA_LOG_UNSET);
 
     return 0;
 }
@@ -1398,7 +1398,7 @@ static int pa_cli_command_log_time(pa_core *c, pa_tokenizer *t, pa_strbuf *buf,
         return -1;
     }
 
-    pa_log_set_show_time(b);
+    pa_log_set_flags(PA_LOG_PRINT_TIME, b ? PA_LOG_SET : PA_LOG_UNSET);
 
     return 0;
 }
diff --git a/src/pulsecore/log.c b/src/pulsecore/log.c
index 89b75da..9931586 100644
--- a/src/pulsecore/log.c
+++ b/src/pulsecore/log.c
@@ -51,18 +51,21 @@
 
 #include "log.h"
 
-#define ENV_LOGLEVEL "PULSE_LOG"
-#define ENV_LOGMETA "PULSE_LOG_META"
-#define ENV_LOGTIME "PULSE_LOG_TIME"
-#define ENV_LOGBACKTRACE "PULSE_LOG_BACKTRACE"
-
-static char *log_ident = NULL, *log_ident_local = NULL;
-static pa_log_target_t log_target = PA_LOG_STDERR;
-static pa_log_func_t user_log_func = NULL;
-static pa_log_level_t maximal_level = PA_LOG_ERROR;
-static unsigned show_backtrace = 0;
-static pa_bool_t show_meta = FALSE;
-static pa_bool_t show_time = FALSE;
+#define ENV_LOG_SYSLOG "PULSE_LOG_SYSLOG"
+#define ENV_LOG_LEVEL "PULSE_LOG"
+#define ENV_LOG_COLORS "PULSE_LOG_COLORS"
+#define ENV_LOG_PRINT_TIME "PULSE_LOG_TIME"
+#define ENV_LOG_PRINT_FILE "PULSE_LOG_FILE"
+#define ENV_LOG_PRINT_META "PULSE_LOG_META"
+#define ENV_LOG_PRINT_LEVEL "PULSE_LOG_LEVEL"
+#define ENV_LOG_BACKTRACE "PULSE_LOG_BACKTRACE"
+
+static char *ident = NULL; /* in local charset format */
+static pa_log_target_t target = PA_LOG_STDERR, target_override;
+static pa_bool_t target_override_set = FALSE;
+static pa_log_level_t maximum_level = PA_LOG_ERROR, maximum_level_override = PA_LOG_ERROR;
+static unsigned show_backtrace = 0, show_backtrace_override = 0;
+static pa_log_flags_t flags = 0, flags_override = 0;
 
 #ifdef HAVE_SYSLOG_H
 static const int level_to_syslog[] = {
@@ -83,12 +86,10 @@ static const char level_to_char[] = {
 };
 
 void pa_log_set_ident(const char *p) {
-    pa_xfree(log_ident);
-    pa_xfree(log_ident_local);
+    pa_xfree(ident);
 
-    log_ident = pa_xstrdup(p);
-    if (!(log_ident_local = pa_utf8_to_locale(log_ident)))
-        log_ident_local = pa_xstrdup(log_ident);
+    if (!(ident = pa_utf8_to_locale(p)))
+        ident = pa_ascii_filter(p);
 }
 
 /* To make valgrind shut up. */
@@ -97,29 +98,30 @@ static void ident_destructor(void) {
     if (!pa_in_valgrind())
         return;
 
-    pa_xfree(log_ident);
-    pa_xfree(log_ident_local);
+    pa_xfree(ident);
 }
 
-void pa_log_set_maximal_level(pa_log_level_t l) {
+void pa_log_set_level(pa_log_level_t l) {
     pa_assert(l < PA_LOG_LEVEL_MAX);
 
-    maximal_level = l;
+    maximum_level = l;
 }
 
-void pa_log_set_target(pa_log_target_t t, pa_log_func_t func) {
-    pa_assert(t == PA_LOG_USER || !func);
+void pa_log_set_target(pa_log_target_t t) {
+    pa_assert(t < PA_LOG_TARGET_MAX);
 
-    log_target = t;
-    user_log_func = func;
+    target = t;
 }
 
-void pa_log_set_show_meta(pa_bool_t b) {
-    show_meta = b;
-}
+void pa_log_set_flags(pa_log_flags_t _flags, pa_log_merge_t merge) {
+    pa_assert(!(_flags & ~(PA_LOG_COLORS|PA_LOG_PRINT_TIME|PA_LOG_PRINT_FILE|PA_LOG_PRINT_META|PA_LOG_PRINT_LEVEL)));
 
-void pa_log_set_show_time(pa_bool_t b) {
-    show_time = b;
+    if (merge == PA_LOG_SET)
+        flags |= _flags;
+    else if (merge == PA_LOG_UNSET)
+        flags &= ~_flags;
+    else
+        flags = _flags;
 }
 
 void pa_log_set_show_backtrace(unsigned nlevels) {
@@ -135,8 +137,7 @@ static char* get_backtrace(unsigned show_nframes) {
     unsigned j, n;
     size_t a;
 
-    if (show_nframes <= 0)
-        return NULL;
+    pa_assert(show_nframes > 0);
 
     n_frames = backtrace(trace, PA_ELEMENTSOF(trace));
 
@@ -182,6 +183,50 @@ static char* get_backtrace(unsigned show_nframes) {
 
 #endif
 
+static void init_defaults(void) {
+    const char *e;
+
+    if (!ident) {
+        char binary[256];
+        if (pa_get_binary_name(binary, sizeof(binary)))
+            pa_log_set_ident(binary);
+    }
+
+    if (getenv(ENV_LOG_SYSLOG)) {
+        target_override = PA_LOG_SYSLOG;
+        target_override_set = TRUE;
+    }
+
+    if ((e = getenv(ENV_LOG_LEVEL))) {
+        maximum_level_override = (pa_log_level_t) atoi(e);
+
+        if (maximum_level_override >= PA_LOG_LEVEL_MAX)
+            maximum_level_override = PA_LOG_LEVEL_MAX-1;
+    }
+
+    if (getenv(ENV_LOG_COLORS))
+        flags_override |= PA_LOG_COLORS;
+
+    if (getenv(ENV_LOG_PRINT_TIME))
+        flags_override |= PA_LOG_PRINT_TIME;
+
+    if (getenv(ENV_LOG_PRINT_FILE))
+        flags_override |= PA_LOG_PRINT_FILE;
+
+    if (getenv(ENV_LOG_PRINT_META))
+        flags_override |= PA_LOG_PRINT_META;
+
+    if (getenv(ENV_LOG_PRINT_LEVEL))
+        flags_override |= PA_LOG_PRINT_LEVEL;
+
+    if ((e = getenv(ENV_LOG_BACKTRACE))) {
+        show_backtrace_override = (unsigned) atoi(e);
+
+        if (show_backtrace_override <= 0)
+            show_backtrace_override = 0;
+    }
+}
+
 void pa_log_levelv_meta(
         pa_log_level_t level,
         const char*file,
@@ -190,14 +235,13 @@ void pa_log_levelv_meta(
         const char *format,
         va_list ap) {
 
-    const char *e;
     char *t, *n;
     int saved_errno = errno;
     char *bt = NULL;
-    pa_log_level_t ml;
-#ifdef HAVE_EXECINFO_H
-    unsigned show_bt;
-#endif
+    pa_log_target_t _target;
+    pa_log_level_t _maximum_level;
+    unsigned _show_backtrace;
+    pa_log_flags_t _flags;
 
     /* We don't use dynamic memory allocation here to minimize the hit
      * in RT threads */
@@ -206,30 +250,30 @@ void pa_log_levelv_meta(
     pa_assert(level < PA_LOG_LEVEL_MAX);
     pa_assert(format);
 
-    ml = maximal_level;
-
-    if (PA_UNLIKELY((e = getenv(ENV_LOGLEVEL)))) {
-        pa_log_level_t eml = (pa_log_level_t) atoi(e);
+    PA_ONCE_BEGIN {
+        init_defaults();
+    } PA_ONCE_END;
 
-        if (eml > ml)
-            ml = eml;
-    }
+    _target = target_override_set ? target_override : target;
+    _maximum_level = PA_MAX(maximum_level, maximum_level_override);
+    _show_backtrace = PA_MAX(show_backtrace, show_backtrace_override);
+    _flags = flags | flags_override;
 
-    if (PA_LIKELY(level > ml)) {
+    if (PA_LIKELY(level > _maximum_level)) {
         errno = saved_errno;
         return;
     }
 
     pa_vsnprintf(text, sizeof(text), format, ap);
 
-    if ((show_meta || getenv(ENV_LOGMETA)) && file && line > 0 && func)
+    if ((_flags & PA_LOG_PRINT_META) && file && line > 0 && func)
         pa_snprintf(location, sizeof(location), "[%s:%i %s()] ", file, line, func);
-    else if (file)
+    else if (_flags & (PA_LOG_PRINT_META|PA_LOG_PRINT_FILE))
         pa_snprintf(location, sizeof(location), "%s: ", pa_path_get_filename(file));
     else
         location[0] = 0;
 
-    if (show_time || getenv(ENV_LOGTIME)) {
+    if (_flags & PA_LOG_PRINT_TIME) {
         static pa_usec_t start, last;
         pa_usec_t u, a, r;
 
@@ -257,16 +301,8 @@ void pa_log_levelv_meta(
         timestamp[0] = 0;
 
 #ifdef HAVE_EXECINFO_H
-    show_bt = show_backtrace;
-
-    if ((e = getenv(ENV_LOGBACKTRACE))) {
-        unsigned ebt = (unsigned) atoi(e);
-
-        if (ebt > show_bt)
-            show_bt = ebt;
-    }
-
-    bt = get_backtrace(show_bt);
+    if (_show_backtrace > 0)
+        bt = get_backtrace(_show_backtrace);
 #endif
 
     if (!pa_utf8_valid(text))
@@ -282,14 +318,15 @@ void pa_log_levelv_meta(
         if (t[strspn(t, "\t ")] == 0)
             continue;
 
-        switch (log_target) {
+        switch (_target) {
+
             case PA_LOG_STDERR: {
                 const char *prefix = "", *suffix = "", *grey = "";
                 char *local_t;
 
 #ifndef OS_IS_WIN32
                 /* Yes indeed. Useless, but fun! */
-                if (isatty(STDERR_FILENO)) {
+                if ((_flags & PA_LOG_COLORS) && isatty(STDERR_FILENO)) {
                     if (level <= PA_LOG_ERROR)
                         prefix = "\x1B[1;31m";
                     else if (level <= PA_LOG_WARN)
@@ -305,13 +342,15 @@ void pa_log_levelv_meta(
 
                 /* We shouldn't be using dynamic allocation here to
                  * minimize the hit in RT threads */
-                local_t = pa_utf8_to_locale(t);
-                if (!local_t)
+                if ((local_t = pa_utf8_to_locale(t)))
+                    t = local_t;
+
+                if (_flags & PA_LOG_PRINT_LEVEL)
                     fprintf(stderr, "%s%c: %s%s%s%s%s%s\n", timestamp, level_to_char[level], location, prefix, t, grey, pa_strempty(bt), suffix);
-                else {
-                    fprintf(stderr, "%s%c: %s%s%s%s%s%s\n", timestamp, level_to_char[level], location, prefix, local_t, grey, pa_strempty(bt), suffix);
-                    pa_xfree(local_t);
-                }
+                else
+                    fprintf(stderr, "%s%s%s%s%s%s%s\n", timestamp, location, prefix, t, grey, pa_strempty(bt), suffix);
+
+                pa_xfree(local_t);
 
                 break;
             }
@@ -320,29 +359,17 @@ void pa_log_levelv_meta(
             case PA_LOG_SYSLOG: {
                 char *local_t;
 
-                openlog(log_ident_local ? log_ident_local : "???", LOG_PID, LOG_USER);
-
-                local_t = pa_utf8_to_locale(t);
-                if (!local_t)
-                    syslog(level_to_syslog[level], "%s%s%s%s", timestamp, location, t, pa_strempty(bt));
-                else {
-                    syslog(level_to_syslog[level], "%s%s%s%s", timestamp, location, local_t, pa_strempty(bt));
-                    pa_xfree(local_t);
-                }
-
-                closelog();
-                break;
-            }
-#endif
+                openlog(ident, LOG_PID, LOG_USER);
 
-            case PA_LOG_USER: {
-                char x[1024];
+                if ((local_t = pa_utf8_to_locale(t)))
+                    t = local_t;
 
-                pa_snprintf(x, sizeof(x), "%s%s%s", timestamp, location, t);
-                user_log_func(level, x);
+                syslog(level_to_syslog[level], "%s%s%s%s", timestamp, location, t, pa_strempty(bt));
+                pa_xfree(local_t);
 
                 break;
             }
+#endif
 
             case PA_LOG_NULL:
             default:
@@ -350,8 +377,8 @@ void pa_log_levelv_meta(
         }
     }
 
-    errno = saved_errno;
     pa_xfree(bt);
+    errno = saved_errno;
 }
 
 void pa_log_level_meta(
diff --git a/src/pulsecore/log.h b/src/pulsecore/log.h
index 77adb79..6e7bfc3 100644
--- a/src/pulsecore/log.h
+++ b/src/pulsecore/log.h
@@ -35,8 +35,8 @@
 typedef enum pa_log_target {
     PA_LOG_STDERR,  /* default */
     PA_LOG_SYSLOG,
-    PA_LOG_USER,    /* to user specified function */
-    PA_LOG_NULL     /* to /dev/null */
+    PA_LOG_NULL,    /* to /dev/null */
+    PA_LOG_TARGET_MAX
 } pa_log_target_t;
 
 typedef enum pa_log_level {
@@ -48,18 +48,33 @@ typedef enum pa_log_level {
     PA_LOG_LEVEL_MAX
 } pa_log_level_t;
 
+typedef enum pa_log_flags {
+    PA_LOG_COLORS      = 0x01, /* Show colorful output */
+    PA_LOG_PRINT_TIME  = 0x02, /* Show time */
+    PA_LOG_PRINT_FILE  = 0x04, /* Show source file */
+    PA_LOG_PRINT_META  = 0x08, /* Show extended locaton information */
+    PA_LOG_PRINT_LEVEL = 0x10, /* Show log level prefix */
+} pa_log_flags_t;
+
+typedef enum pa_log_merge {
+    PA_LOG_SET,
+    PA_LOG_UNSET,
+    PA_LOG_RESET
+} pa_log_merge_t;
+
 /* Set an identification for the current daemon. Used when logging to syslog. */
 void pa_log_set_ident(const char *p);
 
-typedef void (*pa_log_func_t)(pa_log_level_t t, const char*s);
-
-/* Set another log target. If t is PA_LOG_USER you may specify a function that is called every log string */
-void pa_log_set_target(pa_log_target_t t, pa_log_func_t func);
+/* Set a log target. */
+void pa_log_set_target(pa_log_target_t t);
 
 /* Maximal log level */
-void pa_log_set_maximal_level(pa_log_level_t l);
-void pa_log_set_show_meta(pa_bool_t b);
-void pa_log_set_show_time(pa_bool_t b);
+void pa_log_set_level(pa_log_level_t l);
+
+/* Set flags */
+void pa_log_set_flags(pa_log_flags_t flags, pa_log_merge_t merge);
+
+/* Enable backtrace */
 void pa_log_set_show_backtrace(unsigned nlevels);
 
 void pa_log_level_meta(
@@ -68,6 +83,7 @@ void pa_log_level_meta(
         int line,
         const char *func,
         const char *format, ...) PA_GCC_PRINTF_ATTR(5,6);
+
 void pa_log_levelv_meta(
         pa_log_level_t level,
         const char*file,
@@ -76,8 +92,14 @@ void pa_log_levelv_meta(
         const char *format,
         va_list ap);
 
-void pa_log_level(pa_log_level_t level, const char *format, ...) PA_GCC_PRINTF_ATTR(2,3);
-void pa_log_levelv(pa_log_level_t level, const char *format, va_list ap);
+void pa_log_level(
+        pa_log_level_t level,
+        const char *format, ...) PA_GCC_PRINTF_ATTR(2,3);
+
+void pa_log_levelv(
+        pa_log_level_t level,
+        const char *format,
+        va_list ap);
 
 #if __STDC_VERSION__ >= 199901L
 
diff --git a/src/tests/envelope-test.c b/src/tests/envelope-test.c
index 4a72f5a..11a80a1 100644
--- a/src/tests/envelope-test.c
+++ b/src/tests/envelope-test.c
@@ -203,7 +203,7 @@ int main(int argc, char *argv[]) {
     };
 
     oil_init();
-    pa_log_set_maximal_level(PA_LOG_DEBUG);
+    pa_log_set_level(PA_LOG_DEBUG);
 
     pa_assert_se(pool = pa_mempool_new(FALSE, 0));
     pa_assert_se(envelope = pa_envelope_new(&ss));
diff --git a/src/tests/memblockq-test.c b/src/tests/memblockq-test.c
index c53945b..b01a4fd 100644
--- a/src/tests/memblockq-test.c
+++ b/src/tests/memblockq-test.c
@@ -61,7 +61,7 @@ int main(int argc, char *argv[]) {
     pa_memchunk chunk1, chunk2, chunk3, chunk4;
     pa_memchunk silence;
 
-    pa_log_set_maximal_level(PA_LOG_DEBUG);
+    pa_log_set_level(PA_LOG_DEBUG);
 
     p = pa_mempool_new(FALSE, 0);
 
diff --git a/src/tests/mix-test.c b/src/tests/mix-test.c
index cc21ab0..db8ac6e 100644
--- a/src/tests/mix-test.c
+++ b/src/tests/mix-test.c
@@ -199,7 +199,7 @@ int main(int argc, char *argv[]) {
     pa_cvolume v;
 
     oil_init();
-    pa_log_set_maximal_level(PA_LOG_DEBUG);
+    pa_log_set_level(PA_LOG_DEBUG);
 
     pa_assert_se(pool = pa_mempool_new(FALSE, 0));
 
diff --git a/src/tests/remix-test.c b/src/tests/remix-test.c
index 3538d7d..3da4ee3 100644
--- a/src/tests/remix-test.c
+++ b/src/tests/remix-test.c
@@ -56,7 +56,7 @@ int main(int argc, char *argv[]) {
     pa_mempool *pool;
 
     oil_init();
-    pa_log_set_maximal_level(PA_LOG_DEBUG);
+    pa_log_set_level(PA_LOG_DEBUG);
 
     pa_assert_se(pool = pa_mempool_new(FALSE, 0));
 
diff --git a/src/tests/resampler-test.c b/src/tests/resampler-test.c
index 2d59186..da8d375 100644
--- a/src/tests/resampler-test.c
+++ b/src/tests/resampler-test.c
@@ -199,7 +199,7 @@ int main(int argc, char *argv[]) {
     pa_cvolume v;
 
     oil_init();
-    pa_log_set_maximal_level(PA_LOG_DEBUG);
+    pa_log_set_level(PA_LOG_DEBUG);
 
     pa_assert_se(pool = pa_mempool_new(FALSE, 0));
 

commit edfa39a2af1c653fd8ccd6c34d7d2e49505d325f
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 23:46:31 2009 +0100

    make sure we don't choke on PULSE_PROP_OVERRIDE

diff --git a/src/pulsecore/proplist-util.c b/src/pulsecore/proplist-util.c
index 7ba2fd7..af5f0aa 100644
--- a/src/pulsecore/proplist-util.c
+++ b/src/pulsecore/proplist-util.c
@@ -135,8 +135,9 @@ void pa_init_proplist(pa_proplist *p) {
 
                 k = pa_xstrndup(*e+skip, kl);
 
-                if (override || !pa_proplist_contains(p, k))
-                    pa_proplist_sets(p, k, *e+skip+kl+1);
+                if (!pa_streq(k, "OVERRIDE"))
+                    if (override || !pa_proplist_contains(p, k))
+                        pa_proplist_sets(p, k, *e+skip+kl+1);
                 pa_xfree(k);
             }
         }

commit 194d8991d7a5b6cf1822f3a4d7459b12975b4107
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sat Feb 21 23:47:08 2009 +0100

    make sure we don't choke on overly long lines in .desktop files

diff --git a/src/modules/module-augment-properties.c b/src/modules/module-augment-properties.c
index 90bfbe7..9911186 100644
--- a/src/modules/module-augment-properties.c
+++ b/src/modules/module-augment-properties.c
@@ -195,6 +195,8 @@ static pa_hook_result_t process(struct userdata *u, pa_proplist *p) {
 
     time(&now);
 
+    pa_log_debug("Looking for .desktop file for %s", pn);
+
     if ((r = pa_hashmap_get(u->cache, pn))) {
         if (now-r->timestamp > STAT_INTERVAL) {
             r->timestamp = now;
diff --git a/src/pulsecore/conf-parser.c b/src/pulsecore/conf-parser.c
index b7ec2b3..1d98f36 100644
--- a/src/pulsecore/conf-parser.c
+++ b/src/pulsecore/conf-parser.c
@@ -127,7 +127,7 @@ static int parse_line(const char *filename, unsigned line, char **section, const
 int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, void *userdata) {
     int r = -1;
     unsigned line = 0;
-    int do_close = !f;
+    pa_bool_t do_close = !f;
     char *section = NULL;
 
     pa_assert(filename);
@@ -144,7 +144,7 @@ int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, void
     }
 
     while (!feof(f)) {
-        char l[256];
+        char l[4096];
 
         if (!fgets(l, sizeof(l), f)) {
             if (feof(f))

commit 504384a041cf1f9ccdd51390a037887c448189b9
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sun Feb 22 00:45:34 2009 +0100

    initialize selem index

diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 4340cb3..016e52a 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1027,6 +1027,7 @@ snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const
     pa_assert(name);
 
     snd_mixer_selem_id_set_name(sid, name);
+    snd_mixer_selem_id_set_index(sid, 0);
 
     if ((elem = snd_mixer_find_selem(mixer, sid))) {
 
@@ -1043,6 +1044,7 @@ snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const
 
     if (fallback) {
         snd_mixer_selem_id_set_name(sid, fallback);
+        snd_mixer_selem_id_set_index(sid, 0);
 
         if ((fallback_elem = snd_mixer_find_selem(mixer, sid))) {
 
@@ -1085,7 +1087,6 @@ success:
     return elem;
 }
 
-
 int pa_alsa_find_mixer_and_elem(
         snd_pcm_t *pcm,
         snd_mixer_t **_m,

commit 2d9ae496c953ce62765f8f7f5b87fcab5e325c52
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sun Feb 22 02:00:25 2009 +0100

    rework suspending/resuming

diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 559d95b..b2fb1db 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -712,13 +712,13 @@ static int stop_stream_fd(struct userdata *u) {
         bt_audio_error_t error;
         uint8_t buf[BT_SUGGESTED_BUFFER_SIZE];
     } msg;
+    int r = 0;
 
     pa_assert(u);
     pa_assert(u->rtpoll);
     pa_assert(u->rtpoll_item);
     pa_assert(u->stream_fd >= 0);
 
-    /* FIXME: HSP, only when sink&source suspended */
     pa_rtpoll_item_free(u->rtpoll_item);
     u->rtpoll_item = NULL;
 
@@ -727,20 +727,21 @@ static int stop_stream_fd(struct userdata *u) {
     msg.start_req.h.name = BT_STOP_STREAM;
     msg.start_req.h.length = sizeof(msg.start_req);
 
-    if (service_send(u, &msg.start_req.h) < 0)
-        return -1;
-
-    if (service_expect(u, &msg.rsp, sizeof(msg), BT_STOP_STREAM, sizeof(msg.start_rsp)) < 0)
-        return -1;
+    if (service_send(u, &msg.start_req.h) < 0 ||
+        service_expect(u, &msg.rsp, sizeof(msg), BT_STOP_STREAM, sizeof(msg.start_rsp)) < 0)
+        r = -1;
 
     pa_close(u->stream_fd);
     u->stream_fd = -1;
 
-    return 0;
+    return r;
 }
 
 static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
     struct userdata *u = PA_SINK(o)->userdata;
+    pa_bool_t failed = FALSE;
+    int r;
+
     pa_assert(u->sink == PA_SINK(o));
 
     pa_log_debug("got message: %d", code);
@@ -753,19 +754,26 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
                 case PA_SINK_SUSPENDED:
                     pa_assert(PA_SINK_IS_OPENED(u->sink->thread_info.state));
 
-                    stop_stream_fd(u); /* FIXME: return value */
+                    /* Stop the device if the source is suspended as well */
+                    if (!u->source || u->source->state == PA_SOURCE_SUSPENDED)
+                        /* We deliberately ignore whether stopping
+                         * actually worked. Since the stream_fd is
+                         * closed it doesn't really matter */
+                        stop_stream_fd(u);
 
                     break;
 
                 case PA_SINK_IDLE:
                 case PA_SINK_RUNNING:
-                    if (PA_SINK_IS_OPENED(u->sink->thread_info.state))
+                    if (u->sink->thread_info.state != PA_SINK_SUSPENDED)
                         break;
 
-                    if (u->rtpoll_item == NULL)
-                        start_stream_fd(u); /* FIXME: return value */
-                    u->started_at = pa_rtclock_usec();
+                    /* Resume the device if the source was suspended as well */
+                    if (!u->source || u->source->state == PA_SOURCE_SUSPENDED)
+                        if (start_stream_fd(u) < 0)
+                            failed = TRUE;
 
+                    u->started_at = pa_rtclock_usec();
                     break;
 
                 case PA_SINK_UNLINKED:
@@ -779,14 +787,17 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
             *((pa_usec_t*) data) = 0;
             return 0;
         }
-
     }
 
-    return pa_sink_process_msg(o, code, data, offset, chunk);
+    r = pa_sink_process_msg(o, code, data, offset, chunk);
+
+    return (r < 0 || !failed) ? r : -1;
 }
 
 static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
     struct userdata *u = PA_SOURCE(o)->userdata;
+    pa_bool_t failed = FALSE;
+    int r;
 
     pa_assert(u->source == PA_SOURCE(o));
 
@@ -798,13 +809,26 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
             switch ((pa_source_state_t) PA_PTR_TO_UINT(data)) {
 
                 case PA_SOURCE_SUSPENDED:
+                    pa_assert(PA_SOURCE_IS_OPENED(u->source->thread_info.state));
+
+                    /* Stop the device if the sink is suspended as well */
+                    if (!u->sink || u->sink->state == PA_SINK_SUSPENDED)
+                        stop_stream_fd(u);
+
                     pa_smoother_pause(u->read_smoother, pa_rtclock_usec());
                     break;
 
                 case PA_SOURCE_IDLE:
                 case PA_SOURCE_RUNNING:
-                    if (u->source->thread_info.state == PA_SOURCE_SUSPENDED)
-                        pa_smoother_resume(u->read_smoother, pa_rtclock_usec());
+                    if (u->source->thread_info.state != PA_SOURCE_SUSPENDED)
+                        break;
+
+                    /* Resume the device if the sink was suspended as well */
+                    if (!u->sink || u->sink->thread_info.state == PA_SINK_SUSPENDED)
+                        if (start_stream_fd(u) < 0)
+                            failed = TRUE;
+
+                    pa_smoother_resume(u->read_smoother, pa_rtclock_usec());
                     break;
 
                 case PA_SOURCE_UNLINKED:
@@ -821,7 +845,9 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
 
     }
 
-    return pa_source_process_msg(o, code, data, offset, chunk);
+    r = pa_source_process_msg(o, code, data, offset, chunk);
+
+    return (r < 0 || !failed) ? r : -1;
 }
 
 static int hsp_process_render(struct userdata *u) {
@@ -1057,12 +1083,13 @@ static void thread_func(void *userdata) {
     for (;;) {
         struct pollfd *pollfd;
         int ret;
+        pa_bool_t disable_timer = TRUE;
 
-        pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
+        pollfd = u->rtpoll_item ? pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL) : NULL;
 
         if (u->source && PA_SOURCE_IS_LINKED(u->source->thread_info.state)) {
 
-            if (pollfd->revents & POLLIN) {
+            if (pollfd && (pollfd->revents & POLLIN)) {
 
                 if (hsp_process_push(u) < 0)
                     goto fail;
@@ -1077,73 +1104,73 @@ static void thread_func(void *userdata) {
             if (u->sink->thread_info.rewind_requested)
                 pa_sink_process_rewind(u->sink, 0);
 
-            if (pollfd->revents & POLLOUT)
-                writable = TRUE;
+            if (pollfd) {
+                if (pollfd->revents & POLLOUT)
+                    writable = TRUE;
 
-            if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && !do_write && writable) {
-                pa_usec_t time_passed;
-                uint64_t should_have_written;
+                if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && !do_write && writable) {
+                    pa_usec_t time_passed;
+                    uint64_t should_have_written;
 
-                /* Hmm, there is no input stream we could synchronize
-                 * to. So let's do things by time */
+                    /* Hmm, there is no input stream we could synchronize
+                     * to. So let's do things by time */
 
-                time_passed = pa_rtclock_usec() - u->started_at;
-                should_have_written = pa_usec_to_bytes(time_passed, &u->sink->sample_spec);
+                    time_passed = pa_rtclock_usec() - u->started_at;
+                    should_have_written = pa_usec_to_bytes(time_passed, &u->sink->sample_spec);
 
-                do_write = u->write_index <= should_have_written ;
+                    do_write = u->write_index <= should_have_written ;
 /*                 pa_log_debug("Time has come: %s", pa_yes_no(do_write)); */
-            }
+                }
 
-            if (writable && do_write) {
+                if (writable && do_write) {
 
-                if (u->profile == PROFILE_A2DP) {
-                    if (a2dp_process_render(u) < 0)
-                        goto fail;
-                } else {
-                    if (hsp_process_render(u) < 0)
-                        goto fail;
-                }
+                    if (u->profile == PROFILE_A2DP) {
+                        if (a2dp_process_render(u) < 0)
+                            goto fail;
+                    } else {
+                        if (hsp_process_render(u) < 0)
+                            goto fail;
+                    }
 
-                do_write = FALSE;
-                writable = FALSE;
-            }
+                    do_write = FALSE;
+                    writable = FALSE;
+                }
 
-            if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && !do_write) {
-                pa_usec_t time_passed, next_write_at, sleep_for;
+                if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && !do_write) {
+                    pa_usec_t time_passed, next_write_at, sleep_for;
 
-                /* Hmm, there is no input stream we could synchronize
-                 * to. So let's estimate when we need to wake up the latest */
+                    /* Hmm, there is no input stream we could synchronize
+                     * to. So let's estimate when we need to wake up the latest */
 
-                time_passed = pa_rtclock_usec() - u->started_at;
-                next_write_at = pa_bytes_to_usec(u->write_index, &u->sink->sample_spec);
-                sleep_for = time_passed < next_write_at ? next_write_at - time_passed : 0;
+                    time_passed = pa_rtclock_usec() - u->started_at;
+                    next_write_at = pa_bytes_to_usec(u->write_index, &u->sink->sample_spec);
+                    sleep_for = time_passed < next_write_at ? next_write_at - time_passed : 0;
 
 /*                 pa_log("Sleeping for %lu; time passed %lu, next write at %lu", (unsigned long) sleep_for, (unsigned long) time_passed, (unsigned long)next_write_at); */
 
-                pa_rtpoll_set_timer_relative(u->rtpoll, sleep_for);
+                    pa_rtpoll_set_timer_relative(u->rtpoll, sleep_for);
+                    disable_timer = FALSE;
+                }
             }
-        } else
+        }
+
+        if (disable_timer)
             pa_rtpoll_set_timer_disabled(u->rtpoll);
 
         /* Hmm, nothing to do. Let's sleep */
-        pollfd->events = (short) (((u->sink && PA_SINK_IS_OPENED(u->sink->thread_info.state) && !writable) ? POLLOUT : 0) |
-                                  (u->source && PA_SOURCE_IS_OPENED(u->source->thread_info.state) ? POLLIN : 0));
+        if (pollfd)
+            pollfd->events = (short) (((u->sink && PA_SINK_IS_OPENED(u->sink->thread_info.state) && !writable) ? POLLOUT : 0) |
+                                      (u->source && PA_SOURCE_IS_OPENED(u->source->thread_info.state) ? POLLIN : 0));
 
-    poll_run:
         if ((ret = pa_rtpoll_run(u->rtpoll, TRUE)) < 0)
             goto fail;
 
         if (ret == 0)
             goto finish;
 
-        if (!u->rtpoll_item) {
-            pa_rtpoll_set_timer_disabled(u->rtpoll);
-            goto poll_run;
-        }
-
-        pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
+        pollfd = u->rtpoll_item ? pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL) : NULL;
 
-        if (pollfd->revents & ~(POLLOUT|POLLIN)) {
+        if (pollfd && (pollfd->revents & ~(POLLOUT|POLLIN))) {
             pa_log_error("FD error.");
             goto fail;
         }

commit e335b3d6cacf5ae961848e28021eb8713865839f
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sun Feb 22 03:55:54 2009 +0100

    prepare test for tracking down ens1371 issue

diff --git a/src/tests/alsa-time-test.c b/src/tests/alsa-time-test.c
index 3858bf7..e852c3f 100644
--- a/src/tests/alsa-time-test.c
+++ b/src/tests/alsa-time-test.c
@@ -18,7 +18,7 @@ int main(int argc, char *argv[]) {
     snd_pcm_status_t *status;
     snd_pcm_t *pcm;
     unsigned rate = 44100;
-    unsigned periods = 0;
+    unsigned periods = 2;
     snd_pcm_uframes_t boundary, buffer_size = 44100/10; /* 100s */
     int dir = 1;
     struct timespec start, last_timestamp = { 0, 0 };
@@ -75,10 +75,13 @@ int main(int argc, char *argv[]) {
     r = snd_pcm_hw_params_current(pcm, hwparams);
     assert(r == 0);
 
+    r = snd_pcm_sw_params_current(pcm, swparams);
+    assert(r == 0);
+
     r = snd_pcm_sw_params_set_avail_min(pcm, swparams, 1);
     assert(r == 0);
 
-    r = snd_pcm_sw_params_set_period_event(pcm, swparams, 1);
+    r = snd_pcm_sw_params_set_period_event(pcm, swparams, 0);
     assert(r == 0);
 
     r = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size);
@@ -116,7 +119,6 @@ int main(int argc, char *argv[]) {
 
     for (;;) {
         snd_pcm_sframes_t avail, delay;
-/*         snd_pcm_uframes_t avail2; */
         struct timespec now, timestamp;
         unsigned short revents;
         int written = 0;
@@ -131,29 +133,20 @@ int main(int argc, char *argv[]) {
 
         assert((revents & ~POLLOUT) == 0);
 
-/*         state = snd_pcm_get_state(pcm); */
-
         avail = snd_pcm_avail(pcm);
         assert(avail >= 0);
 
         r = snd_pcm_status(pcm, status);
         assert(r == 0);
 
-        printf("%lu %lu\n", (unsigned long) avail, (unsigned long) snd_pcm_status_get_avail(status));
+        /* This assertion fails from time to time. ALSA seems to be broken */
+/*         assert(avail == (snd_pcm_sframes_t) snd_pcm_status_get_avail(status)); */
+/*         printf("%lu %lu\n", (unsigned long) avail, (unsigned long) snd_pcm_status_get_avail(status)); */
 
-        assert(avail == (snd_pcm_sframes_t) snd_pcm_status_get_avail(status));
         snd_pcm_status_get_htstamp(status, &timestamp);
         delay = snd_pcm_status_get_delay(status);
         state = snd_pcm_status_get_state(status);
 
-/*         r = snd_pcm_avail_delay(pcm, &avail, &delay); */
-/*         assert(r == 0); */
-
-/*         r = snd_pcm_htimestamp(pcm, &avail2, &timestamp); */
-/*         assert(r == 0); */
-
-/*         assert(avail == (snd_pcm_sframes_t) avail2); */
-
         r = clock_gettime(CLOCK_MONOTONIC, &now);
         assert(r == 0);
 
@@ -191,6 +184,10 @@ int main(int argc, char *argv[]) {
                written,
                state);
 
+        /** When this assert is hit, most likely something bad
+         * happened, i.e. the avail jumped suddenly. */
+        assert((unsigned) avail <= buffer_size);
+
         last_avail = avail;
         last_delay = delay;
         last_timestamp = timestamp;

commit 3bccb704b6cc9c1ba0ef2cd3ffb33a49bec039d5
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sun Feb 22 05:01:32 2009 +0100

    Allow passing a NULL proplist to pa_xxxx_update_proplist() to just fire a notification

diff --git a/src/pulsecore/client.c b/src/pulsecore/client.c
index 7ca7b97..e6e8b52 100644
--- a/src/pulsecore/client.c
+++ b/src/pulsecore/client.c
@@ -132,15 +132,14 @@ void pa_client_set_name(pa_client *c, const char *name) {
     pa_log_info("Client %u changed name from \"%s\" to \"%s\"", c->index, pa_strnull(pa_proplist_gets(c->proplist, PA_PROP_APPLICATION_NAME)), name);
     pa_proplist_sets(c->proplist, PA_PROP_APPLICATION_NAME, name);
 
-    pa_hook_fire(&c->core->hooks[PA_CORE_HOOK_CLIENT_PROPLIST_CHANGED], c);
-    pa_subscription_post(c->core, PA_SUBSCRIPTION_EVENT_CLIENT|PA_SUBSCRIPTION_EVENT_CHANGE, c->index);
+    pa_client_update_proplist(c, 0, NULL);
 }
 
 void pa_client_update_proplist(pa_client *c, pa_update_mode_t mode, pa_proplist *p) {
     pa_assert(c);
-    pa_assert(p);
 
-    pa_proplist_update(c->proplist, mode, p);
+    if (p)
+        pa_proplist_update(c->proplist, mode, p);
 
     pa_hook_fire(&c->core->hooks[PA_CORE_HOOK_CLIENT_PROPLIST_CHANGED], c);
     pa_subscription_post(c->core, PA_SUBSCRIPTION_EVENT_CLIENT|PA_SUBSCRIPTION_EVENT_CHANGE, c->index);
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 22419ee..34217c8 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -943,9 +943,9 @@ pa_bool_t pa_sink_input_get_mute(pa_sink_input *i) {
 /* Called from main thread */
 void pa_sink_input_update_proplist(pa_sink_input *i, pa_update_mode_t mode, pa_proplist *p) {
     pa_sink_input_assert_ref(i);
-    pa_assert(p);
 
-    pa_proplist_update(i->proplist, mode, p);
+    if (p)
+        pa_proplist_update(i->proplist, mode, p);
 
     if (PA_SINK_IS_LINKED(i->state)) {
         pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_PROPLIST_CHANGED], i);
diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c
index 382fb88..d63aca1 100644
--- a/src/pulsecore/source-output.c
+++ b/src/pulsecore/source-output.c
@@ -618,9 +618,9 @@ void pa_source_output_set_name(pa_source_output *o, const char *name) {
 /* Called from main thread */
 void pa_source_output_update_proplist(pa_source_output *o, pa_update_mode_t mode, pa_proplist *p) {
     pa_source_output_assert_ref(o);
-    pa_assert(p);
 
-    pa_proplist_update(o->proplist, mode, p);
+    if (p)
+        pa_proplist_update(o->proplist, mode, p);
 
     if (PA_SINK_IS_LINKED(o->state)) {
         pa_hook_fire(&o->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_PROPLIST_CHANGED], o);

commit 3bc60ca78571b2b2b965748997b2019db222405e
Author: Lennart Poettering <lennart at poettering.net>
Date:   Sun Feb 22 05:04:43 2009 +0100

    a couple of boring updates

diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index 840f458..e8659e6 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -404,7 +404,7 @@ static int esd_proto_stream_play(connection *c, esd_proto_t request, const void
 
     if (c->options->default_sink) {
         sink = pa_namereg_get(c->protocol->core, c->options->default_sink, PA_NAMEREG_SINK);
-        CHECK_VALIDITY(sink, "No such sink: %s", c->options->default_sink);
+        CHECK_VALIDITY(sink, "No such sink: %s", pa_strnull(c->options->default_sink));
     }
 
     pa_strlcpy(name, data, sizeof(name));
@@ -489,23 +489,17 @@ static int esd_proto_stream_record(connection *c, esd_proto_t request, const voi
     if (request == ESD_PROTO_STREAM_MON) {
         pa_sink* sink;
 
-        if (!(sink = pa_namereg_get(c->protocol->core, c->options->default_sink, PA_NAMEREG_SINK))) {
-            pa_log("no such sink.");
-            return -1;
-        }
+        sink = pa_namereg_get(c->protocol->core, c->options->default_sink, PA_NAMEREG_SINK);
+        CHECK_VALIDITY(sink, "No such sink: %s", pa_strnull(c->options->default_sink));
 
-        if (!(source = sink->monitor_source)) {
-            pa_log("no such monitor source.");
-            return -1;
-        }
+        source = sink->monitor_source;
+        CHECK_VALIDITY(source, "No such source.");
     } else {
         pa_assert(request == ESD_PROTO_STREAM_REC);
 
         if (c->options->default_source) {
-            if (!(source = pa_namereg_get(c->protocol->core, c->options->default_source, PA_NAMEREG_SOURCE))) {
-                pa_log("no such source.");
-                return -1;
-            }
+            source = pa_namereg_get(c->protocol->core, c->options->default_source, PA_NAMEREG_SOURCE);
+            CHECK_VALIDITY(source, "No such source: %s", pa_strnull(c->options->default_source));
         }
     }
 
@@ -621,7 +615,7 @@ static int esd_proto_all_info(connection *c, esd_proto_t request, const void *da
 
     k = sizeof(int32_t)*5+ESD_NAME_MAX;
     s = sizeof(int32_t)*6+ESD_NAME_MAX;
-    nsamples = c->protocol->core->scache ? pa_idxset_size(c->protocol->core->scache) : 0;
+    nsamples = pa_idxset_size(c->protocol->core->scache);
     t = s*(nsamples+1) + k*(c->protocol->n_player+1);
 
     connection_write_prepare(c, t);
@@ -912,7 +906,13 @@ static int do_read(connection *c) {
         ssize_t r;
         pa_assert(c->read_data_length < sizeof(c->request));
 
-        if ((r = pa_iochannel_read(c->io, ((uint8_t*) &c->request) + c->read_data_length, sizeof(c->request) - c->read_data_length)) <= 0) {
+        if ((r = pa_iochannel_read(c->io,
+                                   ((uint8_t*) &c->request) + c->read_data_length,
+                                   sizeof(c->request) - c->read_data_length)) <= 0) {
+
+            if (r < 0 && (errno == EINTR || errno == EAGAIN))
+                return 0;
+
             pa_log_debug("read(): %s", r < 0 ? pa_cstrerror(errno) : "EOF");
             return -1;
         }
@@ -962,7 +962,10 @@ static int do_read(connection *c) {
 
         pa_assert(c->read_data && c->read_data_length < handler->data_length);
 
-        if ((r = pa_iochannel_read(c->io, (uint8_t*) c->read_data + c->read_data_length, handler->data_length - c->read_data_length)) <= 0) {
+        if ((r = pa_iochannel_read(c->io,
+                                   (uint8_t*) c->read_data + c->read_data_length,
+                                   handler->data_length - c->read_data_length)) <= 0) {
+
             if (r < 0 && (errno == EINTR || errno == EAGAIN))
                 return 0;
 

commit 4ebc6cf86ed9e0f5ddc7bc20ef1e5f5e98a16d43
Author: Colin Guthrie <pulse at colin.guthr.ie>
Date:   Sun Feb 22 16:08:43 2009 +0000

    Remove references to trademarked terms.
    
    According to http://www.apple.com/legal/trademark/appletmlist.html we could run into
    problems for using these terms without also displaying a corresponding disclaimer/attribution
    notice. This is difficult in the context of a headless server, so simply don't use such terms.
    
    In GUI apps which can enable this functionality we should use the relevant terminology, and
    display the appropriate attribution notices.

diff --git a/src/modules/module-raop-discover.c b/src/modules/module-raop-discover.c
index 3706d92..df39315 100644
--- a/src/modules/module-raop-discover.c
+++ b/src/modules/module-raop-discover.c
@@ -53,7 +53,7 @@
 #include "module-raop-discover-symdef.h"
 
 PA_MODULE_AUTHOR("Colin Guthrie");
-PA_MODULE_DESCRIPTION("mDNS/DNS-SD Service Discovery of Airtunes");
+PA_MODULE_DESCRIPTION("mDNS/DNS-SD Service Discovery of RAOP devices");
 PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_LOAD_ONCE(TRUE);
 
@@ -172,9 +172,9 @@ static void resolver_cb(
         }
 
         if (device)
-            dname = pa_sprintf_malloc("airtunes.%s.%s", host_name, device);
+            dname = pa_sprintf_malloc("raop.%s.%s", host_name, device);
         else
-            dname = pa_sprintf_malloc("airtunes.%s", host_name);
+            dname = pa_sprintf_malloc("raop.%s", host_name);
 
         if (!(vname = pa_namereg_make_valid_name(dname))) {
             pa_log("Cannot construct valid device name from '%s'.", dname);
diff --git a/src/modules/module-raop-sink.c b/src/modules/module-raop-sink.c
index 1784b2c..da338f5 100644
--- a/src/modules/module-raop-sink.c
+++ b/src/modules/module-raop-sink.c
@@ -67,7 +67,7 @@
 #include "raop_client.h"
 
 PA_MODULE_AUTHOR("Colin Guthrie");
-PA_MODULE_DESCRIPTION("RAOP Sink (Apple Airtunes)");
+PA_MODULE_DESCRIPTION("RAOP Sink");
 PA_MODULE_VERSION(PACKAGE_VERSION);
 PA_MODULE_LOAD_ONCE(FALSE);
 PA_MODULE_USAGE(
@@ -77,7 +77,7 @@ PA_MODULE_USAGE(
         "channels=<number of channels> "
         "rate=<sample rate>");
 
-#define DEFAULT_SINK_NAME "airtunes"
+#define DEFAULT_SINK_NAME "raop"
 
 struct userdata {
     pa_core *core;
@@ -564,7 +564,7 @@ int pa__init(pa_module*m) {
     pa_sink_new_data_set_name(&data, pa_modargs_get_value(ma, "sink_name", DEFAULT_SINK_NAME));
     pa_sink_new_data_set_sample_spec(&data, &ss);
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, server);
-    pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "Airtunes sink '%s'", server);
+    pa_proplist_setf(data.proplist, PA_PROP_DEVICE_DESCRIPTION, "RAOP sink '%s'", server);
 
     u->sink = pa_sink_new(m->core, &data, PA_SINK_LATENCY|PA_SINK_NETWORK);
     pa_sink_new_data_done(&data);

commit 2a0d2522e00d4402346d97e2f3b650de413c4fdb
Author: Colin Guthrie <pulse at colin.guthr.ie>
Date:   Sun Feb 22 16:36:16 2009 +0000

    Add the module dir to the libpulse pkgconfig file (needed for paprefs)

diff --git a/libpulse.pc.in b/libpulse.pc.in
index 161599e..c78b123 100644
--- a/libpulse.pc.in
+++ b/libpulse.pc.in
@@ -2,6 +2,7 @@ prefix=@prefix@
 exec_prefix=@exec_prefix@
 libdir=@libdir@
 includedir=@includedir@
+modlibexecdir=@modlibexecdir@
 
 Name: libpulse
 Description: PulseAudio Client Interface

commit 5cc9d970c83791f5b71b558c438587d5872449f0
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 22:54:28 2009 +0100

    add new function pa_alsa_get_driver_name_by_pcm()

diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 016e52a..274fef4 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1637,3 +1637,18 @@ char *pa_alsa_get_driver_name(int card) {
 
     return n;
 }
+
+char *pa_alsa_get_driver_name_by_pcm(snd_pcm_t *pcm) {
+    int card;
+
+    snd_pcm_info_t* info;
+    snd_pcm_info_alloca(&info);
+
+    if (snd_pcm_info(pcm, info) < 0)
+        return NULL;
+
+    if ((card = snd_pcm_info_get_card(info)) < 0)
+        return NULL;
+
+    return pa_alsa_get_driver_name(card);
+}
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 2d0f407..92f6797 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -133,4 +133,6 @@ int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas
 
 char *pa_alsa_get_driver_name(int card);
 
+char *pa_alsa_get_driver_name_by_pcm(snd_pcm_t *pcm);
+
 #endif

commit 557a90c487a5b681af6c01309fee89bd203b09c6
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 22:55:33 2009 +0100

     add new wrapper pa_alsa_safe_delay() around snd_pcm_delay()

diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 274fef4..9be8153 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1586,6 +1586,43 @@ snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa
     return n;
 }
 
+int pa_alsa_safe_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delay, size_t hwbuf_size, const pa_sample_spec *ss) {
+    ssize_t k;
+    size_t abs_k;
+    int r;
+
+    pa_assert(pcm);
+    pa_assert(delay);
+    pa_assert(hwbuf_size > 0);
+    pa_assert(ss);
+
+    /* Some ALSA driver expose weird bugs, let's inform the user about
+     * what is going on */
+
+    if ((r = snd_pcm_delay(pcm, delay)) < 0)
+        return r;
+
+    k = (ssize_t) *delay * (ssize_t) pa_frame_size(ss);
+
+    abs_k = k >= 0 ? (size_t) k : (size_t) -k;
+
+    if (abs_k >= hwbuf_size * 3 ||
+        abs_k >= pa_bytes_per_second(ss)*10)
+
+        PA_ONCE_BEGIN {
+            char *dn = pa_alsa_get_driver_name_by_pcm(pcm);
+            pa_log(_("snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%lu ms).\n"
+                     "Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."),
+                   (signed long) k,
+                   k < 0 ? "-" : "",
+                   (unsigned long) (pa_bytes_to_usec(abs_k, ss) / PA_USEC_PER_MSEC),
+                   pa_strnull(dn));
+            pa_xfree(dn);
+        } PA_ONCE_END;
+
+    return 0;
+}
+
 int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas, snd_pcm_uframes_t *offset, snd_pcm_uframes_t *frames, size_t hwbuf_size, const pa_sample_spec *ss) {
     int r;
     snd_pcm_uframes_t before;
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 92f6797..eddc41b 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -129,6 +129,7 @@ int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents);
 pa_rtpoll_item* pa_alsa_build_pollfd(snd_pcm_t *pcm, pa_rtpoll *rtpoll);
 
 snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa_sample_spec *ss);
+int pa_alsa_safe_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delay, size_t hwbuf_size, const pa_sample_spec *ss);
 int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas, snd_pcm_uframes_t *offset, snd_pcm_uframes_t *frames, size_t hwbuf_size, const pa_sample_spec *ss);
 
 char *pa_alsa_get_driver_name(int card);

commit 33601afbb11b6caba8c2f057839bd234e094175a
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 22:56:09 2009 +0100

    print driver name when we encounter driver bugs

diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index ef51f1d..6157549 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -306,9 +306,12 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
 
             if (polled)
                 PA_ONCE_BEGIN {
-                    pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
-                             "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
-                             "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
+                    char *dn = pa_alsa_get_driver_name_by_pcm(u->pcm_handle);
+                    pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+                             "Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+                             "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."),
+                           pa_strnull(dn));
+                    pa_xfree(dn);
                 } PA_ONCE_END;
 
 #ifdef DEBUG_TIMING
@@ -435,9 +438,12 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
 
             if (polled)
                 PA_ONCE_BEGIN {
-                    pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
-                             "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
-                             "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
+                    char *dn = pa_alsa_get_driver_name_by_pcm(u->pcm_handle);
+                    pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write!\n"
+                             "Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+                             "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."),
+                           pa_strnull(dn));
+                    pa_xfree(dn);
                 } PA_ONCE_END;
 
             break;
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index fbc21f7..b0b9d9f 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -289,9 +289,12 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
 
             if (polled)
                 PA_ONCE_BEGIN {
-                    pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
-                             "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
-                             "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
+                    char *dn = pa_alsa_get_driver_name_by_pcm(u->pcm_handle);
+                    pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+                             "Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+                             "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."),
+                           pa_strnull(dn));
+                    pa_xfree(dn);
                 } PA_ONCE_END;
 
 #ifdef DEBUG_TIMING
@@ -410,9 +413,12 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
 
             if (polled)
                 PA_ONCE_BEGIN {
-                    pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
-                             "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
-                             "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
+                    char *dn = pa_alsa_get_driver_name_by_pcm(u->pcm_handle);
+                    pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read!\n"
+                             "Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers.\n"
+                             "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail() returned 0 or another value < min_avail."),
+                           pa_strnull(dn));
+                    pa_xfree(dn);
                 } PA_ONCE_END;
 
             break;
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 9be8153..8eedeeb 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1578,9 +1578,13 @@ snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa
         k >= pa_bytes_per_second(ss)*10)
 
         PA_ONCE_BEGIN {
-            pa_log(_("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms). "
-                     "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
-                   (unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
+            char *dn = pa_alsa_get_driver_name_by_pcm(pcm);
+            pa_log(_("snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+                     "Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."),
+                   (unsigned long) k,
+                   (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC),
+                   pa_strnull(dn));
+            pa_xfree(dn);
         } PA_ONCE_END;
 
     return n;
@@ -1649,9 +1653,13 @@ int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas
         k >= pa_bytes_per_second(ss)*10)
 
         PA_ONCE_BEGIN {
-            pa_log(_("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms). "
-                     "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
-                   (unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
+            char *dn = pa_alsa_get_driver_name_by_pcm(pcm);
+            pa_log(_("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms).\n"
+                     "Most likely this is a bug in the ALSA driver '%s'. Please report this issue to the ALSA developers."),
+                   (unsigned long) k,
+                   (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC),
+                   pa_strnull(dn));
+            pa_xfree(dn);
         } PA_ONCE_END;
 
     return r;

commit 023ba8975be6e3a592ed0e7cd5723b8152dec4a6
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 22:56:34 2009 +0100

    use pa_alsa_safe_delay() where appropriate

diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 6157549..d4a54fe 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -522,7 +522,7 @@ static void update_smoother(struct userdata *u) {
 
     /* Let's update the time smoother */
 
-    if (PA_UNLIKELY((err = snd_pcm_delay(u->pcm_handle, &delay)) < 0)) {
+    if (PA_UNLIKELY((err = pa_alsa_safe_delay(u->pcm_handle, &delay, u->hwbuf_size, &u->sink->sample_spec)) < 0)) {
         pa_log_warn("Failed to query DSP status data: %s", snd_strerror(err));
         return;
     }
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index b0b9d9f..f2dad4c 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -492,7 +492,7 @@ static void update_smoother(struct userdata *u) {
 
     /* Let's update the time smoother */
 
-    if (PA_UNLIKELY((err = snd_pcm_delay(u->pcm_handle, &delay)) < 0)) {
+    if (PA_UNLIKELY((err = pa_alsa_safe_delay(u->pcm_handle, &delay, u->hwbuf_size, &u->source->sample_spec)) < 0)) {
         pa_log_warn("Failed to get delay: %s", snd_strerror(err));
         return;
     }

commit 5fa3f0c497363f84294c0faf9945481634415a3b
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 22:57:09 2009 +0100

    allow scache entries to have arbitrary names

diff --git a/src/pulsecore/namereg.c b/src/pulsecore/namereg.c
index 86bcef7..5ab3036 100644
--- a/src/pulsecore/namereg.c
+++ b/src/pulsecore/namereg.c
@@ -194,7 +194,11 @@ void* pa_namereg_get(pa_core *c, const char *name, pa_namereg_type_t type) {
 
     }
 
-    if (!name || *name == '@' || !pa_namereg_is_valid_name(name))
+    if (!name)
+        return NULL;
+
+    if ((type == PA_NAMEREG_SINK || type == PA_NAMEREG_SOURCE || type == PA_NAMEREG_CARD) &&
+        !pa_namereg_is_valid_name(name))
         return NULL;
 
     if ((e = pa_hashmap_get(c->namereg, name)))

commit 73c763cb0820bd9671a291c0a7469332ffe6a380
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 23:49:08 2009 +0100

    set esound.byte_order property

diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index e8659e6..3d90306 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -34,6 +34,7 @@
 #include <pulse/timeval.h>
 #include <pulse/utf8.h>
 #include <pulse/xmalloc.h>
+#include <pulse/proplist.h>
 
 #include <pulsecore/esound.h>
 #include <pulsecore/memblock.h>
@@ -372,6 +373,8 @@ static int esd_proto_connect(connection *c, esd_proto_t request, const void *dat
         return -1;
     }
 
+    pa_proplist_sets(c->client->proplist, "esound.byte_order", c->swap_byte_order ? "reverse" : "native");
+
     ok = 1;
     connection_write(c, &ok, sizeof(int));
     return 0;

commit 2e9479b1f32517aa1449d35aee135cb791b0f451
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 23:51:29 2009 +0100

    implement esd sample panning. closes #428

diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index 3d90306..ddecb8f 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -165,6 +165,7 @@ static int esd_proto_get_latency(connection *c, esd_proto_t request, const void
 static int esd_proto_server_info(connection *c, esd_proto_t request, const void *data, size_t length);
 static int esd_proto_all_info(connection *c, esd_proto_t request, const void *data, size_t length);
 static int esd_proto_stream_pan(connection *c, esd_proto_t request, const void *data, size_t length);
+static int esd_proto_sample_pan(connection *c, esd_proto_t request, const void *data, size_t length);
 static int esd_proto_sample_cache(connection *c, esd_proto_t request, const void *data, size_t length);
 static int esd_proto_sample_free_or_play(connection *c, esd_proto_t request, const void *data, size_t length);
 static int esd_proto_sample_get_id(connection *c, esd_proto_t request, const void *data, size_t length);
@@ -199,7 +200,7 @@ static struct proto_handler proto_map[ESD_PROTO_MAX] = {
     { (size_t) -1,                    NULL, "TODO: unsubscribe" },
 
     { 3 * sizeof(int),                esd_proto_stream_pan, "stream pan"},
-    { 3 * sizeof(int),                NULL, "sample pan" },
+    { 3 * sizeof(int),                esd_proto_sample_pan, "sample pan" },
 
     { sizeof(int),                    NULL, "standby mode" },
     { 0,                              esd_proto_get_latency, "get latency" }
@@ -685,9 +686,26 @@ static int esd_proto_all_info(connection *c, esd_proto_t request, const void *da
         for (ce = pa_idxset_first(c->protocol->core->scache, &idx); ce; ce = pa_idxset_next(c->protocol->core->scache, &idx)) {
             int32_t id, rate, lvolume, rvolume, format, len;
             char name[ESD_NAME_MAX];
+            pa_channel_map stereo = { .channels = 2, .map = { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT } };
+            pa_cvolume volume;
+            pa_sample_spec ss;
 
             pa_assert(t >= s*2);
 
+            if (ce->volume_is_set) {
+                volume = ce->volume;
+                pa_cvolume_remap(&volume, &ce->channel_map, &stereo);
+            } else
+                pa_cvolume_reset(&volume, 2);
+
+            if (ce->memchunk.memblock)
+                ss = ce->sample_spec;
+            else {
+                ss.format = PA_SAMPLE_S16NE;
+                ss.rate = 44100;
+                ss.channels = 2;
+            }
+
             /* id */
             id = PA_MAYBE_INT32_SWAP(c->swap_byte_order, (int) (ce->index+1));
             connection_write(c, &id, sizeof(int32_t));
@@ -701,19 +719,19 @@ static int esd_proto_all_info(connection *c, esd_proto_t request, const void *da
             connection_write(c, name, ESD_NAME_MAX);
 
             /* rate */
-            rate = PA_MAYBE_INT32_SWAP(c->swap_byte_order, (int32_t) ce->sample_spec.rate);
+            rate = PA_MAYBE_INT32_SWAP(c->swap_byte_order, (int32_t) ss.rate);
             connection_write(c, &rate, sizeof(int32_t));
 
             /* left */
-            lvolume = PA_MAYBE_INT32_SWAP(c->swap_byte_order, (int32_t) ((ce->volume.values[0]*ESD_VOLUME_BASE)/PA_VOLUME_NORM));
+            lvolume = PA_MAYBE_INT32_SWAP(c->swap_byte_order, (int32_t) ((volume.values[0]*ESD_VOLUME_BASE)/PA_VOLUME_NORM));
             connection_write(c, &lvolume, sizeof(int32_t));
 
             /*right*/
-            rvolume = PA_MAYBE_INT32_SWAP(c->swap_byte_order, (int32_t) ((ce->volume.values[0]*ESD_VOLUME_BASE)/PA_VOLUME_NORM));
+            rvolume = PA_MAYBE_INT32_SWAP(c->swap_byte_order, (int32_t) ((volume.values[1]*ESD_VOLUME_BASE)/PA_VOLUME_NORM));
             connection_write(c, &rvolume, sizeof(int32_t));
 
             /*format*/
-            format = PA_MAYBE_INT32_SWAP(c->swap_byte_order, format_native2esd(&ce->sample_spec));
+            format = PA_MAYBE_INT32_SWAP(c->swap_byte_order, format_native2esd(&ss));
             connection_write(c, &format, sizeof(int32_t));
 
             /*length*/
@@ -767,6 +785,46 @@ static int esd_proto_stream_pan(connection *c, esd_proto_t request, const void *
     return 0;
 }
 
+static int esd_proto_sample_pan(connection *c, esd_proto_t request, const void *data, size_t length) {
+    int32_t ok = 0;
+    uint32_t idx, lvolume, rvolume;
+    pa_cvolume volume;
+    pa_scache_entry *ce;
+
+    connection_assert_ref(c);
+    pa_assert(data);
+    pa_assert(length == sizeof(int32_t)*3);
+
+    memcpy(&idx, data, sizeof(uint32_t));
+    idx = PA_MAYBE_UINT32_SWAP(c->swap_byte_order, idx) - 1;
+    data = (const char*)data + sizeof(uint32_t);
+
+    memcpy(&lvolume, data, sizeof(uint32_t));
+    lvolume = PA_MAYBE_UINT32_SWAP(c->swap_byte_order, lvolume);
+    data = (const char*)data + sizeof(uint32_t);
+
+    memcpy(&rvolume, data, sizeof(uint32_t));
+    rvolume = PA_MAYBE_UINT32_SWAP(c->swap_byte_order, rvolume);
+    data = (const char*)data + sizeof(uint32_t);
+
+    volume.values[0] = (lvolume*PA_VOLUME_NORM)/ESD_VOLUME_BASE;
+    volume.values[1] = (rvolume*PA_VOLUME_NORM)/ESD_VOLUME_BASE;
+    volume.channels = 2;
+
+    if ((ce = pa_idxset_get_by_index(c->protocol->core->scache, idx))) {
+        pa_channel_map stereo = { .channels = 2, .map = { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT } };
+
+        pa_cvolume_remap(&volume, &stereo, &ce->channel_map);
+        ce->volume = volume;
+        ce->volume_is_set = TRUE;
+        ok = 1;
+    }
+
+    connection_write(c, &ok, sizeof(int32_t));
+
+    return 0;
+}
+
 static int esd_proto_sample_cache(connection *c, esd_proto_t request, const void *data, size_t length) {
     pa_sample_spec ss;
     int32_t format, rate, sc_length;

commit 385a560c823c022c9755915e857f079c217f8ee9
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 23:51:53 2009 +0100

    complete esd suspend/resume implementation

diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index ddecb8f..0e3f564 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -170,6 +170,7 @@ static int esd_proto_sample_cache(connection *c, esd_proto_t request, const void
 static int esd_proto_sample_free_or_play(connection *c, esd_proto_t request, const void *data, size_t length);
 static int esd_proto_sample_get_id(connection *c, esd_proto_t request, const void *data, size_t length);
 static int esd_proto_standby_or_resume(connection *c, esd_proto_t request, const void *data, size_t length);
+static int esd_proto_standby_mode(connection *c, esd_proto_t request, const void *data, size_t length);
 
 /* the big map of protocol handler info */
 static struct proto_handler proto_map[ESD_PROTO_MAX] = {
@@ -188,8 +189,8 @@ static struct proto_handler proto_map[ESD_PROTO_MAX] = {
     { sizeof(int),                    NULL, "sample stop" },
     { (size_t) -1,                    NULL, "TODO: sample kill" },
 
-    { ESD_KEY_LEN + sizeof(int),      esd_proto_standby_or_resume, "standby" },  /* NOOP! */
-    { ESD_KEY_LEN + sizeof(int),      esd_proto_standby_or_resume, "resume" },   /* NOOP! */         /* 13 */
+    { ESD_KEY_LEN + sizeof(int),      esd_proto_standby_or_resume, "standby" },
+    { ESD_KEY_LEN + sizeof(int),      esd_proto_standby_or_resume, "resume" },                       /* 13 */
 
     { ESD_NAME_MAX,                   esd_proto_sample_get_id, "sample getid" },                     /* 14 */
     { ESD_NAME_MAX + 2 * sizeof(int), NULL, "stream filter" },
@@ -202,7 +203,7 @@ static struct proto_handler proto_map[ESD_PROTO_MAX] = {
     { 3 * sizeof(int),                esd_proto_stream_pan, "stream pan"},
     { 3 * sizeof(int),                esd_proto_sample_pan, "sample pan" },
 
-    { sizeof(int),                    NULL, "standby mode" },
+    { sizeof(int),                    esd_proto_standby_mode, "standby mode" },
     { 0,                              esd_proto_get_latency, "get latency" }
 };
 
@@ -935,19 +936,47 @@ static int esd_proto_sample_free_or_play(connection *c, esd_proto_t request, con
 }
 
 static int esd_proto_standby_or_resume(connection *c, esd_proto_t request, const void *data, size_t length) {
-    int32_t ok;
+    int32_t ok = 1;
 
     connection_assert_ref(c);
 
     connection_write_prepare(c, sizeof(int32_t) * 2);
-
-    ok = 1;
     connection_write(c, &ok, sizeof(int32_t));
+
+    if (request == ESD_PROTO_STANDBY)
+        ok = pa_sink_suspend_all(c->protocol->core, TRUE) >= 0;
+    else {
+        pa_assert(request == ESD_PROTO_RESUME);
+        ok = pa_sink_suspend_all(c->protocol->core, FALSE) >= 0;
+    }
+
     connection_write(c, &ok, sizeof(int32_t));
 
     return 0;
 }
 
+static int esd_proto_standby_mode(connection *c, esd_proto_t request, const void *data, size_t length) {
+    int32_t mode;
+    pa_sink *sink, *source;
+
+    connection_assert_ref(c);
+
+    mode = ESM_RUNNING;
+
+    if ((sink = pa_namereg_get(c->protocol->core, c->options->default_sink, PA_NAMEREG_SINK)))
+        if (pa_sink_get_state(sink) == PA_SINK_SUSPENDED)
+            mode = ESM_ON_STANDBY;
+
+    if ((source = pa_namereg_get(c->protocol->core, c->options->default_source, PA_NAMEREG_SOURCE)))
+        if (pa_source_get_state(source) == PA_SOURCE_SUSPENDED)
+            mode = ESM_ON_STANDBY;
+
+    mode = PA_MAYBE_INT32_SWAP(c->swap_byte_order, mode);
+
+    connection_write(c, &mode, sizeof(mode));
+    return 0;
+}
+
 /*** client callbacks ***/
 
 static void client_kill_cb(pa_client *c) {

commit e0b550710a6d8f5af5209d319de3694243f87b8f
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 23:55:05 2009 +0100

    it's probably more appropriate to return the configured latency instead of the actual latency

diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index 0e3f564..7101aae 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -569,7 +569,7 @@ static int esd_proto_get_latency(connection *c, esd_proto_t request, const void
     if (!(sink = pa_namereg_get(c->protocol->core, c->options->default_sink, PA_NAMEREG_SINK)))
         latency = 0;
     else {
-        double usec = (double) pa_sink_get_latency(sink);
+        double usec = (double) pa_sink_get_requested_latency(sink);
         latency = (int) ((usec*44100)/1000000);
     }
 

commit 998aa40875472c41b74fcecb0eb40c31b690cba7
Author: Lennart Poettering <lennart at poettering.net>
Date:   Mon Feb 23 23:55:16 2009 +0100

    fix handling of stereo

diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index 7101aae..2d4e62f 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -640,7 +640,7 @@ static int esd_proto_all_info(connection *c, esd_proto_t request, const void *da
             pa_cvolume volume = *pa_sink_input_get_volume(conn->sink_input);
             rate = (int32_t) conn->sink_input->sample_spec.rate;
             lvolume = (int32_t) ((volume.values[0]*ESD_VOLUME_BASE)/PA_VOLUME_NORM);
-            rvolume = (int32_t) ((volume.values[1]*ESD_VOLUME_BASE)/PA_VOLUME_NORM);
+            rvolume = (int32_t) ((volume.values[volume.channels == 2 ? 1 : 0]*ESD_VOLUME_BASE)/PA_VOLUME_NORM);
             format = format_native2esd(&conn->sink_input->sample_spec);
         }
 
@@ -775,7 +775,8 @@ static int esd_proto_stream_pan(connection *c, esd_proto_t request, const void *
         pa_cvolume volume;
         volume.values[0] = (lvolume*PA_VOLUME_NORM)/ESD_VOLUME_BASE;
         volume.values[1] = (rvolume*PA_VOLUME_NORM)/ESD_VOLUME_BASE;
-        volume.channels = 2;
+        volume.channels = conn->sink_input->sample_spec.channels;
+
         pa_sink_input_set_volume(conn->sink_input, &volume, TRUE);
         ok = 1;
     } else

commit 1ddf64a4816b0f43ef6d73f877728166f4f3ba25
Author: Kelemen Gábor <gabor at shaihulud.(none)>
Date:   Sat Feb 21 21:01:31 2009 +0100

    Make pulseaudio.desktop and org.pulseaudio.policy translatable.

diff --git a/src/daemon/org.pulseaudio.policy.in b/src/daemon/org.pulseaudio.policy.in
new file mode 100644
index 0000000..1d0b6a7
--- /dev/null
+++ b/src/daemon/org.pulseaudio.policy.in
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?><!--*-nxml-*-->
+<!DOCTYPE policyconfig PUBLIC
+ "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
+
+<!--
+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 Lesser General
+Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public
+License along with PulseAudio; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+USA.
+-->
+
+<policyconfig>
+  <vendor>The PulseAudio Project</vendor>
+  <vendor_url>http://pulseaudio.org/</vendor_url>
+  <icon_name>audio-card</icon_name>
+
+  <action id="org.pulseaudio.acquire-real-time">
+    <_description>Real-time scheduling for the PulseAudio daemon</_description>
+    <_message>System policy prevents PulseAudio from acquiring real-time scheduling.</_message>
+    <defaults>
+      <allow_any>no</allow_any>
+      <allow_inactive>no</allow_inactive>
+      <allow_active>no</allow_active>
+    </defaults>
+  </action>
+
+  <action id="org.pulseaudio.acquire-high-priority">
+    <_description>High-priority scheduling (negative Unix nice level) for the PulseAudio daemon</_description>
+    <_message>System policy prevents PulseAudio from acquiring high-priority scheduling.</_message>
+    <defaults>
+      <allow_any>no</allow_any>
+      <allow_inactive>no</allow_inactive>
+      <allow_active>no</allow_active>
+    </defaults>
+  </action>
+
+</policyconfig>
diff --git a/src/daemon/pulseaudio.desktop.in b/src/daemon/pulseaudio.desktop.in
new file mode 100644
index 0000000..99bdbd0
--- /dev/null
+++ b/src/daemon/pulseaudio.desktop.in
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Version=1.0
+Encoding=UTF-8
+_Name=PulseAudio Sound System
+_Comment=Start the PulseAudio Sound System
+Exec=start-pulseaudio-x11
+Terminal=false
+Type=Application
+Categories=
+GenericName=

commit 9372733c9864836d118abe92f9136614ccc7f449
Author: Kelemen Gábor <gabor at shaihulud.(none)>
Date:   Sat Feb 21 21:14:56 2009 +0100

    Make .desktop and .policy file in src/daemon translatable

diff --git a/po/POTFILES.in b/po/POTFILES.in
index 324b946..0d5b42f 100644
--- a/po/POTFILES.in
+++ b/po/POTFILES.in
@@ -155,6 +155,8 @@ src/daemon/cmdline.c
 src/daemon/dumpmodules.c
 src/daemon/daemon-conf.c
 src/daemon/caps.c
+src/daemon/pulseaudio.desktop.in
+src/daemon/org.pulseaudio.policy.in
 src/pulse/channelmap.c
 src/pulse/error.c
 src/pulse/proplist.c
diff --git a/src/Makefile.am b/src/Makefile.am
index 46c3d2e..4b467f8 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -105,9 +105,9 @@ EXTRA_DIST = \
 		daemon/start-pulseaudio-x11.in \
 		utils/padsp \
 		modules/module-defs.h.m4 \
-		daemon/pulseaudio.desktop \
+		daemon/pulseaudio.desktop.in \
 		map-file \
-		daemon/org.pulseaudio.policy
+		daemon/org.pulseaudio.policy.in
 
 pulseconf_DATA = \
 		default.pa \
@@ -116,9 +116,12 @@ pulseconf_DATA = \
 		client.conf
 
 if HAVE_X11
-xdgautostart_DATA = \
-		daemon/pulseaudio.desktop
+xdgautostart_in_files = \
+		daemon/pulseaudio.desktop.in
 endif
+xdgautostart_DATA = $(xdgautostart_in_files:.desktop.in=.desktop)
+ at INTLTOOL_DESKTOP_RULE@
+
 
 BUILT_SOURCES = \
 		pulse/version.h
@@ -156,7 +159,9 @@ pulseaudio_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) -dlopen force $(foreach f,$(PRE
 endif
 
 if HAVE_POLKIT
-policy_DATA = daemon/org.pulseaudio.policy
+policy_in_files = daemon/org.pulseaudio.policy.in
+policy_DATA = $(policy_in_files:.policy.in=.policy)
+ at INTLTOOL_POLICY_RULE@
 
 pulseaudio_SOURCES += daemon/polkit.c daemon/polkit.h
 pulseaudio_CFLAGS += $(POLKIT_CFLAGS)
@@ -1543,7 +1548,7 @@ suid: pulseaudio .libs/lt-pulseaudio
 	chown root $^
 	chmod u+s $^
 
-CLEANFILES = esdcompat client.conf default.pa system.pa daemon.conf start-pulseaudio-x11
+CLEANFILES = esdcompat client.conf default.pa system.pa daemon.conf start-pulseaudio-x11 daemon/pulseaudio.desktop daemon/org.pulseaudio.policy
 
 esdcompat: daemon/esdcompat.in Makefile
 	sed -e 's, at PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \
diff --git a/src/daemon/org.pulseaudio.policy b/src/daemon/org.pulseaudio.policy
deleted file mode 100644
index 6cdeec6..0000000
--- a/src/daemon/org.pulseaudio.policy
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><!--*-nxml-*-->
-<!DOCTYPE policyconfig PUBLIC
- "-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
- "http://www.freedesktop.org/standards/PolicyKit/1.0/policyconfig.dtd">
-
-<!--
-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 Lesser General
-Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with PulseAudio; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
-USA.
--->
-
-<policyconfig>
-  <vendor>The PulseAudio Project</vendor>
-  <vendor_url>http://pulseaudio.org/</vendor_url>
-  <icon_name>audio-card</icon_name>
-
-  <action id="org.pulseaudio.acquire-real-time">
-    <description>Real-time scheduling for the PulseAudio daemon</description>
-    <message>System policy prevents PulseAudio from acquiring real-time scheduling.</message>
-    <defaults>
-      <allow_any>no</allow_any>
-      <allow_inactive>no</allow_inactive>
-      <allow_active>no</allow_active>
-    </defaults>
-  </action>
-
-  <action id="org.pulseaudio.acquire-high-priority">
-    <description>High-priority scheduling (negative Unix nice level) for the PulseAudio daemon</description>
-    <message>System policy prevents PulseAudio from acquiring high-priority scheduling.</message>
-    <defaults>
-      <allow_any>no</allow_any>
-      <allow_inactive>no</allow_inactive>
-      <allow_active>no</allow_active>
-    </defaults>
-  </action>
-
-</policyconfig>
diff --git a/src/daemon/pulseaudio.desktop b/src/daemon/pulseaudio.desktop
deleted file mode 100644
index 57a7a6e..0000000
--- a/src/daemon/pulseaudio.desktop
+++ /dev/null
@@ -1,10 +0,0 @@
-[Desktop Entry]
-Version=1.0
-Encoding=UTF-8
-Name=PulseAudio Sound System
-Comment=Start the PulseAudio Sound System
-Exec=start-pulseaudio-x11
-Terminal=false
-Type=Application
-Categories=
-GenericName=

commit c73887d2295c02b284ddc9650174eb56582675a8
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 00:24:31 2009 +0100

    update gitignore

diff --git a/po/.gitignore b/po/.gitignore
index 2691982..9a0243a 100644
--- a/po/.gitignore
+++ b/po/.gitignore
@@ -1,3 +1,4 @@
+.intltool-merge-cache
 Makefile.in.in
 Makevars.template
 POTFILES
diff --git a/src/.gitignore b/src/.gitignore
index 4da445b..80d33d3 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -1,3 +1,4 @@
+alsa-time-test
 gtk-test
 prioq-test
 lock-autospawn-test
diff --git a/src/daemon/.gitignore b/src/daemon/.gitignore
new file mode 100644
index 0000000..0efa55b
--- /dev/null
+++ b/src/daemon/.gitignore
@@ -0,0 +1,2 @@
+org.pulseaudio.policy
+pulseaudio.desktop

commit fb49399a0cf8c6e42f4c3f25dbe4753add4251f8
Merge: c73887d... 2a0d252...
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 00:26:07 2009 +0100

    Merge commit 'coling/master'


commit 9eb50701b6a6e8e5b74236bc954e94097eb7e680
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 01:44:46 2009 +0100

    introduce new well-known role 'a11y'

diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h
index 7a58568..d30dc3b 100644
--- a/src/pulse/proplist.h
+++ b/src/pulse/proplist.h
@@ -51,7 +51,7 @@ PA_C_DECL_BEGIN
 /** For streams: an XDG icon name for the media. e.g. "audio-x-mp3" */
 #define PA_PROP_MEDIA_ICON_NAME                "media.icon_name"
 
-/** For streams: logic role of this media. One of the strings "video", "music", "game", "event", "phone", "animation", "production" */
+/** For streams: logic role of this media. One of the strings "video", "music", "game", "event", "phone", "animation", "production", "a11y" */
 #define PA_PROP_MEDIA_ROLE                     "media.role"
 
 /** For event sound streams: XDG event sound name. e.g. "message-new-email" (Event sound streams are those with media.role set to "event") */

commit ec9f8f10f358ededa1dec0e3f7f57669fce58547
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 06:06:04 2009 +0100

    if ALSA gives us nonsensical data at least try to fix it up a little

diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 8eedeeb..30d57e0 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1574,8 +1574,8 @@ snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa
 
     k = (size_t) n * pa_frame_size(ss);
 
-    if (k >= hwbuf_size * 3 ||
-        k >= pa_bytes_per_second(ss)*10)
+    if (k >= hwbuf_size * 5 ||
+        k >= pa_bytes_per_second(ss)*10) {
 
         PA_ONCE_BEGIN {
             char *dn = pa_alsa_get_driver_name_by_pcm(pcm);
@@ -1587,6 +1587,10 @@ snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa
             pa_xfree(dn);
         } PA_ONCE_END;
 
+        /* Mhmm, let's try not to fail completely */
+        n = (snd_pcm_sframes_t) (hwbuf_size / pa_frame_size(ss));
+    }
+
     return n;
 }
 
@@ -1610,8 +1614,8 @@ int pa_alsa_safe_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delay, size_t hwbuf_si
 
     abs_k = k >= 0 ? (size_t) k : (size_t) -k;
 
-    if (abs_k >= hwbuf_size * 3 ||
-        abs_k >= pa_bytes_per_second(ss)*10)
+    if (abs_k >= hwbuf_size * 5 ||
+        abs_k >= pa_bytes_per_second(ss)*10) {
 
         PA_ONCE_BEGIN {
             char *dn = pa_alsa_get_driver_name_by_pcm(pcm);
@@ -1624,6 +1628,13 @@ int pa_alsa_safe_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delay, size_t hwbuf_si
             pa_xfree(dn);
         } PA_ONCE_END;
 
+        /* Mhmm, let's try not to fail completely */
+        if (k < 0)
+            *delay = -(snd_pcm_sframes_t) (hwbuf_size / pa_frame_size(ss));
+        else
+            *delay = (snd_pcm_sframes_t) (hwbuf_size / pa_frame_size(ss));
+    }
+
     return 0;
 }
 

commit 3c73025bf52bf7e652f6f8e7ff59b6e10790bdfc
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 06:11:42 2009 +0100

    in case alsa lies to use don't spin forever

diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index d4a54fe..0a1ebb1 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -255,6 +255,7 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
     pa_bool_t work_done = TRUE;
     pa_usec_t max_sleep_usec = 0, process_usec = 0;
     size_t left_to_play;
+    unsigned j = 0;
 
     pa_assert(u);
     pa_sink_assert_ref(u->sink);
@@ -320,6 +321,15 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
             break;
         }
 
+
+        if (++j > 10) {
+#ifdef DEBUG_TIMING
+            pa_log_debug("Not filling up, because already too many iterations.");
+#endif
+
+            break;
+        }
+
         n_bytes -= u->hwbuf_unused;
         polled = FALSE;
 
@@ -399,6 +409,7 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
     pa_bool_t work_done = FALSE;
     pa_usec_t max_sleep_usec = 0, process_usec = 0;
     size_t left_to_play;
+    unsigned j = 0;
 
     pa_assert(u);
     pa_sink_assert_ref(u->sink);
@@ -449,6 +460,14 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
             break;
         }
 
+        if (++j > 10) {
+#ifdef DEBUG_TIMING
+            pa_log_debug("Not filling up, because already too many iterations.");
+#endif
+
+            break;
+        }
+
         n_bytes -= u->hwbuf_unused;
         polled = FALSE;
 
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index f2dad4c..ad9a7f2 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -248,6 +248,7 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
     pa_bool_t work_done = FALSE;
     pa_usec_t max_sleep_usec = 0, process_usec = 0;
     size_t left_to_record;
+    unsigned j = 0;
 
     pa_assert(u);
     pa_source_assert_ref(u->source);
@@ -303,6 +304,14 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
             break;
         }
 
+        if (++j > 10) {
+#ifdef DEBUG_TIMING
+            pa_log_debug("Not filling up, because already too many iterations.");
+#endif
+
+            break;
+        }
+
         polled = FALSE;
 
 #ifdef DEBUG_TIMING
@@ -381,6 +390,7 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
     int work_done = FALSE;
     pa_usec_t max_sleep_usec = 0, process_usec = 0;
     size_t left_to_record;
+    unsigned j = 0;
 
     pa_assert(u);
     pa_source_assert_ref(u->source);
@@ -424,6 +434,14 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
             break;
         }
 
+        if (++j > 10) {
+#ifdef DEBUG_TIMING
+            pa_log_debug("Not filling up, because already too many iterations.");
+#endif
+
+            break;
+        }
+
         polled = FALSE;
 
         for (;;) {

commit c341010304064c9a6ae13fab15c7fa7883acaeeb
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 06:13:39 2009 +0100

    implement device reservation scheme

diff --git a/src/Makefile.am b/src/Makefile.am
index 4b467f8..1fc8735 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1309,10 +1309,16 @@ libalsa_util_la_CFLAGS = $(AM_CFLAGS) $(ASOUNDLIB_CFLAGS)
 
 if HAVE_HAL
 libalsa_util_la_SOURCES += modules/hal-util.h modules/hal-util.c
-libalsa_util_la_LIBADD += $(HAL_LIBS) libdbus-util.la
+libalsa_util_la_LIBADD += $(HAL_LIBS)
 libalsa_util_la_CFLAGS += $(HAL_CFLAGS)
 endif
 
+if HAVE_DBUS
+libalsa_util_la_SOURCES += modules/reserve.h modules/reserve.c modules/reserve-wrap.c modules/reserve-wrap.h
+libalsa_util_la_LIBADD += $(DBUS_LIBS)
+libalsa_util_la_CFLAGS += $(DBUS_CFLAGS)
+endif
+
 module_alsa_sink_la_SOURCES = modules/alsa/module-alsa-sink.c
 module_alsa_sink_la_LDFLAGS = $(MODULE_LDFLAGS)
 module_alsa_sink_la_LIBADD = $(AM_LIBADD) $(ASOUNDLIB_LIBS) libalsa-util.la libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
@@ -1614,6 +1620,11 @@ update-sbc:
 		wget -O modules/bluetooth/$$i http://git.kernel.org/\?p=bluetooth/bluez.git\;a=blob_plain\;f=audio/$$i ; \
 	done
 
+update-reserve:
+	for i in reserve.c reserve.h ; do \
+		wget -O modules/$$i http://git.0pointer.de/\?p=reserve.git\;a=blob_plain\;f=$$i\;hb=master ; \
+	done
+
 # Automatically generate linker version script. We use the same one for all public .sos
 update-map-file:
 	( echo "PULSE_0 {" ; \
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 0a1ebb1..83fc9e1 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -53,6 +53,8 @@
 #include <pulsecore/rtclock.h>
 #include <pulsecore/time-smoother.h>
 
+#include <modules/reserve-wrap.h>
+
 #include "alsa-util.h"
 #include "alsa-sink.h"
 
@@ -101,10 +103,62 @@ struct userdata {
     pa_smoother *smoother;
     uint64_t write_count;
     uint64_t since_start;
+
+    pa_reserve_wrapper *reserve;
+    pa_hook_slot *reserve_slot;
 };
 
 static void userdata_free(struct userdata *u);
 
+static pa_hook_result_t reserve_cb(pa_reserve_wrapper *r, void *forced, struct userdata *u) {
+    pa_assert(r);
+    pa_assert(u);
+
+    if (pa_sink_suspend(u->sink, TRUE) < 0)
+        return PA_HOOK_CANCEL;
+
+    return PA_HOOK_OK;
+}
+
+static void reserve_done(struct userdata *u) {
+    pa_assert(u);
+
+    if (u->reserve_slot) {
+        pa_hook_slot_free(u->reserve_slot);
+        u->reserve_slot = NULL;
+    }
+
+    if (u->reserve) {
+        pa_reserve_wrapper_unref(u->reserve);
+        u->reserve = NULL;
+    }
+}
+
+static int reserve_init(struct userdata *u, const char *dname) {
+    char *rname;
+
+    pa_assert(u);
+    pa_assert(dname);
+
+    if (u->reserve)
+        return 0;
+
+    /* We are resuming, try to lock the device */
+    if (!(rname = pa_alsa_get_reserve_name(dname)))
+        return 0;
+
+    u->reserve = pa_reserve_wrapper_get(u->core, rname);
+    pa_xfree(rname);
+
+    if (!(u->reserve))
+        return -1;
+
+    pa_assert(!u->reserve_slot);
+    u->reserve_slot = pa_hook_connect(pa_reserve_wrapper_hook(u->reserve), PA_HOOK_NORMAL, (pa_hook_cb_t) reserve_cb, u);
+
+    return 0;
+}
+
 static void fix_min_sleep_wakeup(struct userdata *u) {
     size_t max_use, max_use_2;
 
@@ -601,6 +655,7 @@ static int build_pollfd(struct userdata *u) {
     return 0;
 }
 
+/* Called from IO context */
 static int suspend(struct userdata *u) {
     pa_assert(u);
     pa_assert(u->pcm_handle);
@@ -622,6 +677,7 @@ static int suspend(struct userdata *u) {
     return 0;
 }
 
+/* Called from IO context */
 static int update_sw_params(struct userdata *u) {
     snd_pcm_uframes_t avail_min;
     int err;
@@ -677,6 +733,7 @@ static int update_sw_params(struct userdata *u) {
     return 0;
 }
 
+/* Called from IO context */
 static int unsuspend(struct userdata *u) {
     pa_sample_spec ss;
     int err;
@@ -749,6 +806,7 @@ fail:
     return -1;
 }
 
+/* Called from IO context */
 static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offset, pa_memchunk *chunk) {
     struct userdata *u = PA_SINK(o)->userdata;
 
@@ -804,6 +862,25 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
     return pa_sink_process_msg(o, code, data, offset, chunk);
 }
 
+/* Called from main context */
+static int sink_set_state_cb(pa_sink *s, pa_sink_state_t new_state) {
+    pa_sink_state_t old_state;
+    struct userdata *u;
+
+    pa_sink_assert_ref(s);
+    pa_assert_se(u = s->userdata);
+
+    old_state = pa_sink_get_state(u->sink);
+
+    if (PA_SINK_IS_OPENED(old_state) && new_state == PA_SINK_SUSPENDED)
+        reserve_done(u);
+    else if (old_state == PA_SINK_SUSPENDED && PA_SINK_IS_OPENED(new_state))
+        if (reserve_init(u, u->device_name) < 0)
+            return -1;
+
+    return 0;
+}
+
 static int mixer_callback(snd_mixer_elem_t *elem, unsigned int mask) {
     struct userdata *u = snd_mixer_elem_get_callback_private(elem);
 
@@ -1468,6 +1545,11 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
     pa_smoother_set_time_offset(u->smoother, usec);
     pa_smoother_pause(u->smoother, usec);
 
+    if (reserve_init(u, pa_modargs_get_value(
+                             ma, "device_id",
+                             pa_modargs_get_value(ma, "device", DEFAULT_DEVICE))) < 0)
+        goto fail;
+
     b = use_mmap;
     d = use_tsched;
 
@@ -1569,6 +1651,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
 
     u->sink->parent.process_msg = sink_process_msg;
     u->sink->update_requested_latency = sink_update_requested_latency_cb;
+    u->sink->set_state = sink_set_state_cb;
     u->sink->userdata = u;
 
     pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
@@ -1681,6 +1764,8 @@ static void userdata_free(struct userdata *u) {
     if (u->smoother)
         pa_smoother_free(u->smoother);
 
+    reserve_done(u);
+
     pa_xfree(u->device_name);
     pa_xfree(u);
 }
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index ad9a7f2..2f0e94c 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -54,6 +54,8 @@
 #include <pulsecore/time-smoother.h>
 #include <pulsecore/rtclock.h>
 
+#include <modules/reserve-wrap.h>
+
 #include "alsa-util.h"
 #include "alsa-source.h"
 
@@ -99,10 +101,62 @@ struct userdata {
 
     pa_smoother *smoother;
     uint64_t read_count;
+
+    pa_reserve_wrapper *reserve;
+    pa_hook_slot *reserve_slot;
 };
 
 static void userdata_free(struct userdata *u);
 
+static pa_hook_result_t reserve_cb(pa_reserve_wrapper *r, void *forced, struct userdata *u) {
+    pa_assert(r);
+    pa_assert(u);
+
+    if (pa_source_suspend(u->source, TRUE) < 0)
+        return PA_HOOK_CANCEL;
+
+    return PA_HOOK_OK;
+}
+
+static void reserve_done(struct userdata *u) {
+    pa_assert(u);
+
+    if (u->reserve_slot) {
+        pa_hook_slot_free(u->reserve_slot);
+        u->reserve_slot = NULL;
+    }
+
+    if (u->reserve) {
+        pa_reserve_wrapper_unref(u->reserve);
+        u->reserve = NULL;
+    }
+}
+
+static int reserve_init(struct userdata *u, const char *dname) {
+    char *rname;
+
+    pa_assert(u);
+    pa_assert(dname);
+
+    if (u->reserve)
+        return 0;
+
+    /* We are resuming, try to lock the device */
+    if (!(rname = pa_alsa_get_reserve_name(dname)))
+        return 0;
+
+    u->reserve = pa_reserve_wrapper_get(u->core, rname);
+    pa_xfree(rname);
+
+    if (!(u->reserve))
+        return -1;
+
+    pa_assert(!u->reserve_slot);
+    u->reserve_slot = pa_hook_connect(pa_reserve_wrapper_hook(u->reserve), PA_HOOK_NORMAL, (pa_hook_cb_t) reserve_cb, u);
+
+    return 0;
+}
+
 static void fix_min_sleep_wakeup(struct userdata *u) {
     size_t max_use, max_use_2;
     pa_assert(u);
@@ -765,6 +819,25 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
     return pa_source_process_msg(o, code, data, offset, chunk);
 }
 
+/* Called from main context */
+static int source_set_state_cb(pa_source *s, pa_source_state_t new_state) {
+    pa_source_state_t old_state;
+    struct userdata *u;
+
+    pa_source_assert_ref(s);
+    pa_assert_se(u = s->userdata);
+
+    old_state = pa_source_get_state(u->source);
+
+    if (PA_SINK_IS_OPENED(old_state) && new_state == PA_SINK_SUSPENDED)
+        reserve_done(u);
+    else if (old_state == PA_SINK_SUSPENDED && PA_SINK_IS_OPENED(new_state))
+        if (reserve_init(u, u->device_name) < 0)
+            return -1;
+
+    return 0;
+}
+
 static int mixer_callback(snd_mixer_elem_t *elem, unsigned int mask) {
     struct userdata *u = snd_mixer_elem_get_callback_private(elem);
 
@@ -1316,6 +1389,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
     u->smoother = pa_smoother_new(DEFAULT_TSCHED_WATERMARK_USEC*2, DEFAULT_TSCHED_WATERMARK_USEC*2, TRUE, 5);
     pa_smoother_set_time_offset(u->smoother, pa_rtclock_usec());
 
+    if (reserve_init(u, pa_modargs_get_value(
+                             ma, "device_id",
+                             pa_modargs_get_value(ma, "device", DEFAULT_DEVICE))) < 0)
+        goto fail;
+
     b = use_mmap;
     d = use_tsched;
 
@@ -1414,6 +1492,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
 
     u->source->parent.process_msg = source_process_msg;
     u->source->update_requested_latency = source_update_requested_latency_cb;
+    u->source->set_state = source_set_state_cb;
     u->source->userdata = u;
 
     pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
@@ -1519,6 +1598,8 @@ static void userdata_free(struct userdata *u) {
     if (u->smoother)
         pa_smoother_free(u->smoother);
 
+    reserve_done(u);
+
     pa_xfree(u->device_name);
     pa_xfree(u);
 }
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 30d57e0..ec20d1d 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1708,3 +1708,24 @@ char *pa_alsa_get_driver_name_by_pcm(snd_pcm_t *pcm) {
 
     return pa_alsa_get_driver_name(card);
 }
+
+char *pa_alsa_get_reserve_name(const char *device) {
+    const char *t;
+    int i;
+
+    pa_assert(device);
+
+    if ((t = strchr(device, ':')))
+        device = t+1;
+
+    if ((i = snd_card_get_index(device)) < 0) {
+        int32_t k;
+
+        if (pa_atoi(device, &k) < 0)
+            return NULL;
+
+        i = (int) k;
+    }
+
+    return pa_sprintf_malloc("Audio%i", i);
+}
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index eddc41b..899532e 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -136,4 +136,6 @@ char *pa_alsa_get_driver_name(int card);
 
 char *pa_alsa_get_driver_name_by_pcm(snd_pcm_t *pcm);
 
+char *pa_alsa_get_reserve_name(const char *device);
+
 #endif
diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c
index c949435..52e64ea 100644
--- a/src/modules/alsa/module-alsa-card.c
+++ b/src/modules/alsa/module-alsa-card.c
@@ -30,6 +30,8 @@
 #include <pulsecore/modargs.h>
 #include <pulsecore/queue.h>
 
+#include <modules/reserve-wrap.h>
+
 #include "alsa-util.h"
 #include "alsa-sink.h"
 #include "alsa-source.h"
@@ -273,11 +275,13 @@ static void set_card_name(pa_card_new_data *data, pa_modargs *ma, const char *de
     pa_xfree(t);
 }
 
-int pa__init(pa_module*m) {
+int pa__init(pa_module *m) {
     pa_card_new_data data;
     pa_modargs *ma;
     int alsa_card_index;
     struct userdata *u;
+    char rname[32];
+    pa_reserve_wrapper *reserve = NULL;
 
     pa_alsa_redirect_errors_inc();
     snd_config_update_free_global();
@@ -303,6 +307,11 @@ int pa__init(pa_module*m) {
         goto fail;
     }
 
+    pa_snprintf(rname, sizeof(rname), "Audio%i", alsa_card_index);
+
+    if (!(reserve = pa_reserve_wrapper_get(m->core, rname)))
+        goto fail;
+
     pa_card_new_data_init(&data);
     data.driver = __FILE__;
     data.module = m;
@@ -335,11 +344,16 @@ int pa__init(pa_module*m) {
 
     init_profile(u);
 
+    pa_reserve_wrapper_unref(reserve);
+
     return 0;
 
 fail:
+    if (reserve)
+        pa_reserve_wrapper_unref(reserve);
 
     pa__done(m);
+
     return -1;
 }
 
diff --git a/src/modules/reserve-wrap.c b/src/modules/reserve-wrap.c
new file mode 100644
index 0000000..df2861f
--- /dev/null
+++ b/src/modules/reserve-wrap.c
@@ -0,0 +1,158 @@
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2009 Lennart Poettering
+
+  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 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, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <pulse/xmalloc.h>
+#include <pulse/i18n.h>
+
+#include <pulsecore/core-error.h>
+#include <pulsecore/core-util.h>
+#include <pulsecore/shared.h>
+
+#include <modules/dbus-util.h>
+
+#include "reserve.h"
+#include "reserve-wrap.h"
+
+struct pa_reserve_wrapper {
+    PA_REFCNT_DECLARE;
+    pa_core *core;
+    pa_dbus_connection *connection;
+    pa_hook hook;
+    struct rd_device *device;
+    char *shared_name;
+};
+
+static void reserve_wrapper_free(pa_reserve_wrapper *r) {
+    pa_assert(r);
+
+    if (r->device)
+        rd_release(r->device);
+
+    pa_hook_done(&r->hook);
+
+    if (r->connection)
+        pa_dbus_connection_unref(r->connection);
+
+    if (r->shared_name) {
+        pa_assert_se(pa_shared_remove(r->core, r->shared_name) >= 0);
+        pa_xfree(r->shared_name);
+    }
+
+    pa_xfree(r);
+}
+
+static int request_cb(rd_device *d, int forced) {
+    pa_reserve_wrapper *r;
+    int k;
+
+    pa_assert(d);
+    pa_assert_se(r = rd_get_userdata(d));
+    pa_assert(PA_REFCNT_VALUE(r) >= 1);
+
+    PA_REFCNT_INC(r);
+
+    k = pa_hook_fire(&r->hook, PA_INT_TO_PTR(forced));
+    pa_log_debug("Device unlock has been requested and %s.", k < 0 ? "failed" : "succeeded");
+
+    pa_reserve_wrapper_unref(r);
+
+    return k < 0 ? -1 : 1;
+}
+
+pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name) {
+    pa_reserve_wrapper *r;
+    DBusError error;
+    int k;
+    char *t;
+
+    dbus_error_init(&error);
+
+    pa_assert(c);
+    pa_assert(device_name);
+
+    t = pa_sprintf_malloc("reserve-wrapper@%s", device_name);
+
+    if ((r = pa_shared_get(c, t))) {
+        pa_xfree(t);
+
+        pa_assert(PA_REFCNT_VALUE(r) >= 1);
+        PA_REFCNT_INC(r);
+
+        return r;
+    }
+
+    r = pa_xnew0(pa_reserve_wrapper, 1);
+    PA_REFCNT_INIT(r);
+    r->core = c;
+    pa_hook_init(&r->hook, r);
+    r->shared_name = t;
+
+    pa_assert_se(pa_shared_set(c, r->shared_name, r) >= 0);
+
+    if (!(r->connection = pa_dbus_bus_get(c, DBUS_BUS_SESSION, &error)) || dbus_error_is_set(&error)) {
+        pa_log_error("Unable to contact D-Bus session bus: %s: %s", error.name, error.message);
+        goto fail;
+    }
+
+    if ((k = rd_acquire(
+                 &r->device,
+                 pa_dbus_connection_get(r->connection),
+                 device_name,
+                 _("PulseAudio Sound Server"),
+                 0,
+                 request_cb,
+                 &error)) < 0) {
+
+        pa_log_error("Failed to acquire reservation lock on device '%s': %s", device_name, pa_cstrerror(-k));
+        goto fail;
+    }
+
+    pa_log_debug("Successfully acquired reservation lock on device '%s'", device_name);
+
+    rd_set_userdata(r->device, r);
+
+    return r;
+
+fail:
+    reserve_wrapper_free(r);
+    return NULL;
+}
+
+void pa_reserve_wrapper_unref(pa_reserve_wrapper *r) {
+    pa_assert(r);
+    pa_assert(PA_REFCNT_VALUE(r) >= 1);
+
+    if (PA_REFCNT_DEC(r) > 0)
+        return;
+
+    reserve_wrapper_free(r);
+}
+
+pa_hook* pa_reserve_wrapper_hook(pa_reserve_wrapper *r) {
+    pa_assert(r);
+    pa_assert(PA_REFCNT_VALUE(r) >= 1);
+
+    return &r->hook;
+}
diff --git a/src/modules/reserve-wrap.h b/src/modules/reserve-wrap.h
new file mode 100644
index 0000000..7afc511
--- /dev/null
+++ b/src/modules/reserve-wrap.h
@@ -0,0 +1,36 @@
+#ifndef fooreservewraphfoo
+#define fooreservewraphfoo
+
+/***
+  This file is part of PulseAudio.
+
+  Copyright 2009 Lennart Poettering
+
+  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 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, write to the Free Software
+  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+  USA.
+***/
+
+#include <pulsecore/core.h>
+#include <pulsecore/hook-list.h>
+
+typedef struct pa_reserve_wrapper pa_reserve_wrapper;
+
+pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name);
+
+void pa_reserve_wrapper_unref(pa_reserve_wrapper *r);
+
+pa_hook* pa_reserve_wrapper_hook(pa_reserve_wrapper *r);
+
+#endif
diff --git a/src/modules/reserve.c b/src/modules/reserve.c
new file mode 100644
index 0000000..79ec97a
--- /dev/null
+++ b/src/modules/reserve.c
@@ -0,0 +1,624 @@
+/***
+  Copyright 2009 Lennart Poettering
+
+  Permission is hereby granted, free of charge, to any person
+  obtaining a copy of this software and associated documentation files
+  (the "Software"), to deal in the Software without restriction,
+  including without limitation the rights to use, copy, modify, merge,
+  publish, distribute, sublicense, and/or sell copies of the Software,
+  and to permit persons to whom the Software is furnished to do so,
+  subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be
+  included in all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  SOFTWARE.
+***/
+
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
+#include "reserve.h"
+
+struct rd_device {
+	int ref;
+
+	char *device_name;
+	char *application_name;
+	char *application_device_name;
+	char *service_name;
+	char *object_path;
+	int32_t priority;
+
+	DBusConnection *connection;
+
+	int owning:1;
+	int registered:1;
+	int filtering:1;
+	int gave_up:1;
+
+	rd_request_cb_t request_cb;
+	void *userdata;
+};
+
+
+#define SERVICE_PREFIX "org.freedesktop.ReserveDevice1."
+#define OBJECT_PREFIX "/org/freedesktop/ReserveDevice1/"
+
+static const char introspection[] =
+	DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE
+	"<node>"
+	" <interface name=\"org.freedesktop.ReserveDevice1\">"
+	"  <method name=\"RequestRelease\">"
+	"   <arg name=\"priority\" type=\"i\" direction=\"in\"/>"
+	"   <arg name=\"result\" type=\"b\" direction=\"out\"/>"
+	"  </method>"
+	"  <property name=\"Priority\" type=\"i\" access=\"read\"/>"
+	"  <property name=\"ApplicationName\" type=\"s\" access=\"read\"/>"
+	"  <property name=\"ApplicationDeviceName\" type=\"s\" access=\"read\"/>"
+	" </interface>"
+	" <interface name=\"org.freedesktop.DBus.Properties\">"
+	"  <method name=\"Get\">"
+	"   <arg name=\"interface\" direction=\"in\" type=\"s\"/>"
+	"   <arg name=\"property\" direction=\"in\" type=\"s\"/>"
+	"   <arg name=\"value\" direction=\"out\" type=\"v\"/>"
+	"  </method>"
+	" </interface>"
+	" <interface name=\"org.freedesktop.DBus.Introspectable\">"
+	"  <method name=\"Introspect\">"
+	"   <arg name=\"data\" type=\"s\" direction=\"out\"/>"
+	"  </method>"
+	" </interface>"
+	"</node>";
+
+static dbus_bool_t add_variant(
+	DBusMessage *m,
+	int type,
+	const void *data) {
+
+	DBusMessageIter iter, sub;
+	char t[2];
+
+	t[0] = (char) type;
+	t[1] = 0;
+
+	dbus_message_iter_init_append(m, &iter);
+
+	if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_VARIANT, t, &sub))
+		return FALSE;
+
+	if (!dbus_message_iter_append_basic(&sub, type, data))
+		return FALSE;
+
+	if (!dbus_message_iter_close_container(&iter, &sub))
+		return FALSE;
+
+	return TRUE;
+}
+
+static DBusHandlerResult object_handler(
+	DBusConnection *c,
+	DBusMessage *m,
+	void *userdata) {
+
+	rd_device *d;
+	DBusError error;
+	DBusMessage *reply = NULL;
+
+	dbus_error_init(&error);
+
+	d = userdata;
+	assert(d->ref >= 1);
+
+	if (dbus_message_is_method_call(
+		    m,
+		    "org.freedesktop.ReserveDevice1",
+		    "RequestRelease")) {
+
+		int32_t priority;
+		dbus_bool_t ret;
+
+		if (!dbus_message_get_args(
+			    m,
+			    &error,
+			    DBUS_TYPE_INT32, &priority,
+			    DBUS_TYPE_INVALID))
+			goto invalid;
+
+		ret = FALSE;
+
+		if (priority > d->priority && d->request_cb) {
+			d->ref++;
+
+			if (d->request_cb(d, 0) > 0) {
+				ret = TRUE;
+				d->gave_up = 1;
+			}
+
+			rd_release(d);
+		}
+
+		if (!(reply = dbus_message_new_method_return(m)))
+			goto oom;
+
+		if (!dbus_message_append_args(
+			    reply,
+			    DBUS_TYPE_BOOLEAN, &ret,
+			    DBUS_TYPE_INVALID))
+			goto oom;
+
+		if (!dbus_connection_send(c, reply, NULL))
+			goto oom;
+
+		dbus_message_unref(reply);
+
+		return DBUS_HANDLER_RESULT_HANDLED;
+
+	} else if (dbus_message_is_method_call(
+			   m,
+			   "org.freedesktop.DBus.Properties",
+			   "Get")) {
+
+		const char *interface, *property;
+
+		if (!dbus_message_get_args(
+			    m,
+			    &error,
+			    DBUS_TYPE_STRING, &interface,
+			    DBUS_TYPE_STRING, &property,
+			    DBUS_TYPE_INVALID))
+			goto invalid;
+
+		if (strcmp(interface, "org.freedesktop.ReserveDevice1") == 0) {
+			const char *empty = "";
+
+			if (strcmp(property, "ApplicationName") == 0 && d->application_name) {
+				if (!(reply = dbus_message_new_method_return(m)))
+					goto oom;
+
+				if (!add_variant(
+					    reply,
+					    DBUS_TYPE_STRING,
+					    d->application_name ? (const char**) &d->application_name : &empty))
+					goto oom;
+
+			} else if (strcmp(property, "ApplicationDeviceName") == 0) {
+				if (!(reply = dbus_message_new_method_return(m)))
+					goto oom;
+
+				if (!add_variant(
+					    reply,
+					    DBUS_TYPE_STRING,
+					    d->application_device_name ? (const char**) &d->application_device_name : &empty))
+					goto oom;
+
+			} else if (strcmp(property, "Priority") == 0) {
+				if (!(reply = dbus_message_new_method_return(m)))
+					goto oom;
+
+				if (!add_variant(
+					    reply,
+					    DBUS_TYPE_INT32,
+					    &d->priority))
+					goto oom;
+			} else {
+				if (!(reply = dbus_message_new_error_printf(
+					      m,
+					      DBUS_ERROR_UNKNOWN_METHOD,
+					      "Unknown property %s",
+					      property)))
+					goto oom;
+			}
+
+			if (!dbus_connection_send(c, reply, NULL))
+				goto oom;
+
+			dbus_message_unref(reply);
+
+			return DBUS_HANDLER_RESULT_HANDLED;
+		}
+
+	} else if (dbus_message_is_method_call(
+			   m,
+			   "org.freedesktop.DBus.Introspectable",
+			   "Introspect")) {
+			    const char *i = introspection;
+
+		if (!(reply = dbus_message_new_method_return(m)))
+			goto oom;
+
+		if (!dbus_message_append_args(
+			    reply,
+			    DBUS_TYPE_STRING,
+			    &i,
+			    DBUS_TYPE_INVALID))
+			goto oom;
+
+		if (!dbus_connection_send(c, reply, NULL))
+			goto oom;
+
+		dbus_message_unref(reply);
+
+		return DBUS_HANDLER_RESULT_HANDLED;
+	}
+
+	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+invalid:
+	if (reply)
+		dbus_message_unref(reply);
+
+	if (!(reply = dbus_message_new_error(
+		      m,
+		      DBUS_ERROR_INVALID_ARGS,
+		      "Invalid arguments")))
+		goto oom;
+
+	if (!dbus_connection_send(c, reply, NULL))
+		goto oom;
+
+	dbus_message_unref(reply);
+
+	dbus_error_free(&error);
+
+	return DBUS_HANDLER_RESULT_HANDLED;
+
+oom:
+	if (reply)
+		dbus_message_unref(reply);
+
+	dbus_error_free(&error);
+
+	return DBUS_HANDLER_RESULT_NEED_MEMORY;
+}
+
+static DBusHandlerResult filter_handler(
+	DBusConnection *c,
+	DBusMessage *m,
+	void *userdata) {
+
+	DBusMessage *reply;
+	rd_device *d;
+	DBusError error;
+
+	dbus_error_init(&error);
+
+	d = userdata;
+
+	if (dbus_message_is_signal(m, "org.freedesktop.DBus", "NameLost")) {
+		const char *name;
+
+		if (!dbus_message_get_args(
+			    m,
+			    &error,
+			    DBUS_TYPE_STRING, &name,
+			    DBUS_TYPE_INVALID))
+			goto invalid;
+
+		if (strcmp(name, d->service_name) == 0 && d->owning) {
+			d->owning = 0;
+
+			if (!d->gave_up)  {
+				d->ref++;
+
+				if (d->request_cb)
+					d->request_cb(d, 1);
+				d->gave_up = 1;
+
+				rd_release(d);
+			}
+
+			return DBUS_HANDLER_RESULT_HANDLED;
+		}
+	}
+
+	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+
+invalid:
+	if (!(reply = dbus_message_new_error(
+		      m,
+		      DBUS_ERROR_INVALID_ARGS,
+		      "Invalid arguments")))
+		goto oom;
+
+	if (!dbus_connection_send(c, reply, NULL))
+		goto oom;
+
+	dbus_message_unref(reply);
+
+	dbus_error_free(&error);
+
+	return DBUS_HANDLER_RESULT_HANDLED;
+
+oom:
+	if (reply)
+		dbus_message_unref(reply);
+
+	dbus_error_free(&error);
+
+	return DBUS_HANDLER_RESULT_NEED_MEMORY;
+}
+
+
+static const struct DBusObjectPathVTable vtable ={
+	.message_function = object_handler
+};
+
+int rd_acquire(
+	rd_device **_d,
+	DBusConnection *connection,
+	const char *device_name,
+	const char *application_name,
+	int32_t priority,
+	rd_request_cb_t request_cb,
+	DBusError *error) {
+
+	rd_device *d = NULL;
+	int r, k;
+	DBusError _error;
+	DBusMessage *m = NULL, *reply = NULL;
+	dbus_bool_t good;
+
+	if (!error)
+		error = &_error;
+
+	dbus_error_init(error);
+
+	if (!_d)
+		return -EINVAL;
+
+	if (!connection)
+		return -EINVAL;
+
+	if (!device_name)
+		return -EINVAL;
+
+	if (!request_cb && priority != INT32_MAX)
+		return -EINVAL;
+
+	if (!(d = calloc(sizeof(rd_device), 1)))
+		return -ENOMEM;
+
+	d->ref = 1;
+
+	if (!(d->device_name = strdup(device_name))) {
+		r = -ENOMEM;
+		goto fail;
+	}
+
+	if (!(d->application_name = strdup(application_name))) {
+		r = -ENOMEM;
+		goto fail;
+	}
+
+	d->priority = priority;
+	d->connection = dbus_connection_ref(connection);
+	d->request_cb = request_cb;
+
+	if (!(d->service_name = malloc(sizeof(SERVICE_PREFIX) + strlen(device_name)))) {
+		r = -ENOMEM;
+		goto fail;
+	}
+	sprintf(d->service_name, SERVICE_PREFIX "%s", d->device_name);
+
+	if (!(d->object_path = malloc(sizeof(OBJECT_PREFIX) + strlen(device_name)))) {
+		r = -ENOMEM;
+		goto fail;
+	}
+	sprintf(d->object_path, OBJECT_PREFIX "%s", d->device_name);
+
+	if ((k = dbus_bus_request_name(
+		     d->connection,
+		     d->service_name,
+		     DBUS_NAME_FLAG_DO_NOT_QUEUE|
+		     (priority < INT32_MAX ? DBUS_NAME_FLAG_ALLOW_REPLACEMENT : 0),
+		     error)) < 0) {
+		r = -EIO;
+		goto fail;
+	}
+
+	if (k == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
+		goto success;
+
+	if (k != DBUS_REQUEST_NAME_REPLY_EXISTS) {
+		r = -EIO;
+		goto fail;
+	}
+
+	if (priority <= INT32_MIN) {
+		r = -EBUSY;
+		goto fail;
+	}
+
+	if (!(m = dbus_message_new_method_call(
+		      d->service_name,
+		      d->object_path,
+		      "org.freedesktop.ReserveDevice1",
+		      "RequestRelease"))) {
+		r = -ENOMEM;
+		goto fail;
+	}
+
+	if (!dbus_message_append_args(
+		    m,
+		    DBUS_TYPE_INT32, &d->priority,
+		    DBUS_TYPE_INVALID)) {
+		r = -ENOMEM;
+		goto fail;
+	}
+
+	if (!(reply = dbus_connection_send_with_reply_and_block(
+		      d->connection,
+		      m,
+		      -1,
+		      error))) {
+		r = -EIO;
+		goto fail;
+	}
+
+	if (!dbus_message_get_args(
+		    reply,
+		    error,
+		    DBUS_TYPE_BOOLEAN, &good,
+		    DBUS_TYPE_INVALID)) {
+		r = -EIO;
+		goto fail;
+	}
+
+	if (!good) {
+		r = -EBUSY;
+		goto fail;
+	}
+
+	if ((k = dbus_bus_request_name(
+		     d->connection,
+		     d->service_name,
+		     DBUS_NAME_FLAG_DO_NOT_QUEUE|
+		     (priority < INT32_MAX ? DBUS_NAME_FLAG_ALLOW_REPLACEMENT : 0)|
+		     DBUS_NAME_FLAG_REPLACE_EXISTING,
+		     error)) < 0) {
+		r = -EIO;
+		goto fail;
+	}
+
+	if (k != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
+		r = -EIO;
+		goto fail;
+	}
+
+success:
+	d->owning = 1;
+
+	if (!(dbus_connection_register_object_path(
+		      d->connection,
+		      d->object_path,
+		      &vtable,
+		      d))) {
+		r = -ENOMEM;
+		goto fail;
+	}
+
+	d->registered = 1;
+
+	if (!dbus_connection_add_filter(
+		    d->connection,
+		    filter_handler,
+		    d,
+		    NULL)) {
+		r = -ENOMEM;
+		goto fail;
+	}
+
+	d->filtering = 1;
+
+	*_d = d;
+	return 0;
+
+fail:
+	if (m)
+		dbus_message_unref(m);
+
+	if (reply)
+		dbus_message_unref(reply);
+
+	if (&_error == error)
+		dbus_error_free(&_error);
+
+	if (d)
+		rd_release(d);
+
+	return r;
+}
+
+void rd_release(
+	rd_device *d) {
+
+	if (!d)
+		return;
+
+	assert(d->ref > 0);
+
+	if (--d->ref)
+		return;
+
+
+	if (d->filtering)
+		dbus_connection_remove_filter(
+			d->connection,
+			filter_handler,
+			d);
+
+	if (d->registered)
+		dbus_connection_unregister_object_path(
+			d->connection,
+			d->object_path);
+
+	if (d->owning) {
+		DBusError error;
+		dbus_error_init(&error);
+
+		dbus_bus_release_name(
+			d->connection,
+			d->service_name,
+			&error);
+
+		dbus_error_free(&error);
+	}
+
+	free(d->device_name);
+	free(d->application_name);
+	free(d->application_device_name);
+	free(d->service_name);
+	free(d->object_path);
+
+	if (d->connection)
+		dbus_connection_unref(d->connection);
+
+	free(d);
+}
+
+int rd_set_application_device_name(rd_device *d, const char *n) {
+	char *t;
+
+	if (!d)
+		return -EINVAL;
+
+	assert(d->ref > 0);
+
+	if (!(t = strdup(n)))
+		return -ENOMEM;
+
+	free(d->application_device_name);
+	d->application_device_name = t;
+	return 0;
+}
+
+void rd_set_userdata(rd_device *d, void *userdata) {
+
+	if (!d)
+		return;
+
+	assert(d->ref > 0);
+	d->userdata = userdata;
+}
+
+void* rd_get_userdata(rd_device *d) {
+
+	if (!d)
+		return NULL;
+
+	assert(d->ref > 0);
+
+	return d->userdata;
+}
diff --git a/src/modules/reserve.h b/src/modules/reserve.h
new file mode 100644
index 0000000..ceb1ad1
--- /dev/null
+++ b/src/modules/reserve.h
@@ -0,0 +1,68 @@
+#ifndef fooreservehfoo
+#define fooreservehfoo
+
+/***
+  Copyright 2009 Lennart Poettering
+
+  Permission is hereby granted, free of charge, to any person
+  obtaining a copy of this software and associated documentation files
+  (the "Software"), to deal in the Software without restriction,
+  including without limitation the rights to use, copy, modify, merge,
+  publish, distribute, sublicense, and/or sell copies of the Software,
+  and to permit persons to whom the Software is furnished to do so,
+  subject to the following conditions:
+
+  The above copyright notice and this permission notice shall be
+  included in all copies or substantial portions of the Software.
+
+  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+  SOFTWARE.
+***/
+
+#include <dbus/dbus.h>
+#include <inttypes.h>
+
+typedef struct rd_device rd_device;
+
+/* Prototype for a function that is called whenever someone else wants
+ * your app to release the device you having locked. A return value <=
+ * 0 denies the request, a positive return value agrees to it. Before
+ * returning your application should close the device in question
+ * completely to make sure the new application may acceess it. */
+typedef int (*rd_request_cb_t)(
+	rd_device *d,
+	int forced);                  /* Non-zero if an application forcibly took the lock away without asking. If this is the case then the return value of this call is ignored. */
+
+/* Try to lock the device. Returns 0 on success, a negative errno
+ * style return value on error. The DBus error might be set as well if
+ * the error was caused D-Bus. */
+int rd_acquire(
+	rd_device **d,                /* On success a pointer to the newly allocated rd_device object will be filled in here */
+	DBusConnection *connection,
+	const char *device_name,      /* The device to lock, e.g. "Audio0" */
+	const char *application_name, /* A human readable name of the application, e.g. "PulseAudio Sound Server" */
+	int32_t priority,             /* The priority for this application. If unsure use 0 */
+	rd_request_cb_t request_cb,   /* Will be called whenever someone asks that this device shall be released. May be NULL if priority is INT32_MAX */
+	DBusError *error);            /* If we fail due to a D-Bus related issue the error will be filled in here. May be NULL. */
+
+/* Unlock (if needed) and destroy a rd_device object again */
+void rd_release(rd_device *d);
+
+/* Set the application device name for a rd_device object Returns 0 on
+ * success, a negative errno style return value on error. */
+int rd_set_application_device_name(rd_device *d, const char *name);
+
+/* Attach a userdata pointer to a rd_device */
+void rd_set_userdata(rd_device *d, void *userdata);
+
+/* Query the userdata pointer from a rd_device. Returns NULL if no
+ * userdata was set. */
+void* rd_get_userdata(rd_device *d);
+
+#endif

commit ba3c7668a472672bd86eb06dbbbffcef17722134
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 06:36:42 2009 +0100

    update reserve.c from upstream git

diff --git a/src/modules/reserve.c b/src/modules/reserve.c
index 79ec97a..9a9591d 100644
--- a/src/modules/reserve.c
+++ b/src/modules/reserve.c
@@ -59,6 +59,8 @@ struct rd_device {
 static const char introspection[] =
 	DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE
 	"<node>"
+	" <!-- If you are looking for documentation make sure to check out\n"
+	"      http://git.0pointer.de/?p=reserve.git;a=blob;f=reserve.txt -->\n"
 	" <interface name=\"org.freedesktop.ReserveDevice1\">"
 	"  <method name=\"RequestRelease\">"
 	"   <arg name=\"priority\" type=\"i\" direction=\"in\"/>"
@@ -461,8 +463,17 @@ int rd_acquire(
 	if (!(reply = dbus_connection_send_with_reply_and_block(
 		      d->connection,
 		      m,
-		      -1,
+		      5000, /* 5s */
 		      error))) {
+
+		if (dbus_error_has_name(error, DBUS_ERROR_TIMED_OUT) ||
+		    dbus_error_has_name(error, DBUS_ERROR_UNKNOWN_METHOD) ||
+		    dbus_error_has_name(error, DBUS_ERROR_NO_REPLY)) {
+			/* This must be treated as denied. */
+			r = -EBUSY;
+			goto fail;
+		}
+
 		r = -EIO;
 		goto fail;
 	}

commit 03ac71bcad97f013f1fc7b5ec65f642be437d65b
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 11:29:11 2009 +0100

    don't put both the card and the pcm name in the description of a device if one contains the other

diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index ec20d1d..6740c06 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1448,9 +1448,9 @@ void pa_alsa_init_proplist_pcm_info(pa_core *c, pa_proplist *p, snd_pcm_info_t *
         cn = pa_proplist_gets(p, "alsa.card_name");
     }
 
-    if (cn && n)
-        pa_proplist_setf(p, PA_PROP_DEVICE_DESCRIPTION, "%s - %s", cn, n);
-    else if (cn)
+    if (cn && n && !strstr(cn, n) && !strstr(n, cn))
+        pa_proplist_setf(p, PA_PROP_DEVICE_DESCRIPTION, "%s, %s", cn, n);
+    else if (cn && (!n || strstr(cn, n)))
         pa_proplist_sets(p, PA_PROP_DEVICE_DESCRIPTION, cn);
     else if (n)
         pa_proplist_sets(p, PA_PROP_DEVICE_DESCRIPTION, n);

commit 83148581830f6ed9740a6f82645d76c38e43a600
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 11:29:35 2009 +0100

    set reserve interface application device name

diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 83fc9e1..dbd95b6 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -134,6 +134,17 @@ static void reserve_done(struct userdata *u) {
     }
 }
 
+static void reserve_update(struct userdata *u) {
+    const char *description;
+    pa_assert(u);
+
+    if (!u->sink)
+        return;
+
+    if ((description = pa_proplist_gets(u->sink->proplist, PA_PROP_DEVICE_DESCRIPTION)))
+        pa_reserve_wrapper_set_application_device_name(u->reserve, description);
+}
+
 static int reserve_init(struct userdata *u, const char *dname) {
     char *rname;
 
@@ -153,6 +164,8 @@ static int reserve_init(struct userdata *u, const char *dname) {
     if (!(u->reserve))
         return -1;
 
+    reserve_update(u);
+
     pa_assert(!u->reserve_slot);
     u->reserve_slot = pa_hook_connect(pa_reserve_wrapper_hook(u->reserve), PA_HOOK_NORMAL, (pa_hook_cb_t) reserve_cb, u);
 
@@ -1684,6 +1697,8 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
         pa_log_info("Time scheduling watermark is %0.2fms",
                     (double) pa_bytes_to_usec(u->tsched_watermark, &ss) / PA_USEC_PER_MSEC);
 
+    reserve_update(u);
+
     if (update_sw_params(u) < 0)
         goto fail;
 
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 2f0e94c..39df4a9 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -132,6 +132,17 @@ static void reserve_done(struct userdata *u) {
     }
 }
 
+static void reserve_update(struct userdata *u) {
+    const char *description;
+    pa_assert(u);
+
+    if (!u->source)
+        return;
+
+    if ((description = pa_proplist_gets(u->source->proplist, PA_PROP_DEVICE_DESCRIPTION)))
+        pa_reserve_wrapper_set_application_device_name(u->reserve, description);
+}
+
 static int reserve_init(struct userdata *u, const char *dname) {
     char *rname;
 
@@ -151,6 +162,8 @@ static int reserve_init(struct userdata *u, const char *dname) {
     if (!(u->reserve))
         return -1;
 
+    reserve_update(u);
+
     pa_assert(!u->reserve_slot);
     u->reserve_slot = pa_hook_connect(pa_reserve_wrapper_hook(u->reserve), PA_HOOK_NORMAL, (pa_hook_cb_t) reserve_cb, u);
 
@@ -1522,6 +1535,8 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
         pa_log_info("Time scheduling watermark is %0.2fms",
                     (double) pa_bytes_to_usec(u->tsched_watermark, &ss) / PA_USEC_PER_MSEC);
 
+    reserve_update(u);
+
     if (update_sw_params(u) < 0)
         goto fail;
 
diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c
index 52e64ea..fc6b886 100644
--- a/src/modules/alsa/module-alsa-card.c
+++ b/src/modules/alsa/module-alsa-card.c
@@ -282,6 +282,7 @@ int pa__init(pa_module *m) {
     struct userdata *u;
     char rname[32];
     pa_reserve_wrapper *reserve = NULL;
+    const char *description;
 
     pa_alsa_redirect_errors_inc();
     snd_config_update_free_global();
@@ -319,6 +320,10 @@ int pa__init(pa_module *m) {
     pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, u->device_id);
     set_card_name(&data, ma, u->device_id);
 
+    if (reserve)
+        if ((description = pa_proplist_gets(data.proplist, PA_PROP_DEVICE_DESCRIPTION)))
+            pa_reserve_wrapper_set_application_device_name(reserve, description);
+
     u->profiles = data.profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
     if (pa_alsa_probe_profiles(u->device_id, &m->core->default_sample_spec, enumerate_cb, u) < 0) {
         pa_card_new_data_done(&data);
diff --git a/src/modules/reserve-wrap.c b/src/modules/reserve-wrap.c
index df2861f..709cb06 100644
--- a/src/modules/reserve-wrap.c
+++ b/src/modules/reserve-wrap.c
@@ -123,7 +123,7 @@ pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name)
                  _("PulseAudio Sound Server"),
                  0,
                  request_cb,
-                 &error)) < 0) {
+                 NULL)) < 0) {
 
         pa_log_error("Failed to acquire reservation lock on device '%s': %s", device_name, pa_cstrerror(-k));
         goto fail;
@@ -136,7 +136,10 @@ pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name)
     return r;
 
 fail:
+    dbus_error_free(&error);
+
     reserve_wrapper_free(r);
+
     return NULL;
 }
 
@@ -156,3 +159,10 @@ pa_hook* pa_reserve_wrapper_hook(pa_reserve_wrapper *r) {
 
     return &r->hook;
 }
+
+void pa_reserve_wrapper_set_application_device_name(pa_reserve_wrapper *r, const char *name) {
+    pa_assert(r);
+    pa_assert(PA_REFCNT_VALUE(r) >= 1);
+
+    rd_set_application_device_name(r->device, name);
+}
diff --git a/src/modules/reserve-wrap.h b/src/modules/reserve-wrap.h
index 7afc511..4625fe6 100644
--- a/src/modules/reserve-wrap.h
+++ b/src/modules/reserve-wrap.h
@@ -33,4 +33,6 @@ void pa_reserve_wrapper_unref(pa_reserve_wrapper *r);
 
 pa_hook* pa_reserve_wrapper_hook(pa_reserve_wrapper *r);
 
+void pa_reserve_wrapper_set_application_device_name(pa_reserve_wrapper *r, const char *name);
+
 #endif

commit 364786ee8c16765da9c634f2293a152744cb2f85
Merge: 8314858... b063e53...
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 11:33:05 2009 +0100

    Merge commit 'origin/master-tx'


commit 07a45c7e12e3532078781d7f3d4e1a7f9ed8f243
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 11:35:01 2009 +0100

    run make update-po

diff --git a/po/ca.po b/po/ca.po
index 6fe1d4a..b800451 100644
--- a/po/ca.po
+++ b/po/ca.po
@@ -19,7 +19,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2009-02-13 23:27+0100\n"
 "Last-Translator: Agusti Grau <fletxa at gmail.com>\n"
 "Language-Team: Catalan <fedora at softcatala.net>\n"
@@ -27,63 +27,74 @@ msgstr ""
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -222,92 +233,94 @@ msgstr "El mode de sistema ampli no està suportat en aquesta plataforma."
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "S'ha produït un error en setrlimit(%s, (%u, %u)): %s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "S'ha produït un error en interpretar la línia de comandes."
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr ""
 "Aquesta aplicació està en el grup '%s', s'està establint la prioritat alta."
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr ""
 "Aquesta aplicació està en el grup '%s', s'està establint la prioritat en "
 "temps real."
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "PolicyKit ha permés el permís acquire-high-priority."
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "PolicyKit ha rebutjat el permís acquire-high-priority."
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "PolicyKit h permés el permís acquire-real-time."
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "PolicyKit ha rebutjat el permís acquire-real-time."
 
-#: ../src/daemon/main.c:508
-#, fuzzy
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"La crida de la SUID de root i la prioritat alta/temps real estàn "
-"especificades en la configuració, però no té els permissos necessaris:\n"
-"No es pertany al grup '"
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "La prioritat alta està habilitada en la configuració però no està permesa "
 "per la política."
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "S'ha incrementat el valor de RLIMIT_RTPRIO amb éxit."
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "S'ha produït un error amb RLIMIT_RTPRIO: %s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "Es deixa CAP_NICE"
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "La prioritat temps real està habilitada en la configuració però no està "
 "permesa per la política."
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "El dimoni no s'està executant."
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "El dimoni s'està executant amb PID %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "S'ha produït un error en matar el dimoni: %s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -315,149 +328,149 @@ msgstr ""
 "No és necessari executar aquesta aplicació com a root (excepte si "
 "s'especifica --system)"
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 #, fuzzy
 msgid "Root privileges required."
 msgstr "Es requereixen permísos de root."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "La opció --start no està suportada per a instàncies de sistema."
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr ""
 "S'està executant en mode sistema, però no s'ha especificat la opció --"
 "disallow-exit."
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 "S'està executant en mode sistema, però no s'ha especificat la opció --"
 "disallow-module-loading."
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr ""
 "S'està executant en mode sistema, es deshabilitarà el mode SHM forçosament."
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 "S'està executant en mode sistema, la sortida per temps d'inactivitat es "
 "deshabilita."
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "S'ha produït un error en adquirir stdio."
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "Ha fallat la canonada: %s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "Ha fallat fork(): %s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "Ha fallat read(): %s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "S'ha produït un error en iniciar el dimoni."
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "S'ha iniciat el dimoni."
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Aquest és el PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Host de compilació: %s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "CFLAGS de compilació: %s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "S'està executant en el host: %s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr ""
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "La mida de pàgina és de %lu bytes."
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Compilat amb suport per a Valgrind: sí"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Compilat amb suport per a Valgrind: no"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "S'està executant amb el mode valgrind: %s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Construcció optimitzada: sí"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Construcció optmitzada: no"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "S'ha produït un error en obtenir la ID de la màquina"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "La ID de la màquina és %s."
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "S'esta utilitzant el directori d'execució %s."
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "S'està utilitzant el directori d'estat %s."
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "S'està executant en mode sistema: %s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "S'ha produït un error en pa_pid_file_create()."
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr "Estàn disponibles els temporitzadors frescos de alta resolució."
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
@@ -465,27 +478,27 @@ msgstr ""
 "Es recomana la utilització d'un kernel amb els temporitzadors d'alta "
 "resolució habilitats."
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "S'ha produït un error en pa_core_new()."
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "S'ha produït un error en inicialitzar el dimoni."
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Com el dimoni s'ha iniciat sense cap mòdul carregat, no funciona."
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "S'ha completat la inicialització del dimoni."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "S'ha iniciat l'aturada del dimoni."
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "S'ha aturat el dimoni."
 
@@ -661,7 +674,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading necessita un argument booleà"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit necessita un argument booleà"
 
 #: ../src/daemon/cmdline.c:309
@@ -674,12 +688,12 @@ msgstr "Objectiu de log invàlid: utilitzeu 'syslog', 'stderr' o 'auto'."
 
 #: ../src/daemon/cmdline.c:333
 #, fuzzy
-msgid "--log-time boolean argument"
-msgstr "--disallow-exit necessita un argument booleà"
+msgid "--log-time expects boolean argument"
+msgstr "--realtime necessita un argument booleà"
 
 #: ../src/daemon/cmdline.c:340
 #, fuzzy
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr "--disallow-exit necessita un argument booleà"
 
 #: ../src/daemon/cmdline.c:359
@@ -739,67 +753,78 @@ msgstr "Càrrega: %s\n"
 msgid "Path: %s\n"
 msgstr "Ruta: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Destí de registre incorrecte '%s'"
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Nivell de registre incorrecte '%s'."
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Mètode de remostreig incorrecte '%s'."
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] rlimit incorrecte '%s'."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] rlimit no disponible en aquesta plataforma."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Format de mostra incorrecte '%s'."
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Velocitat de mostreig '%s'."
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Canals de mostreig incorrectes '%s'."
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Canals de mostreig incorrectes '%s'."
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Nombre de fragments incorrecte '%s'."
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Mida de fragment incorrecta '%s'."
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Nivell de prioritat incorrecte '%s'."
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Error en obrir el fitxer de configuració: %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Lectura del fitxer de configuració: %s ###\n"
@@ -813,6 +838,34 @@ msgstr "Alliberant privilegis de root."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "S'han limitat les capacitats a CAP_SYS_NICE correctament."
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+"Aquesta aplicació està en el grup '%s', s'està establint la prioritat alta."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1302,7 +1355,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "Ha fallat pa_stream_connect_record(): %s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Ha fallat la connexió: %s\n"
@@ -1477,7 +1530,7 @@ msgid "Too many arguments.\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr ""
@@ -1488,12 +1541,12 @@ msgid "io_new() failed.\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr ""
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1505,7 +1558,7 @@ msgid "time_new() failed.\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr ""
@@ -1535,7 +1588,7 @@ msgstr ""
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr ""
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1591,7 +1644,7 @@ msgstr ""
 msgid "Failed to get server information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:136
+#: ../src/utils/pactl.c:137
 #, c-format
 msgid ""
 "User name: %s\n"
@@ -1599,17 +1652,18 @@ msgid ""
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -1631,12 +1685,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -1658,20 +1712,20 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr ""
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -1682,12 +1736,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -1697,12 +1751,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, fuzzy, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Error en obrir el fitxer de configuració: %s"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -1713,22 +1767,22 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, fuzzy, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "Ha fallat la canonada: %s"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1749,12 +1803,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1771,12 +1825,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -1794,22 +1848,22 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1835,7 +1889,7 @@ msgid ""
 "server\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1843,66 +1897,66 @@ msgid ""
 "Linked with libpulse %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
 "value.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr ""
@@ -2081,6 +2135,21 @@ msgstr ""
 msgid "Cannot access autospawn lock."
 msgstr ""
 
+#, fuzzy
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
+#~ msgstr ""
+#~ "La crida de la SUID de root i la prioritat alta/temps real estàn "
+#~ "especificades en la configuració, però no té els permissos necessaris:\n"
+#~ "No es pertany al grup '"
+
+#, fuzzy
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--disallow-exit necessita un argument booleà"
+
 #~ msgid ""
 #~ "' and PolicyKit refuse to grant us priviliges. Dropping SUID again.\n"
 #~ "For enabling real-time scheduling please acquire the appropriate "
diff --git a/po/cs.po b/po/cs.po
index 926823c..9be3890 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2008-10-19 22:31+0200\n"
 "Last-Translator: Petr Kovar <pknbe at volny.cz>\n"
 "Language-Team: Czech <translation-team-cs at lists.sourceforge.net>\n"
@@ -17,63 +17,74 @@ msgstr ""
 "X-Generator: KBabel 1.11.4\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -212,88 +223,90 @@ msgstr "Režim celého systému není na této platformě podporován."
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) selhalo: %s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "Nezdařila se analýza příkazového řádku."
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr ""
 "Nacházíme se ve skupině \"%s\", což umožňuje plánování o vysoké prioritě."
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr "Nacházíme se ve skupině \"%s\", což umožňuje plánování v reálném čase."
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "PolicyKit nám udělil oprávnění acquire-high-priority."
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "PolicyKit nám neudělil oprávnění acquire-high-priority."
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "PolicyKit nám udělil oprávnění acquire-real-time."
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "PolicyKit nám neudělil oprávnění acquire-real-time."
 
-#: ../src/daemon/main.c:508
-#, fuzzy
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"Volaný SUID root a plánování v reálném čase / o vysoké prioritě bylo "
-"zažádáno v konfiguraci. Nedisponujeme ovšem potřebnými oprávněními:\n"
-"Nejsme ve skupinÄ› \""
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "Plánování o vysoké prioritě v konfiguraci zapnuto, ale nepovoleno pravidly."
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "Úspěšně zvýšeno RLIMIT_RTPRIO"
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "RLIMIT_RTPRIO selhalo: %s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "Vzdávání se CAP_NICE"
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "Plánování v reálném čase v konfiguraci zapnuto, ale nepovoleno pravidly."
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "Démon neběží"
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "Démon běží jako PID %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Zabití démona se nezdařilo: %s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -301,143 +314,143 @@ msgstr ""
 "Tento program není určen ke spuštění pod superuživatelem (není-li zadáno --"
 "system)."
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 #, fuzzy
 msgid "Root privileges required."
 msgstr "Jsou vyžadována oprávnění superuživatele."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "--start nepodporováno u systémových instancí."
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr "Běží v systémovém režimu, ale nenastaveno --disallow-exit!"
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr "Běží v systémovém režimu, ale nenastaveno --disallow-module-loading!"
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr "Běží v systémovém režimu, vynuceně se vypíná režim SHM!"
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr "Běží v systémovém režimu, vynuceně se vypíná čas nečinnosti ukončení!"
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "Nezdařilo se získání stdio."
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "pipe selhalo: %s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "fork() selhalo: %s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "read() selhalo: %s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "Spuštění démona selhalo."
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "Spuštění démona bylo úspěšné."
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Toto je PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Překladový počítač: %s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "Překladové CFLAGS: %s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "Běží na počítači: %s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr ""
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "Velikost stránky je %lu bajtů"
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Přeloženo s podporou Valgrind: ano"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Přeloženo s podporou Valgrind: ne"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "Běží v režimu valgrind: %s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Optimalizované sestavení: ano"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Optimalizované sestavení: ne"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "Nezdařilo se získání ID počítače"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "ID počítače je %s."
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "Používán běhový adresář %s."
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "Používán stavový adresář %s."
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "Běží v systémovém režimu: %s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() selhalo."
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr ""
 "Jsou dostupné výtečné časovače o vysokém rozlišení. Tak s chutí do toho!"
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
@@ -445,27 +458,27 @@ msgstr ""
 "Sorry, vole, kernel error! Tip šéfkuchaře na dnešní den zní: Linux se "
 "zapnutými časovači o vysokém rozlišení."
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() selhalo."
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "Selhalo spuštění démona."
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Spuštění démona bez jakýchkoliv nahraných modulů, běh bude odmítnut."
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "Spuštění démona dokončeno."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "Vypínání démona spuštěno."
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "Démon ukončen."
 
@@ -618,7 +631,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading předpokládá booleovský argument"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit booleovský argument"
 
 #: ../src/daemon/cmdline.c:309
@@ -632,12 +646,12 @@ msgstr ""
 
 #: ../src/daemon/cmdline.c:333
 #, fuzzy
-msgid "--log-time boolean argument"
-msgstr "--disallow-exit booleovský argument"
+msgid "--log-time expects boolean argument"
+msgstr "--realtime předpokládá booleovský argument"
 
 #: ../src/daemon/cmdline.c:340
 #, fuzzy
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr "--disallow-exit booleovský argument"
 
 #: ../src/daemon/cmdline.c:359
@@ -697,67 +711,78 @@ msgstr "Načíst Jednou s n"
 msgid "Path: %s\n"
 msgstr "Cesta: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Neplatný protokolovací cíl \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Neplatná protokolovací úroveň \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Neplatná metoda převzorkování \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] Neplatné rlimit \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] rlimit na této platformě není podporováno."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Neplatný vzorkovací formát \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Neplatná vzorkovací frekvence \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Neplatné vzorkovací kanály \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Neplatné vzorkovací kanály \"%s\"."
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Neplatný počet fragmentů \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Neplatná velikost fragmentu \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Neplatná úroveň nice \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Nezdařilo se otevřít konfigurační soubor: %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Čtení z konfiguračního souboru: %s ###\n"
@@ -771,6 +796,35 @@ msgstr "Rušení superuživatelských oprávnění."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "Schopnosti úspěšně omezeny na CAP_SYS_NICE."
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "Nezdařilo se zabít démona PulseAudio."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+"Nacházíme se ve skupině \"%s\", což umožňuje plánování o vysoké prioritě."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1260,7 +1314,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() selhalo: %s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Spojení selhalo: %s\n"
@@ -1465,7 +1519,7 @@ msgid "Too many arguments.\n"
 msgstr "Příliš mnoho argumentů.\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() selhalo.\n"
@@ -1476,12 +1530,12 @@ msgid "io_new() failed.\n"
 msgstr "io_new() selhalo.\n"
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() selhalo.\n"
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1493,7 +1547,7 @@ msgid "time_new() failed.\n"
 msgstr "time_new() selhalo.\n"
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() selhalo.\n"
@@ -1523,7 +1577,7 @@ msgstr "Nezdařilo se obnovení: %s\n"
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr "VAROVÁNÍ: Zvukový server není místní, nedojde k pozastavení.\n"
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1586,14 +1640,15 @@ msgstr "Velikost vzorkovací vyrovnávací paměti: %s\n"
 msgid "Failed to get server information: %s\n"
 msgstr "Nezdařilo se získání informací o serveru: %s\n"
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1607,12 +1662,12 @@ msgstr ""
 "Výchozí zdroj: %s\n"
 "Cookie: %08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "Nezdařilo se získání informací o cíli: %s\n"
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, fuzzy, c-format
 msgid ""
 "Sink #%u\n"
@@ -1646,12 +1701,12 @@ msgstr ""
 "Vlastnosti:\n"
 "%s"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "Nezdařilo se získání informací o zdroji: %s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, fuzzy, c-format
 msgid ""
 "Source #%u\n"
@@ -1685,20 +1740,20 @@ msgstr ""
 "Vlastnosti:\n"
 "%s"
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "nic"
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Selhalo získání informací o modulu: %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, fuzzy, c-format
 msgid ""
 "Module #%u\n"
@@ -1714,12 +1769,12 @@ msgstr ""
 "Počet použití %s\n"
 "Automatické uvolnění: %s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Selhalo získání informací o klientu: %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, fuzzy, c-format
 msgid ""
 "Client #%u\n"
@@ -1734,12 +1789,12 @@ msgstr ""
 "Vlastnosti:\n"
 "%s"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, fuzzy, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Selhalo až get s n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, fuzzy, c-format
 msgid ""
 "Card #%u\n"
@@ -1755,22 +1810,22 @@ msgstr ""
 "Vlastnosti:\n"
 "%s"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, fuzzy, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "pipe selhalo: %s"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr "Nezdařilo se získání cílových vstupních informací: %s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, fuzzy, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1791,12 +1846,12 @@ msgid ""
 "\t\t%s\n"
 msgstr "Vstup s Modul s s s s s s n s"
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, fuzzy, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr "Selhalo až get zdroj s n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, fuzzy, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1813,12 +1868,12 @@ msgid ""
 "\t\t%s\n"
 msgstr "Zdroj Výstup s Modul s s s s s n s"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, fuzzy, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "Selhalo až get s n"
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, fuzzy, c-format
 msgid ""
 "Sample #%u\n"
@@ -1836,22 +1891,22 @@ msgid ""
 "\t\t%s\n"
 msgstr "Ukázka s s s s s s s n s"
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Selhání: %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, fuzzy, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr "Selhalo až s n"
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "Předčasný konec souboru\n"
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, fuzzy, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1884,7 +1939,7 @@ msgstr ""
 " s SERVER název z až až\n"
 " n název NÁZEV Jak až zapnuto n"
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1895,66 +1950,66 @@ msgstr ""
 "Přeloženo s libpulse %s\n"
 "Propojeno s libpulse %s\n"
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, fuzzy, c-format
 msgid "Please specify a sample file to load\n"
 msgstr "Prosím a soubor až n"
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "Selhalo otevření zvukového souboru.\n"
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, fuzzy, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr "Vy až a název až n"
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, fuzzy, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr "Vy až a název až odstranit n"
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, fuzzy, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr "Vy až a cíl rejstřík a a cíl n"
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, fuzzy, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr "Vy až a zdroj rejstřík a a zdroj n"
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, fuzzy, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr "Vy až a modul název a n"
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, fuzzy, c-format
 msgid "You have to specify a module index\n"
 msgstr "Vy až a modul rejstřík n"
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
 "value.\n"
 msgstr "Vy ne cíl Vy až při booleovská hodnota hodnota n"
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value.\n"
 msgstr "Vy ne zdroj Vy až při booleovská hodnota hodnota n"
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, fuzzy, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr "Vy až a cíl rejstřík a a cíl n"
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr "Nezadán žádný platný příkaz.\n"
@@ -2152,6 +2207,21 @@ msgstr "s n"
 msgid "Cannot access autospawn lock."
 msgstr "přístup."
 
+#, fuzzy
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
+#~ msgstr ""
+#~ "Volaný SUID root a plánování v reálném čase / o vysoké prioritě bylo "
+#~ "zažádáno v konfiguraci. Nedisponujeme ovšem potřebnými oprávněními:\n"
+#~ "Nejsme ve skupinÄ› \""
+
+#, fuzzy
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--disallow-exit booleovský argument"
+
 #~ msgid "Default sink name (%s) does not exist in name register."
 #~ msgstr "Výchozí jméno cíle (%s) ve jmenném registru neexistuje."
 
diff --git a/po/de.po b/po/de.po
index 23e7190..e55fd1e 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2009-02-19 12:04+0100\n"
 "Last-Translator: Fabian Affolter <fab at fedoraproject.org>\n"
 "Language-Team: German <fedora-trans-de at redhat.com>\n"
@@ -18,69 +18,80 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Language: German\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 #, fuzzy
 msgid "Analog Stereo"
 msgstr "Stereo"
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 #, fuzzy
 msgid "Analog Surround 4.0"
 msgstr "Surround 4.0"
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 #, fuzzy
 msgid "Analog Surround 4.1"
 msgstr "Surround 4.1"
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 #, fuzzy
 msgid "Analog Surround 5.0"
 msgstr "Surround 5.0"
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 #, fuzzy
 msgid "Analog Surround 5.1"
 msgstr "Surround 5.1"
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 #, fuzzy
 msgid "Analog Surround 7.1"
 msgstr "Surround 7.1"
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -217,88 +228,93 @@ msgstr "System-Modus auf dieser Plattform nicht unterstützt."
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) fehlgeschlagen: %s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "Parsen der Kommandzeile fehlgeschlagen."
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr ""
 "Wir befinden uns in der Gruppe '%s', was Scheduling höchster Priorität "
 "ermöglicht."
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr ""
 "Wir befinden uns in der Gruppe '%s', was Echtzeit-Scheduling ermöglicht."
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "Richtlinien gewähren das Recht aquire-high-priority."
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "Richtlinien verweigern das Recht acquire-high-priority."
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "Richtlinien gewähren das Recht aquire-real-time."
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "Richtlinien verweigern das Recht acquire-real-time."
 
-#: ../src/daemon/main.c:508
-#, fuzzy
+#: ../src/daemon/main.c:511
+#, fuzzy, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"Konfiguration fordert Aufruf der SUID root und Echtzeit-Scheduling höchster "
-"Priorität. Allerdings fehlen die nötigen Rechte:\n"
-"Wir befinden uns nicht in der Gruppe '"
+"' und PolicyKit verweigern diese Rechte. Verwerfe SUID wieder.\n"
+"Erlangen Sie die den Richtlinien entsprechenden Rechte, um Echtzeit-"
+"Scheduling zu aktivieren oder werden Sie Mitglied der Gruppe '"
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr "Scheduling höchster Priorität konfiguriert, jedoch nicht erlaubt."
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "RLIMIT_RTPRIO erfolgreich erhöht"
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "RLIMIT_RTPRIO fehlgeschlagen: %s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "Verwerfe CAP_NICE"
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr "Echtzeit-Scheduling konfiguriert, jedoch nicht erlaubt."
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "Daemon läuft nicht"
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "Daemon läuft als PID %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Konnte Prozess nicht abbrechen: %s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -306,167 +322,167 @@ msgstr ""
 "Dieses Programm sollte ohne die Option --system nicht als Administrator "
 "ausgeführt werden."
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 msgid "Root privileges required."
 msgstr "Root-Berechtigungen benötigt."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "--start nicht unterstützt für System-Instanzen."
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr "System-Modus aktiv, jeodch --disallow-exit nicht gesetzt!"
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr "System-Modus aktiv, jedoch --disallow-module-loading nicht gesetzt!"
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr "System-Modus aktiv, SHM-Modus gezwungenermaßen deaktiviert!"
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr "System-Modus aktiv, Exit-Idle-Time gezwungenermaßen deaktiviert!"
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "Reservieren von STDIO fehlgeschlagen."
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "pipe fehlgeschlagen: %s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "fork() fehlgeschlagen: %s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "read() fehlgeschlagen: %s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "Start des Daemons fehlgeschlagen."
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "Start des Daemons erfolgreich."
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Dies ist PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Kompilier-Host: %s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "Kompilier-CFLAGS: %s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "Laufe auf Host: %s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr "%u CPUs gefunden."
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "Seitengröße ist %lu Bytes."
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Kompiliere mit Valgrind-Unterstützung: ja"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Kompiliere mit Valgrind-Unterstützung: nein"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "Läuft im Valgrind-Modus: %s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Optimiertes Build: ja"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Optimiertes Build: nein"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "Beziehen der Maschinen-ID fehlgeschlagen"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "System- ID ist %s."
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "Nutze Laufzeit-Verzeichnis %s."
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "Nutze Zustands-Verzeichnis %s."
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "Laufe im System-Modus: %s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() fehlgeschlagen."
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr "Neue hochauslösende Timer verfügbar! Guten Appetit!"
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
 msgstr "Der Chefkoch empfiehlt: Linux mit aktivierten hochauslösenden Timern!"
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() fehlgeschlagen."
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "Konnte Daemon nicht initialisieren."
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Daemon verweigert Ausführung, da keine Module geladen."
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "Start des Daemons abgeschlossen."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "Herunterfahren des Daemon gestartet."
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "Daemon beendet."
 
@@ -638,7 +654,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "Option --disallow-module-loading erfordert bool'schen Wert"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "Option --disallow-exit erfordert bool'schen Wert"
 
 #: ../src/daemon/cmdline.c:309
@@ -651,11 +668,13 @@ msgstr ""
 "Ungültiges Log-Ziel: Benutzen Sie entweder 'syslog', 'stderr' oder 'auto'."
 
 #: ../src/daemon/cmdline.c:333
-msgid "--log-time boolean argument"
-msgstr "--log-time erfordert bool'schen Wert"
+#, fuzzy
+msgid "--log-time expects boolean argument"
+msgstr "Option --realtime erfordert bool'schen Wert"
 
 #: ../src/daemon/cmdline.c:340
-msgid "--log-meta boolean argument"
+#, fuzzy
+msgid "--log-meta expects boolean argument"
 msgstr "--log-meta erfordert bool'schen Wert"
 
 #: ../src/daemon/cmdline.c:359
@@ -715,67 +734,78 @@ msgstr "Lade einmalig: %s\n"
 msgid "Path: %s\n"
 msgstr "Pfad: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Ungültiges Log-Ziel '%s'."
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Ungültige Log-Stufe '%s'."
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Ungültige Resample-Methode '%s'."
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] Ungültiges rlimit '%s'."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] rlimit auf dieser Plattform nicht unterstützt."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Ungültiges Sample-Format '%s'."
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Ungültige Sample-Rate '%s'."
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Ungültige Sample-Kanäle '%s'."
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Ungültige Sample-Kanäle '%s'."
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Ungültige Anzahl von Fragmenten '%s'."
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Ungültige Fragmentgröße '%s'."
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Ungültige Nice-Stufe '%s'."
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Öffnen der Konfigurationsdatei fehlgeschlagen : %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Lese von Konfigurationsdatei: %s ###\n"
@@ -788,6 +818,36 @@ msgstr "Root-Privilegien aufgeben."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "Fähigkeiten erfolgreich auf CAP_SYS_NICE reduziert."
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "Terminieren des PulseAudio-Daemon fehlgeschlagen."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+"Wir befinden uns in der Gruppe '%s', was Scheduling höchster Priorität "
+"ermöglicht."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1275,7 +1335,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() fehlgeschlagen: %s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Verbindungsfehler: %s\n"
@@ -1492,7 +1552,7 @@ msgid "Too many arguments.\n"
 msgstr "Zu viele Argumente.\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() fehlgeschlagen.\n"
@@ -1503,12 +1563,12 @@ msgid "io_new() failed.\n"
 msgstr "io_new() fehlgeschlagen.\n"
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() fehlgeschlagen.\n"
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1520,7 +1580,7 @@ msgid "time_new() failed.\n"
 msgstr "time_new() fehlgeschlagen.\n"
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() fehlgeschlagen.\n"
@@ -1550,7 +1610,7 @@ msgstr "Resume fehlgeschlagen: %s\n"
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr "WARNUNG: Sound-Server läuft nicht lokal, nicht ausgesetzt.\n"
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1615,14 +1675,15 @@ msgstr "Sample-Pufferspeichergrösse: %s\n"
 msgid "Failed to get server information: %s\n"
 msgstr "Beziehen der Server-Information fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1636,12 +1697,12 @@ msgstr ""
 "Vorgabe Quelle: %s\n"
 "Cookie: %08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "Erhalten der Sink-Informationen fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -1680,12 +1741,12 @@ msgstr ""
 "\tEigenschaften:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "Beziehen der Quellen-Informationen fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -1724,20 +1785,20 @@ msgstr ""
 "\tEigenschaften:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "k. A."
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Beziehen der Modul-Information fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -1754,12 +1815,12 @@ msgstr ""
 "\tEigenschaften:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Beziehen der Client-Information fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -1774,12 +1835,12 @@ msgstr ""
 "\tEigenschaften:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Beziehen der Karten-Information fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -1796,22 +1857,22 @@ msgstr ""
 "\tEigenschaften:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr "\tProfile:\n"
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "\tAktive Profile: %s\n"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr "Konnte Sink-Eingabe-Informationen nicht holen: %s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1848,12 +1909,12 @@ msgstr ""
 "\tEigenschaften:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr "Konnte Informationen über Quell-Ausgabe nicht holen: %s\n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1882,12 +1943,12 @@ msgstr ""
 "\tEigenschaften:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "Beziehen der Sample-Informationen fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -1918,22 +1979,22 @@ msgstr ""
 "\tEigenschaften:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr "Hochladen des Sample fehlgeschlagen: %s\n"
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "Dateiende ist zu früh aufgetreten\n"
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1978,7 +2039,7 @@ msgstr ""
 "  -s, --server=SERVER                   Name des Zielservers\n"
 "  -n, --client-name=NAME                Rufname des Clients auf dem Server\n"
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1989,48 +2050,48 @@ msgstr ""
 "Kompiliert mit libpulse %s\n"
 "Gelinkt mit libpulse %s\n"
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr "Geben Sie eine zu öffnende Sample-Datei an\n"
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "Öffnen der Audio-Datei fehlgeschlagen.\n"
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr "Sie müssen eine abzuspielende Sample-Datei angeben\n"
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr "Sie müssen eine zu löschende Sample-Datei angeben\n"
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben\n"
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr ""
 "Sie müssen eine Indexwert für die Quell-Ausgabe und eine Quelle angeben\n"
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr "Sie müssen einen Modulnamen angeben und Argumente übergeben.\n"
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr "Sie müssen einen Indexwert für ein Modul angeben\n"
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
@@ -2039,7 +2100,7 @@ msgstr ""
 "Sie sollten nur eine Senke angeben. Sie müssen zumindest einen bool'schen "
 "Wert übergeben.\n"
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
@@ -2048,12 +2109,12 @@ msgstr ""
 "Sie sollten nur eine Quelle angeben. Sie müssen zumindest einen bool'schen "
 "Wert übergeben.\n"
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr "Sie müssen einen Karten-Name/Indexwert und einen Profilnamen angeben\n"
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr "Kein gültiger Befehl angegeben.\n"
@@ -2258,14 +2319,17 @@ msgstr "Fehler beim Zugriff auf Autostart -Sperre."
 
 #, fuzzy
 #~ msgid ""
-#~ "', PolicyKit refuse to grant us the requested privileges and we have no "
-#~ "increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
-#~ "For enabling real-time/high-priority scheduling please acquire the "
-#~ "appropriate PolicyKit privileges, or become a member of '"
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
 #~ msgstr ""
-#~ "' und PolicyKit verweigern diese Rechte. Verwerfe SUID wieder.\n"
-#~ "Erlangen Sie die den Richtlinien entsprechenden Rechte, um Echtzeit-"
-#~ "Scheduling zu aktivieren oder werden Sie Mitglied der Gruppe '"
+#~ "Konfiguration fordert Aufruf der SUID root und Echtzeit-Scheduling "
+#~ "höchster Priorität. Allerdings fehlen die nötigen Rechte:\n"
+#~ "Wir befinden uns nicht in der Gruppe '"
+
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--log-time erfordert bool'schen Wert"
 
 #~ msgid ""
 #~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
diff --git a/po/el.po b/po/el.po
index 262ecd5..e23edb5 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: el\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2008-08-22 19:40+0300\n"
 "Last-Translator: Dimitris Glezos <dimitris at glezos.com>\n"
 "Language-Team: Greek <fedora-trans-el at redhat.com>\n"
@@ -16,63 +16,74 @@ msgstr ""
 "X-Generator: KAider 0.1\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -209,221 +220,227 @@ msgstr ""
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr ""
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr ""
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr ""
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:508
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr ""
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr ""
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr ""
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr ""
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
 msgstr ""
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 msgid "Root privileges required."
 msgstr ""
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr ""
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr ""
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr ""
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr ""
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr ""
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr ""
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Αυτό είναι το PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr ""
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr ""
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr ""
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr ""
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr ""
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr ""
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr ""
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr ""
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr ""
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr ""
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr ""
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr ""
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
@@ -431,27 +448,27 @@ msgstr ""
 "Δικέ μου, ο πυρήνας σου είναι για τα μπάζα! Η πρόταση του σεφ σήμερα είναι "
 "Linux με ενεργοποιημένα τα high-resolution timers!"
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr ""
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr ""
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr ""
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr ""
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr ""
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr ""
 
@@ -556,7 +573,7 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr ""
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+msgid "--disallow-exit expects boolean argument"
 msgstr ""
 
 #: ../src/daemon/cmdline.c:309
@@ -568,11 +585,11 @@ msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
 msgstr ""
 
 #: ../src/daemon/cmdline.c:333
-msgid "--log-time boolean argument"
+msgid "--log-time expects boolean argument"
 msgstr ""
 
 #: ../src/daemon/cmdline.c:340
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr ""
 
 #: ../src/daemon/cmdline.c:359
@@ -632,67 +649,78 @@ msgstr ""
 msgid "Path: %s\n"
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr ""
@@ -705,6 +733,32 @@ msgstr ""
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr ""
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr ""
@@ -1192,7 +1246,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr ""
@@ -1367,7 +1421,7 @@ msgid "Too many arguments.\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr ""
@@ -1378,12 +1432,12 @@ msgid "io_new() failed.\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr ""
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1395,7 +1449,7 @@ msgid "time_new() failed.\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr ""
@@ -1425,7 +1479,7 @@ msgstr ""
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr ""
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1481,7 +1535,7 @@ msgstr ""
 msgid "Failed to get server information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:136
+#: ../src/utils/pactl.c:137
 #, c-format
 msgid ""
 "User name: %s\n"
@@ -1489,17 +1543,18 @@ msgid ""
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -1521,12 +1576,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -1548,20 +1603,20 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr ""
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -1572,12 +1627,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -1587,12 +1642,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, c-format
 msgid "Failed to get card information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -1603,22 +1658,22 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, c-format
 msgid "\tActive Profile: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1639,12 +1694,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1661,12 +1716,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -1684,22 +1739,22 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1725,7 +1780,7 @@ msgid ""
 "server\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1733,66 +1788,66 @@ msgid ""
 "Linked with libpulse %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
 "value.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr ""
diff --git a/po/es.po b/po/es.po
index baee21d..b293ed3 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PulseAudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2009-01-16 09:25-0300\n"
 "Last-Translator: daniel cabrera <h.daniel.cabrera at gmail.com>\n"
 "Language-Team: Spanish <fedora-trans-es at redhat.com>\n"
@@ -16,63 +16,74 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -211,90 +222,91 @@ msgstr "El modo a nivel de sistema no es soportado en esta plataforma."
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) falló: %s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "Falló al analizar la línea de comando."
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr "Estamos en el grupo '%s', permitiendo planificación de prioridad alta."
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr "Estamos en el grupo '%s', permitiendo planificación en tiempo real."
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "PolicyKit garantiza que se obtenga el privilegio de alta prioridad."
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "PolicyKit se niega a dar acceso al privilegio de alta prioridad."
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "PolicyKit garantiza el acceso al privilegio de tiempo real."
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "PolicyKit se niega a dar acceso al privilegio de tiempo real."
 
-#: ../src/daemon/main.c:508
-#, fuzzy
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"En la configuración se ha pedido una llamada de SUID root y planificación en "
-"tiempo real/de prioridad alta. Sin embargo, carecemos de los provilegios "
-"necesarios:\n"
-"No estamos en el grupo '"
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "Está habilitadada la planificación de prioridad alta, pero no están "
 "permitidas por la política."
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "RLIMIT_RTPRIO incrementado en forma exitosa"
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "Fallo en RLIMIT_RTPRIO: %s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "Abandonando CAP_NICE"
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "Está habilitada la planificación en tiempo real, pero no está permitido por "
 "la política."
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "El demonio no está funcionando"
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "El demonio está funcionando como PID %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "No se ha podido detener el demonio: %s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -302,149 +314,149 @@ msgstr ""
 "Este programa no tiene por qué ser ejecutado como root (a menos que --system "
 "sea especificado)."
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 #, fuzzy
 msgid "Root privileges required."
 msgstr "Se necesitan privilegios de usuario root."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "--start no está soportado para las instancias del sistema."
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr ""
 "Ejecutándose en modo de sistema, ¡pero no se ha configurado --disallow-exit! "
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 "Ejecutándose en modo de sistema, ¡pero no se ha configurado --disallow-"
 "module-loading!"
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr ""
 "Ejecutándose en modo de sistema, ¡desactivando forzadamente el modo SHM!"
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 "Ejecutándose en modo de sistema, ¡desactivando forzadamente exit idle time!"
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "Fallo al intentar adquirir stdio."
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "Falló el pipe: %s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "Falló el fork(): %s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "Falló la operación read(): %s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "Falló el inicio del demonio. "
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "El demonio se inició exitosamente."
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Esto es PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Host de compilación: %s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "Compilación CFLAGS: %s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "Ejecutándose en el host: %s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr ""
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "El tamaño de la página es de %lu bytes"
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Soporte para compilar con Valgrind: si"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Soporte para compilar con Valgrind: no"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "Ejecutándose en modo valgrind: %s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Build optimizado: si"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Build optimizado: no"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "Fallo al intentar obtener el ID de la máquina"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "El ID de la máquina es %s"
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "Utilizando directorio de tiempo de ejecución %s."
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "Utilizando directorio de estado %s."
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "Ejecutándose en modo de sistema: %s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "Ha fallado pa_pid_file_create()."
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr ""
 "¡Existen cronómetros de alta resolución fresquitos y disponibles! ¡Bon "
 "appetit!"
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
@@ -452,29 +464,29 @@ msgstr ""
 "¡Amigo, su kernel deja mucho que desear! ¡El plato que hoy recomienda el "
 "chef es Linux con cronómetros de alta resolución activados!  "
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "Falló pa_core_new()."
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "Fallo al intentar iniciar el demonio."
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr ""
 "El demonio se ha iniciado sin ningún módulo cargado, y por ello se niega a "
 "funcionar."
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "El demonio se inició completamente."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "Comienza a apagarse el demonio."
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "El demonio se ha apagado."
 
@@ -663,7 +675,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading espera un argumento booleano"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit argumento booleano"
 
 #: ../src/daemon/cmdline.c:309
@@ -676,12 +689,12 @@ msgstr "Log target inválido: use o \"syslog\", o \"stderr\", o \"auto\"."
 
 #: ../src/daemon/cmdline.c:333
 #, fuzzy
-msgid "--log-time boolean argument"
-msgstr "--disallow-exit argumento booleano"
+msgid "--log-time expects boolean argument"
+msgstr "--realtime espera un argumento booleano"
 
 #: ../src/daemon/cmdline.c:340
 #, fuzzy
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr "--disallow-exit argumento booleano"
 
 #: ../src/daemon/cmdline.c:359
@@ -741,67 +754,78 @@ msgstr "Carga una vez: %s\n"
 msgid "Path: %s\n"
 msgstr "Ruta: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Destino de log inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Nivel de log inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Método de remuestreo inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] Rlimit inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] Rlimit no soportado en esta plataforma."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Formato de muestra inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Tasa de muestra inválida '%s'."
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Canales de muestra inválidos '%s'."
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Canales de muestra inválidos '%s'."
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Cantidad de fragmentoa inválidos '%s'."
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Tamaño inválido de fragmento '%s'."
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Nivel de nice inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "No se pudo abrir el archivo de configuración: %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Leyendo desde el archivo de confioguración: %s ###\n"
@@ -815,6 +839,34 @@ msgstr "Abandonando privilegios de root."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "Capacidades limitadas con éxito para CAP_SYS_NICE-"
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "Error al intentar detener el demonio de PulseAudio."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr "Estamos en el grupo '%s', permitiendo planificación de prioridad alta."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1302,7 +1354,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() falló: %s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Error en la conexión: %s\n"
@@ -1529,7 +1581,7 @@ msgid "Too many arguments.\n"
 msgstr "Demasiados argumentos.\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() falló.\n"
@@ -1540,12 +1592,12 @@ msgid "io_new() failed.\n"
 msgstr "io_new() falló.\n"
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() falló.\n"
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1557,7 +1609,7 @@ msgid "time_new() failed.\n"
 msgstr "time_new() falló.\n"
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() falló.\n"
@@ -1587,7 +1639,7 @@ msgstr "Error al continuar: %s\n"
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr "AVISO: El servidor de sonido no es local, no se suspende.\n"
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1655,14 +1707,15 @@ msgstr "Tamaño del cache de muestra: %s\n"
 msgid "Failed to get server information: %s\n"
 msgstr "Error al intentar obtener información del servidor: %s\n"
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1676,12 +1729,12 @@ msgstr ""
 "Fuente por defecto: %s\n"
 "Cookie: %08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "Error al intentar obtener información del destino: %s\n"
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, fuzzy, c-format
 msgid ""
 "Sink #%u\n"
@@ -1715,12 +1768,12 @@ msgstr ""
 "Propiedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "Error al intentar obtener información de la fuente: %s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, fuzzy, c-format
 msgid ""
 "Source #%u\n"
@@ -1754,20 +1807,20 @@ msgstr ""
 "Propiedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "n/a"
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Error al intentar obtener información del módulo: %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, fuzzy, c-format
 msgid ""
 "Module #%u\n"
@@ -1783,12 +1836,12 @@ msgstr ""
 "Contador de uso: %s\n"
 "Descargar automáticamente: %s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Error al intentar obtener información del cliente: %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, fuzzy, c-format
 msgid ""
 "Client #%u\n"
@@ -1803,12 +1856,12 @@ msgstr ""
 "Propiedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, fuzzy, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Error al intentar obtener información de autoload: %s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, fuzzy, c-format
 msgid ""
 "Card #%u\n"
@@ -1824,22 +1877,22 @@ msgstr ""
 "Propiedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, fuzzy, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "Falló el pipe: %s"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr "Error al intentar obtener información de entrada del destino: %s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, fuzzy, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1873,13 +1926,13 @@ msgstr ""
 "Propiedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr ""
 "Error al intentar obtener información acerca de la salida de la fuenta: %s\n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, fuzzy, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1908,12 +1961,12 @@ msgstr ""
 "Propiedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "Error al intentar obtener información de muestra: %s\n"
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, fuzzy, c-format
 msgid ""
 "Sample #%u\n"
@@ -1942,22 +1995,22 @@ msgstr ""
 "Propiedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Falla: %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr "Fallo al cargar muestra: %s\n"
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "Fin prematuro del archivo\n"
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, fuzzy, c-format
 msgid ""
 "%s [options] stat\n"
@@ -2003,7 +2056,7 @@ msgstr ""
 "  -n, --client-name=NAME                Cómo llamar a este cliente en el "
 "servidor\n"
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -2014,49 +2067,49 @@ msgstr ""
 "Compilado con libpulse %s\n"
 "Linked con libpulse %s\n"
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr "Por favor, especifique un archivo de muestra a cargar\n"
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "Error al intentar abrir el archivo de sonido.\n"
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr "Debe especificar un nombre de muestra para ser escuchado\n"
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr "Debe especificar un nombre de muestra para ser eliminado\n"
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr ""
 "Debe especificar un índice para las entradas del destino y un destino\n"
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr ""
 "Debe especificar un índice para las salidas de la fuente, y una fuente\n"
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr "Debe especificar un nombre de módulo y los argumentos\n"
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr "Debe especificar un índice de módulo\n"
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
@@ -2065,7 +2118,7 @@ msgstr ""
 "No puede especificar más de un destino. Tiene que especificar al menos un "
 "valor booleano.\n"
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
@@ -2074,13 +2127,13 @@ msgstr ""
 "No puede especificar más de una fuente. Tiene que especificar al menos un "
 "valor booleano.\n"
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, fuzzy, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr ""
 "Debe especificar un índice para las entradas del destino y un destino\n"
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr "No se ha especificadfo ningún comando válido.\n"
@@ -2290,6 +2343,22 @@ msgstr "Utilizando especificaciones de muestra '%s'\n"
 msgid "Cannot access autospawn lock."
 msgstr "No se puede acceder al candado de autogeneración."
 
+#, fuzzy
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
+#~ msgstr ""
+#~ "En la configuración se ha pedido una llamada de SUID root y planificación "
+#~ "en tiempo real/de prioridad alta. Sin embargo, carecemos de los "
+#~ "provilegios necesarios:\n"
+#~ "No estamos en el grupo '"
+
+#, fuzzy
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--disallow-exit argumento booleano"
+
 #~ msgid ""
 #~ "' and PolicyKit refuse to grant us priviliges. Dropping SUID again.\n"
 #~ "For enabling real-time scheduling please acquire the appropriate "
diff --git a/po/fi.po b/po/fi.po
index 4306364..ba0b9e7 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: git trunk\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2009-02-13 08:57+0200\n"
 "Last-Translator: Timo Jyrinki <timo.jyrinki at iki.fi>\n"
 "Language-Team: Finnish <laatu at lokalisointi.org>\n"
@@ -15,63 +15,74 @@ msgstr ""
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -208,83 +219,89 @@ msgstr ""
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr ""
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr ""
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr ""
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:508
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr ""
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr ""
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "Tosiaikainen ajoitus otettu käyttöön asetuksissa, mutta käytännöt eivät "
 "salli sitä."
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "Taustaprosessi ei ole käynnissä"
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "Taustaprosessi käynnissä prosessitunnisteella %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Taustaprosessin lopettaminen epäonnistui: %s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -292,144 +309,144 @@ msgstr ""
 "Tätä ohjelmaa ei ole tarkoitettu suoritettavaksi pääkäyttäjänä (ellei --"
 "system ole määritelty)."
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 msgid "Root privileges required."
 msgstr "Pääkäyttäjän (root) oikeudet vaaditaan."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr ""
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr ""
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr ""
 "Suoritetaan järjestelmätilassa, otetaan SHM-tila pakotetusti pois käytöstä."
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 "Suoritetaan järjestelmätilassa, otetaan poistumisen joutenoloaika "
 "pakotetusti pois käytöstä."
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr ""
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "Taustaprosessin käynnistys epäonnistui."
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "Taustaprosessin käynnistys onnistui."
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Tämä on PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Käännöksen isäntäkone: %s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "Käännösaikaiset C-liput (CFLAGS): %s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "Käynnissä isäntäkoneella: %s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr "Löydettiin %u CPU:ta."
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "Sivun koko on %lu tavua"
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Käännetty Valgrind-tuella: kyllä"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Käännetty Valgrind-tuella: ei"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "Käynnissä valgrind-tilassa: %s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Optimoitu rakentaminen: kyllä"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Optimoitu rakentaminen: ei"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "Konetunnisteen nouto epäonnistui"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "Konetunniste on %s."
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "Käytetään ajonaikaista hakemistoa %s."
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "Käytetään tilahakemistoa %s."
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "Suoritetaan järjestelmätilassa: %s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr ""
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr "Korkean tarkkuuden ajastimet käytettävissä."
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
@@ -437,29 +454,29 @@ msgstr ""
 "Hei, ytimesi on kehno! Linux korkean tarkkuuden ajastimien tuella on hyvin "
 "suositeltava!"
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr ""
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "Taustaprosessin alustus epäonnistui."
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr ""
 "Taustaprosessin käynnistys ilman ladattavia moduuleita, kieltäydytään "
 "toiminnasta."
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "Taustaprosessin käynnistys valmis."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "Taustaprosessin sulkeminen käynnistetty."
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "Taustaprosessi lopetettu."
 
@@ -564,7 +581,7 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr ""
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+msgid "--disallow-exit expects boolean argument"
 msgstr ""
 
 #: ../src/daemon/cmdline.c:309
@@ -576,11 +593,11 @@ msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
 msgstr ""
 
 #: ../src/daemon/cmdline.c:333
-msgid "--log-time boolean argument"
+msgid "--log-time expects boolean argument"
 msgstr ""
 
 #: ../src/daemon/cmdline.c:340
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr ""
 
 #: ../src/daemon/cmdline.c:359
@@ -640,67 +657,78 @@ msgstr "Lataa kerran: %s\n"
 msgid "Path: %s\n"
 msgstr "Polku: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "Epäkelpo kanavakartta\n"
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Asetustiedoston avaaminen epäonnistui: %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Luettu asetustiedostosta: %s ###\n"
@@ -713,6 +741,33 @@ msgstr "Pudotetaan pääkäyttäjän oikeudet."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr ""
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "PulseAudio-taustaprosessin lopettaminen epäonnistui."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1200,7 +1255,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Yhteysvirhe: %s\n"
@@ -1375,7 +1430,7 @@ msgid "Too many arguments.\n"
 msgstr "Liian monta argumenttia.\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr ""
@@ -1386,12 +1441,12 @@ msgid "io_new() failed.\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr ""
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1403,7 +1458,7 @@ msgid "time_new() failed.\n"
 msgstr ""
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr ""
@@ -1433,7 +1488,7 @@ msgstr ""
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr ""
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1489,14 +1544,15 @@ msgstr ""
 msgid "Failed to get server information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1510,12 +1566,12 @@ msgstr ""
 "Oletuslähde: %s\n"
 "Eväste: %08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "Nielun tietojen nouto epäonnistui: %s\n"
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -1554,12 +1610,12 @@ msgstr ""
 "\tOminaisuudet:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "Lähteen tietojen nouto epäonnistui: %s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -1598,20 +1654,20 @@ msgstr ""
 "\tOminaisuudet:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "-"
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Moduulin tietojen nouto epäonnistui: %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -1628,12 +1684,12 @@ msgstr ""
 "\tOminaisuudet:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Asiakkaan tietojen nouto epäonnistui: %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -1648,12 +1704,12 @@ msgstr ""
 "\tOminaisuudet:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Kortin tietojen nouto epäonnistui: %s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -1670,22 +1726,22 @@ msgstr ""
 "\tOminaisuudet:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr "\tProfiilit:\n"
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "\tAktiivinen profiili: %s\n"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr "Nielun sisääntulon tietojen nouto epäonnistui: %s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1722,12 +1778,12 @@ msgstr ""
 "\tOminaisuudet:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr "Lähteen ulostulon tietojen nouto epäonnistui: %s\n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1756,12 +1812,12 @@ msgstr ""
 "\tOminaisuudet:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "Näytetietojen nouto epäonnistui: %s\n"
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -1792,22 +1848,22 @@ msgstr ""
 "\tOminaisuudet:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Epäonnistuminen: %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "Ennenaikainen tiedoston päättyminen\n"
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1833,7 +1889,7 @@ msgid ""
 "server\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1841,66 +1897,66 @@ msgid ""
 "Linked with libpulse %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
 "value.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 3706e6b..8908a6e 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio trunk\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2008-10-18 20:34+0200\n"
 "Last-Translator: Pablo Martin-Gomez <pablo.martin-gomez at laposte.net>\n"
 "Language-Team: Français <fedora-trans-fr at redhat.com>\n"
@@ -19,63 +19,74 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=n>1;\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -215,93 +226,94 @@ msgstr "Mode système étendu non pris en charge sur cette plateforme."
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) a échoué : %s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "Échec lors de l'analyse de la ligne de commande"
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr ""
 "Nous sommes dans le groupe « %s », permettant une planification à haute "
 "priorité."
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr ""
 "Nous sommes dans le groupe « %s », permettant une planification en temps réel."
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "PolicyKit a accordé l'acquisition des permissions de haute priorité."
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "PolicyKit a refusé l'acquisition des permissions de haute priorité."
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "PolicyKit a accordé l'acquisition des permissions de temps réel."
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "PolicyKit a refusé l'acquisition des permissions de temps réel."
 
-#: ../src/daemon/main.c:508
-#, fuzzy
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"Le SUID root a été appelé et la planification à haute priorité/en temps réel "
-"demandée dans la configuration. Néanmoins nous n'avons pas les permissions "
-"nécessaires :\n"
-"nous ne somme pas dans le groupe "
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "La planification à haute priorité est activée dans la configuration mais "
 "n'est pas permise par la politique."
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "Augmentation de RLIMIT_RTPRIO réussie"
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "RLIMIT_RTPRIO a échoué : %s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "Abandon de CAP_NICE"
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "La planification en temps réel est activée mais n'est pas permise par la "
 "politique."
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "Lé démon n'est pas lancé"
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "Le démon est lancé avec le PID %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Impossible de tuer le démon : %s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -309,148 +321,148 @@ msgstr ""
 "Le programme n'est pas conçu pour être lancé en tant que root (sauf si --"
 "system est renseigné)."
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 #, fuzzy
 msgid "Root privileges required."
 msgstr "Les permissions root sont nécessaires."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "--start n'est pas pris en charge pour les instances système."
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr ""
 "Le démon s'exécute en mode système, mais --disallow-exit n'est pas défini."
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 "Le démon s'exécute en mode système, mais --disallow-module-loading n'est pas "
 "défini."
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr "Le démon s'exécute en mode système, désactivation forcée du mode SHM."
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 "Le démon s'exécute en mode système, désactivation forcée de la fermeture "
 "après délai d'inactivité."
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "Échec lors de l'acquisition de stdio."
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "Échec du tube : %s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "Échec de fork() : %s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "Échec de read() : %s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "Échec lors du démarrage du démon."
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "Démarrage du démon réussi."
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Pulseaudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Hôte de compilation : %s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "CFLAGS de compilation : %s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "Exécution sur l'hôte : %s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr ""
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "La taille de la page est de %lu octets"
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Compilé avec la prise en charge Valgrind : oui"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Compilé avec la prise en charge Valgrind : non"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "Exécution en mode valgrind : %s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Construction optimisée : oui"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Construction optimisée : non"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "Échec lors de l'obtention de l'ID de la machine"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "L'ID de la machine est %s."
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "Utilisation du répertoire d'exécution %s."
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "Utilisation du répertoire d'état %s."
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "Exécution en mode système : %s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "Échec de pa_pid_file_create()."
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr ""
 "De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
@@ -458,27 +470,27 @@ msgstr ""
 "Eh mec, ton noyau il pue ! La recommandation d'aujourd'hui du patron est "
 "d'activer les horloges à haute résolution sur ton Linux."
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "Échec de pa_core_new()."
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "Échec lors de l'initialisation du démon"
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Démarrage du démon sans aucun module chargé : refus de fonctionner."
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "Démarrage du démon effectué."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "Fermeture du démon initiée."
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "Démon terminé."
 
@@ -666,7 +678,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading requiert un paramètre booléen"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit requiert un paramètre booléen"
 
 #: ../src/daemon/cmdline.c:309
@@ -679,12 +692,12 @@ msgstr "Cible du journal invalide : utilisez « syslog », « stderr » ou
 
 #: ../src/daemon/cmdline.c:333
 #, fuzzy
-msgid "--log-time boolean argument"
-msgstr "--disallow-exit requiert un paramètre booléen"
+msgid "--log-time expects boolean argument"
+msgstr "--realtime requiert un paramètre booléen"
 
 #: ../src/daemon/cmdline.c:340
 #, fuzzy
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr "--disallow-exit requiert un paramètre booléen"
 
 #: ../src/daemon/cmdline.c:359
@@ -745,67 +758,78 @@ msgid "Path: %s\n"
 msgstr "Chemin : %s\n"
 
 # dans les lignes suivantes [%s = nom de fichier: %u = ligne dans celui-ci]
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Cible du journal « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Niveau du journal « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Méthode de rééchantillonnage « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] rlimit « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] rlimit n'est pas pris en charge sur cette plateforme."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Format d'échantillon « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Taux d'échantillonnage « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Canaux d'échantillonnage « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Canaux d'échantillonnage « %s » invalide."
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Nombre de fragments « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Taille du fragment « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Niveau de priorité (nice) « %s » invalide."
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Échec lors de l'ouverture du fichier de configuration : %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Lecture à partir du fichier de configuration : %s ###\n"
@@ -819,6 +843,36 @@ msgstr "Abandon des permissions root."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "Limitation des capacités à CAP_SYS_NICE réussie."
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "Impossible de tuer le démon PulseAudio."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+"Nous sommes dans le groupe « %s », permettant une planification à haute "
+"priorité."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1309,7 +1363,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "Échec de pa_stream_connect_record() : %s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Échec lors de la connexion : %s\n"
@@ -1542,7 +1596,7 @@ msgid "Too many arguments.\n"
 msgstr "Trop de paramètres.\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "Échec de pa_mainloop_new().\n"
@@ -1553,12 +1607,12 @@ msgid "io_new() failed.\n"
 msgstr "Échec de io_new().\n"
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "Échec de pa_context_new().\n"
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1570,7 +1624,7 @@ msgid "time_new() failed.\n"
 msgstr "Échec de time_new().\n"
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "Échec de pa_mainloop_run().\n"
@@ -1601,7 +1655,7 @@ msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr ""
 "AVERTISSEMENT : le serveur de son n'est pas local, suspension annulée.\n"
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1669,14 +1723,15 @@ msgstr "Taille du cache de l'échantillon : %s\n"
 msgid "Failed to get server information: %s\n"
 msgstr "Échec lors de l'obtention des informations du serveur : %s\n"
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1690,13 +1745,13 @@ msgstr ""
 "Source par défaut : %s\n"
 "Cookie : %08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "Échec lors de l'obtention des informations sur la destination : %s\n"
 
 # demander à Lennart s'il s'agit de monitor of source
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, fuzzy, c-format
 msgid ""
 "Sink #%u\n"
@@ -1730,12 +1785,12 @@ msgstr ""
 "Propriétés :\n"
 "%s"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "Échec lors de l'obtention des informations sur la source : %s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, fuzzy, c-format
 msgid ""
 "Source #%u\n"
@@ -1769,20 +1824,20 @@ msgstr ""
 "Propriétés :\n"
 "%s"
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "n/d"
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Échec lors de l'obtention des informations du module : %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, fuzzy, c-format
 msgid ""
 "Module #%u\n"
@@ -1798,12 +1853,12 @@ msgstr ""
 "Nombre d'utilisations : %s\n"
 "Déchargement automatique : %s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Échec lors de l'obtention des informations du client : %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, fuzzy, c-format
 msgid ""
 "Client #%u\n"
@@ -1818,13 +1873,13 @@ msgstr ""
 "Propriétés :\n"
 "%s"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, fuzzy, c-format
 msgid "Failed to get card information: %s\n"
 msgstr ""
 "Échec lors de l'obtention des informations du chargement automatique : %s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, fuzzy, c-format
 msgid ""
 "Card #%u\n"
@@ -1840,24 +1895,24 @@ msgstr ""
 "Propriétés :\n"
 "%s"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, fuzzy, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "Échec du tube : %s"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr ""
 "Échec lors de l'obtention des informations de l'entrée de la destination : %"
 "s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, fuzzy, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1891,13 +1946,13 @@ msgstr ""
 "Propriétés :\n"
 "%s"
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr ""
 "Échec lors de l'obtention des informations de la sortie de la source : %s\n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, fuzzy, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1926,7 +1981,7 @@ msgstr ""
 "Propriétés :\n"
 "%s"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "Échec lors de l'obtention des informations de l'échantillon : %s\n"
@@ -1934,7 +1989,7 @@ msgstr "Échec lors de l'obtention des informations de l'échantillon : %s\n"
 # Lazy ?
 # load-sample-lazy = Create a new entry in the sample cache, but don't load
 # the sample immediately. The sample is loaded only when it is first used
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, fuzzy, c-format
 msgid ""
 "Sample #%u\n"
@@ -1963,22 +2018,22 @@ msgstr ""
 "Propriétés :\n"
 "%s"
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Échec : %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr "Échec lors de l'envoi de l'échantillon : %s\n"
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "Fin prématurée du fichier\n"
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, fuzzy, c-format
 msgid ""
 "%s [options] stat\n"
@@ -2024,7 +2079,7 @@ msgstr ""
 "  -n, --client-name=NOM                 Définit le nom de ce client sur le "
 "serveur\n"
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -2035,48 +2090,48 @@ msgstr ""
 "Compilé avec libpulse %s\n"
 "Lié avec libpulse %s\n"
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr "Veuillez indiquer un fichier d'échantillon à charger\n"
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "Échec lors de l'ouverture du fichier audio.\n"
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr "Vous devez indiquer un nom d'échantillon à lire\n"
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr "Vous devez indiquer un nom d'échantillon à supprimer\n"
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr ""
 "Vous devez indiquer un index de sortie de destination et une destination\n"
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr "Vous devez indiquer un index de sortie de source et une source\n"
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr "Vous devez indiquer un nom de module et des paramètres.\n"
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr "Vous devez indiquer un index de module\n"
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
@@ -2085,7 +2140,7 @@ msgstr ""
 "Vous ne pouvez pas indiquer plus d'une destination. Vous devez indiquer au "
 "moins une valeur booléenne.\n"
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
@@ -2094,13 +2149,13 @@ msgstr ""
 "Vous ne pouvez pas indiquer plus d'une source. Vous devez indiquer au moins "
 "une valeur booléenne.\n"
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, fuzzy, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr ""
 "Vous devez indiquer un index de sortie de destination et une destination\n"
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr "Aucune commande valide indiquée.\n"
@@ -2312,6 +2367,22 @@ msgstr "Utilisation de la spécification de l'échantillon « %s »\n"
 msgid "Cannot access autospawn lock."
 msgstr "Impossible d'accèder au verrou autonome."
 
+#, fuzzy
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
+#~ msgstr ""
+#~ "Le SUID root a été appelé et la planification à haute priorité/en temps "
+#~ "réel demandée dans la configuration. Néanmoins nous n'avons pas les "
+#~ "permissions nécessaires :\n"
+#~ "nous ne somme pas dans le groupe "
+
+#, fuzzy
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--disallow-exit requiert un paramètre booléen"
+
 #~ msgid "Default sink name (%s) does not exist in name register."
 #~ msgstr ""
 #~ "Le nom de la destination par défaut (%s) n'existe pas dans le registre "
diff --git a/po/it.po b/po/it.po
index 9404692..96660b8 100644
--- a/po/it.po
+++ b/po/it.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-17 23:22+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2009-02-23 19:19+0100\n"
 "Last-Translator: Luca Ferretti <elle.uca at libero.it>\n"
 "Language-Team: Italiano <tp at lists.linux.it>\n"
@@ -15,6 +15,83 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+#: ../src/modules/alsa/alsa-util.c:526
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:532
+#, fuzzy
+msgid "Analog Stereo"
+msgstr "Stereo"
+
+#: ../src/modules/alsa/alsa-util.c:538
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:544
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:551
+#, fuzzy
+msgid "Analog Surround 4.0"
+msgstr "Surround 4.0"
+
+#: ../src/modules/alsa/alsa-util.c:558
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:566
+#, fuzzy
+msgid "Analog Surround 4.1"
+msgstr "Surround 4.1"
+
+#: ../src/modules/alsa/alsa-util.c:574
+#, fuzzy
+msgid "Analog Surround 5.0"
+msgstr "Surround 5.0"
+
+#: ../src/modules/alsa/alsa-util.c:582
+#, fuzzy
+msgid "Analog Surround 5.1"
+msgstr "Surround 5.1"
+
+#: ../src/modules/alsa/alsa-util.c:590
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:599
+#, fuzzy
+msgid "Analog Surround 7.1"
+msgstr "Surround 7.1"
+
+#: ../src/modules/alsa/alsa-util.c:1582
+#, c-format
+msgid ""
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1668
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
 #: ../src/daemon/ltdl-bind-now.c:124
 msgid "Failed to find original lt_dlopen loader."
 msgstr "Ricerca del loader lt_dlopen originale non riuscita."
@@ -115,8 +192,7 @@ msgstr "Il GID dell'utente \"%s\" e del gruppo \"%s\" non corrispondono."
 msgid "Home directory of user '%s' is not '%s', ignoring."
 msgstr "La directory home dell'utente \"%s\" non è \"%s\", ignorato."
 
-#: ../src/daemon/main.c:201
-#: ../src/daemon/main.c:206
+#: ../src/daemon/main.c:201 ../src/daemon/main.c:206
 #, c-format
 msgid "Failed to create '%s': %s"
 msgstr "Creazione di \"%s\" non riuscita: %s"
@@ -150,247 +226,271 @@ msgstr "Modalità \"system wide\" non supportata su questa piattaforma."
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) non riuscita: %s"
 
-#: ../src/daemon/main.c:429
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "Analisi della riga di comando non riuscita."
 
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr "Attualmente nel gruppo \"%s\", che consente scheduling high-priority."
 
-#: ../src/daemon/main.c:458
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr "Attualmente nel gruppo \"%s\", che consente scheduling real-time."
 
-#: ../src/daemon/main.c:466
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "Privilegi acquire-high-priority assegnati da PolicyKit."
 
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "Privilegi acquire-high-priority rifiutati da PolicyKit."
 
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "Privilegi acquire-real-time assegnati da PolicyKit."
 
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "Privilegi acquire-real-time rifiutati da PolicyKit."
 
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
-"Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"Called SUID root and real-time and/or high-priority scheduling was requested "
+"in the configuration. However, we lack the necessary privileges:\n"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"Lo scheduling invocato come root SUID e real-time o high-priority è stato richiesto nella configurazione. Purtroppo mancano i privilegi necessari:\n"
-"Non si è parte del gruppo '"
 
-#: ../src/daemon/main.c:530
-msgid "High-priority scheduling enabled in configuration but not allowed by policy."
-msgstr "Scheduling high-priority abilitato nella configurazione, ma non ammesso dalla politica."
+#: ../src/daemon/main.c:536
+msgid ""
+"High-priority scheduling enabled in configuration but not allowed by policy."
+msgstr ""
+"Scheduling high-priority abilitato nella configurazione, ma non ammesso "
+"dalla politica."
 
-#: ../src/daemon/main.c:559
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "Incremento di RLIMIT_RTPRIO riuscito"
 
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "RLIMIT_RTPRIO non riuscito: %s"
 
 # abbandono??
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "Abbandono del CAP_NICE"
 
-#: ../src/daemon/main.c:576
-msgid "Real-time scheduling enabled in configuration but not allowed by policy."
-msgstr "Scheduling real-time abilitato nella configurazione, ma non ammesso dalla politica."
+#: ../src/daemon/main.c:582
+msgid ""
+"Real-time scheduling enabled in configuration but not allowed by policy."
+msgstr ""
+"Scheduling real-time abilitato nella configurazione, ma non ammesso dalla "
+"politica."
 
-#: ../src/daemon/main.c:637
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "Demone non in esecuzione"
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "Demone in esecuzione con PID %u"
 
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Terminazione del demone non riuscita: %s"
 
-#: ../src/daemon/main.c:667
-msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr "Questo programma non è pensato per essere eseguito come root (a meno di specificare --system)."
+#: ../src/daemon/main.c:673
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"Questo programma non è pensato per essere eseguito come root (a meno di "
+"specificare --system)."
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:675
 msgid "Root privileges required."
 msgstr "Richiesti privilegi di root."
 
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "--start non supportato per le istanze di sistema."
 
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr "In esecuzione in modalità sistema, ma --disallow-exit non impostato."
 
-#: ../src/daemon/main.c:682
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "In esecuzione in modalità sistema, ma --disallow-module-loading non impostato."
+msgstr ""
+"In esecuzione in modalità sistema, ma --disallow-module-loading non "
+"impostato."
 
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr "In esecuzione in modalità sistema, disabilitata modalità SHM in modo forzoso."
+msgstr ""
+"In esecuzione in modalità sistema, disabilitata modalità SHM in modo forzoso."
 
 # tempo idle????
-#: ../src/daemon/main.c:690
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "In esecuzione in modalità sistema, disabilitato il tempo idle di uscita in modo forzoso."
+msgstr ""
+"In esecuzione in modalità sistema, disabilitato il tempo idle di uscita in "
+"modo forzoso."
 
-#: ../src/daemon/main.c:717
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "Acquisizione di STDIO non riuscita."
 
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "pipe non riuscita: %s"
 
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "fork() non riuscita: %s"
 
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "read() non riuscita: %s"
 
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "Avvio del demone non riuscito."
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "Avvio del demone riuscito."
 
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Questo è PulseAudio %s"
 
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Host di compilazione: %s"
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "CFLAGS di compilazione: %s"
 
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "In esecuzione sull'host: %s"
 
 # evviva il rispetto della l10n!!!
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr "Trovate %u CPU."
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "La dimensione di pagina è %lu byte"
 
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Compilato con supporto a Valgrind: sì"
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Compilato con supporto a Valgrind: no"
 
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "In esecuzione in modalità valgrind: %s"
 
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Build ottimizzata: sì"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Build ottimizzata: no"
 
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "Recupero dell'ID della macchina non riuscito"
 
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "L'ID della macchina è %s"
 
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "In uso directory di runtime %s."
 
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "In uso directory di stato %s."
 
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "In esecuzione in modalità sistema: %s"
 
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() non riuscita."
 
 # io mi domando e dico..... mah!
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr "Disponibili timer high-resolution freschi freschi! Buon appetito!"
 
 # $REPEAT_PREVIOUS_COMMENT_HERE
-#: ../src/daemon/main.c:892
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr "Hey, questo kernel è andato a male! Lo chef oggi raccomanda Linux con i timer high-resolution abilitati!"
+#: ../src/daemon/main.c:898
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+"Hey, questo kernel è andato a male! Lo chef oggi raccomanda Linux con i "
+"timer high-resolution abilitati!"
 
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() non riuscita."
 
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "Inizializzazione del demone non riuscita."
 
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Avvio del demone senza alcun modulo caricato, rifiuta di lavorare."
 
-#: ../src/daemon/main.c:983
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "Completato l'avvio del demone."
 
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "Iniziato l'arresto del demone."
 
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "Demone terminato."
 
@@ -406,37 +506,48 @@ msgid ""
 "      --dump-conf                       Dump default configuration\n"
 "      --dump-modules                    Dump list of available modules\n"
 "      --dump-resample-methods           Dump available resample methods\n"
-"      --cleanup-shm                     Cleanup stale shared memory segments\n"
-"      --start                           Start the daemon if it is not running\n"
+"      --cleanup-shm                     Cleanup stale shared memory "
+"segments\n"
+"      --start                           Start the daemon if it is not "
+"running\n"
 "  -k  --kill                            Kill a running daemon\n"
-"      --check                           Check for a running daemon (only returns exit code)\n"
+"      --check                           Check for a running daemon (only "
+"returns exit code)\n"
 "\n"
 "OPTIONS:\n"
 "      --system[=BOOL]                   Run as system-wide instance\n"
 "  -D, --daemonize[=BOOL]                Daemonize after startup\n"
 "      --fail[=BOOL]                     Quit when startup fails\n"
 "      --high-priority[=BOOL]            Try to set high nice level\n"
-"                                        (only available as root, when SUID or\n"
+"                                        (only available as root, when SUID "
+"or\n"
 "                                        with elevated RLIMIT_NICE)\n"
 "      --realtime[=BOOL]                 Try to enable realtime scheduling\n"
-"                                        (only available as root, when SUID or\n"
+"                                        (only available as root, when SUID "
+"or\n"
 "                                        with elevated RLIMIT_RTPRIO)\n"
-"      --disallow-module-loading[=BOOL]  Disallow module user requested module\n"
+"      --disallow-module-loading[=BOOL]  Disallow module user requested "
+"module\n"
 "                                        loading/unloading after startup\n"
 "      --disallow-exit[=BOOL]            Disallow user requested exit\n"
-"      --exit-idle-time=SECS             Terminate the daemon when idle and this\n"
+"      --exit-idle-time=SECS             Terminate the daemon when idle and "
+"this\n"
 "                                        time passed\n"
-"      --module-idle-time=SECS           Unload autoloaded modules when idle and\n"
+"      --module-idle-time=SECS           Unload autoloaded modules when idle "
+"and\n"
 "                                        this time passed\n"
-"      --scache-idle-time=SECS           Unload autoloaded samples when idle and\n"
+"      --scache-idle-time=SECS           Unload autoloaded samples when idle "
+"and\n"
 "                                        this time passed\n"
 "      --log-level[=LEVEL]               Increase or set verbosity level\n"
 "  -v                                    Increase the verbosity level\n"
 "      --log-target={auto,syslog,stderr} Specify the log target\n"
-"      --log-meta[=BOOL]                 Include code location in log messages\n"
+"      --log-meta[=BOOL]                 Include code location in log "
+"messages\n"
 "      --log-time[=BOOL]                 Include timestamps in log messages\n"
 "      --log-backtrace=FRAMES            Include a backtrace in log messages\n"
-"  -p, --dl-search-path=PATH             Set the search path for dynamic shared\n"
+"  -p, --dl-search-path=PATH             Set the search path for dynamic "
+"shared\n"
 "                                        objects (plugins)\n"
 "      --resample-method=METHOD          Use the specified resampling method\n"
 "                                        (See --dump-resample-methods for\n"
@@ -447,10 +558,12 @@ msgid ""
 "      --disable-shm[=BOOL]              Disable shared memory support.\n"
 "\n"
 "STARTUP SCRIPT:\n"
-"  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module with\n"
+"  -L, --load=\"MODULE ARGUMENTS\"         Load the specified plugin module "
+"with\n"
 "                                        the specified argument\n"
 "  -F, --file=FILENAME                   Run the specified script\n"
-"  -C                                    Open a command line on the running TTY\n"
+"  -C                                    Open a command line on the running "
+"TTY\n"
 "                                        after startup\n"
 "\n"
 "  -n                                    Don't load default script file\n"
@@ -460,70 +573,99 @@ msgstr ""
 "COMMANDI:\n"
 "  -h, --help                            Mostra questo aiuto\n"
 "      --version                         Mostra la versione\n"
-"      --dump-conf                       Riversa la configurazione predefinita\n"
-"      --dump-modules                    Riversa l'elenco dei moduli disponibili\n"
+"      --dump-conf                       Riversa la configurazione "
+"predefinita\n"
+"      --dump-modules                    Riversa l'elenco dei moduli "
+"disponibili\n"
 "      --dump-resample-methods           Riversa i metodi di ricampionamento\n"
 "                                         disponibili\n"
-"      --cleanup-shm                     Pulisce i segmenti di memoria condivisa\n"
+"      --cleanup-shm                     Pulisce i segmenti di memoria "
+"condivisa\n"
 "                                         esauriti\n"
-"      --start                           Avvia il demone se non è in esecuzione\n"
+"      --start                           Avvia il demone se non è in "
+"esecuzione\n"
 "  -k  --kill                            Uccide un demone in esecuzione\n"
-"      --check                           Controlla la presenza di un demone in\n"
-"                                         esecuzione (restituisce solo il codice\n"
+"      --check                           Controlla la presenza di un demone "
+"in\n"
+"                                         esecuzione (restituisce solo il "
+"codice\n"
 "                                         di uscita)\n"
 "\n"
 "OPZIONI:\n"
 "      --system[=BOOL]                   Esegue un'istanza di sistema\n"
 "  -D, --daemonize[=BOOL]                Rende demone dopo l'avvio\n"
 "      --fail[=BOOL]                     Esce quando l'avvio non riesce\n"
-"      --high-priority[=BOOL]            Tenta di impostare un livello di nice\n"
-"                                         elevato (disponibile solo come root,\n"
-"                                         quando SUID o con RLIMIT_NICE elevato)\n"
+"      --high-priority[=BOOL]            Tenta di impostare un livello di "
+"nice\n"
+"                                         elevato (disponibile solo come "
+"root,\n"
+"                                         quando SUID o con RLIMIT_NICE "
+"elevato)\n"
 "      --realtime[=BOOL]                 Tenta di abilitare lo scheduling\n"
-"                                         realtime (disponibile solo come root,\n"
-"                                         quando SUID o con RLIMIT_RTPRIO elevato)\n"
-"      --disallow-module-loading[=BOOL]  Rifiuta il caricamento/rimozione dei\n"
+"                                         realtime (disponibile solo come "
+"root,\n"
+"                                         quando SUID o con RLIMIT_RTPRIO "
+"elevato)\n"
+"      --disallow-module-loading[=BOOL]  Rifiuta il caricamento/rimozione "
+"dei\n"
 "                                         moduli richiesi dall'utente dopo \n"
 "                                         l'avvio\n"
-"      --disallow-exit[=BOOL]            Rifiuta le richieste utente di uscita\n"
-"      --exit-idle-time=SECONDI          Termina il demone quando inattivo e una\n"
+"      --disallow-exit[=BOOL]            Rifiuta le richieste utente di "
+"uscita\n"
+"      --exit-idle-time=SECONDI          Termina il demone quando inattivo e "
+"una\n"
 "                                         volta trascorso questo tempo\n"
 "      --module-idle-time=SECONDI        Rimuove i moduli caricati in modo\n"
-"                                         automatico quando inattivo e una volta\n"
+"                                         automatico quando inattivo e una "
+"volta\n"
 "                                         trascorso questo tempo\n"
 "      --scache-idle-time=SECONDI        Rimuove i campioni caricati in modo\n"
-"                                         automatico quando inattivo e una volta\n"
+"                                         automatico quando inattivo e una "
+"volta\n"
 "                                         trascorso questo tempo\n"
 "      --log-level[=LIVELLO]             Incrementa o imposta il livello di \n"
 "                                         verbosità\n"
 "  -v                                    Incrementa il livello di verbosità\n"
-"      --log-target={auto,syslog,stderr} Specifica la destinazione del registro\n"
-"      --log-meta[=BOOL]                 Include la posizione del codice nei \n"
+"      --log-target={auto,syslog,stderr} Specifica la destinazione del "
+"registro\n"
+"      --log-meta[=BOOL]                 Include la posizione del codice "
+"nei \n"
 "                                         messaggi di registro\n"
-"      --log-time[=BOOL]                 Include i marcatempo nei messaggi di\n"
+"      --log-time[=BOOL]                 Include i marcatempo nei messaggi "
+"di\n"
 "                                         registro\n"
-"      --log-backtrace=FRAMES            Include un backtrace nei messaggi di \n"
+"      --log-backtrace=FRAMES            Include un backtrace nei messaggi "
+"di \n"
 "                                          registro\n"
-"  -p, --dl-search-path=PERCORSO         Imposta il percorso di ricerca per gli \n"
-"                                         oggetti condivisi dinamici (plugin)\n"
-"      --resample-method=METODO         Usa il metodo di ricampionamento indicato\n"
-"                                        (vedere --dump-resample-methods per i\n"
+"  -p, --dl-search-path=PERCORSO         Imposta il percorso di ricerca per "
+"gli \n"
+"                                         oggetti condivisi dinamici "
+"(plugin)\n"
+"      --resample-method=METODO         Usa il metodo di ricampionamento "
+"indicato\n"
+"                                        (vedere --dump-resample-methods per "
+"i\n"
 "                                        valori ammessi)\n"
 "      --use-pid-file[=BOOL]             Crea un file PID\n"
-"      --no-cpu-limit[=BOOL]             Non installa un limitatore di carico\n"
-"                                         della CPU sulle piattaforme che lo \n"
+"      --no-cpu-limit[=BOOL]             Non installa un limitatore di "
+"carico\n"
+"                                         della CPU sulle piattaforme che "
+"lo \n"
 "                                         supportano.\n"
 "      --disable-shm[=BOOL]              Disabilita il supporto alla memoria\n"
 "                                         condivisa.\n"
 "\n"
 "SCRIPT DI AVVIO:\n"
-"  -L, --load=\"MODULO ARGOMENTI\"         Carica il modulo di plugin specificato\n"
+"  -L, --load=\"MODULO ARGOMENTI\"         Carica il modulo di plugin "
+"specificato\n"
 "                                         con gli argomenti specificati\n"
 "  -F, --file=NOME_FILE                  Esegue lo script specificato\n"
-"  -C                                    Apre una riga di comando sulla TTY in \n"
+"  -C                                    Apre una riga di comando sulla TTY "
+"in \n"
 "                                         esecuzione dopo l'avvio\n"
 "\n"
-"  -n                                    Non carica il file script predefinito\n"
+"  -n                                    Non carica il file script "
+"predefinito\n"
 
 #: ../src/daemon/cmdline.c:252
 msgid "--daemonize expects boolean argument"
@@ -534,8 +676,13 @@ msgid "--fail expects boolean argument"
 msgstr "--fail richiede un argomento booleano"
 
 #: ../src/daemon/cmdline.c:269
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
-msgstr "--log-level richiede il livello di registro come argomento (sia nell'intervallo numerico 0..4 oppure uno tra debug, info, notice, warn, error)."
+msgid ""
+"--log-level expects log level argument (either numeric in range 0..4 or one "
+"of debug, info, notice, warn, error)."
+msgstr ""
+"--log-level richiede il livello di registro come argomento (sia "
+"nell'intervallo numerico 0..4 oppure uno tra debug, info, notice, warn, "
+"error)."
 
 #: ../src/daemon/cmdline.c:281
 msgid "--high-priority expects boolean argument"
@@ -553,7 +700,8 @@ msgstr "--disallow-module-loading richiede un argomento booleano"
 #
 # Segnalato http://pulseaudio.org/ticket/484
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit richiede un argomento booleano"
 
 #: ../src/daemon/cmdline.c:309
@@ -562,16 +710,19 @@ msgstr "--use-pid-file richiede un argomento booleano"
 
 #: ../src/daemon/cmdline.c:326
 msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr "Destinazione del registro non valida: usare \"syslog\", \"stderr\" o \"auto\"."
+msgstr ""
+"Destinazione del registro non valida: usare \"syslog\", \"stderr\" o \"auto"
+"\"."
 
-# FIXME missing expects???
 #: ../src/daemon/cmdline.c:333
-msgid "--log-time boolean argument"
-msgstr "--log-time richiede un argomento booleano"
+#, fuzzy
+msgid "--log-time expects boolean argument"
+msgstr "--realtime richiede un argomento booleano"
 
 # FIXME missing expects???
 #: ../src/daemon/cmdline.c:340
-msgid "--log-meta boolean argument"
+#, fuzzy
+msgid "--log-meta expects boolean argument"
 msgstr "--log-meta richiede un argomento booleano"
 
 #: ../src/daemon/cmdline.c:359
@@ -632,68 +783,79 @@ msgstr "Caricato una sola volta: %s\n"
 msgid "Path: %s\n"
 msgstr "Percorso: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Destinazione di registro \"%s\" non valida."
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Livello di registro \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Metodo di ricampionamento \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] rlimit \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] rlimit non supportato su questa piattaforma."
 
 # o campionamento?? ma campionamento non è sampling?
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Formato di campionamento \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Frequenza di campionamento '%s' non valida."
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Canali di campionamento \"%s\" non validi."
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Canali di campionamento \"%s\" non validi."
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Numero di frammenti \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Dimensione dei frammenti \"%s\" non valida."
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Livello di nice \"%s\" non valido."
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Apertura del file di configurazione non riuscita: %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Lettura dal file di configurazione: %s ###\n"
@@ -706,8 +868,35 @@ msgstr "Abbandono dei privilegi di root."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "Limitazione delle capacità a CAP_SYS_NICE riuscita."
 
-#: ../src/pulse/channelmap.c:103
-#: ../src/pulse/channelmap.c:804
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "Uccisione del demone PulseAudio non riuscita."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr "Attualmente nel gruppo \"%s\", che consente scheduling high-priority."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
+#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
 
@@ -913,12 +1102,9 @@ msgstr "Superiore posteriore sinistro"
 msgid "Top Rear Right"
 msgstr "Superiore posteriore destro"
 
-#: ../src/pulse/channelmap.c:476
-#: ../src/pulse/sample.c:167
-#: ../src/pulse/volume.c:170
-#: ../src/pulse/volume.c:196
-#: ../src/pulse/volume.c:216
-#: ../src/pulse/volume.c:246
+#: ../src/pulse/channelmap.c:476 ../src/pulse/sample.c:167
+#: ../src/pulse/volume.c:170 ../src/pulse/volume.c:196
+#: ../src/pulse/volume.c:216 ../src/pulse/volume.c:246
 msgid "(invalid)"
 msgstr "(non valido)"
 
@@ -1067,8 +1253,7 @@ msgstr "%0.1f KiB"
 msgid "%u B"
 msgstr "%u B"
 
-#: ../src/pulse/client-conf-x11.c:55
-#: ../src/utils/pax11publish.c:100
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
 msgid "XOpenDisplay() failed"
 msgstr "XOpenDisplay() non riuscita"
 
@@ -1081,21 +1266,21 @@ msgstr "Analisi dei dati cookie non riuscita"
 msgid "Failed to open configuration file '%s': %s"
 msgstr "Apertura del file di configurazione \"%s\" non riuscita: %s"
 
-#: ../src/pulse/context.c:517
+#: ../src/pulse/context.c:519
 msgid "No cookie loaded. Attempting to connect without."
 msgstr "Nessun cookie caricato. Tentativo di connettersi senza."
 
-#: ../src/pulse/context.c:643
+#: ../src/pulse/context.c:649
 #, c-format
 msgid "fork(): %s"
 msgstr "fork(): %s"
 
-#: ../src/pulse/context.c:696
+#: ../src/pulse/context.c:702
 #, c-format
 msgid "waitpid(): %s"
 msgstr "waitpid(): %s"
 
-#: ../src/pulse/context.c:1257
+#: ../src/pulse/context.c:1279
 #, c-format
 msgid "Received message for unknown extension '%s'"
 msgstr "Ricevuto messaggio per l'estensione sconosciuta \"%s\""
@@ -1181,94 +1366,89 @@ msgstr "Stream spostato sul device %s (%u, %ssospeso).%s \n"
 msgid "not "
 msgstr "non"
 
-#: ../src/utils/pacat.c:259
+#: ../src/utils/pacat.c:271
 #, c-format
 msgid "Connection established.%s \n"
 msgstr "Connessione stabilita.%s \n"
 
-#: ../src/utils/pacat.c:262
+#: ../src/utils/pacat.c:274
 #, c-format
 msgid "pa_stream_new() failed: %s\n"
 msgstr "pa_stream_new() non riuscita: %s\n"
 
-#: ../src/utils/pacat.c:288
+#: ../src/utils/pacat.c:301
 #, c-format
 msgid "pa_stream_connect_playback() failed: %s\n"
 msgstr "pa_stream_connect_playback() non riuscita: %s\n"
 
-#: ../src/utils/pacat.c:294
+#: ../src/utils/pacat.c:307
 #, c-format
 msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() non riuscita: %s\n"
 
-#: ../src/utils/pacat.c:308
-#: ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758
-#: ../src/utils/paplay.c:183
+#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Connessione non riuscita: %s\n"
 
-#: ../src/utils/pacat.c:329
-#: ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
 #, c-format
 msgid "Failed to drain stream: %s\n"
 msgstr "Svuotamento dello stream non riuscito: %s\n"
 
-#: ../src/utils/pacat.c:334
-#: ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
 #, c-format
 msgid "Playback stream drained.\n"
 msgstr "Stream di riproduzione svuotato.\n"
 
-#: ../src/utils/pacat.c:344
-#: ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
 #, c-format
 msgid "Draining connection to server.\n"
 msgstr "Svuotamento della connessione sul server.\n"
 
-#: ../src/utils/pacat.c:370
+#: ../src/utils/pacat.c:382
 #, c-format
 msgid "Got EOF.\n"
 msgstr "Ricevuto EOF.\n"
 
-#: ../src/utils/pacat.c:376
+#: ../src/utils/pacat.c:388
 #, c-format
 msgid "pa_stream_drain(): %s\n"
 msgstr "pa_stream_drain(): %s\n"
 
-#: ../src/utils/pacat.c:386
+#: ../src/utils/pacat.c:398
 #, c-format
 msgid "read() failed: %s\n"
 msgstr "read() non riuscita: %s\n"
 
-#: ../src/utils/pacat.c:418
+#: ../src/utils/pacat.c:430
 #, c-format
 msgid "write() failed: %s\n"
 msgstr "write() non riuscita: %s\n"
 
-#: ../src/utils/pacat.c:439
+#: ../src/utils/pacat.c:451
 #, c-format
 msgid "Got signal, exiting.\n"
 msgstr "Ricevuto il segnale, uscita.\n"
 
-#: ../src/utils/pacat.c:453
+#: ../src/utils/pacat.c:465
 #, c-format
 msgid "Failed to get latency: %s\n"
 msgstr "Recupero della latenza non riuscito: %s\n"
 
 # dubbio: tempo o durata??
-#: ../src/utils/pacat.c:458
+#: ../src/utils/pacat.c:470
 #, c-format
 msgid "Time: %0.3f sec; Latency: %0.0f usec.  \r"
 msgstr "Tempo: %0.3f sec; Latenza: %0.0f millisec.  \r"
 
-#: ../src/utils/pacat.c:478
+#: ../src/utils/pacat.c:490
 #, c-format
 msgid "pa_stream_update_timing_info() failed: %s\n"
 msgstr "pa_stream_update_timing_info() non riuscita: %s\n"
 
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:503
 #, c-format
 msgid ""
 "%s [options]\n"
@@ -1281,27 +1461,44 @@ msgid ""
 "\n"
 "  -v, --verbose                         Enable verbose operations\n"
 "\n"
-"  -s, --server=SERVER                   The name of the server to connect to\n"
-"  -d, --device=DEVICE                   The name of the sink/source to connect to\n"
-"  -n, --client-name=NAME                How to call this client on the server\n"
-"      --stream-name=NAME                How to call this stream on the server\n"
-"      --volume=VOLUME                   Specify the initial (linear) volume in range 0...65536\n"
-"      --rate=SAMPLERATE                 The sample rate in Hz (defaults to 44100)\n"
-"      --format=SAMPLEFORMAT             The sample type, one of s16le, s16be, u8, float32le,\n"
-"                                        float32be, ulaw, alaw, s32le, s32be (defaults to s16ne)\n"
-"      --channels=CHANNELS               The number of channels, 1 for mono, 2 for stereo\n"
+"  -s, --server=SERVER                   The name of the server to connect "
+"to\n"
+"  -d, --device=DEVICE                   The name of the sink/source to "
+"connect to\n"
+"  -n, --client-name=NAME                How to call this client on the "
+"server\n"
+"      --stream-name=NAME                How to call this stream on the "
+"server\n"
+"      --volume=VOLUME                   Specify the initial (linear) volume "
+"in range 0...65536\n"
+"      --rate=SAMPLERATE                 The sample rate in Hz (defaults to "
+"44100)\n"
+"      --format=SAMPLEFORMAT             The sample type, one of s16le, "
+"s16be, u8, float32le,\n"
+"                                        float32be, ulaw, alaw, s32le, s32be "
+"(defaults to s16ne)\n"
+"      --channels=CHANNELS               The number of channels, 1 for mono, "
+"2 for stereo\n"
 "                                        (defaults to 2)\n"
-"      --channel-map=CHANNELMAP          Channel map to use instead of the default\n"
-"      --fix-format                      Take the sample format from the sink the stream is\n"
+"      --channel-map=CHANNELMAP          Channel map to use instead of the "
+"default\n"
+"      --fix-format                      Take the sample format from the sink "
+"the stream is\n"
 "                                        being connected to.\n"
-"      --fix-rate                        Take the sampling rate from the sink the stream is\n"
+"      --fix-rate                        Take the sampling rate from the sink "
+"the stream is\n"
 "                                        being connected to.\n"
-"      --fix-channels                    Take the number of channels and the channel map\n"
-"                                        from the sink the stream is being connected to.\n"
+"      --fix-channels                    Take the number of channels and the "
+"channel map\n"
+"                                        from the sink the stream is being "
+"connected to.\n"
 "      --no-remix                        Don't upmix or downmix channels.\n"
-"      --no-remap                        Map channels by index instead of name.\n"
-"      --latency=BYTES                   Request the specified latency in bytes.\n"
-"      --process-time=BYTES              Request the specified process time per request in bytes.\n"
+"      --no-remap                        Map channels by index instead of "
+"name.\n"
+"      --latency=BYTES                   Request the specified latency in "
+"bytes.\n"
+"      --process-time=BYTES              Request the specified process time "
+"per request in bytes.\n"
 msgstr ""
 "%s [OPZIONI]\n"
 "\n"
@@ -1313,41 +1510,58 @@ msgstr ""
 "\n"
 "  -v, --verbose                         Abilita la modalità prolisse\n"
 "\n"
-"  -s, --server=SERVER                   Il nome del server a cui connettersi\n"
+"  -s, --server=SERVER                   Il nome del server a cui "
+"connettersi\n"
 "  -d, --device=DEVICE                   Il nome del sink/sorgente a cui\n"
 "                                         connettersi\n"
-"  -n, --client-name=NOME                Come chiamare questo client sul server\n"
-"      --stream-name=NOME                Come chiamare questo stream sul server\n"
-"      --volume=VOLUME                   Specifica il volume iniziale (lineare) \n"
+"  -n, --client-name=NOME                Come chiamare questo client sul "
+"server\n"
+"      --stream-name=NOME                Come chiamare questo stream sul "
+"server\n"
+"      --volume=VOLUME                   Specifica il volume iniziale "
+"(lineare) \n"
 "                                         nell'intervallo 0...65536\n"
 "      --rate=FREQ_CAMP                  La frequenza di campionamento in Hz\n"
 "                                         (44100 come predefinita)\n"
-"      --format=FORM_CAMP                Il tipo di campionamento. Valori ammessi\n"
+"      --format=FORM_CAMP                Il tipo di campionamento. Valori "
+"ammessi\n"
 "                                         sono: s16le, s16be, u8, float32le,\n"
-"                                         float32be, ulaw, alaw, s32le, s32be\n"
+"                                         float32be, ulaw, alaw, s32le, "
+"s32be\n"
 "                                         (s16ne come predefinito)\n"
-"      --channels=CANALI                 Il numero di canali, 1 per mono, 2 per\n"
+"      --channels=CANALI                 Il numero di canali, 1 per mono, 2 "
+"per\n"
 "                                         stereo (2 come predefinito)\n"
-"      --channel-map=MAP_CANALI          La mappa di canali da usare al posto di\n"
+"      --channel-map=MAP_CANALI          La mappa di canali da usare al posto "
+"di\n"
 "                                         quella predefinita\n"
-"      --fix-format                      Recupera il formato di campionamento\n"
-"                                         dal sink a cui lo stream sta per essere\n"
+"      --fix-format                      Recupera il formato di "
+"campionamento\n"
+"                                         dal sink a cui lo stream sta per "
+"essere\n"
 "                                         connesso.\n"
-"      --fix-rate                        Recupera la frequenza di campionamento\n"
-"                                         dal sink a cui lo stream sta per essere\n"
+"      --fix-rate                        Recupera la frequenza di "
+"campionamento\n"
+"                                         dal sink a cui lo stream sta per "
+"essere\n"
 "                                         connesso.\n"
-"      --fix-channels                    Recupera il numero di canali e la mappa\n"
-"                                         dei canali dal sink a cui lo stream \n"
+"      --fix-channels                    Recupera il numero di canali e la "
+"mappa\n"
+"                                         dei canali dal sink a cui lo "
+"stream \n"
 "                                         sta per essere connesso.\n"
 "      --no-remix                        Non eseguire l'upmix o il downmix \n"
 "                                         dei canali.\n"
-"      --no-remap                        Mappa i canali per indice invece che \n"
+"      --no-remap                        Mappa i canali per indice invece "
+"che \n"
 "                                         per nome.\n"
-"      --latency=BYTE                    Richiede la latenza specificata in byte.\n"
-"      --process-time=BYTE               Richiede il tempo di elaborazione per\n"
+"      --latency=BYTE                    Richiede la latenza specificata in "
+"byte.\n"
+"      --process-time=BYTE               Richiede il tempo di elaborazione "
+"per\n"
 "                                         richiesta specificato in byte.\n"
 
-#: ../src/utils/pacat.c:592
+#: ../src/utils/pacat.c:604
 #, c-format
 msgid ""
 "pacat %s\n"
@@ -1358,95 +1572,90 @@ msgstr ""
 "Compilato con libpulse %s\n"
 "Link eseguito con libpulse %s\n"
 
-#: ../src/utils/pacat.c:649
+#: ../src/utils/pacat.c:661
 #, c-format
 msgid "Invalid channel map '%s'\n"
 msgstr "Mappa di canali \"%s\" non valida\n"
 
-#: ../src/utils/pacat.c:678
+#: ../src/utils/pacat.c:690
 #, c-format
 msgid "Invalid latency specification '%s'\n"
 msgstr "Specifica di latenza \"%s\" non valida\n"
 
 # esecuzione???
-#: ../src/utils/pacat.c:685
+#: ../src/utils/pacat.c:697
 #, c-format
 msgid "Invalid process time specification '%s'\n"
 msgstr "Specifica di tempo di elaborazione \"%s\" non valida\n"
 
-#: ../src/utils/pacat.c:696
+#: ../src/utils/pacat.c:708
 #, c-format
 msgid "Invalid sample specification\n"
 msgstr "Specifica di campionamento non valida\n"
 
-#: ../src/utils/pacat.c:701
+#: ../src/utils/pacat.c:713
 #, c-format
 msgid "Channel map doesn't match sample specification\n"
 msgstr "La mappa di canali non corrisponde alla specifica di campionamento\n"
 
-#: ../src/utils/pacat.c:708
+#: ../src/utils/pacat.c:720
 #, c-format
 msgid "Opening a %s stream with sample specification '%s'.\n"
 msgstr "Apertura di uno stream %s con specifica di campionamento \"%s\".\n"
 
-#: ../src/utils/pacat.c:708
+#: ../src/utils/pacat.c:720
 msgid "recording"
 msgstr "registrazione"
 
-#: ../src/utils/pacat.c:708
+#: ../src/utils/pacat.c:720
 msgid "playback"
 msgstr "riproduzione"
 
-#: ../src/utils/pacat.c:716
+#: ../src/utils/pacat.c:728
 #, c-format
 msgid "open(): %s\n"
 msgstr "open(): %s\n"
 
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:733
 #, c-format
 msgid "dup2(): %s\n"
 msgstr "dup2(): %s\n"
 
-#: ../src/utils/pacat.c:731
+#: ../src/utils/pacat.c:743
 #, c-format
 msgid "Too many arguments.\n"
 msgstr "Troppi argomenti.\n"
 
-#: ../src/utils/pacat.c:744
-#: ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013
-#: ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() non riuscita.\n"
 
-#: ../src/utils/pacat.c:765
+#: ../src/utils/pacat.c:777
 #, c-format
 msgid "io_new() failed.\n"
 msgstr "io_new() non riuscita.\n"
 
-#: ../src/utils/pacat.c:771
-#: ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027
-#: ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() non riuscita.\n"
 
-#: ../src/utils/pacat.c:779
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
+#: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
 msgstr "pa_context_connect() non riuscita: %s"
 
-#: ../src/utils/pacat.c:790
+#: ../src/utils/pacat.c:802
 #, c-format
 msgid "time_new() failed.\n"
 msgstr "time_new() non riuscita.\n"
 
-#: ../src/utils/pacat.c:797
-#: ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035
-#: ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() non riuscita.\n"
@@ -1477,8 +1686,7 @@ msgstr "Ripristino non riuscito: %s\n"
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr "ATTENZIONE: server audio non locale, impossibile sospendere.\n"
 
-#: ../src/utils/pasuspender.c:176
-#: ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1496,14 +1704,16 @@ msgid ""
 "\n"
 "  -h, --help                            Show this help\n"
 "      --version                         Show version\n"
-"  -s, --server=SERVER                   The name of the server to connect to\n"
+"  -s, --server=SERVER                   The name of the server to connect "
+"to\n"
 "\n"
 msgstr ""
 "%s [OPZIONI] ... \n"
 "\n"
 "  -h, --help                            Mostra questo aiuto\n"
 "      --version                         Mostra la versione\n"
-"  -s, --server=SERVER                   Il nome del server a cui connettersi\n"
+"  -s, --server=SERVER                   Il nome del server a cui "
+"connettersi\n"
 "\n"
 
 #: ../src/utils/pasuspender.c:251
@@ -1530,7 +1740,9 @@ msgstr "Attualmente in uso: %u blocchi contenenti %s byte in totale.\n"
 #: ../src/utils/pactl.c:117
 #, c-format
 msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "Allocati durante l'intera esecuzione: %u blocchi contenenti %s byte in totale.\n"
+msgstr ""
+"Allocati durante l'intera esecuzione: %u blocchi contenenti %s byte in "
+"totale.\n"
 
 #: ../src/utils/pactl.c:120
 #, c-format
@@ -1542,14 +1754,15 @@ msgstr "Dimensione della cache dei campioni: %s\n"
 msgid "Failed to get server information: %s\n"
 msgstr "Recupero delle informazioni del server non riuscito: %s\n"
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1563,7 +1776,7 @@ msgstr ""
 "Sorgente predefinita: %s\n"
 "Cookie: %08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "Recupero delle informazioni del sink non riuscito: %s\n"
@@ -1571,7 +1784,7 @@ msgstr "Recupero delle informazioni del sink non riuscito: %s\n"
 # nel relativo messaggio per il source
 # c'è "monitor of sink", quindi assumo che
 # qui dovesse essere "monitor of source"
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -1610,12 +1823,12 @@ msgstr ""
 "\tProprietà:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "Recupero delle informazioni della sorgente non riuscito: %s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -1654,28 +1867,20 @@ msgstr ""
 "\tProprietà:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:303
-#: ../src/utils/pactl.c:347
-#: ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419
-#: ../src/utils/pactl.c:478
-#: ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489
-#: ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540
-#: ../src/utils/pactl.c:583
-#: ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "N/D"
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Recupero delle informazioni del modulo non riuscito: %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -1692,12 +1897,12 @@ msgstr ""
 "\tProprietà:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Recupero delle informazioni del client non riuscito: %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -1712,12 +1917,12 @@ msgstr ""
 "\tProprietà:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Recupero delle informazioni della scheda non riuscito: %s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -1734,12 +1939,12 @@ msgstr ""
 "\tProprietà:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr "\tProfili:\n"
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "\tProfilo attivo: %s\n"
@@ -1748,12 +1953,13 @@ msgstr "\tProfilo attivo: %s\n"
 # A stream that is connected to an output device, i.e. an input for a sink.
 #
 # from http://pulseaudio.org/wiki/WritingVolumeControlUIs
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
-msgstr "Recupero delle informazioni dell'ingresso per il sink non riuscito: %s\n"
+msgstr ""
+"Recupero delle informazioni dell'ingresso per il sink non riuscito: %s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1794,12 +2000,13 @@ msgstr ""
 # A stream that is connected to an input device, i.e. an output of a source.
 #
 # from http://pulseaudio.org/wiki/WritingVolumeControlUIs
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
-msgstr "Recupero delle informazioni dell'uscita per la sorgente non riuscito: %s\n"
+msgstr ""
+"Recupero delle informazioni dell'uscita per la sorgente non riuscito: %s\n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1828,13 +2035,13 @@ msgstr ""
 "\tProprietà:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "Recupero delle informazioni del campione non riuscito: %s\n"
 
 # campiona lazy??
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -1865,23 +2072,22 @@ msgstr ""
 "\tProprietà:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:599
-#: ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Fallimento: %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr "Caricamento del campione non riuscito: %s\n"
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "Fine del file prematura\n"
 
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:774
 #, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1901,8 +2107,10 @@ msgid ""
 "  -h, --help                            Show this help\n"
 "      --version                         Show version\n"
 "\n"
-"  -s, --server=SERVER                   The name of the server to connect to\n"
-"  -n, --client-name=NAME                How to call this client on the server\n"
+"  -s, --server=SERVER                   The name of the server to connect "
+"to\n"
+"  -n, --client-name=NAME                How to call this client on the "
+"server\n"
 msgstr ""
 "%s [OPZIONE...] stat\n"
 "%s [OPZIONE...] list\n"
@@ -1924,7 +2132,7 @@ msgstr ""
 "  -s, --server=SERVER              Il nome del server a cui connettersi\n"
 "  -n, --client-name=NOME           Come chiamare questo client sul server\n"
 
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1935,62 +2143,71 @@ msgstr ""
 "Compilato con libpulse %s\n"
 "Link eseguito con libpulse %s\n"
 
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr "Specificare un file campione da caricare\n"
 
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "Apertura del file audio non riuscita.\n"
 
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr "È necessario specificare un nome di campione da riprodurre\n"
 
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr "È necessario specificare un nome di campione da rimuovere\n"
 
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr "È necessario specificare un ingresso per sink e un sink\n"
 
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr "È necessario specificare una uscita per sorgente e una sorgente\n"
 
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr "È necessario specificare un nome di modulo e gli argomenti.\n"
 
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr "È necessario specificare un indice di modulo\n"
 
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:972
 #, c-format
-msgid "You may not specify more than one sink. You have to specify a boolean value.\n"
-msgstr "Non è possibile specificare più di un sink. È necessario specificare un valore booleano.\n"
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean "
+"value.\n"
+msgstr ""
+"Non è possibile specificare più di un sink. È necessario specificare un "
+"valore booleano.\n"
 
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:985
 #, c-format
-msgid "You may not specify more than one source. You have to specify a boolean value.\n"
-msgstr "Non è possibile specificare più di una sorgente. È necessario specificare un valore booleano.\n"
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value.\n"
+msgstr ""
+"Non è possibile specificare più di una sorgente. È necessario specificare un "
+"valore booleano.\n"
 
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:997
 #, c-format
 msgid "You have to specify a card name/index and a profile name\n"
-msgstr "È necessario specificare un nome/indice di scheda e un nome di profilo.\n"
+msgstr ""
+"È necessario specificare un nome/indice di scheda e un nome di profilo.\n"
 
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr "Nessun comando valido specificato.\n"
@@ -2002,14 +2219,17 @@ msgid ""
 "\n"
 " -d    Show current PulseAudio data attached to X11 display (default)\n"
 " -e    Export local PulseAudio data to X11 display\n"
-" -i    Import PulseAudio data from X11 display to local environment variables and cookie file.\n"
+" -i    Import PulseAudio data from X11 display to local environment "
+"variables and cookie file.\n"
 " -r    Remove PulseAudio data from X11 display\n"
 msgstr ""
-"%s [-D DISPLAY] [-S SERVER] [-O SINK] [-I SORGENTE] [-c FILE]  [-d|-e|-i|-r]\n"
+"%s [-D DISPLAY] [-S SERVER] [-O SINK] [-I SORGENTE] [-c FILE]  [-d|-e|-i|-"
+"r]\n"
 "\n"
 " -d    Mostra i dati PulseAudio attuali attaccati al display X11 (predef)\n"
 " -e    Esporta i dati PulseAudio locali sul display X11\n"
-" -i    Importa i dati PulseAudio dal display X11 alle variabili ambientali e\n"
+" -i    Importa i dati PulseAudio dal display X11 alle variabili ambientali "
+"e\n"
 "        al file cookie locali \n"
 " -r    Rimuove i dati PulseAudio dal display X11\n"
 
@@ -2096,14 +2316,12 @@ msgstr "Il demone non sta rispondendo."
 msgid "select(): %s"
 msgstr "select(): %s"
 
-#: ../src/utils/pacmd.c:154
-#: ../src/utils/pacmd.c:171
+#: ../src/utils/pacmd.c:154 ../src/utils/pacmd.c:171
 #, c-format
 msgid "read(): %s"
 msgstr "read(): %s"
 
-#: ../src/utils/pacmd.c:187
-#: ../src/utils/pacmd.c:201
+#: ../src/utils/pacmd.c:187 ../src/utils/pacmd.c:201
 #, c-format
 msgid "write(): %s"
 msgstr "write(): %s"
@@ -2134,11 +2352,15 @@ msgid ""
 "\n"
 "  -v, --verbose                         Enable verbose operation\n"
 "\n"
-"  -s, --server=SERVER                   The name of the server to connect to\n"
+"  -s, --server=SERVER                   The name of the server to connect "
+"to\n"
 "  -d, --device=DEVICE                   The name of the sink to connect to\n"
-"  -n, --client-name=NAME                How to call this client on the server\n"
-"      --stream-name=NAME                How to call this stream on the server\n"
-"      --volume=VOLUME                   Specify the initial (linear) volume in range 0...65536\n"
+"  -n, --client-name=NAME                How to call this client on the "
+"server\n"
+"      --stream-name=NAME                How to call this stream on the "
+"server\n"
+"      --volume=VOLUME                   Specify the initial (linear) volume "
+"in range 0...65536\n"
 "      --channel-map=CHANNELMAP          Set the channel map to the use\n"
 msgstr ""
 "%s [OPZIONI] [FILE]\n"
@@ -2148,11 +2370,15 @@ msgstr ""
 "\n"
 "  -v, --verbose                         Abilita la modalità prolissa\n"
 "\n"
-"  -s, --server=SERVER                   Il nome del server a cui connettersi\n"
+"  -s, --server=SERVER                   Il nome del server a cui "
+"connettersi\n"
 "  -d, --device=DEVICE                   Il nome del sink a cui connettersi\n"
-"  -n, --client-name=NOME                Come chiamare questo client sul server\n"
-"      --stream-name=NOME                Come chiamare questo stream sul server\n"
-"      --volume=VOLUME                   Specifica il volume iniziale (lineare) \n"
+"  -n, --client-name=NOME                Come chiamare questo client sul "
+"server\n"
+"      --stream-name=NOME                Come chiamare questo stream sul "
+"server\n"
+"      --volume=VOLUME                   Specifica il volume iniziale "
+"(lineare) \n"
 "                                         nell'intervallo 0...65536\n"
 "      --channel-map=MAPPA_CANALI        Imposta la mappa di canali da usare\n"
 
@@ -2187,13 +2413,26 @@ msgstr "La mappa dei canali non corrisponde al file.\n"
 msgid "Using sample spec '%s'\n"
 msgstr "In uso la specifica di campionamento \"%s\"\n"
 
-#: ../src/pulsecore/lock-autospawn.c:126
-#: ../src/pulsecore/lock-autospawn.c:207
+#: ../src/pulsecore/lock-autospawn.c:126 ../src/pulsecore/lock-autospawn.c:207
 msgid "Cannot access autospawn lock."
 msgstr "Impossibile accedere al lock di autospawn."
 
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
+#~ msgstr ""
+#~ "Lo scheduling invocato come root SUID e real-time o high-priority è stato "
+#~ "richiesto nella configurazione. Purtroppo mancano i privilegi necessari:\n"
+#~ "Non si è parte del gruppo '"
+
+# FIXME missing expects???
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--log-time richiede un argomento booleano"
+
 #~ msgid "Default sink name (%s) does not exist in name register."
 #~ msgstr "Il nome del sink predefinito (%s) non esiste nel registro dei nomi."
+
 #~ msgid "pa_stream_drop() failed: %s\n"
 #~ msgstr "pa_stream_drop() non riuscita: %s\n"
-
diff --git a/po/pl.po b/po/pl.po
index eb629d2..1f3c7a5 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,7 +5,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2009-02-20 18:42+0100\n"
 "Last-Translator: Piotr DrÄ…g <piotrdrag at gmail.com>\n"
 "Language-Team: Polish <pl at li.org>\n"
@@ -13,66 +13,80 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr "Analogowe mono"
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr "Analogowe stereo"
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr "Cyfrowe stereo (IEC958)"
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr "Cyfrowe stereo (HDMI)"
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr "Analogowe surround 4.0"
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr "Cyfrowe surround 4.0 (IEC958/AC3)"
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr "Analogowe surround 4.1"
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr "Analogowe surround 5.0"
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr "Analogowe surround 5.1"
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr "Cyfrowe surround 5.1 (IEC958/AC3)"
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr "Analogowe surround 7.1"
 
-#: ../src/modules/alsa/alsa-util.c:1577
-#, c-format
+#: ../src/modules/alsa/alsa-util.c:1582
+#, fuzzy, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 "snd_pcm_avail_update() zwróciło wyjątkowo dużą wartość: %lu bajty (%lu ms). "
 "Prawdopodobnie jest to błąd sterownika ALSA. Proszę zgłosić ten problem "
 "programistom ALSA."
 
-#: ../src/modules/alsa/alsa-util.c:1609
-#, c-format
+#: ../src/modules/alsa/alsa-util.c:1622
+#, fuzzy, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+"snd_pcm_avail_update() zwróciło wyjątkowo dużą wartość: %lu bajty (%lu ms). "
+"Prawdopodobnie jest to błąd sterownika ALSA. Proszę zgłosić ten problem "
+"programistom ALSA."
+
+#: ../src/modules/alsa/alsa-util.c:1668
+#, fuzzy, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 "snd_pcm_mmap_begin() zwróciło wyjątkowo dużą wartość: %lu bajty (%lu ms). "
@@ -212,91 +226,93 @@ msgstr "Tryb systemowy nie jest obsługiwany na tej platformie."
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) nie powiodło się: %s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "Analiza wiersza poleceń nie powiodła się."
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr ""
 "Jesteśmy w grupie \"%s\", co umożliwia szeregowanie o wysokim priorytecie."
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr ""
 "Jesteśmy w grupie \"%s\", co umożliwia szeregowanie w czasie rzeczywistym."
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "PolicyKit nadał uprawnienie \"acquire-high-priority\"."
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "PolicyKit odmówił nadania uprawnienia \"acquire-high-priority\"."
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "PolicyKit nadał uprawnienie \"acquire-real-time\"."
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "PolicyKit odmówił nadania uprawnienia \"acquire-real-time\"."
 
-#: ../src/daemon/main.c:508
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"Wywołane SUID roota i szeregowanie w czasie rzeczywistym i/lub o wysokim "
-"priorytecie zostało zażądane w konfiguracji. Mimo to brak niezbędnych "
-"uprawnień:\n"
-"Nie jesteśmy w grupie \""
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "Szeregowanie o wysokim priorytecie jest włączone w konfiguracji, ale nie "
 "jest zezwolone przez politykÄ™."
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "Pomyślnie zwiększono RLIMIT_RTPRIO"
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "RLIMIT_RTPRIO nie powiodło się: %s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "Oddawanie CAP_NICE"
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "Szeregowanie w czasie rzeczywistym jest włączone w konfiguracji, ale nie "
 "jest zezwolone przez politykÄ™."
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "Demon nie jest uruchomiony"
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "Demon jest uruchomiony jako PID %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Zniszczenie demona nie powiodło się: %s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -304,146 +320,146 @@ msgstr ""
 "Ten program nie powinien być uruchomiany jako root (chyba, że podano --"
 "system)"
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 msgid "Root privileges required."
 msgstr "Wymagane sÄ… uprawnienia roota."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "--start nie jest obsługiwane przy uruchamianiu systemowym."
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr ""
 "Uruchamianie w trybie systemowym, ale --disallow-exit nie jest ustawione!"
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 "Uruchamianie w trybie systemowym, ale --disallow-module-loading nie jest "
 "ustawione!"
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr "Uruchamianie w trybie systemowym, wymuszanie wyłączenia trybu SHM!"
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 "Uruchamianie w trybie systemowym, wymuszanie wyłączenia czasu oczekiwania na "
 "zakończenie!"
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "Uzyskanie standardowego wejścia/wyjścia nie powiodło się"
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "potok nie powiódł się: %s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "fork() nie powiodło się: %s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "read() nie powiodło się: %s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "Uruchomienie demona nie powiodło się."
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "Pomyślnie uruchomiono demona."
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "To jest PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Komputer kompilacji: %s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "CFLAGS kompilacji: %s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "Uruchamianie na komputerze: %s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr "Znaleziono %u procesorów."
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "Rozmiar strony to %lu bajtów"
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Skompilowano z obsługą Valgrind: tak"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Skompilowano z obsługą Valgrind: nie"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "Uruchamianie w trybie Valgrind: %s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Budowanie optymalizowane: tak"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Budowanie optymalizowane: nie"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "Uzyskanie identyfikatora komputera nie powiodło się"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "Identyfikator komputera to %s."
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "Używanie folderu wykonywania %s."
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "Używanie folderu stanu %s."
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "Uruchamianie w trybie systemowym: %s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() nie powiodło się."
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr "Świeże zegary o wysokiej rozdzielczości! Smacznego!"
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
@@ -451,27 +467,27 @@ msgstr ""
 "Koleś, twoje jądro śmierdzi! Szef kuchni poleca dzisiaj Linuksa w włączonymi "
 "zegarami o wysokiej rozdzielczości!"
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() nie powiodło się."
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "Zainicjowanie demona nie powiodło się."
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "Uruchamianie demona bez żadnych wczytanych modułów, odmawianie pracy."
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "Zakończono uruchamianie demona."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "Zainicjowano wyłączenie demona."
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "Demon został zniszczony."
 
@@ -654,7 +670,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading oczekuje parametru zmiennej logicznej"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit zmienna logiczna"
 
 #: ../src/daemon/cmdline.c:309
@@ -668,11 +685,13 @@ msgstr ""
 "\"auto\"."
 
 #: ../src/daemon/cmdline.c:333
-msgid "--log-time boolean argument"
-msgstr "--log-time parametr zmiennej logicznej"
+#, fuzzy
+msgid "--log-time expects boolean argument"
+msgstr "-realtime oczekuje parametru zmiennej logicznej"
 
 #: ../src/daemon/cmdline.c:340
-msgid "--log-meta boolean argument"
+#, fuzzy
+msgid "--log-meta expects boolean argument"
 msgstr "--log-meta parametr zmiennej logicznej"
 
 #: ../src/daemon/cmdline.c:359
@@ -732,67 +751,78 @@ msgstr "Wczytanie jednorazowe: %s\n"
 msgid "Path: %s\n"
 msgstr "Ścieżka: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Nieprawidłowy dziennik docelowy \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Nieprawidłowy poziom dziennika \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Nieprawidłowa metoda resamplingu \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] Nieprawidłowy rlimit \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] rlimit nie jest obsługiwany na tej platformie."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Nieprawidłowy format próbki \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Nieprawidłowa częstotliwość próbki \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Nieprawidłowe kanały próbki \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Nieprawidłowe kanały próbki \"%s\"."
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Nieprawidłowa liczba fragmentów \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Nieprawidłowy rozmiar fragmentu \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Nieprawidłowy poziom nice \"%s\"."
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Otwarcie pliku konfiguracji nie powiodło się: %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Odczytano z pliku konfiguracji: %s ###\n"
@@ -805,6 +835,35 @@ msgstr "Porzucanie uprawnień roota."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "Pomyślnie ograniczono możliwości do CAP_SYS_NICE."
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "Zniszczenie demona PulseAudio nie powiodło się."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+"Jesteśmy w grupie \"%s\", co umożliwia szeregowanie o wysokim priorytecie."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1292,7 +1351,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() nie powiodło się: %s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Połączenie nie powiodło się: %s\n"
@@ -1517,7 +1576,7 @@ msgid "Too many arguments.\n"
 msgstr "Za dużo parametrów.\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() nie powiodło się.\n"
@@ -1528,12 +1587,12 @@ msgid "io_new() failed.\n"
 msgstr "io_new() nie powiodło się.\n"
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() nie powiodło się.\n"
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1545,7 +1604,7 @@ msgid "time_new() failed.\n"
 msgstr "time_new() nie powiodło się.\n"
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() nie powiodło się.\n"
@@ -1576,7 +1635,7 @@ msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr ""
 "OSTRZEŻENIE: serwer dźwięku nie jest lokalny, nie zostanie wstrzymany.\n"
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1643,14 +1702,15 @@ msgstr "Rozmiar pamięci podręcznej próbek: %s\n"
 msgid "Failed to get server information: %s\n"
 msgstr "Uzyskanie informacji o serwerze nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1664,12 +1724,12 @@ msgstr ""
 "Domyślne źródło: %s\n"
 "Ciasteczko: %08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "Uzyskanie informacji o odpływie nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -1708,12 +1768,12 @@ msgstr ""
 "\tWłaściwości:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "Uzyskanie informacji o źródle nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -1752,20 +1812,20 @@ msgstr ""
 "\tWłaściwości:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "nie dotyczy"
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Uzyskanie informacji o module nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -1782,12 +1842,12 @@ msgstr ""
 "\tWłaściwości:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Uzyskanie informacji o kliencie nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -1802,12 +1862,12 @@ msgstr ""
 "\tWłaściwości:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Uzyskanie informacji o karcie nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -1824,22 +1884,22 @@ msgstr ""
 "\tWłaściwości:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr "\tProfile:\n"
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "\tAktywny profil: %s\n"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr "Uzyskanie informacji o wejściu odpływu nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1876,12 +1936,12 @@ msgstr ""
 "\tWłaściwości:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr "Uzyskanie informacji o wyjściu źródła nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1910,12 +1970,12 @@ msgstr ""
 "\tWłaściwości:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "Uzyskanie informacji o przykładzie nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -1946,22 +2006,22 @@ msgstr ""
 "\tWłaściwości:\n"
 "\t\t%s\n"
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Niepowodzenie: %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr "Usunięcie próbki nie powiodło się: %s\n"
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "Przedwczesny koniec pliku\n"
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, c-format
 msgid ""
 "%s [options] stat\n"
@@ -2006,7 +2066,7 @@ msgstr ""
 "  -s, --server=SERWER                   Nazwa serwera do połączenia się\n"
 "  -n, --client-name=NAZWA               Jak nazwać tego klienta na serwerze\n"
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -2017,47 +2077,47 @@ msgstr ""
 "Skompilowane za pomocÄ… libpulse %s\n"
 "Skonsolidowane za pomocÄ… libpulse %s\n"
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr "Proszę podać plik próbki do wczytania\n"
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "Otwarcie pliku dźwiękowego nie powiodło się.\n"
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr "Należy podać nazwę próbki do odtworzenia\n"
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr "Należy podać nazwę próbki do usunięcia\n"
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr "Należy podać indeks odpływu wejścia i odpływ\n"
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr "Należy podać indeks źródła wyjścia i źródło\n"
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr "Należy podać nazwę modułu i parametry.\n"
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr "Należy podać indeks modułu\n"
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
@@ -2065,7 +2125,7 @@ msgid ""
 msgstr ""
 "Nie można podać więcej niż jednego odpływu. Należy podać wartość logiczną.\n"
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
@@ -2073,12 +2133,12 @@ msgid ""
 msgstr ""
 "Nie można podać więcej niż jednego źródła. Należy podać wartość logiczną.\n"
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr "Należy podać nazwę karty/indeks i nazwę profilu\n"
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr "Nie podano prawidłowego polecenia.\n"
@@ -2281,3 +2341,17 @@ msgstr "Używanie przykładowej specyfikacji \"%s\"\n"
 #: ../src/pulsecore/lock-autospawn.c:126 ../src/pulsecore/lock-autospawn.c:207
 msgid "Cannot access autospawn lock."
 msgstr "Nie można uzyskać dostępu do blokady automatycznego wznawiania."
+
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
+#~ msgstr ""
+#~ "Wywołane SUID roota i szeregowanie w czasie rzeczywistym i/lub o wysokim "
+#~ "priorytecie zostało zażądane w konfiguracji. Mimo to brak niezbędnych "
+#~ "uprawnień:\n"
+#~ "Nie jesteśmy w grupie \""
+
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--log-time parametr zmiennej logicznej"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 2e75cc4..c6d4c11 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2008-11-21 01:21-0300\n"
 "Last-Translator: Henrique (LonelySpooky) Junior <lspooky at fedoraproject.org>\n"
 "Language-Team: Brazilian-Portuguese <fedora-trans-pt_br at redhat.com>\n"
@@ -18,63 +18,74 @@ msgstr ""
 "X-Poedit-Language: Brazilian Portuguese\n"
 "X-Poedit-Country: Brazil\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -213,90 +224,91 @@ msgstr "O modo ampliado do sistema não tem suporte nessa plataforma."
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) falhou: %s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "Falha em interpretar a linha de comando."
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr "Estamos no grupo '%s', permitindo escalonamento de alta prioridade."
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr "Estamos no grupo '%s', permitindo escalonamento em tempo real."
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "O PolicyKit assegura-nos a aquisição de privilégio de alta prioridade."
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "O PolicyKit recusa a aquisição de privilégios de alta prioridade."
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "O PolicyKit assegura-nos a aquisição de privilégios de tempo-real."
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "O PolicyKit recusa a aquisição de privilégios de tempo real."
 
-#: ../src/daemon/main.c:508
-#, fuzzy
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"A chamada de SUID root e tempo real/alta prioridade no escalonamento foi "
-"requisitada pela configuração. Todavia, falta-nos os privilégios "
-"necessários:\n"
-"Não estamos no grupo'"
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "O escalonamento de alta prioridade foi habilitado para esta configuração, "
 "mas não é permitida pela política."
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "RLIMIT_RTPRIO aumentado com sucesso"
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "RLIMIT_RTPRIO falhou: %s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "Abandonando CAP_NICE"
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 "O escalonamento de tempo real foi habilitado pela configuração, mas não é "
 "permitido pela política."
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "O daemon não está em execução"
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "Daemon executando como PID %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "Falha em encerrar o daemon: %s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -304,144 +316,144 @@ msgstr ""
 "Este programa não é para ser executado como root (a não ser que --system "
 "seja especificado)."
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 #, fuzzy
 msgid "Root privileges required."
 msgstr "Privilégios de rot são requeridos."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "--start não tem suporte para instâncias de sistemas."
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr "Executando em no modo system, mas --disallow-exit não foi configurado!"
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 "Executando no modo system, mas --disallow-module-loading não foi configurado!"
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr "Executando no modo system, desabilitando forçadamente o modo SHM!"
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 "Executando no modo system, desabilitando forçadamente o exit idle time!"
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "Falha em adquirir o stdio."
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "O pipe falhou: %s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "O fork() falhou: %s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "A operação read() falhou: %s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "Falha na partida do daemon."
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "Os daemons foram iniciados com sucesso."
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Este é o PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "Host de compilação: %s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "Compilação CFLAGS: %s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "Executando no host: %s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr ""
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "O tamanho da página é %lu bytes"
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "Compilado com suporte do Valgrind: sim"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "Compilado com suporte do Valgrind: não"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "Executando em modo valgrind: %s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "Build otimizado: sim"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "Build otimizado: não"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "Falha em obter o ID da máquina"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "A ID da máquina é %s."
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "Usando o diretório de runtime %s."
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "Usando o diretório de estado %s."
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "Executando em modo do sistema: %s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() falhou."
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr "Timers de alta resolução frequinhos disponíveis! Bon appetit!"
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
@@ -449,28 +461,28 @@ msgstr ""
 "Cara, teu kernel fede! A recomendação do chef hoje é Linux com timers de "
 "alta resolução habilitados!"
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() falhou."
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "Falha em iniciar o daemon."
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr ""
 "O Daemon iniciou sem qualquer módulo carregado, recusando-se a trabalhar."
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "A partida dos Daemon está completa."
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "O encerramento do Daemon foi iniciado."
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "Daemon terminado."
 
@@ -651,7 +663,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading espera um argumento booleano"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit argumento booleano"
 
 #: ../src/daemon/cmdline.c:309
@@ -664,12 +677,12 @@ msgstr "Log target inválido: use 'syslog', 'stderr' ou 'auto'."
 
 #: ../src/daemon/cmdline.c:333
 #, fuzzy
-msgid "--log-time boolean argument"
-msgstr "--disallow-exit argumento booleano"
+msgid "--log-time expects boolean argument"
+msgstr "--realtime espera um argumento booleano"
 
 #: ../src/daemon/cmdline.c:340
 #, fuzzy
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr "--disallow-exit argumento booleano"
 
 #: ../src/daemon/cmdline.c:359
@@ -729,67 +742,78 @@ msgstr "Carrega uma vez: %s\n"
 msgid "Path: %s\n"
 msgstr "Caminho: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] Alvo do log inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] Nível de log inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] Método de reamostragem inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] rlimit inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] rlimit não tem suporte nessa plataforma."
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] Formato de amostragem inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] Taxa de amostragem inválida '%s'."
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] Canais de amostragem inválidos'%s'."
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] Canais de amostragem inválidos'%s'."
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] Números de fragmentos inválidos '%s'."
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] Tamanho de fragmentos inválido '%s'."
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] Número de nice inválido'%s'."
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Falha em abrir o arquivo de configuração: %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### Lido do arquivo de configuração: %s ###\n"
@@ -803,6 +827,34 @@ msgstr "Descartando os privilégios de root."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "As capacidades foram limitadas com sucesso para CAP_SYS_NICE."
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "Falha em cancelar o daemon do PulseAudio."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr "Estamos no grupo '%s', permitindo escalonamento de alta prioridade."
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1290,7 +1342,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() falhou: %s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Falha na conexão: %s\n"
@@ -1512,7 +1564,7 @@ msgid "Too many arguments.\n"
 msgstr "Argumentos em excesso.\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() falhou.\n"
@@ -1523,12 +1575,12 @@ msgid "io_new() failed.\n"
 msgstr "io_new() falhou.\n"
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() falhou.\n"
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1540,7 +1592,7 @@ msgid "time_new() failed.\n"
 msgstr "time_new() falhou.\n"
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() falhou.\n"
@@ -1572,7 +1624,7 @@ msgstr ""
 "AVISO: O servidor de som não é local, Sound server is not local, não está em "
 "suspenso.\n"
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1637,14 +1689,15 @@ msgstr "Tamanho do cache para amostragem: %s\n"
 msgid "Failed to get server information: %s\n"
 msgstr "Falha em obter a informação do servidor: %s\n"
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1658,12 +1711,12 @@ msgstr ""
 "Fonte padrão %s\n"
 "Cookie: %08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "Falha em obter a informação do destino: %s\n"
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, fuzzy, c-format
 msgid ""
 "Sink #%u\n"
@@ -1697,12 +1750,12 @@ msgstr ""
 "Propriedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "Falha em obter a informação da fonte: %s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, fuzzy, c-format
 msgid ""
 "Source #%u\n"
@@ -1736,20 +1789,20 @@ msgstr ""
 "Propriedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "n/a"
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Falha em obter a informação do módulo: %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, fuzzy, c-format
 msgid ""
 "Module #%u\n"
@@ -1765,12 +1818,12 @@ msgstr ""
 "Contador de uso: %s\n"
 "Auto descarregar: %s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Falhou ao obter a informação do cliente: %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, fuzzy, c-format
 msgid ""
 "Client #%u\n"
@@ -1785,12 +1838,12 @@ msgstr ""
 "Propriedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, fuzzy, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Falha em obter a informação do autoload: %s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, fuzzy, c-format
 msgid ""
 "Card #%u\n"
@@ -1806,22 +1859,22 @@ msgstr ""
 "Propriedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, fuzzy, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "O pipe falhou: %s"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr "Falha na obtenção da informação de entrada do destino: %s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, fuzzy, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1855,12 +1908,12 @@ msgstr ""
 "Propriedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr "Falha em obter informações sobre a saída da fonte: %s\n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, fuzzy, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1889,12 +1942,12 @@ msgstr ""
 "Propriedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "Falha em obter informações sobre a amostragem: %s\n"
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, fuzzy, c-format
 msgid ""
 "Sample #%u\n"
@@ -1923,22 +1976,22 @@ msgstr ""
 "Propriedades:\n"
 "%s"
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Falha: %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr "Falha em carregar a amostra: %s\n"
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "Fim prematuro do arquivo\n"
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, fuzzy, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1983,7 +2036,7 @@ msgstr ""
 "  -n, --client-name=NAME                Como chamar este cliente no "
 "servidor \n"
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1994,48 +2047,48 @@ msgstr ""
 "Compilado com libpulse %s\n"
 "Linkado com libpulse %s\n"
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr "Por favor, especifique o arquivo de amostra a ser carregado\n"
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "Falha em abrir o arquivo de som.\n"
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr "Você deve especificar um nome da amostra para ser executada\n"
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr "Você deve especificar um nome da amostra para ser removida\n"
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr ""
 "Você tem que especificar a entrada para o destino (sink) e um destino(sink)\n"
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr "Você tem que especificar um índice de saída da fonte e uma fonte\n"
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr "Você deve especificar um nome do módulo e seus argumentos\n"
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr "Você deve especificar um índice de um módulo\n"
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
@@ -2044,7 +2097,7 @@ msgstr ""
 "Você não pode especificar mais de um destino. Pelo menos um valor booleano "
 "deve ser especificado.\n"
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
@@ -2053,13 +2106,13 @@ msgstr ""
 "Você não pode especificar mais de uma fonte. Pelo menos um valor booleano "
 "deve ser especificado.\n"
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, fuzzy, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr ""
 "Você tem que especificar a entrada para o destino (sink) e um destino(sink)\n"
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr "Nenhum comando válido especificado.\n"
@@ -2264,6 +2317,22 @@ msgstr "Usando a especificação da amostragem '%s'\n"
 msgid "Cannot access autospawn lock."
 msgstr "Não foi possível acessar a trava de autogeração."
 
+#, fuzzy
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
+#~ msgstr ""
+#~ "A chamada de SUID root e tempo real/alta prioridade no escalonamento foi "
+#~ "requisitada pela configuração. Todavia, falta-nos os privilégios "
+#~ "necessários:\n"
+#~ "Não estamos no grupo'"
+
+#, fuzzy
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--disallow-exit argumento booleano"
+
 #~ msgid "Default sink name (%s) does not exist in name register."
 #~ msgstr "O nome padrão do destino (%s) não existe no registro de nomes."
 
diff --git a/po/sv.po b/po/sv.po
index ce3fd73..2e70d8c 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: pulseaudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2008-09-05 18:24+0100\n"
 "Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
@@ -15,63 +15,74 @@ msgstr ""
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -209,81 +220,87 @@ msgstr ""
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) misslyckades: %s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr ""
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr ""
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr ""
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr ""
 
-#: ../src/daemon/main.c:508
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr ""
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "RLIMIT_RTPRIO misslyckades: %s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr ""
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr ""
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr ""
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr ""
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
@@ -291,168 +308,168 @@ msgstr ""
 "Detta program är inte tänkt att köras som root (såvida inte --system har "
 "angivits)."
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 #, fuzzy
 msgid "Root privileges required."
 msgstr "Root-behörighet krävs."
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "--start stöds inte för systeminstanser."
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr ""
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr ""
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr ""
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr ""
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr ""
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "pipe misslyckades: %s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "fork() misslyckades: %s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "read() misslyckades: %s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr ""
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr ""
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "Detta är PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr ""
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr ""
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr ""
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr ""
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr ""
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr ""
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr ""
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr ""
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr ""
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr ""
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr ""
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create() misslyckades."
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr ""
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
 msgstr ""
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "pa_core_new() misslyckades."
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr ""
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr ""
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr ""
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr ""
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr ""
 
@@ -557,7 +574,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading förväntar sig ett booleskt argument"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit booleskt argument"
 
 #: ../src/daemon/cmdline.c:309
@@ -570,12 +588,12 @@ msgstr ""
 
 #: ../src/daemon/cmdline.c:333
 #, fuzzy
-msgid "--log-time boolean argument"
-msgstr "--disallow-exit booleskt argument"
+msgid "--log-time expects boolean argument"
+msgstr "--realtime förväntar sig ett booleskt argument"
 
 #: ../src/daemon/cmdline.c:340
 #, fuzzy
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr "--disallow-exit booleskt argument"
 
 #: ../src/daemon/cmdline.c:359
@@ -635,67 +653,78 @@ msgstr ""
 msgid "Path: %s\n"
 msgstr "Sökväg: %s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr ""
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "Misslyckades med att öppna konfigurationsfil: %s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr ""
@@ -709,6 +738,32 @@ msgstr "Släpper root-behörighet."
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr ""
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "Mono"
@@ -1197,7 +1252,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_record() misslyckades: %s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "Anslutningsfel: %s\n"
@@ -1372,7 +1427,7 @@ msgid "Too many arguments.\n"
 msgstr "För många argument.\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new() misslyckades.\n"
@@ -1383,12 +1438,12 @@ msgid "io_new() failed.\n"
 msgstr "io_new() misslyckades.\n"
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new() misslyckades.\n"
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, fuzzy, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1400,7 +1455,7 @@ msgid "time_new() failed.\n"
 msgstr "time_new() misslyckades.\n"
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run() misslyckades.\n"
@@ -1430,7 +1485,7 @@ msgstr ""
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr ""
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1489,7 +1544,7 @@ msgstr ""
 msgid "Failed to get server information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:136
+#: ../src/utils/pactl.c:137
 #, c-format
 msgid ""
 "User name: %s\n"
@@ -1497,17 +1552,18 @@ msgid ""
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, c-format
 msgid ""
 "Sink #%u\n"
@@ -1529,12 +1585,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, c-format
 msgid ""
 "Source #%u\n"
@@ -1556,20 +1612,20 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr ""
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "Misslyckades med att få modulinformation: %s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, c-format
 msgid ""
 "Module #%u\n"
@@ -1580,12 +1636,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "Misslyckades med att få klientinformation: %s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, c-format
 msgid ""
 "Client #%u\n"
@@ -1595,12 +1651,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, fuzzy, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "Misslyckades med att få modulinformation: %s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, c-format
 msgid ""
 "Card #%u\n"
@@ -1611,22 +1667,22 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, fuzzy, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "pipe misslyckades: %s"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1647,12 +1703,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1669,12 +1725,12 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, c-format
 msgid ""
 "Sample #%u\n"
@@ -1692,22 +1748,22 @@ msgid ""
 "\t\t%s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "Fel: %s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1733,7 +1789,7 @@ msgid ""
 "server\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1744,66 +1800,66 @@ msgstr ""
 "Kompilerad med libpulse %s\n"
 "Länkad med libpulse %s\n"
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "Misslyckades med att öppna ljudfil.\n"
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
 "value.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value.\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr ""
@@ -1985,6 +2041,10 @@ msgstr ""
 msgid "Cannot access autospawn lock."
 msgstr ""
 
+#, fuzzy
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--disallow-exit booleskt argument"
+
 #~ msgid "pa_stream_drop() failed: %s\n"
 #~ msgstr "pa_stream_drop() misslyckades: %s\n"
 
diff --git a/po/zh_CN.po b/po/zh_CN.po
index eb0fca2..96fdeb7 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PulseAudio\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-20 03:24+0100\n"
+"POT-Creation-Date: 2009-02-24 11:33+0100\n"
 "PO-Revision-Date: 2009-01-24 12:47+0800\n"
 "Last-Translator: 王泽国 <zak.zeguo.wang at gmail.com>\n"
 "Language-Team: Chinese/Simplified\n"
@@ -17,63 +17,74 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../src/modules/alsa/alsa-util.c:525
+#: ../src/modules/alsa/alsa-util.c:526
 msgid "Analog Mono"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:531
+#: ../src/modules/alsa/alsa-util.c:532
 msgid "Analog Stereo"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:537
+#: ../src/modules/alsa/alsa-util.c:538
 msgid "Digital Stereo (IEC958)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:543
+#: ../src/modules/alsa/alsa-util.c:544
 msgid "Digital Stereo (HDMI)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:550
+#: ../src/modules/alsa/alsa-util.c:551
 msgid "Analog Surround 4.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:557
+#: ../src/modules/alsa/alsa-util.c:558
 msgid "Digital Surround 4.0 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:565
+#: ../src/modules/alsa/alsa-util.c:566
 msgid "Analog Surround 4.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:573
+#: ../src/modules/alsa/alsa-util.c:574
 msgid "Analog Surround 5.0"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:581
+#: ../src/modules/alsa/alsa-util.c:582
 msgid "Analog Surround 5.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:589
+#: ../src/modules/alsa/alsa-util.c:590
 msgid "Digital Surround 5.1 (IEC958/AC3)"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:598
+#: ../src/modules/alsa/alsa-util.c:599
 msgid "Analog Surround 7.1"
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1577
+#: ../src/modules/alsa/alsa-util.c:1582
 #, c-format
 msgid ""
-"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
-"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
-"issue to the ALSA developers."
+"snd_pcm_avail() returned a value that is exceptionally large: %lu bytes (%lu "
+"ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
 msgstr ""
 
-#: ../src/modules/alsa/alsa-util.c:1609
+#: ../src/modules/alsa/alsa-util.c:1622
+#, c-format
+msgid ""
+"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
+"lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1668
 #, c-format
 msgid ""
 "snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
-"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"(%lu ms).\n"
+"Most likely this is a bug in the ALSA driver '%s'. Please report this issue "
 "to the ALSA developers."
 msgstr ""
 
@@ -212,251 +223,254 @@ msgstr "此平台不支持system-wide模式。"
 msgid "setrlimit(%s, (%u, %u)) failed: %s"
 msgstr "setrlimit(%s, (%u, %u)) 失败:%s"
 
-#: ../src/daemon/main.c:431
+#: ../src/daemon/main.c:432
 msgid "Failed to parse command line."
 msgstr "分析命令行失败。"
 
-#: ../src/daemon/main.c:453
+#: ../src/daemon/main.c:456
 #, c-format
 msgid "We're in the group '%s', allowing high-priority scheduling."
 msgstr "我们在'%s'组中,允许高优先级调度。"
 
-#: ../src/daemon/main.c:460
+#: ../src/daemon/main.c:463
 #, c-format
 msgid "We're in the group '%s', allowing real-time scheduling."
 msgstr "我们在'%s'组中,允许实时调度。"
 
-#: ../src/daemon/main.c:468
+#: ../src/daemon/main.c:471
 msgid "PolicyKit grants us acquire-high-priority privilege."
 msgstr "PolicyKit授予我们“获取高优先级”权限。"
 
-#: ../src/daemon/main.c:471
+#: ../src/daemon/main.c:474
 msgid "PolicyKit refuses acquire-high-priority privilege."
 msgstr "PolicyKit拒绝“获取高优先级”权限。"
 
-#: ../src/daemon/main.c:476
+#: ../src/daemon/main.c:479
 msgid "PolicyKit grants us acquire-real-time privilege."
 msgstr "PolicyKit授予我们“获取实时”权限。"
 
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:482
 msgid "PolicyKit refuses acquire-real-time privilege."
 msgstr "PolicyKit拒绝我们“获取实时”权限。"
 
-#: ../src/daemon/main.c:508
-#, fuzzy
+#: ../src/daemon/main.c:511
+#, c-format
 msgid ""
 "Called SUID root and real-time and/or high-priority scheduling was requested "
 "in the configuration. However, we lack the necessary privileges:\n"
-"We are not in group '"
+"We are not in group '%s', PolicyKit refuse to grant us the requested "
+"privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource "
+"limits.\n"
+"For enabling real-time/high-priority scheduling please acquire the "
+"appropriate PolicyKit privileges, or become a member of '%s', or increase "
+"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
 msgstr ""
-"此配置需要调用SUID root和实时/高优先级调度。但是我们没有所需的权限:\n"
-"我们不属该组"
 
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:536
 msgid ""
 "High-priority scheduling enabled in configuration but not allowed by policy."
 msgstr "配置中已启用高优先级调度,但策略未允许。"
 
-#: ../src/daemon/main.c:561
+#: ../src/daemon/main.c:565
 msgid "Successfully increased RLIMIT_RTPRIO"
 msgstr "提高RLIMIT_RTPRIO成功。"
 
-#: ../src/daemon/main.c:564
+#: ../src/daemon/main.c:568
 #, c-format
 msgid "RLIMIT_RTPRIO failed: %s"
 msgstr "RLIMIT_RTPRIO失败:%s"
 
-#: ../src/daemon/main.c:571
+#: ../src/daemon/main.c:575
 msgid "Giving up CAP_NICE"
 msgstr "正在放弃CAP_NICE"
 
-#: ../src/daemon/main.c:578
+#: ../src/daemon/main.c:582
 msgid ""
 "Real-time scheduling enabled in configuration but not allowed by policy."
 msgstr "配置中已启用实时调度,但策略未允许。"
 
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:643
 msgid "Daemon not running"
 msgstr "后台程序没有运行"
 
-#: ../src/daemon/main.c:641
+#: ../src/daemon/main.c:645
 #, c-format
 msgid "Daemon running as PID %u"
 msgstr "后台程序正在运行,PID %u"
 
-#: ../src/daemon/main.c:651
+#: ../src/daemon/main.c:655
 #, c-format
 msgid "Failed to kill daemon: %s"
 msgstr "杀死后台程序失败:%s"
 
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:673
 msgid ""
 "This program is not intended to be run as root (unless --system is "
 "specified)."
 msgstr "不应以root身份运行本程序(除非指定 --system)。"
 
-#: ../src/daemon/main.c:671
+#: ../src/daemon/main.c:675
 #, fuzzy
 msgid "Root privileges required."
 msgstr "需要root权限。"
 
-#: ../src/daemon/main.c:676
+#: ../src/daemon/main.c:680
 msgid "--start not supported for system instances."
 msgstr "系统实例不支持 --start。"
 
-#: ../src/daemon/main.c:681
+#: ../src/daemon/main.c:685
 msgid "Running in system mode, but --disallow-exit not set!"
 msgstr "正在以系统模式运行,但是 --disallow-exit 未设定!"
 
-#: ../src/daemon/main.c:684
+#: ../src/daemon/main.c:688
 msgid "Running in system mode, but --disallow-module-loading not set!"
 msgstr "正在以系统模式运行,但是 --disallow-module-loading 未设定!"
 
-#: ../src/daemon/main.c:687
+#: ../src/daemon/main.c:691
 msgid "Running in system mode, forcibly disabling SHM mode!"
 msgstr "正在以系统模式运行,强制禁用SHM模式!"
 
-#: ../src/daemon/main.c:692
+#: ../src/daemon/main.c:696
 msgid "Running in system mode, forcibly disabling exit idle time!"
 msgstr "正在以系统模式运行,强制禁用退出空闲时间!"
 
-#: ../src/daemon/main.c:719
+#: ../src/daemon/main.c:723
 msgid "Failed to acquire stdio."
 msgstr "获取stdio失败。"
 
-#: ../src/daemon/main.c:725
+#: ../src/daemon/main.c:729
 #, c-format
 msgid "pipe failed: %s"
 msgstr "管道失败:%s"
 
-#: ../src/daemon/main.c:730
+#: ../src/daemon/main.c:734
 #, c-format
 msgid "fork() failed: %s"
 msgstr "fork()失败:%s"
 
-#: ../src/daemon/main.c:744
+#: ../src/daemon/main.c:748
 #, c-format
 msgid "read() failed: %s"
 msgstr "read()失败:%s"
 
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:754
 msgid "Daemon startup failed."
 msgstr "后台程序启动失败。"
 
-#: ../src/daemon/main.c:752
+#: ../src/daemon/main.c:756
 msgid "Daemon startup successful."
 msgstr "后台程序启动成功。"
 
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:826
 #, c-format
 msgid "This is PulseAudio %s"
 msgstr "这是 PulseAudio %s"
 
-#: ../src/daemon/main.c:823
+#: ../src/daemon/main.c:827
 #, c-format
 msgid "Compilation host: %s"
 msgstr "编译主机:%s"
 
-#: ../src/daemon/main.c:824
+#: ../src/daemon/main.c:828
 #, c-format
 msgid "Compilation CFLAGS: %s"
 msgstr "编译CFLAGS:%s"
 
-#: ../src/daemon/main.c:827
+#: ../src/daemon/main.c:831
 #, c-format
 msgid "Running on host: %s"
 msgstr "正在主机上运行:%s"
 
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:834
 #, c-format
 msgid "Found %u CPUs."
 msgstr ""
 
-#: ../src/daemon/main.c:832
+#: ../src/daemon/main.c:836
 #, c-format
 msgid "Page size is %lu bytes"
 msgstr "页面大小为%lu字节"
 
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:839
 msgid "Compiled with Valgrind support: yes"
 msgstr "编译启用Valgrind支持:是"
 
-#: ../src/daemon/main.c:837
+#: ../src/daemon/main.c:841
 msgid "Compiled with Valgrind support: no"
 msgstr "编译启用Valgrind支持:否"
 
-#: ../src/daemon/main.c:840
+#: ../src/daemon/main.c:844
 #, c-format
 msgid "Running in valgrind mode: %s"
 msgstr "正在以valgrind模式运行:%s"
 
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:847
 msgid "Optimized build: yes"
 msgstr "优化生成:是"
 
-#: ../src/daemon/main.c:845
+#: ../src/daemon/main.c:849
 msgid "Optimized build: no"
 msgstr "优化生成:否"
 
-#: ../src/daemon/main.c:849
+#: ../src/daemon/main.c:853
 msgid "Failed to get machine ID"
 msgstr "获取machine ID失败"
 
-#: ../src/daemon/main.c:852
+#: ../src/daemon/main.c:856
 #, c-format
 msgid "Machine ID is %s."
 msgstr "machine ID是%s。"
 
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:861
 #, c-format
 msgid "Using runtime directory %s."
 msgstr "正在使用运行时文件夹%s。"
 
-#: ../src/daemon/main.c:862
+#: ../src/daemon/main.c:866
 #, c-format
 msgid "Using state directory %s."
 msgstr "正在使用状态文件夹%s。"
 
-#: ../src/daemon/main.c:865
+#: ../src/daemon/main.c:869
 #, c-format
 msgid "Running in system mode: %s"
 msgstr "正在以系统模式运行:%s"
 
-#: ../src/daemon/main.c:880
+#: ../src/daemon/main.c:884
 msgid "pa_pid_file_create() failed."
 msgstr "pa_pid_file_create()失败。"
 
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:896
 msgid "Fresh high-resolution timers available! Bon appetit!"
 msgstr "新鲜的高分辨率计时器开锅了!吃个饱!"
 
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:898
 msgid ""
 "Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
 "resolution timers enabled!"
 msgstr "老兄,你的内核真臭!现在流行的是启用了高分辩率计分器的Linux!"
 
-#: ../src/daemon/main.c:906
+#: ../src/daemon/main.c:910
 msgid "pa_core_new() failed."
 msgstr "pa_core_new()失败。"
 
-#: ../src/daemon/main.c:967
+#: ../src/daemon/main.c:972
 msgid "Failed to initialize daemon."
 msgstr "后台程序初始化失败。"
 
-#: ../src/daemon/main.c:972
+#: ../src/daemon/main.c:977
 msgid "Daemon startup without any loaded modules, refusing to work."
 msgstr "后台程序启动未加载任何模块,拒绝工作。"
 
-#: ../src/daemon/main.c:985
+#: ../src/daemon/main.c:990
 msgid "Daemon startup complete."
 msgstr "后台程序启动完成。"
 
-#: ../src/daemon/main.c:991
+#: ../src/daemon/main.c:996
 msgid "Daemon shutdown initiated."
 msgstr "开始关闭后台程序。"
 
-#: ../src/daemon/main.c:1009
+#: ../src/daemon/main.c:1014
 msgid "Daemon terminated."
 msgstr "后台程序已终止。"
 
@@ -615,7 +629,8 @@ msgid "--disallow-module-loading expects boolean argument"
 msgstr "--disallow-module-loading 期待布尔参数"
 
 #: ../src/daemon/cmdline.c:302
-msgid "--disallow-exit boolean argument"
+#, fuzzy
+msgid "--disallow-exit expects boolean argument"
 msgstr "--disallow-exit 布尔参数"
 
 #: ../src/daemon/cmdline.c:309
@@ -628,12 +643,12 @@ msgstr "无效的日志目标:从syslog,stderr和auto中选取一个"
 
 #: ../src/daemon/cmdline.c:333
 #, fuzzy
-msgid "--log-time boolean argument"
-msgstr "--disallow-exit 布尔参数"
+msgid "--log-time expects boolean argument"
+msgstr "--realtime 期待布尔参数"
 
 #: ../src/daemon/cmdline.c:340
 #, fuzzy
-msgid "--log-meta boolean argument"
+msgid "--log-meta expects boolean argument"
 msgstr "--disallow-exit 布尔参数"
 
 #: ../src/daemon/cmdline.c:359
@@ -693,67 +708,78 @@ msgstr "加载一次:%s\n"
 msgid "Path: %s\n"
 msgstr "路径:%s\n"
 
-#: ../src/daemon/daemon-conf.c:212
+#: ../src/daemon/daemon-conf.c:213
 #, c-format
 msgid "[%s:%u] Invalid log target '%s'."
 msgstr "[%s:%u] 无效的日志目标'%s'。"
 
-#: ../src/daemon/daemon-conf.c:228
+#: ../src/daemon/daemon-conf.c:229
 #, c-format
 msgid "[%s:%u] Invalid log level '%s'."
 msgstr "[%s:%u] 无效的日志级别'%s'。"
 
-#: ../src/daemon/daemon-conf.c:244
+#: ../src/daemon/daemon-conf.c:245
 #, c-format
 msgid "[%s:%u] Invalid resample method '%s'."
 msgstr "[%s:%u] 无效的重采样方法'%s'。"
 
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:268
 #, c-format
 msgid "[%s:%u] Invalid rlimit '%s'."
 msgstr "[%s:%u] 无效的rlimit '%s'。"
 
-#: ../src/daemon/daemon-conf.c:274
+#: ../src/daemon/daemon-conf.c:275
 #, c-format
 msgid "[%s:%u] rlimit not supported on this platform."
 msgstr "[%s:%u] 此平台不支持rlimit。"
 
-#: ../src/daemon/daemon-conf.c:290
+#: ../src/daemon/daemon-conf.c:291
 #, c-format
 msgid "[%s:%u] Invalid sample format '%s'."
 msgstr "[%s:%u] 无效的样品格式'%s'。"
 
-#: ../src/daemon/daemon-conf.c:308
+#: ../src/daemon/daemon-conf.c:309
 #, c-format
 msgid "[%s:%u] Invalid sample rate '%s'."
 msgstr "[%s:%u] 无效的样品率'%s'。"
 
-#: ../src/daemon/daemon-conf.c:326
+#: ../src/daemon/daemon-conf.c:333
 #, c-format
 msgid "[%s:%u] Invalid sample channels '%s'."
 msgstr "[%s:%u] 无效的样品通道'%s'。"
 
-#: ../src/daemon/daemon-conf.c:344
+#: ../src/daemon/daemon-conf.c:351
+#, fuzzy, c-format
+msgid "[%s:%u] Invalid channel map '%s'."
+msgstr "[%s:%u] 无效的样品通道'%s'。"
+
+#: ../src/daemon/daemon-conf.c:369
 #, c-format
 msgid "[%s:%u] Invalid number of fragments '%s'."
 msgstr "[%s:%u] 无效的分段数'%s'。"
 
-#: ../src/daemon/daemon-conf.c:362
+#: ../src/daemon/daemon-conf.c:387
 #, c-format
 msgid "[%s:%u] Invalid fragment size '%s'."
 msgstr "[%s:%u] 无效的分段大小'%s'。"
 
-#: ../src/daemon/daemon-conf.c:380
+#: ../src/daemon/daemon-conf.c:405
 #, c-format
 msgid "[%s:%u] Invalid nice level '%s'."
 msgstr "[%s:%u] 无效的nice level '%s'。"
 
-#: ../src/daemon/daemon-conf.c:566
+#: ../src/daemon/daemon-conf.c:518
 #, c-format
 msgid "Failed to open configuration file: %s"
 msgstr "打开配置文件失败:%s"
 
-#: ../src/daemon/daemon-conf.c:640
+#: ../src/daemon/daemon-conf.c:534
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+
+#: ../src/daemon/daemon-conf.c:612
 #, c-format
 msgid "### Read from configuration file: %s ###\n"
 msgstr "### 从配置文件读取:%s ###\n"
@@ -767,6 +793,34 @@ msgstr "正在取消root权限。"
 msgid "Limited capabilities successfully to CAP_SYS_NICE."
 msgstr "性能成功限制到CAP_SYS_NICE。"
 
+#: ../src/daemon/pulseaudio.desktop.in.h:1
+msgid "PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/pulseaudio.desktop.in.h:2
+msgid "Start the PulseAudio Sound System"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:1
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:2
+#, fuzzy
+msgid "Real-time scheduling for the PulseAudio daemon"
+msgstr "杀死PulseAudio后台程序失败。"
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:3
+#, fuzzy
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr "我们在'%s'组中,允许高优先级调度。"
+
+#: ../src/daemon/org.pulseaudio.policy.in.h:4
+msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
+msgstr ""
+
 #: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
 msgid "Mono"
 msgstr "单声道"
@@ -1254,7 +1308,7 @@ msgid "pa_stream_connect_record() failed: %s\n"
 msgstr "pa_stream_connect_playback()失败:%s\n"
 
 #: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:762 ../src/utils/paplay.c:183
 #, c-format
 msgid "Connection failure: %s\n"
 msgstr "连接失败:%s\n"
@@ -1464,7 +1518,7 @@ msgid "Too many arguments.\n"
 msgstr "参数过多。\n"
 
 #: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
+#: ../src/utils/pactl.c:1017 ../src/utils/paplay.c:381
 #, c-format
 msgid "pa_mainloop_new() failed.\n"
 msgstr "pa_mainloop_new()失败。\n"
@@ -1475,12 +1529,12 @@ msgid "io_new() failed.\n"
 msgstr "io_new()失败。\n"
 
 #: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
+#: ../src/utils/pactl.c:1031 ../src/utils/paplay.c:396
 #, c-format
 msgid "pa_context_new() failed.\n"
 msgstr "pa_context_new()失败。\n"
 
-#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1037
 #: ../src/utils/paplay.c:404
 #, c-format
 msgid "pa_context_connect() failed: %s"
@@ -1492,7 +1546,7 @@ msgid "time_new() failed.\n"
 msgstr "time_new()失败。\n"
 
 #: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
+#: ../src/utils/pactl.c:1042 ../src/utils/paplay.c:410
 #, c-format
 msgid "pa_mainloop_run() failed.\n"
 msgstr "pa_mainloop_run()失败。\n"
@@ -1522,7 +1576,7 @@ msgstr "恢复失败:%s\n"
 msgid "WARNING: Sound server is not local, not suspending.\n"
 msgstr "警告:非本地声音服务器,不会挂起。\n"
 
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
 #: ../src/utils/paplay.c:191
 #, c-format
 msgid "Got SIGINT, exiting.\n"
@@ -1587,14 +1641,15 @@ msgstr "采样缓存大小:%s\n"
 msgid "Failed to get server information: %s\n"
 msgstr "获取服务器信息失败:%s\n"
 
-#: ../src/utils/pactl.c:136
-#, c-format
+#: ../src/utils/pactl.c:137
+#, fuzzy, c-format
 msgid ""
 "User name: %s\n"
 "Host Name: %s\n"
 "Server Name: %s\n"
 "Server Version: %s\n"
 "Default Sample Specification: %s\n"
+"Default Channel Map: %s\n"
 "Default Sink: %s\n"
 "Default Source: %s\n"
 "Cookie: %08x\n"
@@ -1608,12 +1663,12 @@ msgstr ""
 "默认音频入口:%s\n"
 "Cookie:%08x\n"
 
-#: ../src/utils/pactl.c:175
+#: ../src/utils/pactl.c:178
 #, c-format
 msgid "Failed to get sink information: %s\n"
 msgstr "获取音频出口信息失败:%s\n"
 
-#: ../src/utils/pactl.c:191
+#: ../src/utils/pactl.c:194
 #, fuzzy, c-format
 msgid ""
 "Sink #%u\n"
@@ -1647,12 +1702,12 @@ msgstr ""
 "属性:\n"
 "%s"
 
-#: ../src/utils/pactl.c:255
+#: ../src/utils/pactl.c:258
 #, c-format
 msgid "Failed to get source information: %s\n"
 msgstr "获取音频入口信息失败:%s\n"
 
-#: ../src/utils/pactl.c:271
+#: ../src/utils/pactl.c:274
 #, fuzzy, c-format
 msgid ""
 "Source #%u\n"
@@ -1686,20 +1741,20 @@ msgstr ""
 "属性:\n"
 "%s"
 
-#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
-#: ../src/utils/pactl.c:591
+#: ../src/utils/pactl.c:306 ../src/utils/pactl.c:350 ../src/utils/pactl.c:385
+#: ../src/utils/pactl.c:422 ../src/utils/pactl.c:481 ../src/utils/pactl.c:482
+#: ../src/utils/pactl.c:492 ../src/utils/pactl.c:536 ../src/utils/pactl.c:537
+#: ../src/utils/pactl.c:543 ../src/utils/pactl.c:586 ../src/utils/pactl.c:587
+#: ../src/utils/pactl.c:594
 msgid "n/a"
 msgstr "n/a"
 
-#: ../src/utils/pactl.c:321
+#: ../src/utils/pactl.c:324
 #, c-format
 msgid "Failed to get module information: %s\n"
 msgstr "获取模块信息失败:%s\n"
 
-#: ../src/utils/pactl.c:339
+#: ../src/utils/pactl.c:342
 #, fuzzy, c-format
 msgid ""
 "Module #%u\n"
@@ -1715,12 +1770,12 @@ msgstr ""
 "使用计数器:%s\n"
 "自动卸载:%s\n"
 
-#: ../src/utils/pactl.c:358
+#: ../src/utils/pactl.c:361
 #, c-format
 msgid "Failed to get client information: %s\n"
 msgstr "获取客户端信息失败:%s\n"
 
-#: ../src/utils/pactl.c:376
+#: ../src/utils/pactl.c:379
 #, fuzzy, c-format
 msgid ""
 "Client #%u\n"
@@ -1735,12 +1790,12 @@ msgstr ""
 "属性:\n"
 "%s"
 
-#: ../src/utils/pactl.c:393
+#: ../src/utils/pactl.c:396
 #, fuzzy, c-format
 msgid "Failed to get card information: %s\n"
 msgstr "获取自动加载信息失败:%s\n"
 
-#: ../src/utils/pactl.c:411
+#: ../src/utils/pactl.c:414
 #, fuzzy, c-format
 msgid ""
 "Card #%u\n"
@@ -1756,22 +1811,22 @@ msgstr ""
 "属性:\n"
 "%s"
 
-#: ../src/utils/pactl.c:425
+#: ../src/utils/pactl.c:428
 #, c-format
 msgid "\tProfiles:\n"
 msgstr ""
 
-#: ../src/utils/pactl.c:431
+#: ../src/utils/pactl.c:434
 #, fuzzy, c-format
 msgid "\tActive Profile: %s\n"
 msgstr "管道失败:%s"
 
-#: ../src/utils/pactl.c:442
+#: ../src/utils/pactl.c:445
 #, c-format
 msgid "Failed to get sink input information: %s\n"
 msgstr "获取音频出口输入信息失败:%s\n"
 
-#: ../src/utils/pactl.c:461
+#: ../src/utils/pactl.c:464
 #, fuzzy, c-format
 msgid ""
 "Sink Input #%u\n"
@@ -1805,12 +1860,12 @@ msgstr ""
 "属性:\n"
 "%s"
 
-#: ../src/utils/pactl.c:500
+#: ../src/utils/pactl.c:503
 #, c-format
 msgid "Failed to get source output information: %s\n"
 msgstr "获取音频入口输出信息失败:%s\n"
 
-#: ../src/utils/pactl.c:520
+#: ../src/utils/pactl.c:523
 #, fuzzy, c-format
 msgid ""
 "Source Output #%u\n"
@@ -1839,12 +1894,12 @@ msgstr ""
 "属性:\n"
 "%s"
 
-#: ../src/utils/pactl.c:551
+#: ../src/utils/pactl.c:554
 #, c-format
 msgid "Failed to get sample information: %s\n"
 msgstr "获取采样信息失败:%s\n"
 
-#: ../src/utils/pactl.c:569
+#: ../src/utils/pactl.c:572
 #, fuzzy, c-format
 msgid ""
 "Sample #%u\n"
@@ -1873,22 +1928,22 @@ msgstr ""
 "属性:\n"
 "%s"
 
-#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
 #, c-format
 msgid "Failure: %s\n"
 msgstr "失败:%s\n"
 
-#: ../src/utils/pactl.c:633
+#: ../src/utils/pactl.c:636
 #, c-format
 msgid "Failed to upload sample: %s\n"
 msgstr "上传采样失败:%s\n"
 
-#: ../src/utils/pactl.c:650
+#: ../src/utils/pactl.c:653
 #, c-format
 msgid "Premature end of file\n"
 msgstr "文件过早结束\n"
 
-#: ../src/utils/pactl.c:771
+#: ../src/utils/pactl.c:774
 #, fuzzy, c-format
 msgid ""
 "%s [options] stat\n"
@@ -1932,7 +1987,7 @@ msgstr ""
 "  -s, --server=SERVER                   要连接的服务器名\n"
 "  -n, --client-name=NAME                此客户端在服务器上的名称\n"
 
-#: ../src/utils/pactl.c:823
+#: ../src/utils/pactl.c:826
 #, c-format
 msgid ""
 "pactl %s\n"
@@ -1943,66 +1998,66 @@ msgstr ""
 "Compiled with libpulse %s\n"
 "Linked with libpulse %s\n"
 
-#: ../src/utils/pactl.c:862
+#: ../src/utils/pactl.c:865
 #, c-format
 msgid "Please specify a sample file to load\n"
 msgstr "请指定要加载的采样文件\n"
 
-#: ../src/utils/pactl.c:884
+#: ../src/utils/pactl.c:887
 #, c-format
 msgid "Failed to open sound file.\n"
 msgstr "打开声音文件失败。\n"
 
-#: ../src/utils/pactl.c:896
+#: ../src/utils/pactl.c:899
 #, c-format
 msgid "You have to specify a sample name to play\n"
 msgstr "你必须指定要播放的采样名\n"
 
-#: ../src/utils/pactl.c:908
+#: ../src/utils/pactl.c:911
 #, c-format
 msgid "You have to specify a sample name to remove\n"
 msgstr "你必须指定要删除的采样名\n"
 
-#: ../src/utils/pactl.c:916
+#: ../src/utils/pactl.c:919
 #, c-format
 msgid "You have to specify a sink input index and a sink\n"
 msgstr "你必须指定音频出口索引和音频出口\n"
 
-#: ../src/utils/pactl.c:925
+#: ../src/utils/pactl.c:928
 #, c-format
 msgid "You have to specify a source output index and a source\n"
 msgstr "你必须指定音频入口输出索引和音频入口\n"
 
-#: ../src/utils/pactl.c:939
+#: ../src/utils/pactl.c:942
 #, c-format
 msgid "You have to specify a module name and arguments.\n"
 msgstr "必须指定模块名和参数。\n"
 
-#: ../src/utils/pactl.c:959
+#: ../src/utils/pactl.c:962
 #, c-format
 msgid "You have to specify a module index\n"
 msgstr "必须指定模块索引\n"
 
-#: ../src/utils/pactl.c:969
+#: ../src/utils/pactl.c:972
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one sink. You have to specify a boolean "
 "value.\n"
 msgstr "不可指定多个音频出口。必须指定至少一个布尔值。\n"
 
-#: ../src/utils/pactl.c:982
+#: ../src/utils/pactl.c:985
 #, fuzzy, c-format
 msgid ""
 "You may not specify more than one source. You have to specify a boolean "
 "value.\n"
 msgstr "不可指定多个音频入口。必须指定至少一个布尔值。\n"
 
-#: ../src/utils/pactl.c:994
+#: ../src/utils/pactl.c:997
 #, fuzzy, c-format
 msgid "You have to specify a card name/index and a profile name\n"
 msgstr "你必须指定音频出口索引和音频出口\n"
 
-#: ../src/utils/pactl.c:1009
+#: ../src/utils/pactl.c:1012
 #, c-format
 msgid "No valid command specified.\n"
 msgstr "未指定有效的命令。\n"
@@ -2204,6 +2259,20 @@ msgstr "正在使用采样规格'%s'\n"
 msgid "Cannot access autospawn lock."
 msgstr "不能访问autospawn锁。"
 
+#, fuzzy
+#~ msgid ""
+#~ "Called SUID root and real-time and/or high-priority scheduling was "
+#~ "requested in the configuration. However, we lack the necessary "
+#~ "privileges:\n"
+#~ "We are not in group '"
+#~ msgstr ""
+#~ "此配置需要调用SUID root和实时/高优先级调度。但是我们没有所需的权限:\n"
+#~ "我们不属该组"
+
+#, fuzzy
+#~ msgid "--log-time boolean argument"
+#~ msgstr "--disallow-exit 布尔参数"
+
 #~ msgid ""
 #~ "' and PolicyKit refuse to grant us priviliges. Dropping SUID again.\n"
 #~ "For enabling real-time scheduling please acquire the appropriate "

commit 71263929cb825acc1fed15fa33e110d77b2c37a7
Author: Lennart Poettering <lennart at poettering.net>
Date:   Tue Feb 24 11:35:47 2009 +0100

    ignore tags file

diff --git a/src/.gitignore b/src/.gitignore
index 80d33d3..8537044 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -1,3 +1,4 @@
+TAGS
 alsa-time-test
 gtk-test
 prioq-test

-- 
hooks/post-receive
PulseAudio Sound Server



More information about the pulseaudio-commits mailing list