[pulseaudio-commits] [SCM] PulseAudio Sound Server branch, master-tx, updated. v0.9.15-test7-99-ge011230
Lennart Poettering
gitmailer-noreply at 0pointer.de
Thu Apr 9 17:04:57 PDT 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 dac687d2034f78a7eb8664ba9fc96d41de225925 (commit)
- Log -----------------------------------------------------------------
e011230 run make update-po
d6f019e Merge commit 'origin/master-tx'
5388b44 alsa: when printing warning about bogus data from alsa include snd_pcm_dump()
ee6657a bluetooth: when starting up HSP stream, send 2 packets first, only afterwards enter one-read-one-write logic
d77b28c bluetooth: rework timing logic, properly implement latency callbacks
e9a4dec bluetooth: be a bit more verbose if we exit due to bad poll() revents flag
48cff5b bluetooth: rename sco to hsp also for the user
f7c229d core: add a seperate fixed_latency field for sinks/sources with fixed latency
9ae8ca2 core: memory leak, fix ref counting when moving streams
dcd4a73 dbus: memory leak, actually free dbus wrapper
d827ecd dbus: drop pa_ prefix from static symbol
f8ebe85 protocol-native: downgrade message if we receive pcm block for dead stream
5b87196 protocol-native: print underrun message only once for each underrun
3507d1e socket-server: memory leak, free machine id after use
669703d dbus: memory leak, free pending calls
9ba9883 dbus: memory leak, free server id after use
9ee6a41 bluetooth: memory leak, actually free discovery struct itself
f65b276 interpol-test: make it easier to test corking only optionally
6c04a1c bluetooth: make sure to set max_request
c32c6c8 introduce relative_volume field in sink_input and make use of it on sink flat volume change
14e89d4 when calculating volume from dB use ceil()
4ff41ec print smallest attenuation/sample
aacb11b update documentation regarding stream timing a bit
c523b16 after propagating a sink volume change to the sink inputs recalculate their soft volumes
93e14d3 we need to make our multiplications with linear values
02686cc reduce number of conversions to/from linear volumes
d612fbb compare with doubles, not integer
e356a03 If the sink volume is lowered to 0 and then increased again, make sure all stream volumes follow instead of staying at 0
2c2713a make use of SO_TIMESTAMP timestamp for accuracy and leave smoother paused until we have data
f204c0f mark null sink as support dynamic latency
298bd0b adjust max_rewind/max_request whenever the latency changes
e976034 send the source latency based on the MTU size
61b0776 add suspend_within_thread() callbacks to pa_sink_input/pa_source_output
35a4a0b enable debugging output based on if DEBUG_DATA macro is set
886ddc3 make sure we don't apply sampling rate fixes that bring the sampling freq > PA_RATE_MAX
e61728e Make sure we don't get stuck when prebuf is too high
ff8d66d extend documentation for pa_stream_cork() a bit
7fc2382 properly handle interpolation when queried x is left of last data position
daa945a don't fail device reservation if the D-Bus connection is dead
4b521e5 be a bit more verbose about the busses we are connected to
90f4fdb make sure we keep a reference of the bus connection during the whole runtime if we manage to acquire the bus name
-----------------------------------------------------------------------
Summary of changes:
po/ca.po | 132 +++---
po/cs.po | 132 +++---
po/de.po | 132 +++---
po/el.po | 132 +++---
po/es.po | 715 ++++++++++++++---------
po/fi.po | 167 +++---
po/fr.po | 132 +++---
po/it.po | 132 +++---
po/pa.po | 132 +++---
po/pl.po | 132 +++---
po/pt_BR.po | 132 +++---
po/sv.po | 132 +++---
po/zh_CN.po | 157 +++---
src/daemon/main.c | 36 +-
src/modules/alsa/alsa-sink.c | 2 +-
src/modules/alsa/alsa-source.c | 2 +-
src/modules/alsa/alsa-util.c | 9 +-
src/modules/alsa/alsa-util.h | 3 +-
src/modules/bluetooth/bluetooth-util.c | 2 +
src/modules/bluetooth/module-bluetooth-device.c | 225 ++++++--
src/modules/module-null-sink.c | 7 +-
src/modules/reserve-wrap.c | 11 +-
src/modules/rtp/module-rtp-recv.c | 73 ++-
src/modules/rtp/module-rtp-send.c | 6 +-
src/modules/rtp/rtp.c | 21 +-
src/modules/rtp/rtp.h | 2 +-
src/pulse/stream.h | 81 ++-
src/pulse/volume.c | 8 +-
src/pulsecore/cli-text.c | 12 +-
src/pulsecore/dbus-shared.c | 12 +-
src/pulsecore/dbus-util.c | 21 +-
src/pulsecore/log.h | 1 +
src/pulsecore/memblockq.c | 52 +-
src/pulsecore/protocol-native.c | 14 +-
src/pulsecore/sink-input.c | 90 +++-
src/pulsecore/sink-input.h | 12 +-
src/pulsecore/sink.c | 158 ++++--
src/pulsecore/sink.h | 8 +-
src/pulsecore/socket-server.c | 1 +
src/pulsecore/source-output.c | 30 +-
src/pulsecore/source-output.h | 4 +
src/pulsecore/source.c | 55 ++-
src/pulsecore/source.h | 2 +
src/pulsecore/time-smoother.c | 42 ++-
src/tests/interpol-test.c | 15 +-
src/tests/voltest.c | 3 +
46 files changed, 2022 insertions(+), 1357 deletions(-)
-----------------------------------------------------------------------
commit 90f4fdb0718f4cdef717c555fe2ed81ff59f6fce
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Apr 6 02:31:22 2009 +0200
make sure we keep a reference of the bus connection during the whole runtime if we manage to acquire the bus name
diff --git a/src/daemon/main.c b/src/daemon/main.c
index d25647c..4c4a905 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -334,27 +334,38 @@ static void set_all_rlimits(const pa_daemon_conf *conf) {
#endif
#ifdef HAVE_DBUS
-static void register_org_pulseaudio(pa_core *c)
-{
+static pa_dbus_connection *register_dbus(pa_core *c) {
DBusError error;
pa_dbus_connection *conn;
dbus_error_init(&error);
+
if (!(conn = pa_dbus_bus_get(c, pa_in_system_mode() ? DBUS_BUS_SYSTEM : DBUS_BUS_SESSION, &error)) || dbus_error_is_set(&error)) {
- pa_log_warn("Unable to contact DBUS: %s: %s", error.name, error.message);
- goto finish_dbus;
+ pa_log_warn("Unable to contact D-Bus: %s: %s", error.name, error.message);
+ goto fail;
}
- if (dbus_bus_request_name (pa_dbus_connection_get(conn), "org.pulseaudio.Server", DBUS_NAME_FLAG_DO_NOT_QUEUE, &error) == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER)
+ if (dbus_bus_request_name(pa_dbus_connection_get(conn), "org.pulseaudio.Server", DBUS_NAME_FLAG_DO_NOT_QUEUE, &error) == DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) {
pa_log_debug("Got org.pulseaudio.Server!");
- else if (dbus_error_is_set(&error))
- pa_log_warn("Unable to get org.pulseaudio.Server: %s: %s", error.name, error.message);
+ return conn;
+ }
+
+ if (dbus_error_is_set(&error))
+ pa_log_warn("Failed to acquire org.pulseaudio.Server: %s: %s", error.name, error.message);
+ else
+ pa_log_warn("D-Bus name org.pulseaudio.Server already taken. Weird shit!");
+
+ /* PA cannot be started twice by the same user and hence we can
+ * ignore mostly the case that org.pulseaudio.Server is already
+ * taken. */
+
+fail:
-finish_dbus:
if (conn)
pa_dbus_connection_unref(conn);
dbus_error_free(&error);
+ return NULL;
}
#endif
@@ -380,6 +391,9 @@ int main(int argc, char *argv[]) {
#endif
int autospawn_fd = -1;
pa_bool_t autospawn_locked = FALSE;
+#ifdef HAVE_DBUS
+ pa_dbus_connection *dbus = NULL;
+#endif
pa_log_set_ident("pulseaudio");
pa_log_set_level(PA_LOG_INFO);
@@ -1026,7 +1040,7 @@ int main(int argc, char *argv[]) {
#endif
#ifdef HAVE_DBUS
- register_org_pulseaudio(c);
+ dbus = register_dbus(c);
#endif
pa_log_info(_("Daemon startup complete."));
@@ -1038,6 +1052,10 @@ int main(int argc, char *argv[]) {
pa_log_info(_("Daemon shutdown initiated."));
finish:
+#ifdef HAVE_DBUS
+ if (dbus)
+ pa_dbus_connection_unref(dbus);
+#endif
if (autospawn_fd >= 0) {
if (autospawn_locked)
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index d712bff..7302867 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -244,7 +244,7 @@ static void wakeup_main(void *userdata) {
pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, DBusBusType type, DBusError *error) {
DBusConnection *conn;
- pa_dbus_wrap_connection *pconn = NULL;
+ pa_dbus_wrap_connection *pconn;
pa_assert(type == DBUS_BUS_SYSTEM || type == DBUS_BUS_SESSION || type == DBUS_BUS_STARTER);
@@ -273,7 +273,8 @@ void pa_dbus_wrap_connection_free(pa_dbus_wrap_connection* c) {
dbus_connection_close(c->connection);
/* must process remaining messages, bit of a kludge to handle
* both unload and shutdown */
- while (dbus_connection_read_write_dispatch(c->connection, -1));
+ while (dbus_connection_read_write_dispatch(c->connection, -1))
+ ;
}
c->mainloop->defer_free(c->dispatch_event);
commit 4b521e5d24ef965345fcfe7ea1c63fbb4b687174
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Apr 6 04:20:12 2009 +0200
be a bit more verbose about the busses we are connected to
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index 7302867..b35e747 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -28,6 +28,8 @@
#include <pulse/xmalloc.h>
#include <pulse/timeval.h>
+
+#include <pulsecore/core-util.h>
#include <pulsecore/log.h>
#include "dbus-util.h"
@@ -263,6 +265,11 @@ pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, DBusBus
pconn->dispatch_event = pconn->mainloop->defer_new(pconn->mainloop, dispatch_cb, conn);
+ pa_log_debug("Successfully connected to D-Bus %s bus %s as %s",
+ type == DBUS_BUS_SYSTEM ? "system" : (type == DBUS_BUS_SESSION ? "session" : "starter"),
+ pa_strnull(dbus_connection_get_server_id(conn)),
+ pa_strnull(dbus_bus_get_unique_name(conn)));
+
return pconn;
}
commit daa945aa324af5b71332a3cd07890d1cf3a1cb60
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Apr 6 04:21:26 2009 +0200
don't fail device reservation if the D-Bus connection is dead
diff --git a/src/modules/reserve-wrap.c b/src/modules/reserve-wrap.c
index 1927342..02ff29b 100644
--- a/src/modules/reserve-wrap.c
+++ b/src/modules/reserve-wrap.c
@@ -23,6 +23,8 @@
#include <config.h>
#endif
+#include <errno.h>
+
#include <pulse/xmalloc.h>
#include <pulse/i18n.h>
@@ -127,8 +129,13 @@ pa_reserve_wrapper* pa_reserve_wrapper_get(pa_core *c, const char *device_name)
request_cb,
NULL)) < 0) {
- pa_log_error("Failed to acquire reservation lock on device '%s': %s", device_name, pa_cstrerror(-k));
- goto fail;
+ if (k == -EBUSY) {
+ pa_log_error("Device '%s' already locked.", device_name);
+ goto fail;
+ } else {
+ pa_log_warn("Failed to acquire reservation lock on device '%s': %s", device_name, pa_cstrerror(-k));
+ return r;
+ }
}
pa_log_debug("Successfully acquired reservation lock on device '%s'", device_name);
commit 7fc2382a0aaaec70401468940afd266252bda178
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Apr 6 16:38:38 2009 +0200
properly handle interpolation when queried x is left of last data position
diff --git a/src/pulsecore/time-smoother.c b/src/pulsecore/time-smoother.c
index 55ac868..047ab6c 100644
--- a/src/pulsecore/time-smoother.c
+++ b/src/pulsecore/time-smoother.c
@@ -291,7 +291,8 @@ static void estimate(pa_smoother *s, pa_usec_t x, pa_usec_t *y, double *deriv) {
pa_assert(s);
pa_assert(y);
- if (!s->smoothing || x >= s->px) {
+ if (x >= s->px) {
+ /* Linear interpolation right from px */
int64_t t;
/* The requested point is right of the point where we wanted
@@ -307,7 +308,22 @@ static void estimate(pa_smoother *s, pa_usec_t x, pa_usec_t *y, double *deriv) {
if (deriv)
*deriv = s->dp;
+ } else if (x <= s->ex) {
+ /* Linear interpolation left from ex */
+ int64_t t;
+
+ t = (int64_t) s->ey - (int64_t) llrint(s->de * (double) (s->ex - x));
+
+ if (t < 0)
+ t = 0;
+
+ *y = (pa_usec_t) t;
+
+ if (deriv)
+ *deriv = s->de;
+
} else {
+ /* Spline interpolation between ex and px */
double tx, ty;
/* Ok, we're not yet on track, thus let's interpolate, and
commit ff8d66d82ec70c18e477f94a965eef4675222d84
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Apr 6 22:06:50 2009 +0200
extend documentation for pa_stream_cork() a bit
diff --git a/src/pulse/stream.h b/src/pulse/stream.h
index 8e99a75..8993143 100644
--- a/src/pulse/stream.h
+++ b/src/pulse/stream.h
@@ -519,7 +519,16 @@ void pa_stream_set_event_callback(pa_stream *p, pa_stream_event_cb_t cb, void *u
* pa_stream_set_moved_callback() as well. \since 0.9.15 */
void pa_stream_set_buffer_attr_callback(pa_stream *p, pa_stream_notify_cb_t cb, void *userdata);
-/** Pause (or resume) playback of this stream temporarily. Available on both playback and recording streams. */
+/** Pause (or resume) playback of this stream temporarily. Available
+ * on both playback and recording streams. If b is 1 the stream is
+ * paused. If b is 0 the stream is resumed. The pause/resume operation
+ * is executed as quickly as possible. If a cork is very quickly
+ * followed by an uncork or the other way round this might not
+ * actually have any effect on the stream that is output. You can use
+ * pa_stream_is_corked() to find out whether the stream is currently
+ * paused or not. Normally a stream will be created in uncorked
+ * state. If you pass PA_STREAM_START_CORKED as flag during connection
+ * of the stream it will be created in corked state. */
pa_operation* pa_stream_cork(pa_stream *s, int b, pa_stream_success_cb_t cb, void *userdata);
/** Flush the playback buffer of this stream. Most of the time you're
commit e61728e67a656c0bbd12b13bb4c1777d0e3163f4
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Apr 6 22:09:38 2009 +0200
Make sure we don't get stuck when prebuf is too high
If prebuf is greater than tlength minus minreq we might end up waiting
for the buffer to fill up further however without ever asking for more
data from the client since less minreq bytes might be missing.
This fixes bug #440
diff --git a/src/pulsecore/memblockq.c b/src/pulsecore/memblockq.c
index d12d13a..77f9efc 100644
--- a/src/pulsecore/memblockq.c
+++ b/src/pulsecore/memblockq.c
@@ -90,8 +90,8 @@ pa_memblockq* pa_memblockq_new(
pa_memblockq_set_maxlength(bq, maxlength);
pa_memblockq_set_tlength(bq, tlength);
- pa_memblockq_set_prebuf(bq, prebuf);
pa_memblockq_set_minreq(bq, minreq);
+ pa_memblockq_set_prebuf(bq, prebuf);
pa_memblockq_set_maxrewind(bq, maxrewind);
pa_log_debug("memblockq sanitized: maxlength=%lu, tlength=%lu, base=%lu, prebuf=%lu, minreq=%lu maxrewind=%lu",
@@ -784,16 +784,13 @@ void pa_memblockq_set_maxlength(pa_memblockq *bq, size_t maxlength) {
if (bq->tlength > bq->maxlength)
pa_memblockq_set_tlength(bq, bq->maxlength);
-
- if (bq->prebuf > bq->maxlength)
- pa_memblockq_set_prebuf(bq, bq->maxlength);
}
void pa_memblockq_set_tlength(pa_memblockq *bq, size_t tlength) {
size_t old_tlength;
pa_assert(bq);
- if (tlength <= 0)
+ if (tlength <= 0 || tlength == (size_t) -1)
tlength = bq->maxlength;
old_tlength = bq->tlength;
@@ -802,49 +799,46 @@ void pa_memblockq_set_tlength(pa_memblockq *bq, size_t tlength) {
if (bq->tlength > bq->maxlength)
bq->tlength = bq->maxlength;
- if (bq->prebuf > bq->tlength)
- pa_memblockq_set_prebuf(bq, bq->tlength);
-
if (bq->minreq > bq->tlength)
pa_memblockq_set_minreq(bq, bq->tlength);
+ if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
+ pa_memblockq_set_prebuf(bq, bq->tlength+bq->base-bq->minreq);
+
bq->missing += (int64_t) bq->tlength - (int64_t) old_tlength;
}
+void pa_memblockq_set_minreq(pa_memblockq *bq, size_t minreq) {
+ pa_assert(bq);
+
+ bq->minreq = (minreq/bq->base)*bq->base;
+
+ if (bq->minreq > bq->tlength)
+ bq->minreq = bq->tlength;
+
+ if (bq->minreq < bq->base)
+ bq->minreq = bq->base;
+
+ if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
+ pa_memblockq_set_prebuf(bq, bq->tlength+bq->base-bq->minreq);
+}
+
void pa_memblockq_set_prebuf(pa_memblockq *bq, size_t prebuf) {
pa_assert(bq);
if (prebuf == (size_t) -1)
- prebuf = bq->tlength;
+ prebuf = bq->tlength+bq->base-bq->minreq;
bq->prebuf = ((prebuf+bq->base-1)/bq->base)*bq->base;
if (prebuf > 0 && bq->prebuf < bq->base)
bq->prebuf = bq->base;
- if (bq->prebuf > bq->tlength)
- bq->prebuf = bq->tlength;
+ if (bq->prebuf > bq->tlength+bq->base-bq->minreq)
+ bq->prebuf = bq->tlength+bq->base-bq->minreq;
if (bq->prebuf <= 0 || pa_memblockq_get_length(bq) >= bq->prebuf)
bq->in_prebuf = FALSE;
-
- if (bq->minreq > bq->prebuf)
- pa_memblockq_set_minreq(bq, bq->prebuf);
-}
-
-void pa_memblockq_set_minreq(pa_memblockq *bq, size_t minreq) {
- pa_assert(bq);
-
- bq->minreq = (minreq/bq->base)*bq->base;
-
- if (bq->minreq > bq->tlength)
- bq->minreq = bq->tlength;
-
- if (bq->minreq > bq->prebuf)
- bq->minreq = bq->prebuf;
-
- if (bq->minreq < bq->base)
- bq->minreq = bq->base;
}
void pa_memblockq_set_maxrewind(pa_memblockq *bq, size_t maxrewind) {
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 59e5d80..edcd598 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -850,7 +850,7 @@ static int playback_stream_process_msg(pa_msgobject *o, int code, void*userdata,
/* Called from main context */
static void fix_playback_buffer_attr(playback_stream *s) {
- size_t frame_size;
+ size_t frame_size, max_prebuf;
pa_usec_t orig_tlength_usec, tlength_usec, orig_minreq_usec, minreq_usec, sink_usec;
pa_assert(s);
@@ -976,8 +976,11 @@ static void fix_playback_buffer_attr(playback_stream *s) {
if (s->buffer_attr.tlength <= s->buffer_attr.minreq)
s->buffer_attr.tlength = s->buffer_attr.minreq*2 + (uint32_t) frame_size;
- if (s->buffer_attr.prebuf == (uint32_t) -1 || s->buffer_attr.prebuf > s->buffer_attr.tlength)
- s->buffer_attr.prebuf = s->buffer_attr.tlength;
+ max_prebuf = s->buffer_attr.tlength + (uint32_t)frame_size - s->buffer_attr.minreq;
+
+ if (s->buffer_attr.prebuf == (uint32_t) -1 ||
+ s->buffer_attr.prebuf > max_prebuf)
+ s->buffer_attr.prebuf = max_prebuf;
}
/* Called from main context */
commit 886ddc33d8c0cad2da11c44b2051d6c807340ce3
Author: Lennart Poettering <lennart at poettering.net>
Date: Mon Apr 6 23:02:45 2009 +0200
make sure we don't apply sampling rate fixes that bring the sampling freq > PA_RATE_MAX
Fixes #525
diff --git a/src/modules/rtp/module-rtp-recv.c b/src/modules/rtp/module-rtp-recv.c
index e7749cd..3b0fc53 100644
--- a/src/modules/rtp/module-rtp-recv.c
+++ b/src/modules/rtp/module-rtp-recv.c
@@ -262,14 +262,12 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
pa_usec_t wi, ri, render_delay, sink_delay = 0, latency, fix;
unsigned fix_samples;
- pa_log("Updating sample rate");
+ pa_log_debug("Updating sample rate");
wi = pa_smoother_get(s->smoother, pa_timeval_load(&now));
ri = pa_bytes_to_usec((uint64_t) pa_memblockq_get_read_index(s->memblockq), &s->sink_input->sample_spec);
- if (PA_MSGOBJECT(s->sink_input->sink)->process_msg(PA_MSGOBJECT(s->sink_input->sink), PA_SINK_MESSAGE_GET_LATENCY, &sink_delay, 0, NULL) < 0)
- sink_delay = 0;
-
+ sink_delay = pa_sink_get_latency_within_thread(s->sink_input->sink);
render_delay = pa_bytes_to_usec(pa_memblockq_get_length(s->sink_input->thread_info.render_memblockq), &s->sink_input->sink->sample_spec);
if (ri > render_delay+sink_delay)
@@ -296,12 +294,18 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
/* Check if deviation is in bounds */
if (fix_samples > s->sink_input->sample_spec.rate*.20)
pa_log_debug("Hmmm, rate fix is too large (%lu Hz), not applying.", (unsigned long) fix_samples);
+ else {
+ /* Fix up rate */
+ if (latency < s->intended_latency)
+ s->sink_input->sample_spec.rate -= fix_samples;
+ else
+ s->sink_input->sample_spec.rate += fix_samples;
+
+ if (s->sink_input->sample_spec.rate > PA_RATE_MAX)
+ s->sink_input->sample_spec.rate = PA_RATE_MAX;
+ }
- /* Fix up rate */
- if (latency < s->intended_latency)
- s->sink_input->sample_spec.rate -= fix_samples;
- else
- s->sink_input->sample_spec.rate += fix_samples;
+ pa_assert(pa_sample_spec_valid(&s->sink_input->sample_spec));
pa_resampler_set_input_rate(s->sink_input->thread_info.resampler, s->sink_input->sample_spec.rate);
@@ -654,8 +658,7 @@ int pa__init(pa_module*m) {
if ((fd = mcast_socket(sa, salen)) < 0)
goto fail;
- u = pa_xnew(struct userdata, 1);
- m->userdata = u;
+ m->userdata = u = pa_xnew(struct userdata, 1);
u->module = m;
u->sink_name = pa_xstrdup(pa_modargs_get_value(ma, "sink", NULL));
commit 35a4a0baa8c83e1056d4fa6498aa789f76956ba7
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 00:41:45 2009 +0200
enable debugging output based on if DEBUG_DATA macro is set
diff --git a/src/pulsecore/time-smoother.c b/src/pulsecore/time-smoother.c
index 047ab6c..9d5a070 100644
--- a/src/pulsecore/time-smoother.c
+++ b/src/pulsecore/time-smoother.c
@@ -397,7 +397,9 @@ void pa_smoother_put(pa_smoother *s, pa_usec_t x, pa_usec_t y) {
s->abc_valid = FALSE;
-/* pa_log_debug("put(%llu | %llu) = %llu", (unsigned long long) (x + s->time_offset), (unsigned long long) x, (unsigned long long) y); */
+#ifdef DEBUG_DATA
+ pa_log_debug("%p, put(%llu | %llu) = %llu", s, (unsigned long long) (x + s->time_offset), (unsigned long long) x, (unsigned long long) y);
+#endif
}
pa_usec_t pa_smoother_get(pa_smoother *s, pa_usec_t x) {
@@ -428,7 +430,9 @@ pa_usec_t pa_smoother_get(pa_smoother *s, pa_usec_t x) {
s->last_y = y;
}
-/* pa_log_debug("get(%llu | %llu) = %llu", (unsigned long long) (x + s->time_offset), (unsigned long long) x, (unsigned long long) y); */
+#ifdef DEBUG_DATA
+ pa_log_debug("%p, get(%llu | %llu) = %llu", s, (unsigned long long) (x + s->time_offset), (unsigned long long) x, (unsigned long long) y);
+#endif
return y;
}
@@ -438,7 +442,9 @@ void pa_smoother_set_time_offset(pa_smoother *s, pa_usec_t offset) {
s->time_offset = offset;
-/* pa_log_debug("offset(%llu)", (unsigned long long) offset); */
+#ifdef DEBUG_DATA
+ pa_log_debug("offset(%llu)", (unsigned long long) offset);
+#endif
}
void pa_smoother_pause(pa_smoother *s, pa_usec_t x) {
@@ -447,7 +453,9 @@ void pa_smoother_pause(pa_smoother *s, pa_usec_t x) {
if (s->paused)
return;
-/* pa_log_debug("pause(%llu)", (unsigned long long) x); */
+#ifdef DEBUG_DATA
+ pa_log_debug("pause(%llu)", (unsigned long long) x);
+#endif
s->paused = TRUE;
s->pause_time = x;
@@ -462,7 +470,9 @@ void pa_smoother_resume(pa_smoother *s, pa_usec_t x, pa_bool_t fix_now) {
if (x < s->pause_time)
x = s->pause_time;
-/* pa_log_debug("resume(%llu)", (unsigned long long) x); */
+#ifdef DEBUG_DATA
+ pa_log_debug("resume(%llu)", (unsigned long long) x);
+#endif
s->paused = FALSE;
s->time_offset += x - s->pause_time;
@@ -497,7 +507,9 @@ pa_usec_t pa_smoother_translate(pa_smoother *s, pa_usec_t x, pa_usec_t y_delay)
if (s->dp > nde)
nde = s->dp;
-/* pa_log_debug("translate(%llu) = %llu (%0.2f)", (unsigned long long) y_delay, (unsigned long long) ((double) y_delay / nde), nde); */
+#ifdef DEBUG_DATA
+ pa_log_debug("translate(%llu) = %llu (%0.2f)", (unsigned long long) y_delay, (unsigned long long) ((double) y_delay / nde), nde);
+#endif
return (pa_usec_t) llrint((double) y_delay / nde);
}
commit 61b07768c2f7fcc38a32ba31db837a57335ed664
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 00:46:20 2009 +0200
add suspend_within_thread() callbacks to pa_sink_input/pa_source_output
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 1fdb3fa..ad6b9ca 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -117,6 +117,7 @@ static void reset_callbacks(pa_sink_input *i) {
i->attach = NULL;
i->detach = NULL;
i->suspend = NULL;
+ i->suspend_within_thread = NULL;
i->moving = NULL;
i->kill = NULL;
i->get_latency = NULL;
diff --git a/src/pulsecore/sink-input.h b/src/pulsecore/sink-input.h
index 0dd5e9a..6ecb5d7 100644
--- a/src/pulsecore/sink-input.h
+++ b/src/pulsecore/sink-input.h
@@ -148,6 +148,10 @@ struct pa_sink_input {
* to suspends or resumes. Called from main context */
void (*suspend) (pa_sink_input *i, pa_bool_t b); /* may be NULL */
+ /* If non-NULL called whenever the sink this input is attached
+ * to suspends or resumes. Called from IO context */
+ void (*suspend_within_thread) (pa_sink_input *i, pa_bool_t b); /* may be NULL */
+
/* If non-NULL called whenever the sink input is moved to a new
* sink. Called from main context after the sink input has been
* detached from the old sink and before it has been attached to
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index a0f0ea7..a522632 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1585,7 +1585,11 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
case PA_SINK_MESSAGE_GET_MUTE:
return 0;
- case PA_SINK_MESSAGE_SET_STATE:
+ case PA_SINK_MESSAGE_SET_STATE: {
+
+ pa_bool_t suspend_change =
+ (s->thread_info.state == PA_SINK_SUSPENDED && PA_SINK_IS_OPENED(PA_PTR_TO_UINT(userdata))) ||
+ (PA_SINK_IS_OPENED(s->thread_info.state) && PA_PTR_TO_UINT(userdata) == PA_SINK_SUSPENDED);
s->thread_info.state = PA_PTR_TO_UINT(userdata);
@@ -1594,7 +1598,17 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
s->thread_info.rewind_requested = FALSE;
}
+ if (suspend_change) {
+ pa_sink_input *i;
+ void *state = NULL;
+
+ while ((i = pa_hashmap_iterate(s->thread_info.inputs, &state, NULL)))
+ if (i->suspend_within_thread)
+ i->suspend_within_thread(i, s->thread_info.state == PA_SINK_SUSPENDED);
+ }
+
return 0;
+ }
case PA_SINK_MESSAGE_DETACH:
diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c
index 1c37be9..8918b43 100644
--- a/src/pulsecore/source-output.c
+++ b/src/pulsecore/source-output.c
@@ -87,6 +87,7 @@ static void reset_callbacks(pa_source_output *o) {
o->attach = NULL;
o->detach = NULL;
o->suspend = NULL;
+ o->suspend_within_thread = NULL;
o->moving = NULL;
o->kill = NULL;
o->get_latency = NULL;
diff --git a/src/pulsecore/source-output.h b/src/pulsecore/source-output.h
index 9f5f774..9824e16 100644
--- a/src/pulsecore/source-output.h
+++ b/src/pulsecore/source-output.h
@@ -120,6 +120,10 @@ struct pa_source_output {
* to suspends or resumes. Called from main context */
void (*suspend) (pa_source_output *o, pa_bool_t b); /* may be NULL */
+ /* If non-NULL called whenever the source this output is attached
+ * to suspends or resumes. Called from IO context */
+ void (*suspend_within_thread) (pa_source_output *o, pa_bool_t b); /* may be NULL */
+
/* If non-NULL called whenever the source output is moved to a new
* source. Called from main context after the stream was detached
* from the old source and before it is attached to the new
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 252e23a..b85d6e1 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -933,9 +933,26 @@ int pa_source_process_msg(pa_msgobject *object, int code, void *userdata, int64_
case PA_SOURCE_MESSAGE_GET_MUTE:
return 0;
- case PA_SOURCE_MESSAGE_SET_STATE:
+ case PA_SOURCE_MESSAGE_SET_STATE: {
+
+ pa_bool_t suspend_change =
+ (s->thread_info.state == PA_SOURCE_SUSPENDED && PA_SOURCE_IS_OPENED(PA_PTR_TO_UINT(userdata))) ||
+ (PA_SOURCE_IS_OPENED(s->thread_info.state) && PA_PTR_TO_UINT(userdata) == PA_SOURCE_SUSPENDED);
+
s->thread_info.state = PA_PTR_TO_UINT(userdata);
+
+ if (suspend_change) {
+ pa_source_output *o;
+ void *state = NULL;
+
+ while ((o = pa_hashmap_iterate(s->thread_info.outputs, &state, NULL)))
+ if (o->suspend_within_thread)
+ o->suspend_within_thread(o, s->thread_info.state == PA_SOURCE_SUSPENDED);
+ }
+
+
return 0;
+ }
case PA_SOURCE_MESSAGE_DETACH:
@@ -1217,7 +1234,7 @@ void pa_source_get_latency_range(pa_source *s, pa_usec_t *min_latency, pa_usec_t
}
}
-/* Called from IO thread, and from main thread before pa_sink_put() is called */
+/* Called from IO thread, and from main thread before pa_source_put() is called */
void pa_source_set_latency_range_within_thread(pa_source *s, pa_usec_t min_latency, pa_usec_t max_latency) {
void *state = NULL;
commit e976034063863a644a7ebdf1165403a81656d7c3
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 00:47:13 2009 +0200
send the source latency based on the MTU size
diff --git a/src/modules/rtp/module-rtp-send.c b/src/modules/rtp/module-rtp-send.c
index 722d12b..cdd2c57 100644
--- a/src/modules/rtp/module-rtp-send.c
+++ b/src/modules/rtp/module-rtp-send.c
@@ -347,10 +347,10 @@ int pa__init(pa_module*m) {
o->push = source_output_push;
o->kill = source_output_kill;
- u = pa_xnew(struct userdata, 1);
- m->userdata = u;
- o->userdata = u;
+ pa_log_info("Configured source latency of %lu ms.",
+ pa_source_output_set_requested_latency(o, pa_bytes_to_usec(mtu, &o->sample_spec)) / PA_USEC_PER_MSEC);
+ m->userdata = o->userdata = u = pa_xnew(struct userdata, 1);
u->module = m;
u->source_output = o;
commit 298bd0b0c674206f2ba7071943164c2cf699cbf3
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 00:47:55 2009 +0200
adjust max_rewind/max_request whenever the latency changes
diff --git a/src/modules/module-null-sink.c b/src/modules/module-null-sink.c
index 129bc1c..9254242 100644
--- a/src/modules/module-null-sink.c
+++ b/src/modules/module-null-sink.c
@@ -119,6 +119,7 @@ static int sink_process_msg(
static void sink_update_requested_latency_cb(pa_sink *s) {
struct userdata *u;
+ size_t nbytes;
pa_sink_assert_ref(s);
pa_assert_se(u = s->userdata);
@@ -127,6 +128,10 @@ static void sink_update_requested_latency_cb(pa_sink *s) {
if (u->block_usec == (pa_usec_t) -1)
u->block_usec = s->thread_info.max_latency;
+
+ nbytes = pa_usec_to_bytes(u->block_usec, &s->sample_spec);
+ pa_sink_set_max_rewind_within_thread(s, nbytes);
+ pa_sink_set_max_request_within_thread(s, nbytes);
}
static void process_rewind(struct userdata *u, pa_usec_t now) {
commit f204c0fe43185e81ecf33d8cf16c3d54555147d7
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 00:48:09 2009 +0200
mark null sink as support dynamic latency
diff --git a/src/modules/module-null-sink.c b/src/modules/module-null-sink.c
index 9254242..d9bab6b 100644
--- a/src/modules/module-null-sink.c
+++ b/src/modules/module-null-sink.c
@@ -289,7 +289,7 @@ int pa__init(pa_module*m) {
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_DESCRIPTION, pa_modargs_get_value(ma, "description", "Null Output"));
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_CLASS, "abstract");
- u->sink = pa_sink_new(m->core, &data, PA_SINK_LATENCY);
+ u->sink = pa_sink_new(m->core, &data, PA_SINK_LATENCY|PA_SINK_DYNAMIC_LATENCY);
pa_sink_new_data_done(&data);
if (!u->sink) {
commit 2c2713a72cbb7388e034575b229cd3fd5700ff9f
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 00:50:47 2009 +0200
make use of SO_TIMESTAMP timestamp for accuracy and leave smoother paused until we have data
diff --git a/src/modules/rtp/module-rtp-recv.c b/src/modules/rtp/module-rtp-recv.c
index 3b0fc53..c61d2d8 100644
--- a/src/modules/rtp/module-rtp-recv.c
+++ b/src/modules/rtp/module-rtp-recv.c
@@ -52,6 +52,8 @@
#include <pulsecore/rtclock.h>
#include <pulsecore/atomic.h>
#include <pulsecore/time-smoother.h>
+#include <pulsecore/socket-util.h>
+#include <pulsecore/once.h>
#include "module-rtp-recv-symdef.h"
@@ -165,7 +167,7 @@ static void sink_input_process_rewind_cb(pa_sink_input *i, size_t nbytes) {
pa_memblockq_rewind(s->memblockq, nbytes);
}
-/* Called from thread context */
+/* Called from I/O thread context */
static void sink_input_update_max_rewind_cb(pa_sink_input *i, size_t nbytes) {
struct session *s;
@@ -184,11 +186,24 @@ static void sink_input_kill(pa_sink_input* i) {
session_free(s);
}
+/* Called from IO context */
+static void sink_input_suspend_within_thread(pa_sink_input* i, pa_bool_t b) {
+ struct session *s;
+ pa_sink_input_assert_ref(i);
+ pa_assert_se(s = i->userdata);
+
+ if (b) {
+ pa_smoother_pause(s->smoother, pa_rtclock_usec());
+ pa_memblockq_flush_read(s->memblockq);
+ } else
+ s->first_packet = FALSE;
+}
+
/* Called from I/O thread context */
static int rtpoll_work_cb(pa_rtpoll_item *i) {
pa_memchunk chunk;
int64_t k, j, delta;
- struct timeval now;
+ struct timeval now = { 0, 0 };
struct session *s;
struct pollfd *p;
@@ -206,10 +221,11 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
p->revents = 0;
- if (pa_rtp_recv(&s->rtp_context, &chunk, s->userdata->module->core->mempool) < 0)
+ if (pa_rtp_recv(&s->rtp_context, &chunk, s->userdata->module->core->mempool, &now) < 0)
return 0;
- if (s->sdp_info.payload != s->rtp_context.payload) {
+ if (s->sdp_info.payload != s->rtp_context.payload ||
+ !PA_SINK_IS_OPENED(s->sink_input->sink->thread_info.state)) {
pa_memblock_unref(chunk.memblock);
return 0;
}
@@ -240,10 +256,19 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
pa_memblockq_seek(s->memblockq, delta * (int64_t) s->rtp_context.frame_size, PA_SEEK_RELATIVE, TRUE);
- pa_rtclock_get(&now);
+ if (now.tv_sec == 0) {
+ PA_ONCE_BEGIN {
+ pa_log_warn("Using artificial time instead of timestamp");
+ } PA_ONCE_END;
+ pa_rtclock_get(&now);
+ } else
+ pa_rtclock_from_wallclock(&now);
pa_smoother_put(s->smoother, pa_timeval_load(&now), pa_bytes_to_usec((uint64_t) pa_memblockq_get_write_index(s->memblockq), &s->sink_input->sample_spec));
+ /* Tell the smoother that we are rolling now, in case it is still paused */
+ pa_smoother_resume(s->smoother, pa_timeval_load(&now), TRUE);
+
if (pa_memblockq_push(s->memblockq, &chunk) < 0) {
pa_log_warn("Queue overrun");
pa_memblockq_seek(s->memblockq, (int64_t) chunk.length, PA_SEEK_RELATIVE, TRUE);
@@ -267,6 +292,8 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
wi = pa_smoother_get(s->smoother, pa_timeval_load(&now));
ri = pa_bytes_to_usec((uint64_t) pa_memblockq_get_read_index(s->memblockq), &s->sink_input->sample_spec);
+ pa_log_debug("wi=%lu ri=%lu", (unsigned long) wi, (unsigned long) ri);
+
sink_delay = pa_sink_get_latency_within_thread(s->sink_input->sink);
render_delay = pa_bytes_to_usec(pa_memblockq_get_length(s->sink_input->thread_info.render_memblockq), &s->sink_input->sink->sample_spec);
@@ -292,7 +319,7 @@ static int rtpoll_work_cb(pa_rtpoll_item *i) {
fix_samples = (unsigned) (fix * (pa_usec_t) s->sink_input->thread_info.sample_spec.rate / (pa_usec_t) RATE_UPDATE_INTERVAL);
/* Check if deviation is in bounds */
- if (fix_samples > s->sink_input->sample_spec.rate*.20)
+ if (fix_samples > s->sink_input->sample_spec.rate*.50)
pa_log_debug("Hmmm, rate fix is too large (%lu Hz), not applying.", (unsigned long) fix_samples);
else {
/* Fix up rate */
@@ -366,6 +393,14 @@ static int mcast_socket(const struct sockaddr* sa, socklen_t salen) {
goto fail;
}
+ pa_make_udp_socket_low_delay(fd);
+
+ one = 1;
+ if (setsockopt(fd, SOL_SOCKET, SO_TIMESTAMP, &one, sizeof(one)) < 0) {
+ pa_log("SO_TIMESTAMP failed: %s", pa_cstrerror(errno));
+ goto fail;
+ }
+
one = 1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(one)) < 0) {
pa_log("SO_REUSEADDR failed: %s", pa_cstrerror(errno));
@@ -441,7 +476,7 @@ static struct session *session_new(struct userdata *u, const pa_sdp_info *sdp_in
TRUE,
10,
pa_timeval_load(&now),
- FALSE);
+ TRUE);
s->last_rate_update = pa_timeval_load(&now);
pa_atomic_store(&s->timestamp, (int) now.tv_sec);
@@ -482,6 +517,7 @@ static struct session *session_new(struct userdata *u, const pa_sdp_info *sdp_in
s->sink_input->kill = sink_input_kill;
s->sink_input->attach = sink_input_attach;
s->sink_input->detach = sink_input_detach;
+ s->sink_input->suspend_within_thread = sink_input_suspend_within_thread;
pa_sink_input_get_silence(s->sink_input, &silence);
diff --git a/src/modules/rtp/rtp.c b/src/modules/rtp/rtp.c
index 7537c1f..6706a10 100644
--- a/src/modules/rtp/rtp.c
+++ b/src/modules/rtp/rtp.c
@@ -162,13 +162,16 @@ pa_rtp_context* pa_rtp_context_init_recv(pa_rtp_context *c, int fd, size_t frame
return c;
}
-int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool) {
+int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool, struct timeval *tstamp) {
int size;
struct msghdr m;
+ struct cmsghdr *cm;
struct iovec iov;
uint32_t header;
unsigned cc;
ssize_t r;
+ uint8_t aux[1024];
+ pa_bool_t found_tstamp = FALSE;
pa_assert(c);
pa_assert(chunk);
@@ -208,8 +211,8 @@ int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool) {
m.msg_namelen = 0;
m.msg_iov = &iov;
m.msg_iovlen = 1;
- m.msg_control = NULL;
- m.msg_controllen = 0;
+ m.msg_control = aux;
+ m.msg_controllen = sizeof(aux);
m.msg_flags = 0;
r = recvmsg(c->fd, &m, 0);
@@ -275,6 +278,18 @@ int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool) {
pa_memchunk_reset(&c->memchunk);
}
+ for (cm = CMSG_FIRSTHDR(&m); cm; cm = CMSG_NXTHDR(&m, cm)) {
+ if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SO_TIMESTAMP)
+ memcpy(tstamp, CMSG_DATA(cm), sizeof(struct timeval));
+ found_tstamp = TRUE;
+ break;
+ }
+
+ if (!found_tstamp) {
+ pa_log_warn("Couldn't find SO_TIMESTAMP data in auxiliary recvmsg() data!");
+ memset(tstamp, 0, sizeof(tstamp));
+ }
+
return 0;
fail:
diff --git a/src/modules/rtp/rtp.h b/src/modules/rtp/rtp.h
index eff5e75..b197e82 100644
--- a/src/modules/rtp/rtp.h
+++ b/src/modules/rtp/rtp.h
@@ -43,7 +43,7 @@ pa_rtp_context* pa_rtp_context_init_send(pa_rtp_context *c, int fd, uint32_t ssr
int pa_rtp_send(pa_rtp_context *c, size_t size, pa_memblockq *q);
pa_rtp_context* pa_rtp_context_init_recv(pa_rtp_context *c, int fd, size_t frame_size);
-int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool);
+int pa_rtp_recv(pa_rtp_context *c, pa_memchunk *chunk, pa_mempool *pool, struct timeval *tstamp);
void pa_rtp_context_destroy(pa_rtp_context *c);
commit e356a03ab2683d81a9725c73e6a58c424646a44f
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 01:21:07 2009 +0200
If the sink volume is lowered to 0 and then increased again, make sure all stream volumes follow instead of staying at 0
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index a522632..2c5ceac 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1028,6 +1028,8 @@ void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
for (i = PA_SINK_INPUT(pa_idxset_first(s->inputs, &idx)); i; i = PA_SINK_INPUT(pa_idxset_next(s->inputs, &idx))) {
pa_cvolume remapped_new_volume;
+ /* This basically calculates i->soft_volume := i->virtual_volume / new_volume * i->volume_factor */
+
remapped_new_volume = *new_volume;
pa_cvolume_remap(&remapped_new_volume, &s->channel_map, &i->channel_map);
pa_sw_cvolume_divide(&i->soft_volume, &i->virtual_volume, &remapped_new_volume);
@@ -1039,7 +1041,7 @@ void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
/* We don't issue PA_SINK_INPUT_MESSAGE_SET_VOLUME because
* we want the update to have atomically with the sink
* volume update, hence we do it within the
- * pa_sink_set_flat_volume() call below*/
+ * pa_sink_set_flat_volume() call below */
}
}
@@ -1061,6 +1063,8 @@ void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
pa_cvolume remapped_old_volume, remapped_new_volume, fixed_volume;
unsigned c;
+ /* This basically calculates i->virtual_volume := i->virtual_volume * s->virtual_volume / old_volume */
+
remapped_new_volume = s->virtual_volume;
pa_cvolume_remap(&remapped_new_volume, &s->channel_map, &i->channel_map);
@@ -1070,7 +1074,7 @@ void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
for (c = 0; c < i->sample_spec.channels; c++)
if (remapped_old_volume.values[c] == PA_VOLUME_MUTED)
- fixed_volume.values[c] = PA_VOLUME_MUTED;
+ fixed_volume.values[c] = remapped_new_volume.values[c];
else
fixed_volume.values[c] = (pa_volume_t)
((uint64_t) i->virtual_volume.values[c] *
commit d612fbb80237c046953c029c55e05b8bb34915cb
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 04:02:25 2009 +0200
compare with doubles, not integer
diff --git a/src/pulse/volume.c b/src/pulse/volume.c
index c865058..9033c32 100644
--- a/src/pulse/volume.c
+++ b/src/pulse/volume.c
@@ -138,7 +138,7 @@ double pa_sw_volume_to_dB(pa_volume_t v) {
pa_volume_t pa_sw_volume_from_linear(double v) {
- if (v <= 0)
+ if (v <= 0.0)
return PA_VOLUME_MUTED;
if (v > .999 && v < 1.001)
@@ -150,7 +150,7 @@ pa_volume_t pa_sw_volume_from_linear(double v) {
double pa_sw_volume_to_linear(pa_volume_t v) {
if (v == PA_VOLUME_MUTED)
- return 0;
+ return 0.0;
return pow(10.0, pa_sw_volume_to_dB(v)/20.0);
}
commit 02686cce6d56a4438eb7cf2d902ce6e737a7e8b0
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 04:04:19 2009 +0200
reduce number of conversions to/from linear volumes
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 2c5ceac..0e203b6 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1027,13 +1027,24 @@ void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
* to this sink */
for (i = PA_SINK_INPUT(pa_idxset_first(s->inputs, &idx)); i; i = PA_SINK_INPUT(pa_idxset_next(s->inputs, &idx))) {
pa_cvolume remapped_new_volume;
+ unsigned c;
/* This basically calculates i->soft_volume := i->virtual_volume / new_volume * i->volume_factor */
remapped_new_volume = *new_volume;
pa_cvolume_remap(&remapped_new_volume, &s->channel_map, &i->channel_map);
- pa_sw_cvolume_divide(&i->soft_volume, &i->virtual_volume, &remapped_new_volume);
- pa_sw_cvolume_multiply(&i->soft_volume, &i->soft_volume, &i->volume_factor);
+
+ for (c = 0; c < i->sample_spec.channels; c++)
+
+ if (remapped_new_volume.values[c] <= PA_VOLUME_MUTED)
+ i->soft_volume.values[c] = PA_VOLUME_MUTED;
+ else
+ i->soft_volume.values[c] = pa_sw_volume_from_linear(
+ pa_sw_volume_to_linear(i->virtual_volume.values[c]) *
+ pa_sw_volume_to_linear(i->volume_factor.values[c]) /
+ pa_sw_volume_to_linear(remapped_new_volume.values[c]));
+
+ i->soft_volume.channels = i->sample_spec.channels;
/* Hooks have the ability to play games with i->soft_volume */
pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);
commit 93e14d3e6238abc0bc1f492edb15b9708c7067d6
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 04:05:03 2009 +0200
we need to make our multiplications with linear values
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 0e203b6..43f579a 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1071,7 +1071,7 @@ void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
* sink input volumes accordingly */
for (i = PA_SINK_INPUT(pa_idxset_first(s->inputs, &idx)); i; i = PA_SINK_INPUT(pa_idxset_next(s->inputs, &idx))) {
- pa_cvolume remapped_old_volume, remapped_new_volume, fixed_volume;
+ pa_cvolume remapped_old_volume, remapped_new_volume, new_virtual_volume;
unsigned c;
/* This basically calculates i->virtual_volume := i->virtual_volume * s->virtual_volume / old_volume */
@@ -1084,18 +1084,18 @@ void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
for (c = 0; c < i->sample_spec.channels; c++)
- if (remapped_old_volume.values[c] == PA_VOLUME_MUTED)
- fixed_volume.values[c] = remapped_new_volume.values[c];
+ if (remapped_old_volume.values[c] <= PA_VOLUME_MUTED)
+ new_virtual_volume.values[c] = remapped_new_volume.values[c];
else
- fixed_volume.values[c] = (pa_volume_t)
- ((uint64_t) i->virtual_volume.values[c] *
- (uint64_t) remapped_new_volume.values[c] /
- (uint64_t) remapped_old_volume.values[c]);
+ new_virtual_volume.values[c] = pa_sw_volume_from_linear(
+ pa_sw_volume_to_linear(i->virtual_volume.values[c]) *
+ pa_sw_volume_to_linear(remapped_new_volume.values[c]) /
+ pa_sw_volume_to_linear(remapped_old_volume.values[c]));
- fixed_volume.channels = i->virtual_volume.channels;
+ new_virtual_volume.channels = i->sample_spec.channels;
- if (!pa_cvolume_equal(&fixed_volume, &i->virtual_volume)) {
- i->virtual_volume = fixed_volume;
+ if (!pa_cvolume_equal(&new_virtual_volume, &i->virtual_volume)) {
+ i->virtual_volume = new_virtual_volume;
/* The virtual volume changed, let's tell people so */
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
commit c523b16d33a772b59407622c1066e11536f4cfa0
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 04:47:58 2009 +0200
after propagating a sink volume change to the sink inputs recalculate their soft volumes
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 43f579a..886402a 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -984,6 +984,36 @@ pa_usec_t pa_sink_get_latency_within_thread(pa_sink *s) {
return usec;
}
+static void compute_new_soft_volume(pa_sink_input *i, const pa_cvolume *new_volume) {
+ unsigned c;
+
+ pa_sink_input_assert_ref(i);
+ pa_assert(new_volume->channels == i->sample_spec.channels);
+
+ /* This basically calculates i->soft_volume := i->virtual_volume / new_volume * i->volume_factor */
+
+ /* The new sink volume passed in here must already be remapped to
+ * the sink input's channel map! */
+
+ for (c = 0; c < i->sample_spec.channels; c++)
+
+ if (new_volume->values[c] <= PA_VOLUME_MUTED)
+ i->soft_volume.values[c] = PA_VOLUME_MUTED;
+ else
+ i->soft_volume.values[c] = pa_sw_volume_from_linear(
+ pa_sw_volume_to_linear(i->virtual_volume.values[c]) *
+ pa_sw_volume_to_linear(i->volume_factor.values[c]) /
+ pa_sw_volume_to_linear(new_volume->values[c]));
+
+ i->soft_volume.channels = i->sample_spec.channels;
+
+ /* Hooks have the ability to play games with i->soft_volume */
+ pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);
+
+ /* We don't copy the soft_volume to the thread_info data
+ * here. That must be done by the caller */
+}
+
/* Called from main thread */
void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
pa_sink_input *i;
@@ -998,7 +1028,7 @@ void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
* might need to fix up the sink volume accordingly. Please note
* that we don't actually update the sinks volume here, we only
* return how it needs to be updated. The caller should then call
- * pa_sink_set_flat_volume().*/
+ * pa_sink_set_volume().*/
if (pa_idxset_isempty(s->inputs)) {
/* In the special case that we have no sink input we leave the
@@ -1027,32 +1057,16 @@ void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
* to this sink */
for (i = PA_SINK_INPUT(pa_idxset_first(s->inputs, &idx)); i; i = PA_SINK_INPUT(pa_idxset_next(s->inputs, &idx))) {
pa_cvolume remapped_new_volume;
- unsigned c;
-
- /* This basically calculates i->soft_volume := i->virtual_volume / new_volume * i->volume_factor */
remapped_new_volume = *new_volume;
pa_cvolume_remap(&remapped_new_volume, &s->channel_map, &i->channel_map);
+ compute_new_soft_volume(i, &remapped_new_volume);
- for (c = 0; c < i->sample_spec.channels; c++)
-
- if (remapped_new_volume.values[c] <= PA_VOLUME_MUTED)
- i->soft_volume.values[c] = PA_VOLUME_MUTED;
- else
- i->soft_volume.values[c] = pa_sw_volume_from_linear(
- pa_sw_volume_to_linear(i->virtual_volume.values[c]) *
- pa_sw_volume_to_linear(i->volume_factor.values[c]) /
- pa_sw_volume_to_linear(remapped_new_volume.values[c]));
-
- i->soft_volume.channels = i->sample_spec.channels;
-
- /* Hooks have the ability to play games with i->soft_volume */
- pa_hook_fire(&s->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);
-
- /* We don't issue PA_SINK_INPUT_MESSAGE_SET_VOLUME because
- * we want the update to have atomically with the sink
- * volume update, hence we do it within the
- * pa_sink_set_flat_volume() call below */
+ /* We don't copy soft_volume to the thread_info data here
+ * (i.e. issue PA_SINK_INPUT_MESSAGE_SET_VOLUME) because we
+ * want the update to be atomically with the sink volume
+ * update, hence we do it within the pa_sink_set_volume() call
+ * below */
}
}
@@ -1097,10 +1111,21 @@ void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
if (!pa_cvolume_equal(&new_virtual_volume, &i->virtual_volume)) {
i->virtual_volume = new_virtual_volume;
+ /* Hmm, the soft volume might no longer actually match
+ * what has been chosen as new virtual volume here,
+ * especially when the old volume was
+ * PA_VOLUME_MUTED. Hence let's recalculate the soft
+ * volumes here. */
+ compute_new_soft_volume(i, &remapped_new_volume);
+
/* The virtual volume changed, let's tell people so */
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
}
}
+
+ /* If the soft_volume of any of the sink inputs got changed, let's
+ * make sure the thread copies are synced up. */
+ pa_assert_se(pa_asyncmsgq_send(s->asyncmsgq, PA_MSGOBJECT(s), PA_SINK_MESSAGE_SYNC_VOLUMES, NULL, 0, NULL) == 0);
}
/* Called from main thread */
@@ -1580,9 +1605,13 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
pa_sink_request_rewind(s, (size_t) -1);
}
- if (s->flags & PA_SINK_FLAT_VOLUME)
- sync_input_volumes_within_thread(s);
+ if (!(s->flags & PA_SINK_FLAT_VOLUME))
+ return 0;
+
+ /* Fall through ... */
+ case PA_SINK_MESSAGE_SYNC_VOLUMES:
+ sync_input_volumes_within_thread(s);
return 0;
case PA_SINK_MESSAGE_GET_VOLUME:
diff --git a/src/pulsecore/sink.h b/src/pulsecore/sink.h
index 634bf3e..eb1c88f 100644
--- a/src/pulsecore/sink.h
+++ b/src/pulsecore/sink.h
@@ -159,6 +159,7 @@ typedef enum pa_sink_message {
PA_SINK_MESSAGE_REMOVE_INPUT,
PA_SINK_MESSAGE_GET_VOLUME,
PA_SINK_MESSAGE_SET_VOLUME,
+ PA_SINK_MESSAGE_SYNC_VOLUMES,
PA_SINK_MESSAGE_GET_MUTE,
PA_SINK_MESSAGE_SET_MUTE,
PA_SINK_MESSAGE_GET_LATENCY,
commit aacb11bb40a33f2415156517a4ff799e78e6190f
Author: Lennart Poettering <lennart at poettering.net>
Date: Tue Apr 7 17:53:51 2009 +0200
update documentation regarding stream timing a bit
diff --git a/src/pulse/stream.h b/src/pulse/stream.h
index 8993143..49c132a 100644
--- a/src/pulse/stream.h
+++ b/src/pulse/stream.h
@@ -424,7 +424,9 @@ int pa_stream_disconnect(pa_stream *s);
* is not copied. If NULL, the data is copied into an internal
* buffer. The client my freely seek around in the output buffer. For
* most applications passing 0 and PA_SEEK_RELATIVE as arguments for
- * offset and seek should be useful.*/
+ * offset and seek should be useful. Afte ther write call succeeded
+ * the write index will be a the position after where this chunk of
+ * data has been written to. */
int pa_stream_write(
pa_stream *p /**< The stream to use */,
const void *data /**< The data to write */,
@@ -551,37 +553,63 @@ pa_operation* pa_stream_set_name(pa_stream *s, const char *name, pa_stream_succe
/** Return the current playback/recording time. This is based on the
* data in the timing info structure returned by
- * pa_stream_get_timing_info(). This function will usually only return
- * new data if a timing info update has been recieved. Only if timing
- * interpolation has been requested (PA_STREAM_INTERPOLATE_TIMING)
- * the data from the last timing update is used for an estimation of
- * the current playback/recording time based on the local time that
- * passed since the timing info structure has been acquired. The time
- * value returned by this function is guaranteed to increase
- * monotonically. (that means: the returned value is always greater or
- * equal to the value returned on the last call) This behaviour can
- * be disabled by using PA_STREAM_NOT_MONOTONIC. This may be
+ * pa_stream_get_timing_info().
+ *
+ * This function will usually only return new data if a timing info
+ * update has been recieved. Only if timing interpolation has been
+ * requested (PA_STREAM_INTERPOLATE_TIMING) the data from the last
+ * timing update is used for an estimation of the current
+ * playback/recording time based on the local time that passed since
+ * the timing info structure has been acquired.
+ *
+ * The time value returned by this function is guaranteed to increase
+ * monotonically. (that means: the returned value is always greater
+ * or equal to the value returned on the last call). This behaviour
+ * can be disabled by using PA_STREAM_NOT_MONOTONIC. This may be
* desirable to deal better with bad estimations of transport
* latencies, but may have strange effects if the application is not
- * able to deal with time going 'backwards'. */
+ * able to deal with time going 'backwards'.
+ *
+ * The time interpolator activated by PA_STREAM_INTERPOLATE_TIMING
+ * favours 'smooth' time graphs over accurate ones to improve the
+ * smoothness of UI operations that are tied to the audio clock. If
+ * accuracy is more important to you you might need to estimate your
+ * timing based on the data from pa_stream_get_timing_info() yourself
+ * or not work with interpolated timing at all and instead always
+ * query on the server side for the most up to date timing with
+ * pa_stream_update_timing_info().
+ *
+ * If no timing information has been
+ * recieved yet this call will return PA_ERR_NODATA. For more details
+ * see pa_stream_get_timing_info(). */
int pa_stream_get_time(pa_stream *s, pa_usec_t *r_usec);
/** Return the total stream latency. This function is based on
- * pa_stream_get_time(). In case the stream is a monitoring stream the
- * result can be negative, i.e. the captured samples are not yet
- * played. In this case *negative is set to 1. */
+ * pa_stream_get_time().
+ *
+ * In case the stream is a monitoring stream the result can be
+ * negative, i.e. the captured samples are not yet played. In this
+ * case *negative is set to 1.
+ *
+ * If no timing information has been recieved yet this call will
+ * return PA_ERR_NODATA. For more details see
+ * pa_stream_get_timing_info() and pa_stream_get_time(). */
int pa_stream_get_latency(pa_stream *s, pa_usec_t *r_usec, int *negative);
/** Return the latest raw timing data structure. The returned pointer
* points to an internal read-only instance of the timing
* structure. The user should make a copy of this structure if he
* wants to modify it. An in-place update to this data structure may
- * be requested using pa_stream_update_timing_info(). If no
- * pa_stream_update_timing_info() call was issued before, this
- * function will fail with PA_ERR_NODATA. Please note that the
- * write_index member field (and only this field) is updated on each
- * pa_stream_write() call, not just when a timing update has been
- * recieved. */
+ * be requested using pa_stream_update_timing_info().
+ *
+ * If no timing information has been received before (i.e. by
+ * requesting pa_stream_update_timing_info() or by using
+ * PA_STREAM_AUTO_TIMING_UPDATE), this function will fail with
+ * PA_ERR_NODATA.
+ *
+ * Please note that the write_index member field (and only this field)
+ * is updated on each pa_stream_write() call, not just when a timing
+ * update has been recieved. */
const pa_timing_info* pa_stream_get_timing_info(pa_stream *s);
/** Return a pointer to the stream's sample specification. */
commit 4ff41ecbb090e36a394ab4c6721e763085961c91
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Apr 8 03:47:18 2009 +0200
print smallest attenuation/sample
diff --git a/src/tests/voltest.c b/src/tests/voltest.c
index 0c6d2ea..2dcfa53 100644
--- a/src/tests/voltest.c
+++ b/src/tests/voltest.c
@@ -9,6 +9,9 @@ int main(int argc, char *argv[]) {
float b;
pa_channel_map map;
+ printf("Attenuation of sample 1 against 32767: %g dB\n", 20.0*log10(1.0/32767.0));
+ printf("Smallest possible attenutation > 0 applied to 32767: %li\n", lrint(32767.0*pa_sw_volume_to_linear(1)));
+
for (v = PA_VOLUME_MUTED; v <= PA_VOLUME_NORM*2; v += 256) {
double dB = pa_sw_volume_to_dB(v);
commit 14e89d4ecdded1d201ac3a382d265f117988c369
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Apr 8 03:47:48 2009 +0200
when calculating volume from dB use ceil()
diff --git a/src/pulse/volume.c b/src/pulse/volume.c
index 9033c32..ad3b3a4 100644
--- a/src/pulse/volume.c
+++ b/src/pulse/volume.c
@@ -126,7 +126,7 @@ pa_volume_t pa_sw_volume_from_dB(double dB) {
if (isinf(dB) < 0 || dB <= -USER_DECIBEL_RANGE)
return PA_VOLUME_MUTED;
- return (pa_volume_t) lrint((dB/USER_DECIBEL_RANGE+1)*PA_VOLUME_NORM);
+ return (pa_volume_t) lrint(ceil((dB/USER_DECIBEL_RANGE+1.0)*PA_VOLUME_NORM));
}
double pa_sw_volume_to_dB(pa_volume_t v) {
@@ -144,7 +144,7 @@ pa_volume_t pa_sw_volume_from_linear(double v) {
if (v > .999 && v < 1.001)
return PA_VOLUME_NORM;
- return pa_sw_volume_from_dB(20*log10(v));
+ return pa_sw_volume_from_dB(20.0*log10(v));
}
double pa_sw_volume_to_linear(pa_volume_t v) {
commit c32c6c833e328610729ec034801ea110f5178cc1
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Apr 8 03:49:16 2009 +0200
introduce relative_volume field in sink_input and make use of it on sink flat volume change
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index ad6b9ca..5855977 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -288,6 +288,7 @@ int pa_sink_input_new(
i->volume_factor = data->volume_factor;
pa_cvolume_init(&i->soft_volume);
+ memset(i->relative_volume, 0, sizeof(i->relative_volume));
i->save_volume = data->save_volume;
i->save_sink = data->save_sink;
i->save_muted = data->save_muted;
@@ -530,7 +531,7 @@ void pa_sink_input_put(pa_sink_input *i) {
pa_sink_update_flat_volume(i->sink, &new_volume);
pa_sink_set_volume(i->sink, &new_volume, FALSE, FALSE);
} else
- pa_sw_cvolume_multiply(&i->soft_volume, &i->virtual_volume, &i->volume_factor);
+ pa_sink_input_set_relative_volume(i, &i->virtual_volume);
i->thread_info.soft_volume = i->soft_volume;
i->thread_info.muted = i->muted;
@@ -901,11 +902,12 @@ void pa_sink_input_set_volume(pa_sink_input *i, const pa_cvolume *volume, pa_boo
/* OK, we are in normal volume mode. The volume only affects
* ourselves */
- pa_sw_cvolume_multiply(&i->soft_volume, volume, &i->volume_factor);
+ pa_sink_input_set_relative_volume(i, volume);
/* Hooks have the ability to play games with i->soft_volume */
pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);
+ /* Copy the new soft_volume to the thread_info struct */
pa_assert_se(pa_asyncmsgq_send(i->sink->asyncmsgq, PA_MSGOBJECT(i), PA_SINK_INPUT_MESSAGE_SET_SOFT_VOLUME, NULL, 0, NULL) == 0);
}
@@ -923,24 +925,50 @@ const pa_cvolume *pa_sink_input_get_volume(pa_sink_input *i) {
/* Called from main context */
pa_cvolume *pa_sink_input_get_relative_volume(pa_sink_input *i, pa_cvolume *v) {
+ unsigned c;
+
pa_sink_input_assert_ref(i);
pa_assert(v);
pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
- *v = i->virtual_volume;
-
/* This always returns a relative volume, even in flat volume mode */
- if (i->sink->flags & PA_SINK_FLAT_VOLUME) {
- pa_cvolume sv;
+ v->channels = i->sample_spec.channels;
+
+ for (c = 0; c < v->channels; c++)
+ v->values[c] = pa_sw_volume_from_linear(i->relative_volume[c]);
+
+ return v;
+}
+
+/* Called from main context */
+void pa_sink_input_set_relative_volume(pa_sink_input *i, const pa_cvolume *v) {
+ unsigned c;
+ pa_cvolume _v;
- sv = *pa_sink_get_volume(i->sink, FALSE);
+ pa_sink_input_assert_ref(i);
+ pa_assert(PA_SINK_INPUT_IS_LINKED(i->state));
+ pa_assert(!v || pa_cvolume_compatible(v, &i->sample_spec));
+
+ if (!v)
+ v = pa_cvolume_reset(&_v, i->sample_spec.channels);
+
+ /* This basically calculates:
+ *
+ * i->relative_volume := v
+ * i->soft_volume := i->relative_volume * i->volume_factor */
- pa_sw_cvolume_divide(v, v,
- pa_cvolume_remap(&sv, &i->sink->channel_map, &i->channel_map));
+ i->soft_volume.channels = i->sample_spec.channels;
+
+ for (c = 0; c < i->sample_spec.channels; c++) {
+ i->relative_volume[c] = pa_sw_volume_to_linear(v->values[c]);
+
+ i->soft_volume.values[c] = pa_sw_volume_from_linear(
+ i->relative_volume[c] *
+ pa_sw_volume_to_linear(i->volume_factor.values[c]));
}
- return v;
+ /* We don't copy the data to the thread_info data. That's left for someone else to do */
}
/* Called from main context */
@@ -1110,9 +1138,11 @@ int pa_sink_input_start_move(pa_sink_input *i) {
if (i->sink->flags & PA_SINK_FLAT_VOLUME) {
pa_cvolume new_volume;
- /* Make the absolute volume relative */
- i->virtual_volume = i->soft_volume;
- i->soft_volume = i->volume_factor;
+ /* Make the virtual volume relative */
+ pa_sink_input_get_relative_volume(i, &i->virtual_volume);
+
+ /* And reset the the relative volume */
+ pa_sink_input_set_relative_volume(i, NULL);
/* We might need to update the sink's volume if we are in flat
* volume mode. */
diff --git a/src/pulsecore/sink-input.h b/src/pulsecore/sink-input.h
index 6ecb5d7..96ad2ba 100644
--- a/src/pulsecore/sink-input.h
+++ b/src/pulsecore/sink-input.h
@@ -91,7 +91,10 @@ struct pa_sink_input {
pa_sink_input *sync_prev, *sync_next;
- pa_cvolume virtual_volume, soft_volume, volume_factor;
+ pa_cvolume virtual_volume; /* The volume clients are informed about */
+ pa_cvolume volume_factor; /* An internally used volume factor that can be used by modules to apply effects and suchlike without having that visible to the outside */
+ double relative_volume[PA_CHANNELS_MAX]; /* The calculated volume relative to the sink volume as linear factors. */
+ pa_cvolume soft_volume; /* The internal software volume we apply to all PCM data while it passes through. Usually calculated as relative_volume * volume_factor */
pa_bool_t muted:1;
/* if TRUE then the source we are connected to and/or the volume
@@ -349,4 +352,7 @@ pa_bool_t pa_sink_input_safe_to_remove(pa_sink_input *i);
pa_memchunk* pa_sink_input_get_silence(pa_sink_input *i, pa_memchunk *ret);
+/* To be used by sink.c only */
+void pa_sink_input_set_relative_volume(pa_sink_input *i, const pa_cvolume *v);
+
#endif
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 886402a..4cf7b6c 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -990,22 +990,32 @@ static void compute_new_soft_volume(pa_sink_input *i, const pa_cvolume *new_volu
pa_sink_input_assert_ref(i);
pa_assert(new_volume->channels == i->sample_spec.channels);
- /* This basically calculates i->soft_volume := i->virtual_volume / new_volume * i->volume_factor */
+ /*
+ * This basically calculates:
+ *
+ * i->relative_volume := i->virtual_volume / new_volume
+ * i->soft_volume := i->relative_volume * i->volume_factor
+ */
/* The new sink volume passed in here must already be remapped to
* the sink input's channel map! */
+ i->soft_volume.channels = i->sample_spec.channels;
+
for (c = 0; c < i->sample_spec.channels; c++)
if (new_volume->values[c] <= PA_VOLUME_MUTED)
+ /* We leave i->relative_volume untouched */
i->soft_volume.values[c] = PA_VOLUME_MUTED;
- else
- i->soft_volume.values[c] = pa_sw_volume_from_linear(
- pa_sw_volume_to_linear(i->virtual_volume.values[c]) *
- pa_sw_volume_to_linear(i->volume_factor.values[c]) /
- pa_sw_volume_to_linear(new_volume->values[c]));
+ else {
+ i->relative_volume[c] =
+ pa_sw_volume_to_linear(i->virtual_volume.values[c]) /
+ pa_sw_volume_to_linear(new_volume->values[c]);
- i->soft_volume.channels = i->sample_spec.channels;
+ i->soft_volume.values[c] = pa_sw_volume_from_linear(
+ i->relative_volume[c] *
+ pa_sw_volume_to_linear(i->volume_factor.values[c]));
+ }
/* Hooks have the ability to play games with i->soft_volume */
pa_hook_fire(&i->core->hooks[PA_CORE_HOOK_SINK_INPUT_SET_VOLUME], i);
@@ -1071,12 +1081,11 @@ void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume) {
}
/* Called from main thread */
-void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
+void pa_sink_propagate_flat_volume(pa_sink *s) {
pa_sink_input *i;
uint32_t idx;
pa_sink_assert_ref(s);
- pa_assert(old_volume);
pa_assert(PA_SINK_IS_LINKED(s->state));
pa_assert(s->flags & PA_SINK_FLAT_VOLUME);
@@ -1085,26 +1094,18 @@ void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
* sink input volumes accordingly */
for (i = PA_SINK_INPUT(pa_idxset_first(s->inputs, &idx)); i; i = PA_SINK_INPUT(pa_idxset_next(s->inputs, &idx))) {
- pa_cvolume remapped_old_volume, remapped_new_volume, new_virtual_volume;
+ pa_cvolume sink_volume, new_virtual_volume;
unsigned c;
- /* This basically calculates i->virtual_volume := i->virtual_volume * s->virtual_volume / old_volume */
-
- remapped_new_volume = s->virtual_volume;
- pa_cvolume_remap(&remapped_new_volume, &s->channel_map, &i->channel_map);
+ /* This basically calculates i->virtual_volume := i->relative_volume * s->virtual_volume */
- remapped_old_volume = *old_volume;
- pa_cvolume_remap(&remapped_old_volume, &s->channel_map, &i->channel_map);
+ sink_volume = s->virtual_volume;
+ pa_cvolume_remap(&sink_volume, &s->channel_map, &i->channel_map);
for (c = 0; c < i->sample_spec.channels; c++)
-
- if (remapped_old_volume.values[c] <= PA_VOLUME_MUTED)
- new_virtual_volume.values[c] = remapped_new_volume.values[c];
- else
- new_virtual_volume.values[c] = pa_sw_volume_from_linear(
- pa_sw_volume_to_linear(i->virtual_volume.values[c]) *
- pa_sw_volume_to_linear(remapped_new_volume.values[c]) /
- pa_sw_volume_to_linear(remapped_old_volume.values[c]));
+ new_virtual_volume.values[c] = pa_sw_volume_from_linear(
+ i->relative_volume[c] *
+ pa_sw_volume_to_linear(sink_volume.values[c]));
new_virtual_volume.channels = i->sample_spec.channels;
@@ -1116,7 +1117,7 @@ void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
* especially when the old volume was
* PA_VOLUME_MUTED. Hence let's recalculate the soft
* volumes here. */
- compute_new_soft_volume(i, &remapped_new_volume);
+ compute_new_soft_volume(i, &sink_volume);
/* The virtual volume changed, let's tell people so */
pa_subscription_post(i->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_CHANGE, i->index);
@@ -1130,7 +1131,6 @@ void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume) {
/* Called from main thread */
void pa_sink_set_volume(pa_sink *s, const pa_cvolume *volume, pa_bool_t propagate, pa_bool_t sendmsg) {
- pa_cvolume old_virtual_volume;
pa_bool_t virtual_volume_changed;
pa_sink_assert_ref(s);
@@ -1139,14 +1139,13 @@ void pa_sink_set_volume(pa_sink *s, const pa_cvolume *volume, pa_bool_t propagat
pa_assert(pa_cvolume_valid(volume));
pa_assert(pa_cvolume_compatible(volume, &s->sample_spec));
- old_virtual_volume = s->virtual_volume;
+ virtual_volume_changed = !pa_cvolume_equal(volume, &s->virtual_volume);
s->virtual_volume = *volume;
- virtual_volume_changed = !pa_cvolume_equal(&old_virtual_volume, &s->virtual_volume);
/* Propagate this volume change back to the inputs */
if (virtual_volume_changed)
if (propagate && (s->flags & PA_SINK_FLAT_VOLUME))
- pa_sink_propagate_flat_volume(s, &old_virtual_volume);
+ pa_sink_propagate_flat_volume(s);
if (s->set_volume) {
/* If we have a function set_volume(), then we do not apply a
@@ -1197,7 +1196,7 @@ const pa_cvolume *pa_sink_get_volume(pa_sink *s, pa_bool_t force_refresh) {
if (!pa_cvolume_equal(&old_virtual_volume, &s->virtual_volume)) {
if (s->flags & PA_SINK_FLAT_VOLUME)
- pa_sink_propagate_flat_volume(s, &old_virtual_volume);
+ pa_sink_propagate_flat_volume(s);
pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SINK|PA_SUBSCRIPTION_EVENT_CHANGE, s->index);
}
diff --git a/src/pulsecore/sink.h b/src/pulsecore/sink.h
index eb1c88f..289054d 100644
--- a/src/pulsecore/sink.h
+++ b/src/pulsecore/sink.h
@@ -74,7 +74,8 @@ struct pa_sink {
pa_volume_t base_volume; /* shall be constant */
unsigned n_volume_steps; /* shall be constant */
- pa_cvolume virtual_volume, soft_volume;
+ pa_cvolume virtual_volume; /* The volume clients are informed about */
+ pa_cvolume soft_volume; /* The internal software volume we apply to all PCM data while it passes through */
pa_bool_t muted:1;
pa_bool_t refresh_volume:1;
@@ -250,7 +251,7 @@ int pa_sink_suspend(pa_sink *s, pa_bool_t suspend);
int pa_sink_suspend_all(pa_core *c, pa_bool_t suspend);
void pa_sink_update_flat_volume(pa_sink *s, pa_cvolume *new_volume);
-void pa_sink_propagate_flat_volume(pa_sink *s, const pa_cvolume *old_volume);
+void pa_sink_propagate_flat_volume(pa_sink *s);
void pa_sink_set_volume(pa_sink *sink, const pa_cvolume *volume, pa_bool_t propagate, pa_bool_t sendmsg);
const pa_cvolume *pa_sink_get_volume(pa_sink *sink, pa_bool_t force_refresh);
commit 6c04a1c9039606182314f5f263445c89f3f28a9f
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Apr 8 04:15:42 2009 +0200
bluetooth: make sure to set max_request
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 4613172..0e2b380 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -275,6 +275,7 @@ static ssize_t service_expect(struct userdata*u, bt_audio_msg_header_t *rsp, siz
return 0;
}
+/* Run from main thread */
static int parse_caps(struct userdata *u, uint8_t seid, const struct bt_get_capabilities_rsp *rsp) {
uint16_t bytes_left;
const codec_capabilities_t *codec;
@@ -335,6 +336,7 @@ static int parse_caps(struct userdata *u, uint8_t seid, const struct bt_get_capa
return 0;
}
+/* Run from main thread */
static int get_caps(struct userdata *u, uint8_t seid) {
union {
struct bt_get_capabilities_req getcaps_req;
@@ -374,6 +376,7 @@ static int get_caps(struct userdata *u, uint8_t seid) {
return get_caps(u, ret);
}
+/* Run from main thread */
static uint8_t a2dp_default_bitpool(uint8_t freq, uint8_t mode) {
switch (freq) {
@@ -419,6 +422,7 @@ static uint8_t a2dp_default_bitpool(uint8_t freq, uint8_t mode) {
}
}
+/* Run from main thread */
static int setup_a2dp(struct userdata *u) {
sbc_capabilities_t *cap;
int i;
@@ -526,6 +530,7 @@ static int setup_a2dp(struct userdata *u) {
return 0;
}
+/* Run from main thread */
static void setup_sbc(struct a2dp_info *a2dp) {
sbc_capabilities_t *active_capabilities;
@@ -617,6 +622,7 @@ static void setup_sbc(struct a2dp_info *a2dp) {
a2dp->frame_length = sbc_get_frame_length(&a2dp->sbc);
}
+/* Run from main thread */
static int set_conf(struct userdata *u) {
union {
struct bt_open_req open_req;
@@ -778,6 +784,7 @@ static int stop_stream_fd(struct userdata *u) {
return r;
}
+/* Run from IO thread */
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;
@@ -785,7 +792,6 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
pa_assert(u->sink == PA_SINK(o));
- pa_log_debug("got message: %d", code);
switch (code) {
case PA_SINK_MESSAGE_SET_STATE:
@@ -835,6 +841,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
return (r < 0 || !failed) ? r : -1;
}
+/* Run from IO thread */
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;
@@ -842,7 +849,6 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
pa_assert(u->source == PA_SOURCE(o));
- pa_log_debug("got message: %d", code);
switch (code) {
case PA_SOURCE_MESSAGE_SET_STATE:
@@ -891,6 +897,7 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
return (r < 0 || !failed) ? r : -1;
}
+/* Run from IO thread */
static int hsp_process_render(struct userdata *u) {
int ret = 0;
@@ -953,6 +960,7 @@ static int hsp_process_render(struct userdata *u) {
return ret;
}
+/* Run from IO thread */
static int hsp_process_push(struct userdata *u) {
int ret = 0;
pa_memchunk memchunk;
@@ -1001,6 +1009,7 @@ static int hsp_process_push(struct userdata *u) {
return ret;
}
+/* Run from IO thread */
static void a2dp_prepare_buffer(struct userdata *u) {
pa_assert(u);
@@ -1012,6 +1021,7 @@ static void a2dp_prepare_buffer(struct userdata *u) {
u->a2dp.buffer = pa_xmalloc(u->a2dp.buffer_size);
}
+/* Run from IO thread */
static int a2dp_process_render(struct userdata *u) {
struct a2dp_info *a2dp;
struct rtp_header *header;
@@ -1270,6 +1280,7 @@ finish:
pa_log_debug("IO thread shutting down");
}
+/* Run from main thread */
static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *userdata) {
DBusError err;
struct userdata *u;
@@ -1319,6 +1330,7 @@ fail:
return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
}
+/* Run from main thread */
static void sink_set_volume_cb(pa_sink *s) {
struct userdata *u = s->userdata;
DBusMessage *m;
@@ -1342,6 +1354,7 @@ static void sink_set_volume_cb(pa_sink *s) {
dbus_message_unref(m);
}
+/* Run from main thread */
static void source_set_volume_cb(pa_source *s) {
struct userdata *u = s->userdata;
DBusMessage *m;
@@ -1365,6 +1378,7 @@ static void source_set_volume_cb(pa_source *s) {
dbus_message_unref(m);
}
+/* Run from main thread */
static char *get_name(const char *type, pa_modargs *ma, const char *device_id, pa_bool_t *namereg_fail) {
char *t;
const char *n;
@@ -1451,6 +1465,7 @@ static pa_hook_result_t source_state_changed_cb(pa_core *c, pa_source *s, struct
#endif
+/* Run from main thread */
static int add_sink(struct userdata *u) {
#ifdef NOKIA
@@ -1492,6 +1507,8 @@ static int add_sink(struct userdata *u) {
u->sink->userdata = u;
u->sink->parent.process_msg = sink_process_msg;
+
+ pa_sink_set_max_request(u->sink, u->block_size);
}
if (u->profile == PROFILE_HSP) {
@@ -1502,6 +1519,7 @@ static int add_sink(struct userdata *u) {
return 0;
}
+/* Run from main thread */
static int add_source(struct userdata *u) {
#ifdef NOKIA
@@ -1549,6 +1567,7 @@ static int add_source(struct userdata *u) {
return 0;
}
+/* Run from main thread */
static void shutdown_bt(struct userdata *u) {
pa_assert(u);
@@ -1571,6 +1590,7 @@ static void shutdown_bt(struct userdata *u) {
}
}
+/* Run from main thread */
static int init_bt(struct userdata *u) {
pa_assert(u);
@@ -1589,6 +1609,7 @@ static int init_bt(struct userdata *u) {
return 0;
}
+/* Run from main thread */
static int setup_bt(struct userdata *u) {
pa_assert(u);
@@ -1614,6 +1635,7 @@ static int setup_bt(struct userdata *u) {
return 0;
}
+/* Run from main thread */
static int init_profile(struct userdata *u) {
int r = 0;
pa_assert(u);
@@ -1634,6 +1656,7 @@ static int init_profile(struct userdata *u) {
return r;
}
+/* Run from main thread */
static void stop_thread(struct userdata *u) {
pa_assert(u);
@@ -1676,6 +1699,7 @@ static void stop_thread(struct userdata *u) {
}
}
+/* Run from main thread */
static int start_thread(struct userdata *u) {
pa_assert(u);
pa_assert(!u->thread);
@@ -1724,6 +1748,7 @@ static int start_thread(struct userdata *u) {
return 0;
}
+/* Run from main thread */
static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
struct userdata *u;
enum profile *d;
@@ -1797,6 +1822,7 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
return 0;
}
+/* Run from main thread */
static int add_card(struct userdata *u, const char *default_profile, const pa_bluetooth_device *device) {
pa_card_new_data data;
pa_bool_t b;
@@ -1890,6 +1916,7 @@ static int add_card(struct userdata *u, const char *default_profile, const pa_bl
return 0;
}
+/* Run from main thread */
static const pa_bluetooth_device* find_device(struct userdata *u, const char *address, const char *path) {
const pa_bluetooth_device *d = NULL;
@@ -1926,6 +1953,7 @@ static const pa_bluetooth_device* find_device(struct userdata *u, const char *ad
return d;
}
+/* Run from main thread */
static int setup_dbus(struct userdata *u) {
DBusError err;
commit f65b276db3881dce35a32b4478b1c44ade098830
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:10:59 2009 +0200
interpol-test: make it easier to test corking only optionally
diff --git a/src/tests/interpol-test.c b/src/tests/interpol-test.c
index c103a49..0c906d3 100644
--- a/src/tests/interpol-test.c
+++ b/src/tests/interpol-test.c
@@ -37,6 +37,7 @@
#include <pulsecore/thread.h>
#define INTERPOLATE
+//#define CORK
static pa_context *context = NULL;
static pa_stream *stream = NULL;
@@ -125,7 +126,9 @@ int main(int argc, char *argv[]) {
int k, r;
struct timeval start, last_info = { 0, 0 };
pa_usec_t old_t = 0, old_rtc = 0;
+#ifdef CORK
pa_bool_t corked = FALSE;
+#endif
pa_log_set_level(PA_LOG_DEBUG);
@@ -150,7 +153,12 @@ int main(int argc, char *argv[]) {
r = pa_threaded_mainloop_start(m);
assert(r >= 0);
- for (k = 0; k < 20000; k++) {
+/* #ifdef CORK */
+ for (k = 0; k < 20000; k++)
+/* #else */
+/* for (k = 0; k < 2000; k++) */
+/* #endif */
+ {
pa_bool_t success = FALSE, changed = FALSE;
pa_usec_t t, rtc;
struct timeval now, tv;
@@ -179,8 +187,9 @@ int main(int argc, char *argv[]) {
pa_gettimeofday(&now);
if (success) {
+#ifdef CORK
pa_bool_t cork_now;
-
+#endif
rtc = pa_timeval_diff(&now, &start);
printf("%i\t%llu\t%llu\t%llu\t%llu\t%lli\t%u\t%u\n", k,
(unsigned long long) rtc,
@@ -195,6 +204,7 @@ int main(int argc, char *argv[]) {
old_t = t;
old_rtc = rtc;
+#ifdef CORK
cork_now = (rtc / (2*PA_USEC_PER_SEC)) % 2 == 1;
if (corked != cork_now) {
@@ -206,6 +216,7 @@ int main(int argc, char *argv[]) {
corked = cork_now;
}
+#endif
}
/* Spin loop, ugly but normal usleep() is just too badly grained */
commit 9ee6a41491f2cfeccd9d60409598c903c657269c
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:12:12 2009 +0200
bluetooth: memory leak, actually free discovery struct itself
diff --git a/src/modules/bluetooth/bluetooth-util.c b/src/modules/bluetooth/bluetooth-util.c
index 6e4344f..5c7681d 100644
--- a/src/modules/bluetooth/bluetooth-util.c
+++ b/src/modules/bluetooth/bluetooth-util.c
@@ -773,6 +773,8 @@ void pa_bluetooth_discovery_unref(pa_bluetooth_discovery *y) {
if (y->core)
pa_shared_remove(y->core, "bluetooth-discovery");
+
+ pa_xfree(y);
}
void pa_bluetooth_discovery_sync(pa_bluetooth_discovery *y) {
commit 9ba9883693ebe817532468c0974c8d5dccb4e006
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:12:46 2009 +0200
dbus: memory leak, free server id after use
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index b35e747..4e97046 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -247,6 +247,7 @@ static void wakeup_main(void *userdata) {
pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, DBusBusType type, DBusError *error) {
DBusConnection *conn;
pa_dbus_wrap_connection *pconn;
+ char *id;
pa_assert(type == DBUS_BUS_SYSTEM || type == DBUS_BUS_SESSION || type == DBUS_BUS_STARTER);
@@ -267,9 +268,11 @@ pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, DBusBus
pa_log_debug("Successfully connected to D-Bus %s bus %s as %s",
type == DBUS_BUS_SYSTEM ? "system" : (type == DBUS_BUS_SESSION ? "session" : "starter"),
- pa_strnull(dbus_connection_get_server_id(conn)),
+ pa_strnull((id = dbus_connection_get_server_id(conn))),
pa_strnull(dbus_bus_get_unique_name(conn)));
+ dbus_free(id);
+
return pconn;
}
commit 669703daec2b9231ab80eefe3bccfca29cc3decb
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:14:46 2009 +0200
dbus: memory leak, free pending calls
diff --git a/src/pulsecore/dbus-util.c b/src/pulsecore/dbus-util.c
index 4e97046..ece36de 100644
--- a/src/pulsecore/dbus-util.c
+++ b/src/pulsecore/dbus-util.c
@@ -380,8 +380,10 @@ pa_dbus_pending *pa_dbus_pending_new(
void pa_dbus_pending_free(pa_dbus_pending *p) {
pa_assert(p);
- if (p->pending)
- dbus_pending_call_cancel(p->pending); /* p->pending is freed by cancel() */
+ if (p->pending) {
+ dbus_pending_call_cancel(p->pending);
+ dbus_pending_call_unref(p->pending);
+ }
if (p->message)
dbus_message_unref(p->message);
commit 3507d1eb37173cb7f5e6a10d306f5fca57fe0b39
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:15:26 2009 +0200
socket-server: memory leak, free machine id after use
diff --git a/src/pulsecore/socket-server.c b/src/pulsecore/socket-server.c
index 8147b27..e660700 100644
--- a/src/pulsecore/socket-server.c
+++ b/src/pulsecore/socket-server.c
@@ -536,6 +536,7 @@ char *pa_socket_server_get_address(pa_socket_server *s, char *c, size_t l) {
return NULL;
pa_snprintf(c, l, "{%s}unix:%s", id, s->filename);
+ pa_xfree(id);
return c;
}
commit 5b871966ab556134b0bb3ff93e8cd81e16e19f5d
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:16:24 2009 +0200
protocol-native: print underrun message only once for each underrun
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index edcd598..9526de0 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -1468,7 +1468,8 @@ static int sink_input_pop_cb(pa_sink_input *i, size_t nbytes, pa_memchunk *chunk
if (pa_memblockq_is_readable(s->memblockq))
s->is_underrun = FALSE;
else {
- pa_log_debug("Underrun on '%s', %lu bytes in queue.", pa_strnull(pa_proplist_gets(i->proplist, PA_PROP_MEDIA_NAME)), (unsigned long) pa_memblockq_get_length(s->memblockq));
+ if (!s->is_underrun)
+ pa_log_debug("Underrun on '%s', %lu bytes in queue.", pa_strnull(pa_proplist_gets(i->proplist, PA_PROP_MEDIA_NAME)), (unsigned long) pa_memblockq_get_length(s->memblockq));
if (s->drain_request && pa_sink_input_safe_to_remove(i)) {
s->drain_request = FALSE;
commit f8ebe8571cbf52e9155b029ae085ea69e16178e1
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:16:59 2009 +0200
protocol-native: downgrade message if we receive pcm block for dead stream
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 9526de0..7c2183d 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -4245,7 +4245,7 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
pa_native_connection_assert_ref(c);
if (!(stream = OUTPUT_STREAM(pa_idxset_get_by_index(c->output_streams, channel)))) {
- pa_log("client sent block for invalid stream.");
+ pa_log_debug("Client sent block for invalid stream.");
/* Ignoring */
return;
}
commit d827ecd28d87eedaa9eb50020504fe789c7800c8
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:17:49 2009 +0200
dbus: drop pa_ prefix from static symbol
diff --git a/src/pulsecore/dbus-shared.c b/src/pulsecore/dbus-shared.c
index b52c14c..f01ec2c 100644
--- a/src/pulsecore/dbus-shared.c
+++ b/src/pulsecore/dbus-shared.c
@@ -41,7 +41,7 @@ struct pa_dbus_connection {
const char *property_name;
};
-static pa_dbus_connection* pa_dbus_connection_new(pa_core *c, pa_dbus_wrap_connection *conn, const char *name) {
+static pa_dbus_connection* dbus_connection_new(pa_core *c, pa_dbus_wrap_connection *conn, const char *name) {
pa_dbus_connection *pconn;
pconn = pa_xnew(pa_dbus_connection, 1);
@@ -73,9 +73,7 @@ pa_dbus_connection* pa_dbus_bus_get(pa_core *c, DBusBusType type, DBusError *err
if (!(conn = pa_dbus_wrap_connection_new(c->mainloop, type, error)))
return NULL;
- pconn = pa_dbus_connection_new(c, conn, prop_name[type]);
-
- return pconn;
+ return dbus_connection_new(c, conn, prop_name[type]);
}
DBusConnection* pa_dbus_connection_get(pa_dbus_connection *c){
@@ -106,6 +104,3 @@ pa_dbus_connection* pa_dbus_connection_ref(pa_dbus_connection *c) {
return c;
}
-
-
-
commit dcd4a73df94b0e9083f72d79f81083961bd15746
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:18:04 2009 +0200
dbus: memory leak, actually free dbus wrapper
diff --git a/src/pulsecore/dbus-shared.c b/src/pulsecore/dbus-shared.c
index f01ec2c..9d9445b 100644
--- a/src/pulsecore/dbus-shared.c
+++ b/src/pulsecore/dbus-shared.c
@@ -91,7 +91,8 @@ void pa_dbus_connection_unref(pa_dbus_connection *c) {
if (PA_REFCNT_DEC(c) > 0)
return;
- /* already disconnected, just free */
+ pa_dbus_wrap_connection_free(c->connection);
+
pa_shared_remove(c->core, c->property_name);
pa_xfree(c);
}
commit 9ae8ca2c3754abb9b6f6ce94c414c12d87419ac0
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:21:16 2009 +0200
core: memory leak, fix ref counting when moving streams
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 5855977..9ae98ed 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -335,8 +335,8 @@ int pa_sink_input_new(
0,
&i->sink->silence);
- pa_assert_se(pa_idxset_put(core->sink_inputs, pa_sink_input_ref(i), &i->index) == 0);
- pa_assert_se(pa_idxset_put(i->sink->inputs, i, NULL) == 0);
+ pa_assert_se(pa_idxset_put(core->sink_inputs, i, &i->index) == 0);
+ pa_assert_se(pa_idxset_put(i->sink->inputs, pa_sink_input_ref(i), NULL) == 0);
if (i->client)
pa_assert_se(pa_idxset_put(i->client->sink_inputs, i, NULL) >= 0);
@@ -1155,6 +1155,8 @@ int pa_sink_input_start_move(pa_sink_input *i) {
pa_sink_update_status(i->sink);
i->sink = NULL;
+ pa_sink_input_unref(i);
+
return 0;
}
@@ -1202,7 +1204,7 @@ int pa_sink_input_finish_move(pa_sink_input *i, pa_sink *dest, pa_bool_t save) {
i->sink = dest;
i->save_sink = save;
- pa_idxset_put(dest->inputs, i, NULL);
+ pa_idxset_put(dest->inputs, pa_sink_input_ref(i), NULL);
if (pa_sink_input_get_state(i) == PA_SINK_INPUT_CORKED)
i->sink->n_corked++;
@@ -1267,11 +1269,19 @@ int pa_sink_input_move_to(pa_sink_input *i, pa_sink *dest, pa_bool_t save) {
if (!pa_sink_input_may_move_to(i, dest))
return -PA_ERR_NOTSUPPORTED;
- if ((r = pa_sink_input_start_move(i)) < 0)
+ pa_sink_input_ref(i);
+
+ if ((r = pa_sink_input_start_move(i)) < 0) {
+ pa_sink_input_unref(i);
return r;
+ }
- if ((r = pa_sink_input_finish_move(i, dest, save)) < 0)
+ if ((r = pa_sink_input_finish_move(i, dest, save)) < 0) {
+ pa_sink_input_unref(i);
return r;
+ }
+
+ pa_sink_input_unref(i);
return 0;
}
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 4cf7b6c..2771fec 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -515,8 +515,12 @@ pa_queue *pa_sink_move_all_start(pa_sink *s) {
for (i = PA_SINK_INPUT(pa_idxset_first(s->inputs, &idx)); i; i = n) {
n = PA_SINK_INPUT(pa_idxset_next(s->inputs, &idx));
+ pa_sink_input_ref(i);
+
if (pa_sink_input_start_move(i) >= 0)
- pa_queue_push(q, pa_sink_input_ref(i));
+ pa_queue_push(q, i);
+ else
+ pa_sink_input_unref(i);
}
return q;
diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c
index 8918b43..489393a 100644
--- a/src/pulsecore/source-output.c
+++ b/src/pulsecore/source-output.c
@@ -705,6 +705,8 @@ int pa_source_output_start_move(pa_source_output *o) {
pa_source_update_status(o->source);
o->source = NULL;
+ pa_source_output_unref(o);
+
return 0;
}
@@ -752,7 +754,7 @@ int pa_source_output_finish_move(pa_source_output *o, pa_source *dest, pa_bool_t
o->source = dest;
o->save_source = save;
- pa_idxset_put(o->source->outputs, o, NULL);
+ pa_idxset_put(o->source->outputs, pa_source_output_ref(o), NULL);
if (pa_source_output_get_state(o) == PA_SOURCE_OUTPUT_CORKED)
o->source->n_corked++;
@@ -804,11 +806,19 @@ int pa_source_output_move_to(pa_source_output *o, pa_source *dest, pa_bool_t sav
if (!pa_source_output_may_move_to(o, dest))
return -PA_ERR_NOTSUPPORTED;
- if ((r = pa_source_output_start_move(o)) < 0)
+ pa_source_output_ref(o);
+
+ if ((r = pa_source_output_start_move(o)) < 0) {
+ pa_source_output_unref(o);
return r;
+ }
- if ((r = pa_source_output_finish_move(o, dest, save)) < 0)
+ if ((r = pa_source_output_finish_move(o, dest, save)) < 0) {
+ pa_source_output_unref(o);
return r;
+ }
+
+ pa_source_output_unref(o);
return 0;
}
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index b85d6e1..693fab3 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -466,8 +466,12 @@ pa_queue *pa_source_move_all_start(pa_source *s) {
for (o = PA_SOURCE_OUTPUT(pa_idxset_first(s->outputs, &idx)); o; o = n) {
n = PA_SOURCE_OUTPUT(pa_idxset_next(s->outputs, &idx));
+ pa_source_output_ref(o);
+
if (pa_source_output_start_move(o) >= 0)
- pa_queue_push(q, pa_source_output_ref(o));
+ pa_queue_push(q, o);
+ else
+ pa_source_output_unref(o);
}
return q;
commit f7c229d8f9a4c67ff7ef0f3d351069a45ba19aff
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:26:04 2009 +0200
core: add a seperate fixed_latency field for sinks/sources with fixed latency
diff --git a/src/pulsecore/cli-text.c b/src/pulsecore/cli-text.c
index 324f83c..b0911ef 100644
--- a/src/pulsecore/cli-text.c
+++ b/src/pulsecore/cli-text.c
@@ -288,7 +288,11 @@ char *pa_sink_list_to_string(pa_core *c) {
(double) pa_sink_get_requested_latency(sink) / (double) PA_USEC_PER_MSEC,
(double) min_latency / PA_USEC_PER_MSEC,
(double) max_latency / PA_USEC_PER_MSEC);
- }
+ } else
+ pa_strbuf_printf(
+ s,
+ "\tfixed latency: %0.2f ms\n",
+ (double) pa_sink_get_requested_latency(sink) / PA_USEC_PER_MSEC);
if (sink->card)
pa_strbuf_printf(s, "\tcard: %u <%s>\n", sink->card->index, sink->card->name);
@@ -382,7 +386,11 @@ char *pa_source_list_to_string(pa_core *c) {
(double) pa_source_get_requested_latency(source) / PA_USEC_PER_MSEC,
(double) min_latency / PA_USEC_PER_MSEC,
(double) max_latency / PA_USEC_PER_MSEC);
- }
+ } else
+ pa_strbuf_printf(
+ s,
+ "\tfixed latency: %0.2f ms\n",
+ (double) pa_source_get_requested_latency(source) / PA_USEC_PER_MSEC);
if (source->monitor_of)
pa_strbuf_printf(s, "\tmonitor_of: %u\n", source->monitor_of->index);
diff --git a/src/pulsecore/sink-input.c b/src/pulsecore/sink-input.c
index 9ae98ed..b1b9fb5 100644
--- a/src/pulsecore/sink-input.c
+++ b/src/pulsecore/sink-input.c
@@ -824,6 +824,9 @@ void pa_sink_input_update_max_request(pa_sink_input *i, size_t nbytes /* in the
pa_usec_t pa_sink_input_set_requested_latency_within_thread(pa_sink_input *i, pa_usec_t usec) {
pa_sink_input_assert_ref(i);
+ if (!(i->sink->flags & PA_SINK_DYNAMIC_LATENCY))
+ usec = i->sink->fixed_latency;
+
if (usec != (pa_usec_t) -1)
usec = PA_CLAMP(usec, i->sink->thread_info.min_latency, i->sink->thread_info.max_latency);
@@ -835,8 +838,6 @@ pa_usec_t pa_sink_input_set_requested_latency_within_thread(pa_sink_input *i, pa
/* Called from main context */
pa_usec_t pa_sink_input_set_requested_latency(pa_sink_input *i, pa_usec_t usec) {
- pa_usec_t min_latency, max_latency;
-
pa_sink_input_assert_ref(i);
if (PA_SINK_INPUT_IS_LINKED(i->state) && i->sink) {
@@ -848,10 +849,14 @@ pa_usec_t pa_sink_input_set_requested_latency(pa_sink_input *i, pa_usec_t usec)
* we have to touch the thread info data directly */
if (i->sink) {
- pa_sink_get_latency_range(i->sink, &min_latency, &max_latency);
+ if (!(i->sink->flags & PA_SINK_DYNAMIC_LATENCY))
+ usec = i->sink->fixed_latency;
- if (usec != (pa_usec_t) -1)
+ if (usec != (pa_usec_t) -1) {
+ pa_usec_t min_latency, max_latency;
+ pa_sink_get_latency_range(i->sink, &min_latency, &max_latency);
usec = PA_CLAMP(usec, min_latency, max_latency);
+ }
}
i->thread_info.requested_sink_latency = usec;
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 2771fec..93800d1 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -50,6 +50,7 @@
#define MIX_BUFFER_LENGTH (PA_PAGE_SIZE)
#define ABSOLUTE_MIN_LATENCY (500)
#define ABSOLUTE_MAX_LATENCY (10*PA_USEC_PER_SEC)
+#define DEFAULT_FIXED_LATENCY (250*PA_USEC_PER_MSEC)
static PA_DEFINE_CHECK_TYPE(pa_sink, pa_msgobject);
@@ -208,6 +209,8 @@ pa_sink* pa_sink_new(
s->muted = data->muted;
s->refresh_volume = s->refresh_muted = FALSE;
+ s->fixed_latency = flags & PA_SINK_DYNAMIC_LATENCY ? 0 : DEFAULT_FIXED_LATENCY;
+
reset_callbacks(s);
s->userdata = NULL;
@@ -363,8 +366,13 @@ void pa_sink_put(pa_sink* s) {
if (s->flags & PA_SINK_LATENCY)
s->monitor_source->flags |= PA_SOURCE_LATENCY;
- if (s->flags & PA_SINK_DYNAMIC_LATENCY)
+ if (s->flags & PA_SINK_DYNAMIC_LATENCY) {
s->monitor_source->flags |= PA_SOURCE_DYNAMIC_LATENCY;
+ s->fixed_latency = 0;
+ } else if (s->fixed_latency <= 0)
+ s->fixed_latency = DEFAULT_FIXED_LATENCY;
+
+ s->monitor_source->fixed_latency = s->fixed_latency;
pa_assert_se(sink_set_state(s, PA_SINK_IDLE) == 0);
@@ -1824,6 +1832,9 @@ pa_usec_t pa_sink_get_requested_latency_within_thread(pa_sink *s) {
pa_sink_assert_ref(s);
+ if (!(s->flags & PA_SINK_DYNAMIC_LATENCY))
+ return PA_CLAMP(s->fixed_latency, s->thread_info.min_latency, s->thread_info.max_latency);
+
if (s->thread_info.requested_latency_valid)
return s->thread_info.requested_latency;
@@ -1839,13 +1850,8 @@ pa_usec_t pa_sink_get_requested_latency_within_thread(pa_sink *s) {
(result == (pa_usec_t) -1 || result > monitor_latency))
result = monitor_latency;
- if (result != (pa_usec_t) -1) {
- if (result > s->thread_info.max_latency)
- result = s->thread_info.max_latency;
-
- if (result < s->thread_info.min_latency)
- result = s->thread_info.min_latency;
- }
+ if (result != (pa_usec_t) -1)
+ result = PA_CLAMP(result, s->thread_info.min_latency, s->thread_info.max_latency);
s->thread_info.requested_latency = result;
s->thread_info.requested_latency_valid = TRUE;
@@ -1934,6 +1940,9 @@ void pa_sink_invalidate_requested_latency(pa_sink *s) {
pa_sink_assert_ref(s);
+ if (!(s->flags & PA_SINK_DYNAMIC_LATENCY))
+ return;
+
s->thread_info.requested_latency_valid = FALSE;
if (PA_SINK_IS_LINKED(s->thread_info.state)) {
diff --git a/src/pulsecore/sink.h b/src/pulsecore/sink.h
index 289054d..cb4697f 100644
--- a/src/pulsecore/sink.h
+++ b/src/pulsecore/sink.h
@@ -86,6 +86,8 @@ struct pa_sink {
pa_memchunk silence;
+ pa_usec_t fixed_latency; /* for sinks with PA_SINK_DYNAMIC_LATENCY this is 0 */
+
/* Called when the main loop requests a state change. Called from
* main loop context. If returns -1 the state change will be
* inhibited */
diff --git a/src/pulsecore/source-output.c b/src/pulsecore/source-output.c
index 489393a..3ee2673 100644
--- a/src/pulsecore/source-output.c
+++ b/src/pulsecore/source-output.c
@@ -520,6 +520,9 @@ void pa_source_output_update_max_rewind(pa_source_output *o, size_t nbytes /* i
pa_usec_t pa_source_output_set_requested_latency_within_thread(pa_source_output *o, pa_usec_t usec) {
pa_source_output_assert_ref(o);
+ if (!(o->source->flags & PA_SOURCE_DYNAMIC_LATENCY))
+ usec = o->source->fixed_latency;
+
if (usec != (pa_usec_t) -1)
usec = PA_CLAMP(usec, o->source->thread_info.min_latency, o->source->thread_info.max_latency);
@@ -531,8 +534,6 @@ pa_usec_t pa_source_output_set_requested_latency_within_thread(pa_source_output
/* Called from main context */
pa_usec_t pa_source_output_set_requested_latency(pa_source_output *o, pa_usec_t usec) {
- pa_usec_t min_latency, max_latency;
-
pa_source_output_assert_ref(o);
if (PA_SOURCE_OUTPUT_IS_LINKED(o->state) && o->source) {
@@ -544,10 +545,14 @@ pa_usec_t pa_source_output_set_requested_latency(pa_source_output *o, pa_usec_t
* have to touch the thread info data directly */
if (o->source) {
- pa_source_get_latency_range(o->source, &min_latency, &max_latency);
+ if (!(o->source->flags & PA_SOURCE_DYNAMIC_LATENCY))
+ usec = o->source->fixed_latency;
- if (usec != (pa_usec_t) -1)
+ if (usec != (pa_usec_t) -1) {
+ pa_usec_t min_latency, max_latency;
+ pa_source_get_latency_range(o->source, &min_latency, &max_latency);
usec = PA_CLAMP(usec, min_latency, max_latency);
+ }
}
o->thread_info.requested_source_latency = usec;
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 693fab3..2190250 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -43,6 +43,7 @@
#define ABSOLUTE_MIN_LATENCY (500)
#define ABSOLUTE_MAX_LATENCY (10*PA_USEC_PER_SEC)
+#define DEFAULT_FIXED_LATENCY (250*PA_USEC_PER_MSEC)
static PA_DEFINE_CHECK_TYPE(pa_source, pa_msgobject);
@@ -199,6 +200,8 @@ pa_source* pa_source_new(
s->muted = data->muted;
s->refresh_volume = s->refresh_muted = FALSE;
+ s->fixed_latency = flags & PA_SOURCE_DYNAMIC_LATENCY ? 0 : DEFAULT_FIXED_LATENCY;
+
reset_callbacks(s);
s->userdata = NULL;
@@ -303,8 +306,7 @@ void pa_source_put(pa_source *s) {
/* The following fields must be initialized properly when calling _put() */
pa_assert(s->asyncmsgq);
pa_assert(s->rtpoll);
- pa_assert(!s->thread_info.min_latency || !s->thread_info.max_latency ||
- s->thread_info.min_latency <= s->thread_info.max_latency);
+ pa_assert(s->thread_info.min_latency <= s->thread_info.max_latency);
if (!(s->flags & PA_SOURCE_HW_VOLUME_CTRL)) {
s->flags |= PA_SOURCE_DECIBEL_VOLUME;
@@ -316,6 +318,11 @@ void pa_source_put(pa_source *s) {
if (s->flags & PA_SOURCE_DECIBEL_VOLUME)
s->n_volume_steps = PA_VOLUME_NORM+1;
+ if (s->flags & PA_SOURCE_DYNAMIC_LATENCY)
+ s->fixed_latency = 0;
+ else if (s->fixed_latency <= 0)
+ s->fixed_latency = DEFAULT_FIXED_LATENCY;
+
pa_assert_se(source_set_state(s, PA_SOURCE_IDLE) == 0);
pa_subscription_post(s->core, PA_SUBSCRIPTION_EVENT_SOURCE | PA_SUBSCRIPTION_EVENT_NEW, s->index);
@@ -1096,6 +1103,9 @@ pa_usec_t pa_source_get_requested_latency_within_thread(pa_source *s) {
pa_source_assert_ref(s);
+ if (!(s->flags & PA_SOURCE_DYNAMIC_LATENCY))
+ return PA_CLAMP(s->fixed_latency, s->thread_info.min_latency, s->thread_info.max_latency);
+
if (s->thread_info.requested_latency_valid)
return s->thread_info.requested_latency;
@@ -1105,13 +1115,8 @@ pa_usec_t pa_source_get_requested_latency_within_thread(pa_source *s) {
(result == (pa_usec_t) -1 || result > o->thread_info.requested_source_latency))
result = o->thread_info.requested_source_latency;
- if (result != (pa_usec_t) -1) {
- if (s->thread_info.max_latency > 0 && result > s->thread_info.max_latency)
- result = s->thread_info.max_latency;
-
- if (s->thread_info.min_latency > 0 && result < s->thread_info.min_latency)
- result = s->thread_info.min_latency;
- }
+ if (result != (pa_usec_t) -1)
+ result = PA_CLAMP(result, s->thread_info.min_latency, s->thread_info.max_latency);
s->thread_info.requested_latency = result;
s->thread_info.requested_latency_valid = TRUE;
@@ -1121,7 +1126,7 @@ pa_usec_t pa_source_get_requested_latency_within_thread(pa_source *s) {
/* Called from main thread */
pa_usec_t pa_source_get_requested_latency(pa_source *s) {
- pa_usec_t usec;
+ pa_usec_t usec = 0;
pa_source_assert_ref(s);
pa_assert(PA_SOURCE_IS_LINKED(s->state));
@@ -1169,6 +1174,9 @@ void pa_source_invalidate_requested_latency(pa_source *s) {
pa_source_assert_ref(s);
+ if (!(s->flags & PA_SOURCE_DYNAMIC_LATENCY))
+ return;
+
s->thread_info.requested_latency_valid = FALSE;
if (PA_SOURCE_IS_LINKED(s->thread_info.state)) {
diff --git a/src/pulsecore/source.h b/src/pulsecore/source.h
index 652783e..b502c22 100644
--- a/src/pulsecore/source.h
+++ b/src/pulsecore/source.h
@@ -87,6 +87,8 @@ struct pa_source {
pa_memchunk silence;
+ pa_usec_t fixed_latency; /* for sources with PA_SOURCE_DYNAMIC_LATENCY this is 0 */
+
/* Called when the main loop requests a state change. Called from
* main loop context. If returns -1 the state change will be
* inhibited */
commit 48cff5b55d66857b3017d847a571acc409f058ca
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:28:21 2009 +0200
bluetooth: rename sco to hsp also for the user
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 0e2b380..420f228 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -1525,7 +1525,7 @@ static int add_source(struct userdata *u) {
#ifdef NOKIA
if (USE_SCO_OVER_PCM(u)) {
u->source = u->hsp.sco_source;
- pa_proplist_sets(u->source->proplist, "bluetooth.protocol", "sco");
+ pa_proplist_sets(u->source->proplist, "bluetooth.protocol", "hsp");
if (!u->hsp.source_state_changed_slot)
u->hsp.source_state_changed_slot = pa_hook_connect(&u->core->hooks[PA_CORE_HOOK_SOURCE_STATE_CHANGED], PA_HOOK_NORMAL, (pa_hook_cb_t) source_state_changed_cb, u);
@@ -1541,7 +1541,7 @@ static int add_source(struct userdata *u) {
data.driver = __FILE__;
data.module = u->module;
pa_source_new_data_set_sample_spec(&data, &u->sample_spec);
- pa_proplist_sets(data.proplist, "bluetooth.protocol", u->profile == PROFILE_A2DP ? "a2dp" : "sco");
+ pa_proplist_sets(data.proplist, "bluetooth.protocol", u->profile == PROFILE_A2DP ? "a2dp" : "hsp");
data.card = u->card;
data.name = get_name("source", u->modargs, u->address, &b);
data.namereg_fail = b;
@@ -1871,7 +1871,7 @@ static int add_card(struct userdata *u, const char *default_profile, const pa_bl
}
if (pa_bluetooth_uuid_has(device->uuids, HSP_HS_UUID) ||
- pa_bluetooth_uuid_has(device->uuids, HFP_HS_UUID)) {
+ pa_bluetooth_uuid_has(device->uuids, HFP_HS_UUID)) {
p = pa_card_profile_new("hsp", _("Telephony Duplex (HSP/HFP)"), sizeof(enum profile));
p->priority = 20;
p->n_sinks = 1;
commit e9a4dec81ebc98f571d29d4f684855ceddd38d36
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:29:46 2009 +0200
bluetooth: be a bit more verbose if we exit due to bad poll() revents flag
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 420f228..bf2e0e8 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -1265,7 +1265,11 @@ static void thread_func(void *userdata) {
pollfd = u->rtpoll_item ? pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL) : NULL;
if (pollfd && (pollfd->revents & ~(POLLOUT|POLLIN))) {
- pa_log_error("FD error.");
+ pa_log_info("FD error: %s%s%s%s",
+ pollfd->revents & POLLERR ? "POLLERR " :"",
+ pollfd->revents & POLLHUP ? "POLLHUP " :"",
+ pollfd->revents & POLLPRI ? "POLLPRI " :"",
+ pollfd->revents & POLLNVAL ? "POLLNVAL " :"");
goto fail;
}
}
commit d77b28cb4bd088ab0f723cbdd65e3947b35b3b25
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:30:50 2009 +0200
bluetooth: rework timing logic, properly implement latency callbacks
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index bf2e0e8..2812bc2 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -166,10 +166,14 @@ struct userdata {
pa_modargs *modargs;
- int stream_write_type, stream_read_type;
+ int stream_write_type;
int service_write_type, service_read_type;
};
+#define FIXED_LATENCY_PLAYBACK_A2DP (25*PA_USEC_PER_MSEC)
+#define FIXED_LATENCY_PLAYBACK_HSP (125*PA_USEC_PER_MSEC)
+#define FIXED_LATENCY_RECORD_HSP (25*PA_USEC_PER_MSEC)
+
#ifdef NOKIA
#define USE_SCO_OVER_PCM(u) (u->profile == PROFILE_HSP && (u->hsp.sco_sink && u->hsp.sco_source))
#endif
@@ -711,6 +715,7 @@ static int start_stream_fd(struct userdata *u) {
uint8_t buf[BT_SUGGESTED_BUFFER_SIZE];
} msg;
struct pollfd *pollfd;
+ int one;
pa_assert(u);
pa_assert(u->rtpoll);
@@ -739,13 +744,29 @@ static int start_stream_fd(struct userdata *u) {
pa_make_fd_nonblock(u->stream_fd);
pa_make_socket_low_delay(u->stream_fd);
+ one = 1;
+ if (setsockopt(u->stream_fd, SOL_SOCKET, SO_TIMESTAMP, &one, sizeof(one)) < 0)
+ pa_log_warn("Failed to enable SO_TIMESTAMP: %s", pa_cstrerror(errno));
+
+ pa_log_debug("Stream properly set up, we're ready to roll!");
+
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;
- u->read_index = 0;
- u->write_index = 0;
+ u->read_index = u->write_index = 0;
+ u->started_at = 0;
+
+ if (u->source)
+ u->read_smoother = pa_smoother_new(
+ PA_USEC_PER_SEC,
+ PA_USEC_PER_SEC*2,
+ TRUE,
+ TRUE,
+ 10,
+ pa_rtclock_usec(),
+ TRUE);
return 0;
}
@@ -781,6 +802,11 @@ static int stop_stream_fd(struct userdata *u) {
pa_close(u->stream_fd);
u->stream_fd = -1;
+ if (u->read_smoother) {
+ pa_smoother_free(u->read_smoother);
+ u->read_smoother = NULL;
+ }
+
return r;
}
@@ -819,8 +845,6 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
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:
@@ -831,7 +855,24 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
break;
case PA_SINK_MESSAGE_GET_LATENCY: {
- *((pa_usec_t*) data) = 0;
+
+ if (u->read_smoother) {
+ pa_usec_t wi, ri;
+
+ ri = pa_smoother_get(u->read_smoother, pa_rtclock_usec());
+ wi = pa_bytes_to_usec(u->write_index + u->block_size, &u->sample_spec);
+
+ *((pa_usec_t*) data) = wi > ri ? wi - ri : 0;
+ } else {
+ pa_usec_t ri, wi;
+
+ ri = pa_rtclock_usec() - u->started_at;
+ wi = pa_bytes_to_usec(u->write_index, &u->sample_spec);
+
+ *((pa_usec_t*) data) = wi > ri ? wi - ri : 0;
+ }
+
+ *((pa_usec_t*) data) += u->sink->fixed_latency;
return 0;
}
}
@@ -862,7 +903,8 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
if (!u->sink || u->sink->state == PA_SINK_SUSPENDED)
stop_stream_fd(u);
- pa_smoother_pause(u->read_smoother, pa_rtclock_usec());
+ if (u->read_smoother)
+ pa_smoother_pause(u->read_smoother, pa_rtclock_usec());
break;
case PA_SOURCE_IDLE:
@@ -875,7 +917,8 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
if (start_stream_fd(u) < 0)
failed = TRUE;
- pa_smoother_resume(u->read_smoother, pa_rtclock_usec(), TRUE);
+ /* We don't resume the smoother here. Instead we
+ * wait until the first packet arrives */
break;
case PA_SOURCE_UNLINKED:
@@ -886,7 +929,12 @@ static int source_process_msg(pa_msgobject *o, int code, void *data, int64_t off
break;
case PA_SOURCE_MESSAGE_GET_LATENCY: {
- *((pa_usec_t*) data) = 0;
+ pa_usec_t wi, ri;
+
+ wi = pa_smoother_get(u->read_smoother, pa_rtclock_usec());
+ ri = pa_bytes_to_usec(u->read_index, &u->sample_spec);
+
+ *((pa_usec_t*) data) = (wi > ri ? wi - ri : 0) + u->source->fixed_latency;
return 0;
}
@@ -954,6 +1002,7 @@ static int hsp_process_render(struct userdata *u) {
pa_memblock_unref(u->write_memchunk.memblock);
pa_memchunk_reset(&u->write_memchunk);
+ ret = 1;
break;
}
@@ -968,6 +1017,7 @@ static int hsp_process_push(struct userdata *u) {
pa_assert(u);
pa_assert(u->profile == PROFILE_HSP);
pa_assert(u->source);
+ pa_assert(u->read_smoother);
memchunk.memblock = pa_memblock_new(u->core->mempool, u->block_size);
memchunk.index = memchunk.length = 0;
@@ -975,9 +1025,26 @@ static int hsp_process_push(struct userdata *u) {
for (;;) {
ssize_t l;
void *p;
+ struct msghdr m;
+ struct cmsghdr *cm;
+ uint8_t aux[1024];
+ struct iovec iov;
+ pa_bool_t found_tstamp = FALSE;
+ pa_usec_t tstamp;
+
+ memset(&m, 0, sizeof(m));
+ memset(&aux, 0, sizeof(aux));
+ memset(&iov, 0, sizeof(iov));
+
+ m.msg_iov = &iov;
+ m.msg_iovlen = 1;
+ m.msg_control = aux;
+ m.msg_controllen = sizeof(aux);
p = pa_memblock_acquire(memchunk.memblock);
- l = pa_read(u->stream_fd, p, pa_memblock_get_length(memchunk.memblock), &u->stream_read_type);
+ iov.iov_base = p;
+ iov.iov_len = pa_memblock_get_length(memchunk.memblock);
+ l = recvmsg(u->stream_fd, &m, 0);
pa_memblock_release(memchunk.memblock);
if (l <= 0) {
@@ -1000,7 +1067,26 @@ static int hsp_process_push(struct userdata *u) {
memchunk.length = (size_t) l;
u->read_index += (uint64_t) l;
+ for (cm = CMSG_FIRSTHDR(&m); cm; cm = CMSG_NXTHDR(&m, cm))
+ if (cm->cmsg_level == SOL_SOCKET && cm->cmsg_type == SO_TIMESTAMP) {
+ struct timeval *tv = (struct timeval*) CMSG_DATA(cm);
+ pa_rtclock_from_wallclock(tv);
+ tstamp = pa_timeval_load(tv);
+ found_tstamp = TRUE;
+ break;
+ }
+
+ if (!found_tstamp) {
+ pa_log_warn("Couldn't find SO_TIMESTAMP data in auxiliary recvmsg() data!");
+ tstamp = pa_rtclock_usec();
+ }
+
+ pa_smoother_put(u->read_smoother, tstamp, pa_bytes_to_usec(u->read_index, &u->sample_spec));
+ pa_smoother_resume(u->read_smoother, tstamp, TRUE);
+
pa_source_post(u->source, &memchunk);
+
+ ret = 1;
break;
}
@@ -1105,7 +1191,7 @@ static int a2dp_process_render(struct userdata *u) {
header->v = 2;
header->pt = 1;
header->sequence_number = htons(a2dp->seq_num++);
- header->timestamp = htonl(u->write_index / pa_frame_size(&u->sink->sample_spec));
+ header->timestamp = htonl(u->write_index / pa_frame_size(&u->sample_spec));
header->ssrc = htonl(1);
payload->frame_count = frame_count;
@@ -1147,6 +1233,8 @@ static int a2dp_process_render(struct userdata *u) {
pa_memblock_unref(u->write_memchunk.memblock);
pa_memchunk_reset(&u->write_memchunk);
+ ret = 1;
+
break;
}
@@ -1155,7 +1243,8 @@ static int a2dp_process_render(struct userdata *u) {
static void thread_func(void *userdata) {
struct userdata *u = userdata;
- pa_bool_t do_write = FALSE, writable = FALSE;
+ unsigned do_write = 0;
+ pa_bool_t writable = FALSE;
pa_assert(u);
@@ -1170,8 +1259,6 @@ static void thread_func(void *userdata) {
pa_thread_mq_install(&u->thread_mq);
pa_rtpoll_install(u->rtpoll);
- pa_smoother_set_time_offset(u->read_smoother, pa_rtclock_usec());
-
for (;;) {
struct pollfd *pollfd;
int ret;
@@ -1182,12 +1269,13 @@ static void thread_func(void *userdata) {
if (u->source && PA_SOURCE_IS_LINKED(u->source->thread_info.state)) {
if (pollfd && (pollfd->revents & POLLIN)) {
+ int n_read;
- if (hsp_process_push(u) < 0)
+ if ((n_read = hsp_process_push(u)) < 0)
goto fail;
/* We just read something, so we are supposed to write something, too */
- do_write = TRUE;
+ do_write += n_read;
}
}
@@ -1200,7 +1288,7 @@ static void thread_func(void *userdata) {
if (pollfd->revents & POLLOUT)
writable = TRUE;
- if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && !do_write && writable) {
+ if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && do_write <= 0 && writable) {
pa_usec_t time_passed;
uint64_t should_have_written;
@@ -1208,36 +1296,37 @@ static void thread_func(void *userdata) {
* 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);
+ should_have_written = pa_usec_to_bytes(time_passed, &u->sample_spec);
- do_write = u->write_index <= should_have_written ;
-/* pa_log_debug("Time has come: %s", pa_yes_no(do_write)); */
+ do_write = u->write_index <= should_have_written;
}
- if (writable && do_write) {
- if (u->write_index == 0)
+ if (writable && do_write > 0) {
+ int n_written;
+
+ if (u->write_index <= 0)
u->started_at = pa_rtclock_usec();
if (u->profile == PROFILE_A2DP) {
- if (a2dp_process_render(u) < 0)
+ if ((n_written = a2dp_process_render(u)) < 0)
goto fail;
} else {
- if (hsp_process_render(u) < 0)
+ if ((n_written = hsp_process_render(u)) < 0)
goto fail;
}
- do_write = FALSE;
+ do_write -= n_written;
writable = FALSE;
}
- if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && !do_write) {
+ if ((!u->source || !PA_SOURCE_IS_LINKED(u->source->thread_info.state)) && do_write <= 0) {
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 */
time_passed = pa_rtclock_usec() - u->started_at;
- next_write_at = pa_bytes_to_usec(u->write_index, &u->sink->sample_spec);
+ next_write_at = pa_bytes_to_usec(u->write_index, &u->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); */
@@ -1317,12 +1406,12 @@ static DBusHandlerResult filter_cb(DBusConnection *bus, DBusMessage *m, void *us
if (u->profile == PROFILE_HSP) {
if (u->sink && dbus_message_is_signal(m, "org.bluez.Headset", "SpeakerGainChanged")) {
- pa_cvolume_set(&v, u->sink->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
+ pa_cvolume_set(&v, u->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
pa_sink_volume_changed(u->sink, &v);
} else if (u->source && dbus_message_is_signal(m, "org.bluez.Headset", "MicrophoneGainChanged")) {
- pa_cvolume_set(&v, u->sink->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
+ pa_cvolume_set(&v, u->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
pa_source_volume_changed(u->source, &v);
}
}
@@ -1350,7 +1439,7 @@ static void sink_set_volume_cb(pa_sink *s) {
if (gain > 15)
gain = 15;
- pa_cvolume_set(&s->virtual_volume, u->sink->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
+ pa_cvolume_set(&s->virtual_volume, u->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
pa_assert_se(m = dbus_message_new_method_call("org.bluez", u->path, "org.bluez.Headset", "SetSpeakerGain"));
pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_UINT16, &gain, DBUS_TYPE_INVALID));
@@ -1374,7 +1463,7 @@ static void source_set_volume_cb(pa_source *s) {
if (gain > 15)
gain = 15;
- pa_cvolume_set(&s->virtual_volume, u->source->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
+ pa_cvolume_set(&s->virtual_volume, u->sample_spec.channels, (pa_volume_t) (gain * PA_VOLUME_NORM / 15));
pa_assert_se(m = dbus_message_new_method_call("org.bluez", u->path, "org.bluez.Headset", "SetMicrophoneGain"));
pa_assert_se(dbus_message_append_args(m, DBUS_TYPE_UINT16, &gain, DBUS_TYPE_INVALID));
@@ -1513,6 +1602,9 @@ static int add_sink(struct userdata *u) {
u->sink->parent.process_msg = sink_process_msg;
pa_sink_set_max_request(u->sink, u->block_size);
+ u->sink->fixed_latency =
+ (u->profile == PROFILE_A2DP ? FIXED_LATENCY_PLAYBACK_A2DP : FIXED_LATENCY_PLAYBACK_HSP) +
+ pa_bytes_to_usec(u->block_size, &u->sample_spec);
}
if (u->profile == PROFILE_HSP) {
@@ -1560,6 +1652,10 @@ static int add_source(struct userdata *u) {
u->source->userdata = u;
u->source->parent.process_msg = source_process_msg;
+
+ u->source->fixed_latency =
+ (/* u->profile == PROFILE_A2DP ? FIXED_LATENCY_RECORD_A2DP : */ FIXED_LATENCY_RECORD_HSP) +
+ pa_bytes_to_usec(u->block_size, &u->sample_spec);
}
if (u->profile == PROFILE_HSP) {
@@ -1580,12 +1676,12 @@ static void shutdown_bt(struct userdata *u) {
u->stream_fd = -1;
u->stream_write_type = 0;
- u->stream_read_type = 0;
}
if (u->service_fd >= 0) {
pa_close(u->service_fd);
u->service_fd = -1;
+ u->service_write_type = u->service_write_type = 0;
}
if (u->write_memchunk.memblock) {
@@ -1600,7 +1696,7 @@ static int init_bt(struct userdata *u) {
shutdown_bt(u);
- u->stream_write_type = u->stream_read_type = 0;
+ u->stream_write_type = 0;
u->service_write_type = u->service_write_type = 0;
if ((u->service_fd = bt_audio_service_open()) < 0) {
@@ -1701,6 +1797,11 @@ static void stop_thread(struct userdata *u) {
pa_rtpoll_free(u->rtpoll);
u->rtpoll = NULL;
}
+
+ if (u->read_smoother) {
+ pa_smoother_free(u->read_smoother);
+ u->read_smoother = NULL;
+ }
}
/* Run from main thread */
@@ -1997,14 +2098,6 @@ int pa__init(pa_module* m) {
u->core = m->core;
u->service_fd = -1;
u->stream_fd = -1;
- u->read_smoother = pa_smoother_new(
- PA_USEC_PER_SEC,
- PA_USEC_PER_SEC*2,
- TRUE,
- TRUE,
- 10,
- 0,
- FALSE);
u->sample_spec = m->core->default_sample_spec;
u->modargs = ma;
commit ee6657aa9a654d334a5a900ea359c726550383e0
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:31:25 2009 +0200
bluetooth: when starting up HSP stream, send 2 packets first, only afterwards enter one-read-one-write logic
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 2812bc2..90f6486 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -1268,6 +1268,12 @@ static void thread_func(void *userdata) {
if (u->source && PA_SOURCE_IS_LINKED(u->source->thread_info.state)) {
+ /* We should send two blocks to the device before we expect
+ * a response. */
+
+ if (u->write_index == 0 && u->read_index <= 0)
+ do_write = 2;
+
if (pollfd && (pollfd->revents & POLLIN)) {
int n_read;
commit 5388b44b9acf6bf11296803632ea4ca8d3d2d4d2
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 01:58:39 2009 +0200
alsa: when printing warning about bogus data from alsa include snd_pcm_dump()
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index f9fb033..c18c34e 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1728,7 +1728,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
if (setup_mixer(u, ignore_dB) < 0)
goto fail;
- pa_alsa_dump(u->pcm_handle);
+ pa_alsa_dump(PA_LOG_DEBUG, u->pcm_handle);
if (!(u->thread = pa_thread_new(thread_func, u))) {
pa_log("Failed to create thread.");
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 9c36211..9cbd79f 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -1579,7 +1579,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
if (setup_mixer(u, ignore_dB) < 0)
goto fail;
- pa_alsa_dump(u->pcm_handle);
+ pa_alsa_dump(PA_LOG_DEBUG, u->pcm_handle);
if (!(u->thread = pa_thread_new(thread_func, u))) {
pa_log("Failed to create thread.");
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 870cf0f..fbf88b0 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1297,7 +1297,7 @@ int pa_alsa_calc_mixer_map(snd_mixer_elem_t *elem, const pa_channel_map *channel
return 0;
}
-void pa_alsa_dump(snd_pcm_t *pcm) {
+void pa_alsa_dump(pa_log_level_t level, snd_pcm_t *pcm) {
int err;
snd_output_t *out;
@@ -1306,11 +1306,11 @@ void pa_alsa_dump(snd_pcm_t *pcm) {
pa_assert_se(snd_output_buffer_open(&out) == 0);
if ((err = snd_pcm_dump(pcm, out)) < 0)
- pa_log_debug("snd_pcm_dump(): %s", snd_strerror(err));
+ pa_logl(level, "snd_pcm_dump(): %s", snd_strerror(err));
else {
char *s = NULL;
snd_output_buffer_string(out, &s);
- pa_log_debug("snd_pcm_dump():\n%s", pa_strnull(s));
+ pa_logl(level, "snd_pcm_dump():\n%s", pa_strnull(s));
}
pa_assert_se(snd_output_close(out) == 0);
@@ -1612,6 +1612,7 @@ snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa
(unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC),
pa_strnull(dn));
pa_xfree(dn);
+ pa_alsa_dump(PA_LOG_ERROR, pcm);
} PA_ONCE_END;
/* Mhmm, let's try not to fail completely */
@@ -1653,6 +1654,7 @@ int pa_alsa_safe_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delay, size_t hwbuf_si
(unsigned long) (pa_bytes_to_usec(abs_k, ss) / PA_USEC_PER_MSEC),
pa_strnull(dn));
pa_xfree(dn);
+ pa_alsa_dump(PA_LOG_ERROR, pcm);
} PA_ONCE_END;
/* Mhmm, let's try not to fail completely */
@@ -1698,6 +1700,7 @@ int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas
(unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC),
pa_strnull(dn));
pa_xfree(dn);
+ pa_alsa_dump(PA_LOG_ERROR, pcm);
} PA_ONCE_END;
return r;
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 94f27d1..9fce6da 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -33,6 +33,7 @@
#include <pulsecore/rtpoll.h>
#include <pulsecore/core.h>
+#include <pulsecore/log.h>
typedef struct pa_alsa_fdlist pa_alsa_fdlist;
@@ -114,7 +115,7 @@ int pa_alsa_probe_profiles(
int pa_alsa_calc_mixer_map(snd_mixer_elem_t *elem, const pa_channel_map *channel_map, snd_mixer_selem_channel_id_t mixer_map[], pa_bool_t playback);
-void pa_alsa_dump(snd_pcm_t *pcm);
+void pa_alsa_dump(pa_log_level_t level, snd_pcm_t *pcm);
void pa_alsa_dump_status(snd_pcm_t *pcm);
void pa_alsa_redirect_errors_inc(void);
diff --git a/src/pulsecore/log.h b/src/pulsecore/log.h
index 8628bf4..2f379f6 100644
--- a/src/pulsecore/log.h
+++ b/src/pulsecore/log.h
@@ -113,6 +113,7 @@ void pa_log_levelv(
#define pa_log_notice(...) pa_log_level_meta(PA_LOG_NOTICE, __FILE__, __LINE__, __func__, __VA_ARGS__)
#define pa_log_warn(...) pa_log_level_meta(PA_LOG_WARN, __FILE__, __LINE__, __func__, __VA_ARGS__)
#define pa_log_error(...) pa_log_level_meta(PA_LOG_ERROR, __FILE__, __LINE__, __func__, __VA_ARGS__)
+#define pa_logl(level, ...) pa_log_level_meta(level, __FILE__, __LINE__, __func__, __VA_ARGS__)
#else
commit d6f019e429656695c33b5b65e270d6d05997aa1b
Merge: 5388b44 dac687d
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 02:02:20 2009 +0200
Merge commit 'origin/master-tx'
commit e011230f877408e78f2572c072a383034ea63d89
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Apr 10 02:03:09 2009 +0200
run make update-po
diff --git a/po/ca.po b/po/ca.po
index d6cfe26..bb60074 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-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\n"
"PO-Revision-Date: 2009-03-18 21:47+0100\n"
"Last-Translator: Agustà Grau <fletxa at gmail.com>\n"
"Language-Team: Catalan <fedora at softcatala.net>\n"
@@ -85,7 +85,7 @@ msgstr ""
"informeu d'aquest\n"
"incident als desenvolupadors d'ALSA."
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -99,7 +99,7 @@ msgstr ""
"informeu d'aquest\n"
"incident als desenvolupadors d'ALSA."
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -113,12 +113,12 @@ msgstr ""
"informeu d'aquest\n"
"incident als desenvolupadors d'ALSA."
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
#, fuzzy
msgid "Internal Audio"
msgstr "S'ha produït un error intern"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr ""
@@ -255,40 +255,40 @@ 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:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "S'ha produït un error en interpretar la lÃnia de comandes."
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, 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:493
+#: ../src/daemon/main.c:507
#, 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:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit ha permés el privilegi acquire-high-priority."
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit ha rebutjat el privilegi acquire-high-priority."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit h permés el privilegi acquire-real-time."
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit ha rebutjat el privilegi acquire-real-time."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -309,48 +309,48 @@ msgstr ""
"incrementar els lÃmits de recursos de RLIMIT_NICE/RLIMIT_RTPRIO per a aquest "
"usuari."
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
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:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "S'ha incrementat el valor de RLIMIT_RTPRIO amb éxit."
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "S'ha produït un error amb RLIMIT_RTPRIO: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "S'abandona CAP_NICE"
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
msgid ""
"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr ""
"La prioritat de temps real està habilitada en la configuració però no està "
"permesa per la polÃtica."
-#: ../src/daemon/main.c:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "El dimoni no s'està executant"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "El dimoni s'està executant amb PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "S'ha produït un error en matar el dimoni: %s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -358,160 +358,160 @@ msgstr ""
"No és necessari executar aquesta aplicació com a root (excepte si "
"s'especifica --system)"
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
msgid "Root privileges required."
msgstr "Es requereixen privilegis de root."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "La opció --start no està suportada per a instà ncies de sistema."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
"S'està executant en mode sistema, però no s'ha especificat l'opció --"
"disallow-exit."
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:732
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"S'està executant en mode sistema, però no s'ha especificat l'opció --"
"disallow-module-loading."
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:735
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:726
+#: ../src/daemon/main.c:740
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:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "S'ha produït un error en adquirir stdio."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "Ha fallat la canonada: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "Ha fallat fork(): %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "Ha fallat read(): %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "S'ha produït un error en iniciar el dimoni."
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "S'ha iniciat el dimoni."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Aquest és el PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilació: %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS de compilació: %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "S'està executant en el host: %s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr "S'han trobat %u CPU's"
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "La mida de pà gina és de %lu bytes."
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "Compilat amb suport per a Valgrind: sÃ"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "Compilat amb suport per a Valgrind: no"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "S'està executant amb el mode valgrind: %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Construcció optimitzada: sÃ"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Construcció optmitzada: no"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "S'ha produït un error en obtenir l'ID de la mà quina"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "L'ID de la mà quina és %s."
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "S'està utilitzant el directori d'execució %s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "S'està utilitzant el directori d'estat %s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "S'està executant en mode sistema: %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "S'ha produït un error en pa_pid_file_create()."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Estan disponibles els temporitzadors frescos de alta resolució."
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -519,27 +519,27 @@ msgstr ""
"Es recomana la utilització d'un nucli amb els temporitzadors d'alta "
"resolució habilitats."
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "S'ha produït un error en pa_core_new()."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "S'ha produït un error en inicialitzar el dimoni."
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
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:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "S'ha completat la inicialització del dimoni."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "S'ha iniciat l'aturada del dimoni."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "S'ha aturat el dimoni."
@@ -2478,19 +2478,19 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
#, fuzzy
msgid "PulseAudio Sound Server"
msgstr "Sistema de so PulseAudio"
diff --git a/po/cs.po b/po/cs.po
index e02c08e..9506db6 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-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\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"
@@ -70,7 +70,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -79,7 +79,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -88,12 +88,12 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
#, fuzzy
msgid "Internal Audio"
msgstr "VnitÅnà chyba"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr ""
@@ -232,38 +232,38 @@ 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:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "NezdaÅila se analýza pÅÃkazového Åádku."
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, 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:493
+#: ../src/daemon/main.c:507
#, 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:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit nám udÄlil oprávnÄnà acquire-high-priority."
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit nám neudÄlil oprávnÄnà acquire-high-priority."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit nám udÄlil oprávnÄnà acquire-real-time."
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit nám neudÄlil oprávnÄnà acquire-real-time."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -276,46 +276,46 @@ msgid ""
"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
msgstr ""
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
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:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "ÃspÄÅ¡nÄ zvýšeno RLIMIT_RTPRIO"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO selhalo: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "Vzdávánà se CAP_NICE"
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
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:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "Démon nebÄžÃ"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "Démon bÄžà jako PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Zabità démona se nezdaÅilo: %s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -323,155 +323,155 @@ msgstr ""
"Tento program nenà urÄen ke spuÅ¡tÄnà pod superuživatelem (nenÃ-li zadáno --"
"system)."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
#, fuzzy
msgid "Root privileges required."
msgstr "Jsou vyžadována oprávnÄnà superuživatele."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start nepodporováno u systémových instancÃ."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
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:718
+#: ../src/daemon/main.c:732
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:721
+#: ../src/daemon/main.c:735
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:726
+#: ../src/daemon/main.c:740
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:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "NezdaÅilo se zÃskánà stdio."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "pipe selhalo: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "fork() selhalo: %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "read() selhalo: %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "SpuÅ¡tÄnà démona selhalo."
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "SpuÅ¡tÄnà démona bylo úspÄÅ¡né."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Toto je PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "PÅekladový poÄÃtaÄ: %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "PÅekladové CFLAGS: %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "BÄžà na poÄÃtaÄi: %s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "Velikost stránky je %lu bajtů"
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "PÅeloženo s podporou Valgrind: ano"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "PÅeloženo s podporou Valgrind: ne"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "BÄžà v režimu valgrind: %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Optimalizované sestavenÃ: ano"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Optimalizované sestavenÃ: ne"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "NezdaÅilo se zÃskánà ID poÄÃtaÄe"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "ID poÄÃtaÄe je %s."
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "PoužÃván bÄhový adresáŠ%s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "PoužÃván stavový adresáŠ%s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "BÄžà v systémovém režimu: %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() selhalo."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
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:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -479,27 +479,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:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new() selhalo."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "Selhalo spuÅ¡tÄnà démona."
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
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:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "SpuÅ¡tÄnà démona dokonÄeno."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "VypÃnánà démona spuÅ¡tÄno."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "Démon ukonÄen."
@@ -2275,19 +2275,19 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr ""
diff --git a/po/de.po b/po/de.po
index 8f9fbc6..d663a57 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-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\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"
@@ -77,7 +77,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -86,7 +86,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -95,12 +95,12 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
#, fuzzy
msgid "Internal Audio"
msgstr "Interner Fehler"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr ""
@@ -237,40 +237,40 @@ 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:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "Parsen der Kommandzeile fehlgeschlagen."
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, 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:493
+#: ../src/daemon/main.c:507
#, 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:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "Richtlinien gewähren das Recht aquire-high-priority."
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "Richtlinien verweigern das Recht acquire-high-priority."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "Richtlinien gewähren das Recht aquire-real-time."
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "Richtlinien verweigern das Recht acquire-real-time."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, fuzzy, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -286,44 +286,44 @@ msgstr ""
"Erlangen Sie die den Richtlinien entsprechenden Rechte, um Echtzeit-"
"Scheduling zu aktivieren oder werden Sie Mitglied der Gruppe '"
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
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:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "RLIMIT_RTPRIO erfolgreich erhöht"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO fehlgeschlagen: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "Verwerfe CAP_NICE"
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
msgid ""
"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr "Echtzeit-Scheduling konfiguriert, jedoch nicht erlaubt."
-#: ../src/daemon/main.c:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "Daemon läuft nicht"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "Daemon läuft als PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Konnte Prozess nicht abbrechen: %s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -331,179 +331,179 @@ msgstr ""
"Dieses Programm sollte ohne die Option --system nicht als Administrator "
"ausgeführt werden."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
msgid "Root privileges required."
msgstr "Root-Berechtigungen benötigt."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start nicht unterstützt für System-Instanzen."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "System-Modus aktiv, jeodch --disallow-exit nicht gesetzt!"
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:732
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:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "System-Modus aktiv, SHM-Modus gezwungenermaÃen deaktiviert!"
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "System-Modus aktiv, Exit-Idle-Time gezwungenermaÃen deaktiviert!"
-#: ../src/daemon/main.c:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "Reservieren von STDIO fehlgeschlagen."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "pipe fehlgeschlagen: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "fork() fehlgeschlagen: %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "read() fehlgeschlagen: %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "Start des Daemons fehlgeschlagen."
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "Start des Daemons erfolgreich."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Dies ist PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "Kompilier-Host: %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Kompilier-CFLAGS: %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "Laufe auf Host: %s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs gefunden."
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "SeitengröÃe ist %lu Bytes."
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "Kompiliere mit Valgrind-Unterstützung: ja"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "Kompiliere mit Valgrind-Unterstützung: nein"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Läuft im Valgrind-Modus: %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Optimiertes Build: ja"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Optimiertes Build: nein"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "Beziehen der Maschinen-ID fehlgeschlagen"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "System- ID ist %s."
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "Nutze Laufzeit-Verzeichnis %s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "Nutze Zustands-Verzeichnis %s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "Laufe im System-Modus: %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() fehlgeschlagen."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Neue hochauslösende Timer verfügbar! Guten Appetit!"
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
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:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new() fehlgeschlagen."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "Konnte Daemon nicht initialisieren."
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Daemon verweigert Ausführung, da keine Module geladen."
-#: ../src/daemon/main.c:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "Start des Daemons abgeschlossen."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "Herunterfahren des Daemon gestartet."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "Daemon beendet."
@@ -2385,19 +2385,19 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr ""
diff --git a/po/el.po b/po/el.po
index aa07424..f375d10 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-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\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"
@@ -69,7 +69,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -78,7 +78,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -87,11 +87,11 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
msgid "Internal Audio"
msgstr ""
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr ""
@@ -228,37 +228,37 @@ msgstr ""
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr ""
-#: ../src/daemon/main.c:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr ""
-#: ../src/daemon/main.c:493
+#: ../src/daemon/main.c:507
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr ""
-#: ../src/daemon/main.c:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -271,196 +271,196 @@ msgid ""
"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
msgstr ""
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
msgid ""
"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr ""
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr ""
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr ""
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
msgid ""
"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr ""
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr ""
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr ""
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr ""
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
msgid "Root privileges required."
msgstr ""
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr ""
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:732
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr ""
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr ""
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr ""
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "ÎÏ
ÏÏ ÎµÎ¯Î½Î±Î¹ Ïο PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr ""
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr ""
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr ""
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr ""
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr ""
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr ""
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr ""
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr ""
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr ""
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr ""
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr ""
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -468,27 +468,27 @@ msgstr ""
"ÎικΠμοÏ
, ο ÏÏ
ÏÎ®Î½Î±Ï ÏοÏ
είναι για Ïα μÏάζα! Î ÏÏÏÏαÏη ÏοÏ
ÏÎµÏ ÏήμεÏα είναι "
"Linux με ενεÏγοÏοιημÎνα Ïα high-resolution timers!"
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr ""
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr ""
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
-#: ../src/daemon/main.c:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr ""
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr ""
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr ""
@@ -2093,18 +2093,18 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr ""
diff --git a/po/es.po b/po/es.po
index 24165bb..ddf1221 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-04-05 08:27+0000\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\n"
"PO-Revision-Date: 2009-04-09 11:49-0300\n"
"Last-Translator: Claudio Rodrigo Pereyra Diaz <claudio at pereyradiaz.com.ar>\n"
"Language-Team: Fedora Spanish <fedora-trans-es at redhat.com>\n"
@@ -64,35 +64,47 @@ msgstr "Análogo Envolvénte 7.1"
#: ../src/modules/alsa/alsa-util.c:1609
#, 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."
+"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() devolvió un valor que es excepcionalmente grande: %lu bytes (%lu ms).\n"
-"Lo más probable es que sea un error del controlador ALSA '%s'. Por favor, informe ésto a los desarrolladores de ALSA."
+"snd_pcm_avail() devolvió un valor que es excepcionalmente grande: %lu bytes "
+"(%lu ms).\n"
+"Lo más probable es que sea un error del controlador ALSA '%s'. Por favor, "
+"informe ésto a los desarrolladores de ALSA."
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, 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."
+"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_delay() devolvió un valor que es excepcionalmente grande: %li bytes (%s%lu ms).\n"
-"Lo más probable es que sea un error del controlador ALSA '%s'. Por favor, informe ésto a los desarrolladores de ALSA."
+"snd_pcm_delay() devolvió un valor que es excepcionalmente grande: %li bytes "
+"(%s%lu ms).\n"
+"Lo más probable es que sea un error del controlador ALSA '%s'. Por favor, "
+"informe ésto a los desarrolladores de ALSA."
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, 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."
+"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 ""
-"snd_pcm_mmap_begin() devolvió un valor que es excepcionalmente grande: %lu bytes (%lu ms).\n"
-"Lo más probable es que sea un error del controlador ALSA '%s'. Por favor, informe ésto a los desarrolladores de ALSA."
+"snd_pcm_mmap_begin() devolvió un valor que es excepcionalmente grande: %lu "
+"bytes (%lu ms).\n"
+"Lo más probable es que sea un error del controlador ALSA '%s'. Por favor, "
+"informe ésto a los desarrolladores de ALSA."
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
msgid "Internal Audio"
msgstr "Audio Interno"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr "Módem"
@@ -196,8 +208,7 @@ msgstr "GID del usuario '%s' y del grupo '%s' no son similares."
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "El directorio de inicio del usuario '%s' no es '%s', ignorando."
-#: ../src/daemon/main.c:204
-#: ../src/daemon/main.c:209
+#: ../src/daemon/main.c:204 ../src/daemon/main.c:209
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Falló al crear '%s': %s"
@@ -230,257 +241,291 @@ 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:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "Falló al analizar la lÃnea de comando."
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, 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:493
+#: ../src/daemon/main.c:507
#, 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:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit garantiza que se obtenga el privilegio de alta prioridad."
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit se niega a dar acceso al privilegio de alta prioridad."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit garantiza el acceso al privilegio de tiempo real."
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit se niega a dar acceso al privilegio de tiempo real."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, 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 '%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."
+"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 ""
-"Se llamó con SUID root y se pidió planificación en tiempo real y/o de alta prioridad en la configuración. Sin embargo, no se tiene los privilegios necesarios:\n"
-"No se está en el grupo '%s'. PolicyKit rechaza darnos el permiso necesario y no se puede aumentar los lÃmites del recurso RLIMIT_NICE/RLIMIT_RTPRIO.\n"
-"Para habilitar la planifiación de tiempo real/alta prioridad por favor adquiera los privilegios apropiados en PolicyKit, o hágase miembro de '%s', o aumente los lÃmites del recurso RLIMIT_NICE/RLIMIT_RTPRIO para este usuario."
-
-#: ../src/daemon/main.c:566
-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."
+"Se llamó con SUID root y se pidió planificación en tiempo real y/o de alta "
+"prioridad en la configuración. Sin embargo, no se tiene los privilegios "
+"necesarios:\n"
+"No se está en el grupo '%s'. PolicyKit rechaza darnos el permiso necesario y "
+"no se puede aumentar los lÃmites del recurso RLIMIT_NICE/RLIMIT_RTPRIO.\n"
+"Para habilitar la planifiación de tiempo real/alta prioridad por favor "
+"adquiera los privilegios apropiados en PolicyKit, o hágase miembro de '%s', "
+"o aumente los lÃmites del recurso RLIMIT_NICE/RLIMIT_RTPRIO para este "
+"usuario."
+
+#: ../src/daemon/main.c:580
+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:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "RLIMIT_RTPRIO incrementado en forma exitosa"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "Fallo en RLIMIT_RTPRIO: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "Abandonando CAP_NICE"
-#: ../src/daemon/main.c:612
-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:626
+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:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "El demonio no está funcionando"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "El demonio está funcionando como PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "No se ha podido detener el demonio: %s"
-#: ../src/daemon/main.c:703
-msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr "Este programa no tiene por qué ser ejecutado como root (a menos que --system sea especificado)."
+#: ../src/daemon/main.c:717
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"Este programa no tiene por qué ser ejecutado como root (a menos que --system "
+"sea especificado)."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
msgid "Root privileges required."
msgstr "Se necesitan privilegios de root."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start no está soportado para las instancias del sistema."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "Ejecutándose en modo de sistema, ¡pero no se ha configurado --disallow-exit! "
+msgstr ""
+"Ejecutándose en modo de sistema, ¡pero no se ha configurado --disallow-exit! "
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:732
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!"
+msgstr ""
+"Ejecutándose en modo de sistema, ¡pero no se ha configurado --disallow-"
+"module-loading!"
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr "Ejecutándose en modo de sistema, ¡desactivando forzadamente el modo SHM!"
+msgstr ""
+"Ejecutándose en modo de sistema, ¡desactivando forzadamente el modo SHM!"
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
msgid "Running in system mode, forcibly disabling exit idle time!"
-msgstr "Ejecutándose en modo de sistema, ¡desactivando forzadamente exit idle time!"
+msgstr ""
+"Ejecutándose en modo de sistema, ¡desactivando forzadamente exit idle time!"
-#: ../src/daemon/main.c:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "Fallo al intentar adquirir stdio."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "Falló el pipe: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "Falló el fork(): %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "Falló la operación read(): %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "Falló el inicio del demonio. "
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "El demonio se inició exitosamente."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Esto es PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilación: %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Compilación CFLAGS: %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "Ejecutándose en el host: %s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr "Se encontraron %u CPUs."
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "El tamaño de la página es de %lu bytes"
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "Soporte para compilar con Valgrind: si"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "Soporte para compilar con Valgrind: no"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Ejecutándose en modo valgrind: %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Build optimizado: si"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Build optimizado: no"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "Fallo al intentar obtener el ID de la máquina"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "El ID de la máquina es %s"
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "Utilizando directorio de tiempo de ejecución %s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "Utilizando directorio de estado %s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "Ejecutándose en modo de sistema: %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "Ha fallado pa_pid_file_create()."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
-msgstr "¡Existen cronómetros de alta resolución fresquitos y disponibles! ¡Bon appetit!"
+msgstr ""
+"¡Existen cronómetros de alta resolución fresquitos y disponibles! ¡Bon "
+"appetit!"
-#: ../src/daemon/main.c:936
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-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:950
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+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:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "Falló pa_core_new()."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "Fallo al intentar iniciar el demonio."
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
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."
+msgstr ""
+"El demonio se ha iniciado sin ningún módulo cargado, y por ello se niega a "
+"funcionar."
-#: ../src/daemon/main.c:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "El demonio se inició completamente."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "Comienza a apagarse el demonio."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "El demonio se ha apagado."
@@ -495,37 +540,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"
@@ -536,10 +592,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"
@@ -550,50 +608,78 @@ msgstr ""
" -h, --help Muestra esta ayuda\n"
" --version Muestra la versión\n"
" --dump-conf Vuelca la configuración por defecto\n"
-" --dump-modules Vuelca una lista de múdulos disponibles\n"
-" --dump-resample-methods Vuelca los métodos disponibles de remuestreo\n"
-" --cleanup-shm Limpia los segmentos de memoria compartidos\n"
-" --start Inicia el demonio, si es que aún no está funcionando\n"
+" --dump-modules Vuelca una lista de múdulos "
+"disponibles\n"
+" --dump-resample-methods Vuelca los métodos disponibles de "
+"remuestreo\n"
+" --cleanup-shm Limpia los segmentos de memoria "
+"compartidos\n"
+" --start Inicia el demonio, si es que aún no "
+"está funcionando\n"
" -k --kill Detiene a un demonio funcionando\n"
-" --check Verifica qué demonios están funcionando\n"
+" --check Verifica qué demonios están "
+"funcionando\n"
"\n"
"OPCIONES:\n"
-" --system[=BOOL] Se ejecuta como unica instancia a nivel del sistema\n"
-" -D, --daemonize[=BOOL] Se convierte en demonio luego de iniciarse\n"
+" --system[=BOOL] Se ejecuta como unica instancia a "
+"nivel del sistema\n"
+" -D, --daemonize[=BOOL] Se convierte en demonio luego de "
+"iniciarse\n"
" --fail[=BOOL] Se cierra cuando falla el inicio\n"
-" --high-priority[=BOOL] Trata de establecer un nivel de nice alto\n"
-" (sólo disponible como root, cuando el SUID o\n"
+" --high-priority[=BOOL] Trata de establecer un nivel de nice "
+"alto\n"
+" (sólo disponible como root, cuando "
+"el SUID o\n"
" con RLIMIT_NICE) elevado\n"
-" --realtime[=BOOL] Trata de activar planificación en tiempo real\n"
-" (sólo disponible como root, cuando el SUID o\n"
+" --realtime[=BOOL] Trata de activar planificación en "
+"tiempo real\n"
+" (sólo disponible como root, cuando "
+"el SUID o\n"
" con RLIMIT_RTPRIO) elevado\n"
-" --disallow-module-loading[=BOOL] No permite la carga/descarga del módulo por el usuario\n"
+" --disallow-module-loading[=BOOL] No permite la carga/descarga del "
+"módulo por el usuario\n"
" después que se haya iniciado\n"
-" --disallow-exit[=BOOL] No permite la petición del usuario de abandonar el programa\n"
-" --exit-idle-time=SECS Desactiva un demonio cuando está ocioso y\n"
-" ha transcurrido esta cantidad de tiempo\n"
-" --module-idle-time=SECS Descarga modulos que se han cargado automáticamente cuando están ociosos y\n"
-" ha transcurrido esta cantidad de tiempo\n"
-" --scache-idle-time=SECS Descarga muestras cargadas automáticamente cuando están\n"
-" ociosos y ha transcurrido esta cantidad de tiempo\n"
-" --log-level[=LEVEL] Aumenta o define el grado de salida a utilizar\n"
+" --disallow-exit[=BOOL] No permite la petición del usuario "
+"de abandonar el programa\n"
+" --exit-idle-time=SECS Desactiva un demonio cuando está "
+"ocioso y\n"
+" ha transcurrido esta cantidad de "
+"tiempo\n"
+" --module-idle-time=SECS Descarga modulos que se han cargado "
+"automáticamente cuando están ociosos y\n"
+" ha transcurrido esta cantidad de "
+"tiempo\n"
+" --scache-idle-time=SECS Descarga muestras cargadas "
+"automáticamente cuando están\n"
+" ociosos y ha transcurrido esta "
+"cantidad de tiempo\n"
+" --log-level[=LEVEL] Aumenta o define el grado de salida "
+"a utilizar\n"
" -v Aumenta el grado de salida\n"
" --log-target={auto,syslog,stderr} Especifica el destino del log\n"
-" -p, --dl-search-path=PATH Establece la ruta de búsqueda (search path) para complementos\n"
+" -p, --dl-search-path=PATH Establece la ruta de búsqueda "
+"(search path) para complementos\n"
" (plugins) compartidos\n"
-" --resample-method=METHOD Utiliza un método de remuestreo especÃfico\n"
-" (Ver en --dump-resample-methods los valores posibles)\n"
+" --resample-method=METHOD Utiliza un método de remuestreo "
+"especÃfico\n"
+" (Ver en --dump-resample-methods los "
+"valores posibles)\n"
" --use-pid-file[=BOOL] Crea el archivo PID\n"
-" --no-cpu-limit[=BOOL] No instala un limitador de carga de CPU en\n"
+" --no-cpu-limit[=BOOL] No instala un limitador de carga de "
+"CPU en\n"
" plataformas que lo soporten.\n"
-" --disable-shm[=BOOL] Deshabilita el soporte para memoria compartida.\n"
+" --disable-shm[=BOOL] Deshabilita el soporte para memoria "
+"compartida.\n"
"\n"
"SCRIPT DE INICIO:\n"
-" -L, --load=\"ARGUMENTOS DEL MODULO\" Carga el módulo complemento con los parámetros dados\n"
+" -L, --load=\"ARGUMENTOS DEL MODULO\" Carga el módulo complemento con los "
+"parámetros dados\n"
" -F, --file=FILENAME Ejecuta el script especificado\n"
-" -C Abre una lÃnea de comando en el TTY actual después de iniciar\n"
+" -C Abre una lÃnea de comando en el TTY "
+"actual después de iniciar\n"
"\n"
-" -n No carga el archivo script predeterminado\n"
+" -n No carga el archivo script "
+"predeterminado\n"
#: ../src/daemon/cmdline.c:252
msgid "--daemonize expects boolean argument"
@@ -604,8 +690,13 @@ msgid "--fail expects boolean argument"
msgstr "--fail espera un argumento 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 espera un argumento en el nivel del log (ya sea numérico, que caiga en el rango de 0..4; ya sea uno de debug, info, notice, warn, o 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 espera un argumento en el nivel del log (ya sea numérico, que "
+"caiga en el rango de 0..4; ya sea uno de debug, info, notice, warn, o "
+"error). "
#: ../src/daemon/cmdline.c:281
msgid "--high-priority expects boolean argument"
@@ -762,8 +853,12 @@ msgid "Failed to open configuration file: %s"
msgstr "No se pudo abrir el archivo de configuración: %s"
#: ../src/daemon/daemon-conf.c:538
-msgid "The specified default channel map has a different number of channels than the specified default number of channels."
-msgstr "El mapa de canal predeterminado especificado tiene un número de canales distinto al especificado como predeterminado."
+msgid ""
+"The specified default channel map has a different number of channels than "
+"the specified default number of channels."
+msgstr ""
+"El mapa de canal predeterminado especificado tiene un número de canales "
+"distinto al especificado como predeterminado."
#: ../src/daemon/daemon-conf.c:616
#, c-format
@@ -787,23 +882,30 @@ msgid "Start the PulseAudio Sound System"
msgstr "Iniciar el Sistema de Sonido PulseAudio"
#: ../src/daemon/org.pulseaudio.policy.in.h:1
-msgid "High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
-msgstr "Planificación de alta prioridad (nivel Unix negativo) para el demonio PulseAudio"
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgstr ""
+"Planificación de alta prioridad (nivel Unix negativo) para el demonio "
+"PulseAudio"
#: ../src/daemon/org.pulseaudio.policy.in.h:2
msgid "Real-time scheduling for the PulseAudio daemon"
msgstr "Planificación de tiempo real para el demonio de PulseAudio."
#: ../src/daemon/org.pulseaudio.policy.in.h:3
-msgid "System policy prevents PulseAudio from acquiring high-priority scheduling."
-msgstr "Las polÃticas del sistema impidieron a PulseAudio adquirir la planificación de alta prioridad."
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgstr ""
+"Las polÃticas del sistema impidieron a PulseAudio adquirir la planificación "
+"de alta prioridad."
#: ../src/daemon/org.pulseaudio.policy.in.h:4
msgid "System policy prevents PulseAudio from acquiring real-time scheduling."
-msgstr "Las polÃticas del sistema impidieron a PulseAudio adquirir la planificación de tiempo real."
+msgstr ""
+"Las polÃticas del sistema impidieron a PulseAudio adquirir la planificación "
+"de tiempo real."
-#: ../src/pulse/channelmap.c:103
-#: ../src/pulse/channelmap.c:804
+#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
msgid "Mono"
msgstr "Mono"
@@ -1007,12 +1109,9 @@ msgstr "Posterior izquierdo superior"
msgid "Top Rear Right"
msgstr "Posterior derecho superior"
-#: ../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 "(inválido)"
@@ -1165,8 +1264,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() falló"
@@ -1302,28 +1400,23 @@ msgstr "pa_stream_connect_playback() falló: %s\n"
msgid "pa_stream_connect_record() failed: %s\n"
msgstr "pa_stream_connect_record() falló: %s\n"
-#: ../src/utils/pacat.c:329
-#: ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:762
-#: ../src/utils/paplay.c:183
+#: ../src/utils/pacat.c:329 ../src/utils/pasuspender.c:159
+#: ../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"
-#: ../src/utils/pacat.c:349
-#: ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:349 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "Error al drenar el flujo: %s\n"
-#: ../src/utils/pacat.c:354
-#: ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:354 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr "El flujo de platback se ha drenado.\n"
-#: ../src/utils/pacat.c:364
-#: ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:364 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr "Drenando conexión con el servidor.\n"
@@ -1381,27 +1474,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 [opciones]\n"
"\n"
@@ -1411,29 +1521,47 @@ msgstr ""
" -r, --record Crea una conexión para grabar\n"
" -p, --playback Create a connection for playback\n"
"\n"
-" -v, --verbose Habilita operaciones con vocabulario más detallado\n"
+" -v, --verbose Habilita operaciones con vocabulario "
+"más detallado\n"
"\n"
-" -s, --server=SERVER El nombre del servidor con el que conectarse\n"
-" -d, --device=DEVICE El nombre del destino/fuente a la que conectarse\n"
-" -n, --client-name=NAME Cómo llamar a este cliente en el servidor\n"
-" --stream-name=NAME Cómo llamar a este flujo en el servidor\n"
-" --volume=VOLUME Especificar el salida inicial (linear) de volumen dentro del rango 0...65536\n"
-" --rate=SAMPLERATE Tasa de muestra en Hz (establecida en 44100 por defecto)\n"
-" --format=SAMPLEFORMAT El tipo de ejemplo, alguno entre s16le, s16be, u8, float32le,\n"
-" float32be, ulaw, alaw, s32le, s32be (establecido en s16ne por defecto)\n"
-" --channels=CHANNELS La cantidad de canales, 1 para mono, 2 para stereo\n"
+" -s, --server=SERVER El nombre del servidor con el que "
+"conectarse\n"
+" -d, --device=DEVICE El nombre del destino/fuente a la "
+"que conectarse\n"
+" -n, --client-name=NAME Cómo llamar a este cliente en el "
+"servidor\n"
+" --stream-name=NAME Cómo llamar a este flujo en el "
+"servidor\n"
+" --volume=VOLUME Especificar el salida inicial "
+"(linear) de volumen dentro del rango 0...65536\n"
+" --rate=SAMPLERATE Tasa de muestra en Hz (establecida "
+"en 44100 por defecto)\n"
+" --format=SAMPLEFORMAT El tipo de ejemplo, alguno entre "
+"s16le, s16be, u8, float32le,\n"
+" float32be, ulaw, alaw, s32le, s32be "
+"(establecido en s16ne por defecto)\n"
+" --channels=CHANNELS La cantidad de canales, 1 para mono, "
+"2 para stereo\n"
" (establecido en 2 por defecto)\n"
-" --channel-map=CHANNELMAP Mapa de canales a ser usado en lugar del establecido por defecto\n"
-" --fix-format Obtener el formato de sample desde el destino al que el flujo\n"
+" --channel-map=CHANNELMAP Mapa de canales a ser usado en lugar "
+"del establecido por defecto\n"
+" --fix-format Obtener el formato de sample desde "
+"el destino al que el flujo\n"
" se ha conectado.\n"
-" --fix-rate Obtener la tasa de sampling desde el destino al que el flujo\n"
+" --fix-rate Obtener la tasa de sampling desde el "
+"destino al que el flujo\n"
" se ha conectado.\n"
-" --fix-channels Obtener el mapa y la cantidad de canales\n"
-" desde el destino al que el flojo se ha conectado.\n"
+" --fix-channels Obtener el mapa y la cantidad de "
+"canales\n"
+" desde el destino al que el flojo se "
+"ha conectado.\n"
" --no-remix No upmix o downmix canales.\n"
-" --no-remap Mapear canales por Ãndices en lugar de por nombres.\n"
-" --latency=BYTES Solicitar la latencia especificada en bytes.\n"
-" --process-time=BYTES Solicitar los procesos de tiempo por pedido especificados en bytes.\n"
+" --no-remap Mapear canales por Ãndices en lugar "
+"de por nombres.\n"
+" --latency=BYTES Solicitar la latencia especificada "
+"en bytes.\n"
+" --process-time=BYTES Solicitar los procesos de tiempo por "
+"pedido especificados en bytes.\n"
#: ../src/utils/pacat.c:612
#, c-format
@@ -1499,10 +1627,8 @@ msgstr "dup2(): %s\n"
msgid "Too many arguments.\n"
msgstr "Demasiados argumentos.\n"
-#: ../src/utils/pacat.c:764
-#: ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1017
-#: ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:764 ../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() falló.\n"
@@ -1512,16 +1638,13 @@ msgstr "pa_mainloop_new() falló.\n"
msgid "io_new() failed.\n"
msgstr "io_new() falló.\n"
-#: ../src/utils/pacat.c:791
-#: ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1031
-#: ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:791 ../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() falló.\n"
-#: ../src/utils/pacat.c:799
-#: ../src/utils/pactl.c:1037
+#: ../src/utils/pacat.c:799 ../src/utils/pactl.c:1037
#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
@@ -1532,10 +1655,8 @@ msgstr "pa_context_connect() falló: %s"
msgid "time_new() failed.\n"
msgstr "time_new() falló.\n"
-#: ../src/utils/pacat.c:817
-#: ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1042
-#: ../src/utils/paplay.c:410
+#: ../src/utils/pacat.c:817 ../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() falló.\n"
@@ -1565,8 +1686,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:768
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:768
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1584,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 [opciones] ... \n"
"\n"
" -h, --help Muestra esta ayuda\n"
" --version Muestra la versión\n"
-" -s, --server=SERVER El nombre del servidor con el que conectarse\n"
+" -s, --server=SERVER El nombre del servidor con el que "
+"conectarse\n"
"\n"
#: ../src/utils/pasuspender.c:251
@@ -1618,7 +1740,9 @@ msgstr "Actualmente en uso: %u bloques conteniendo %s bytes en total.\n"
#: ../src/utils/pactl.c:117
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
-msgstr "Ubicados durante a lo largo del tiempo: %u bloques conteniendo %s bytes en total.\n"
+msgstr ""
+"Ubicados durante a lo largo del tiempo: %u bloques conteniendo %s bytes en "
+"total.\n"
#: ../src/utils/pactl.c:120
#, c-format
@@ -1741,18 +1865,10 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../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: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"
@@ -1876,7 +1992,8 @@ msgstr ""
#: ../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"
+msgstr ""
+"Error al intentar obtener información acerca de la salida de la fuenta: %s\n"
#: ../src/utils/pactl.c:523
#, c-format
@@ -1943,8 +2060,7 @@ msgstr ""
"\tPropiedades:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:602
-#: ../src/utils/pactl.c:612
+#: ../src/utils/pactl.c:602 ../src/utils/pactl.c:612
#, c-format
msgid "Failure: %s\n"
msgstr "Falla: %s\n"
@@ -1979,8 +2095,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 [opciones] stat\n"
"%s [opciones] list\n"
@@ -1999,8 +2117,10 @@ msgstr ""
" -h, --help Muestra esta ayuda\n"
" --version Muestra la versión\n"
"\n"
-" -s, --server=SERVER El nombre del servidor al que conectarse\n"
-" -n, --client-name=NAME El nombre de este cliente en el servidor\n"
+" -s, --server=SERVER El nombre del servidor al que "
+"conectarse\n"
+" -n, --client-name=NAME El nombre de este cliente en el "
+"servidor\n"
#: ../src/utils/pactl.c:826
#, c-format
@@ -2036,12 +2156,14 @@ msgstr "Debe especificar un nombre de muestra para ser eliminado\n"
#: ../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"
+msgstr ""
+"Debe especificar un Ãndice para las entradas del destino y un destino\n"
#: ../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"
+msgstr ""
+"Debe especificar un Ãndice para las salidas de la fuente, y una fuente\n"
#: ../src/utils/pactl.c:942
#, c-format
@@ -2055,13 +2177,21 @@ msgstr "Debe especificar un Ãndice de módulo\n"
#: ../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 "No puede especificar más de un sumidero. Tiene que especificar un valor booleano.\n"
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean "
+"value.\n"
+msgstr ""
+"No puede especificar más de un sumidero. Tiene que especificar un valor "
+"booleano.\n"
#: ../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 "No puede especificar más de una fuente. Tiene que especificar un valor booleano.\n"
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value.\n"
+msgstr ""
+"No puede especificar más de una fuente. Tiene que especificar un valor "
+"booleano.\n"
#: ../src/utils/pactl.c:997
#, c-format
@@ -2080,14 +2210,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 source] [-c file] [-d|-e|-i|-r]\n"
"\n"
-" -d Muestra los datos actuales de PulseAudio asociados en un display X11 (por defecto)\n"
+" -d Muestra los datos actuales de PulseAudio asociados en un display X11 "
+"(por defecto)\n"
" -e Exporta los datos locales de PulseAudio a un display X11\n"
-" -i Importa los datos de PulseAudio de un display X11 hacia las variables del entorno local y el archivo de cookies.\n"
+" -i Importa los datos de PulseAudio de un display X11 hacia las variables "
+"del entorno local y el archivo de cookies.\n"
" -r Elimina todo dato de PulseAudio de un display X11\n"
#: ../src/utils/pax11publish.c:94
@@ -2173,14 +2306,12 @@ msgstr "El demonio no responde."
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"
@@ -2210,11 +2341,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 [options] [FILE]\n"
@@ -2222,14 +2357,21 @@ msgstr ""
" -h, --help Muestra esta ayuda\n"
" --version Muestra la versión\n"
"\n"
-" -v, --verbose Habilita operación con vocabulario más detallado\n"
+" -v, --verbose Habilita operación con vocabulario "
+"más detallado\n"
"\n"
-" -s, --server=SERVER El nombre del servidor al que conectarse\n"
-" -d, --device=DEVICE El nombre del destino al que conectarse\n"
-" -n, --client-name=NAME Cómo llamar a este cliente en el servidor\n"
-" --stream-name=NAME Cómo llamar a este flujo en el servidor\n"
-" --volume=VOLUME Especifica el volumen inicial (linear)en el rango de 0...65536\n"
-" --channel-map=CHANNELMAP Establece el mapa del canal para el uso\n"
+" -s, --server=SERVER El nombre del servidor al que "
+"conectarse\n"
+" -d, --device=DEVICE El nombre del destino al que "
+"conectarse\n"
+" -n, --client-name=NAME Cómo llamar a este cliente en el "
+"servidor\n"
+" --stream-name=NAME Cómo llamar a este flujo en el "
+"servidor\n"
+" --volume=VOLUME Especifica el volumen inicial "
+"(linear)en el rango de 0...65536\n"
+" --channel-map=CHANNELMAP Establece el mapa del canal para el "
+"uso\n"
#: ../src/utils/paplay.c:255
#, c-format
@@ -2262,27 +2404,30 @@ msgstr "El mapa del canal no se corresponde con el archivo.\n"
msgid "Using sample spec '%s'\n"
msgstr "Utilizando especificaciones de muestra '%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 "No se puede acceder al candado de autogeneración."
-#: ../src/modules/alsa/alsa-sink.c:393
-#: ../src/modules/alsa/alsa-sink.c:535
+#: ../src/modules/alsa/alsa-sink.c:393 ../src/modules/alsa/alsa-sink.c:535
#, c-format
msgid ""
-"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."
+"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."
msgstr ""
-#: ../src/modules/alsa/alsa-source.c:377
-#: ../src/modules/alsa/alsa-source.c:510
+#: ../src/modules/alsa/alsa-source.c:377 ../src/modules/alsa/alsa-source.c:510
#, c-format
msgid ""
-"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."
+"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."
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:114
@@ -2301,19 +2446,19 @@ msgid "Input %s"
msgstr "Entrada %s"
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr "Reproducción de Alta Fidelidad (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr "TelefonÃa Duplex (HSP/HFP)"
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr "Servidor de Sonido PulseAudio"
@@ -2332,6 +2477,7 @@ msgstr "Servidor de Sonido PulseAudio"
#, 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 "
@@ -2340,21 +2486,27 @@ msgstr "Servidor de Sonido PulseAudio"
#~ "' y PolicyKit se niega a darnos privilegios. Abandonando SUID de nuevo.\n"
#~ "Para permitir planificación en tiempo real, por favor adquiera los "
#~ "privilegios de PolicyKit adecuados, o forme parte de '"
+
#~ msgid ""
#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
#~ "user."
#~ msgstr ""
#~ "', o incremente los lÃmites del recurso RLIMIT_NICE/RLIMIT_RTPRIO para "
#~ "ese usuario. "
+
#~ msgid "Default sink name (%s) does not exist in name register."
#~ msgstr ""
#~ "El nombre de destino por defecto (%s) no existe en el registro de nombres."
+
#~ msgid "Buffer overrun, dropping incoming data\n"
#~ msgstr "Búfer desbordado, abandonando datos entrantes\n"
+
#~ msgid "pa_stream_drop() failed: %s\n"
#~ msgstr "pa_stream_drop() falló: %s\n"
+
#~ msgid "muted"
#~ msgstr "mudo"
+
#~ msgid ""
#~ "*** Autoload Entry #%u ***\n"
#~ "Name: %s\n"
@@ -2367,8 +2519,9 @@ msgstr "Servidor de Sonido PulseAudio"
#~ "Tipo: %s\n"
#~ "Módulo: %s\n"
#~ "Argumento: %s\n"
+
#~ msgid "sink"
#~ msgstr "destino"
+
#~ msgid "source"
#~ msgstr "fuente"
-
diff --git a/po/fi.po b/po/fi.po
index 59debfb..969723b 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-04-05 08:27+0000\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\n"
"PO-Revision-Date: 2009-04-05 16:24+0300\n"
"Last-Translator: Ville-Pekka Vainio <vpivaini at cs.helsinki.fi>\n"
"Language-Team: Finnish <laatu at lokalisointi.org>\n"
@@ -72,7 +72,7 @@ msgstr ""
"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
"ongelmasta ALSA-kehittäjille."
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -85,7 +85,7 @@ msgstr ""
"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
"ongelmasta ALSA-kehittäjille."
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -98,11 +98,11 @@ msgstr ""
"Tämä on todennäköisesti ohjelmavirhe ALSA-ajurissa â%sâ. Ilmoita tästä "
"ongelmasta ALSA-kehittäjille."
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
msgid "Internal Audio"
msgstr "Sisäinen äänentoisto"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr "Modeemi"
@@ -239,37 +239,37 @@ msgstr "Järjestelmänlaajuista tilaa ei tueta tällä alustalla."
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) epäonnistui: %s"
-#: ../src/daemon/main.c:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "Komentorivin jäsentäminen epäonnistui."
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr "Ollaan ryhmässä â%sâ, korkean prioriteetin ajoitus on sallittua."
-#: ../src/daemon/main.c:493
+#: ../src/daemon/main.c:507
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr "Ollaan ryhmässä â%sâ, tosiaikainen vuorottaminen on sallittua."
-#: ../src/daemon/main.c:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit myöntää acquire-high-priority-oikeuden."
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit ei myönnä acquire-high-priority-oikeutta."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit myöntää acquire-real-time-oikeuden."
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit ei myönnä acquire-real-time-oikeutta."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -290,48 +290,48 @@ msgstr ""
"käyttäjän RLIMIT_NICE/RLIMIT_RTPRIO-resurssirajoja reaaliaikaisen ja/tai "
"korkean prioriteetin ajoituksen ottamiseksi käyttöön."
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
msgid ""
"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr ""
"Korkean prioriteetin ajoitus otettu käyttöön asetuksissa, mutta käytännöt "
"eivät salli sitä."
-#: ../src/daemon/main.c:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "RLIMIT_RTPRIO:n kasvatus onnistui"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO epäonnistui: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "Luovutaan CAP_NICE:stä"
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
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:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "Taustaprosessi ei ole käynnissä"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "Taustaprosessi käynnissä prosessitunnisteella %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Taustaprosessin lopettaminen epäonnistui: %s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -339,159 +339,159 @@ msgstr ""
"Tätä ohjelmaa ei ole tarkoitettu suoritettavaksi pääkäyttäjänä (ellei --"
"system ole määritelty)."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
msgid "Root privileges required."
msgstr "Pääkäyttäjän (root) oikeudet vaaditaan."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start-valitsinta ei tueta järjestelmätilassa."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
"Suoritetaan järjestelmätilassa, mutta --disallow-exit ei ole asetettuna!"
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:732
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"Suoritetaan järjestelmätilassa, mutta -disallow-module-loading ei ole "
"asetettuna!"
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:735
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:726
+#: ../src/daemon/main.c:740
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:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "stdio:n saaminen epäonnistui."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "putki epäonnistui: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "fork() epäonnistui: %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "read() epäonnistui: %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "Taustaprosessin käynnistys epäonnistui."
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "Taustaprosessin käynnistys onnistui."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Tämä on PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "Käännöksen isäntäkone: %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Käännösaikaiset C-liput (CFLAGS): %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "Käynnissä isäntäkoneella: %s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr "Löydettiin %u CPU:ta."
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "Sivun koko on %lu tavua"
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "Käännetty Valgrind-tuella: kyllä"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "Käännetty Valgrind-tuella: ei"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Käynnissä valgrind-tilassa: %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Optimoitu rakentaminen: kyllä"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Optimoitu rakentaminen: ei"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr "NDEBUG on määritelty, kaikki assertit ovat poissa käytöstä."
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "FASTPATH on määritelty, vain fast path -assertit ovat poissa käytöstä."
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr "Kaikki assertit ovat käytössä."
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "Konetunnisteen nouto epäonnistui"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "Konetunniste on %s."
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "Käytetään ajonaikaista hakemistoa %s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "Käytetään tilahakemistoa %s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "Suoritetaan järjestelmätilassa: %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() epäonnistui."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Korkean tarkkuuden ajastimet käytettävissä."
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -499,29 +499,29 @@ msgstr ""
"Hei, ytimesi on kehno! Linux korkean tarkkuuden ajastimien tuella on hyvin "
"suositeltava!"
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new() epäonnistui."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "Taustaprosessin alustus epäonnistui."
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
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:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "Taustaprosessin käynnistys valmis."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "Taustaprosessin sulkeminen käynnistetty."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "Taustaprosessi lopetettu."
@@ -1526,7 +1526,8 @@ msgstr ""
" yhdistetään\n"
" -d, --device=LAITE Sen nielun/lähteen nimi, johon\n"
" yhdistetään\n"
-" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa kutsutaan\n"
+" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
+"kutsutaan\n"
" palvelimella\n"
" --stream-name=NIMI Kuinka tätä virtaa kutsutaan\n"
" palvelimella\n"
@@ -1544,15 +1545,19 @@ msgstr ""
" kanavakartta\n"
" --fix-format Valitse näytemuoto nielusta, johon\n"
" virtaa yhdistetään\n"
-" --fix-rate Valitse näytteenottotaajuus nielusta,\n"
+" --fix-rate Valitse näytteenottotaajuus "
+"nielusta,\n"
" johon virtaa yhdistetään\n"
" --fix-channels Valitse kanavien määrä ja kanava-\n"
" kartta nielusta, johon virtaa\n"
" yhdistetään.\n"
" --no-remix Ãlä yli- tai alimiksaa kanavia.\n"
-" --no-remap Kartoita kanavat indeksin mukaan, älä nimen mukaan.\n"
-" --latency=TAVUA Pyydä määritettyä latenssia tavuissa.\n"
-" --process-time=TAVUA Pyydä määritettyä prosessiaikaa pyyntöä kohti tavuissa.\n"
+" --no-remap Kartoita kanavat indeksin mukaan, "
+"älä nimen mukaan.\n"
+" --latency=TAVUA Pyydä määritettyä latenssia "
+"tavuissa.\n"
+" --process-time=TAVUA Pyydä määritettyä prosessiaikaa "
+"pyyntöä kohti tavuissa.\n"
#: ../src/utils/pacat.c:612
#, c-format
@@ -2196,11 +2201,13 @@ msgid ""
"variables and cookie file.\n"
" -r Remove PulseAudio data from X11 display\n"
msgstr ""
-"%s [-D näyttö] [-S palvelin] [-O nielu] [-I lähde] [-c tiedosto] [-d|-e|-i|-r]\n"
+"%s [-D näyttö] [-S palvelin] [-O nielu] [-I lähde] [-c tiedosto] [-d|-e|-i|-"
+"r]\n"
"\n"
" -d Näytä nykyiseen X11-näyttöön yhdistetyn PulseAudion tiedot (oletus)\n"
" -e Vie paikalliset PulseAudio-tiedot X11-näytölle\n"
-" -i Tuo PulseAudio-tiedot X11-näytöltä paikallisiin ympäristömuuttujiin ja\n"
+" -i Tuo PulseAudio-tiedot X11-näytöltä paikallisiin ympäristömuuttujiin "
+"ja\n"
" evästetiedostoon.\n"
" -r Poista PulseAudio-tiedostot X11-näytöltä\n"
@@ -2343,7 +2350,8 @@ msgstr ""
" -s, --server=PALVELIN Sen palvelimen nimi, johon\n"
" yhdistetään\n"
" -d, --device=LAITE Sen nielun nimi, johon yhdistetään\n"
-" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa kutsutaan\n"
+" -n, --client-name=NIMI Kuinka tätä asiakasohjelmaa "
+"kutsutaan\n"
" palvelimella\n"
" --stream-name=NIMI Kuinka tätä virtaa kutsutaan\n"
" palvelimella\n"
@@ -2399,9 +2407,9 @@ msgstr ""
"ALSA herätti taustaprosessin kirjoittamaan uutta dataa laitteelle, mutta "
"mitään kirjoitettavaa ei ollut!\n"
"Tämä on luultavasti ohjelmavirhe ALSA-ajurissa â%sâ. Raportoi tästä "
-"ongelmasta ALSA-kehittäjille. Taustaprosessi herätettiin POLLOUT asetettuna, "
-" snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, joka on < "
-"min_avail."
+"ongelmasta ALSA-kehittäjille. Taustaprosessi herätettiin POLLOUT "
+"asetettuna, snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, "
+"joka on < min_avail."
#: ../src/modules/alsa/alsa-source.c:377 ../src/modules/alsa/alsa-source.c:510
#, c-format
@@ -2416,9 +2424,8 @@ msgstr ""
"ALSA herätti taustaprosessin lukemaan uutta dataa laitteelta, mutta mitään "
"luettavaa ei ollut!\n"
"Tämä on luultavasti ohjelmavirhe ALSA-ajurissa â%sâ. Raportoi tästä "
-"ongelmasta ALSA-kehittäjille. Taustaprosessi herätettiin POLLIN asetettuna, "
-" snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, on < "
-"min_avail."
+"ongelmasta ALSA-kehittäjille. Taustaprosessi herätettiin POLLIN asetettuna, "
+"snd_pcm_avail() palautti kuitenkin 0 tai jonkin muun arvon, on < min_avail."
#: ../src/modules/alsa/module-alsa-card.c:114
#, c-format
@@ -2436,19 +2443,19 @@ msgid "Input %s"
msgstr "Sisääntulo %s"
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr "Poissa"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr "Korkean äänenlaadun toisto (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr "PulseAudio-äänipalvelin"
diff --git a/po/fr.po b/po/fr.po
index 9ca9c27..53bd356 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-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\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"
@@ -72,7 +72,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -81,7 +81,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -90,12 +90,12 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
#, fuzzy
msgid "Internal Audio"
msgstr "Erreur interne"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr ""
@@ -235,40 +235,40 @@ 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:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "Ãchec lors de l'analyse de la ligne de commande"
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, 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:493
+#: ../src/daemon/main.c:507
#, 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:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit a accordé l'acquisition des permissions de haute priorité."
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit a refusé l'acquisition des permissions de haute priorité."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit a accordé l'acquisition des permissions de temps réel."
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit a refusé l'acquisition des permissions de temps réel."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -281,48 +281,48 @@ msgid ""
"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
msgstr ""
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
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:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "Augmentation de RLIMIT_RTPRIO réussie"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO a échoué : %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "Abandon de CAP_NICE"
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
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:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "Lé démon n'est pas lancé"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "Le démon est lancé avec le PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Impossible de tuer le démon : %s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -330,160 +330,160 @@ msgstr ""
"Le programme n'est pas conçu pour être lancé en tant que root (sauf si --"
"system est renseigné)."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
#, fuzzy
msgid "Root privileges required."
msgstr "Les permissions root sont nécessaires."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start n'est pas pris en charge pour les instances système."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
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:718
+#: ../src/daemon/main.c:732
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:721
+#: ../src/daemon/main.c:735
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:726
+#: ../src/daemon/main.c:740
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:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "Ãchec lors de l'acquisition de stdio."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "Ãchec du tube : %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "Ãchec de fork()Â : %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "Ãchec de read()Â : %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "Ãchec lors du démarrage du démon."
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "Démarrage du démon réussi."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Pulseaudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "Hôte de compilation : %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS de compilation : %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "Exécution sur l'hôte : %s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "La taille de la page est de %lu octets"
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "Compilé avec la prise en charge Valgrind : oui"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "Compilé avec la prise en charge Valgrind : non"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Exécution en mode valgrind : %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Construction optimisée : oui"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Construction optimisée : non"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "Ãchec lors de l'obtention de l'ID de la machine"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "L'ID de la machine est %s."
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "Utilisation du répertoire d'exécution %s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "Utilisation du répertoire d'état %s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "Exécution en mode système : %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "Ãchec de pa_pid_file_create()."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
"De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -491,27 +491,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:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "Ãchec de pa_core_new()."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "Ãchec lors de l'initialisation du démon"
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
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:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "Démarrage du démon effectué."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "Fermeture du démon initiée."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "Démon terminé."
@@ -2435,19 +2435,19 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr ""
diff --git a/po/it.po b/po/it.po
index 5fe1a56..0823da9 100644
--- a/po/it.po
+++ b/po/it.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\n"
"PO-Revision-Date: 2009-04-01 19:18+0200\n"
"Last-Translator: Milo Casagrande <milo at ubuntu.com>\n"
"Language-Team: Italiano <tp at lists.linux.it>\n"
@@ -72,7 +72,7 @@ msgstr ""
"Molto probabilmente si tratta di un bug nel driver ALSA «%s». Segnalare "
"questo problema agli sviluppatori ALSA."
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -84,7 +84,7 @@ msgstr ""
"Molto probabilmente si tratta di un bug nel driver ALSA «%s». Segnalare "
"questo problema agli sviluppatori ALSA."
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -97,11 +97,11 @@ msgstr ""
"Molto probabilmente si tratta di un bug nel driver ALSA «%s». Segnalare "
"questo problema agli sviluppatori ALSA."
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
msgid "Internal Audio"
msgstr "Audio interno"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr "Modem"
@@ -239,37 +239,37 @@ 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:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "Analisi della riga di comando non riuscita."
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, 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:493
+#: ../src/daemon/main.c:507
#, 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:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "Privilegi acquire-high-priority assegnati da PolicyKit."
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "Privilegi acquire-high-priority rifiutati da PolicyKit."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "Privilegi acquire-real-time assegnati da PolicyKit."
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "Privilegi acquire-real-time rifiutati da PolicyKit."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -290,49 +290,49 @@ msgstr ""
"PolicyKit appropriati, diventare un membro di «%s» oppure incrementare i "
"limiti RLIMIT_NICE/RLIMIT_RTPRIO della risorsa per questo utente."
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
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:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "Incremento di RLIMIT_RTPRIO riuscito"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO non riuscito: %s"
# abbandono??
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "Abbandono del CAP_NICE"
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
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:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "Demone non in esecuzione"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "Demone in esecuzione con PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Terminazione del demone non riuscita: %s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -340,162 +340,162 @@ msgstr ""
"Questo programma non è pensato per essere eseguito come root (a meno di "
"specificare --system)."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
msgid "Root privileges required."
msgstr "Richiesti privilegi di root."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start non supportato per le istanze di sistema."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
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:718
+#: ../src/daemon/main.c:732
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"In esecuzione in modalità sistema, ma --disallow-module-loading non "
"impostato."
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
"In esecuzione in modalità sistema, disabilitata in modo forzoso la modalità "
"SHM."
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"In esecuzione in modalità sistema, disabilitato in modo forzoso il tempo di "
"uscita per inattività ."
-#: ../src/daemon/main.c:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "Acquisizione di STDIO non riuscita."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "pipe non riuscita: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "fork() non riuscita: %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "read() non riuscita: %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "Avvio del demone non riuscito."
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "Avvio del demone riuscito."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Questo è PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "Host di compilazione: %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS di compilazione: %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "In esecuzione sull'host: %s"
# evviva il rispetto della l10n!!!
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr "Trovate %u CPU."
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "La dimensione di pagina è %lu byte"
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "Compilato con supporto a Valgrind: sì"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "Compilato con supporto a Valgrind: no"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "In esecuzione in modalità valgrind: %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Build ottimizzata: sì"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Build ottimizzata: no"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "Recupero dell'ID della macchina non riuscito"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "L'ID della macchina è %s"
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "In uso directory di runtime %s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "In uso directory di stato %s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "In esecuzione in modalità sistema: %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() non riuscita."
# io mi domando e dico..... mah!
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
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:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -503,27 +503,27 @@ msgstr ""
"Hey, questo kernel è andato a male! Lo chef oggi raccomanda Linux con i "
"timer high-resolution abilitati!"
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new() non riuscita."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "Inizializzazione del demone non riuscita."
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
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:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "Completato l'avvio del demone."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "Iniziato l'arresto del demone."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "Demone terminato."
@@ -2497,19 +2497,19 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
#, fuzzy
msgid "PulseAudio Sound Server"
msgstr "Sistema sonoro PulseAudio"
diff --git a/po/pa.po b/po/pa.po
index 2c5025a..2aecf0c 100644
--- a/po/pa.po
+++ b/po/pa.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\n"
"PO-Revision-Date: 2008-12-24 09:37+0530\n"
"Last-Translator: Amanpreet Singh Alam <aalam at users.sf.net>\n"
"Language-Team: Punjabi <punjabi-l10n at users.sf.net>\n"
@@ -70,7 +70,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -79,7 +79,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -88,12 +88,12 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
#, fuzzy
msgid "Internal Audio"
msgstr "à¨
ੰਦਰà©à¨¨à© à¨à¨²à¨¤à©"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr ""
@@ -231,37 +231,37 @@ msgstr ""
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr ""
-#: ../src/daemon/main.c:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr ""
-#: ../src/daemon/main.c:493
+#: ../src/daemon/main.c:507
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr ""
-#: ../src/daemon/main.c:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -274,223 +274,223 @@ msgid ""
"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
msgstr ""
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
msgid ""
"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr ""
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO failed: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr ""
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
msgid ""
"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr ""
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr ""
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr ""
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr ""
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
#, fuzzy
msgid "Root privileges required."
msgstr "ਰà©à¨ à¨
ਧਿà¨à¨¾à¨°à¨¾à¨ ਦ੠ਲà©à© ਹà©à¥¤"
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr ""
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:732
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "pipe failed: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "fork() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "read() ਫà©à¨²à©à¨¹ ਹà©: %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr ""
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr ""
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr ""
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr ""
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr ""
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr ""
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr ""
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr ""
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr ""
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr ""
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr ""
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr ""
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr ""
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new() ਫà©à¨²à©à¨¹ ਹà©à¥¤"
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr ""
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
-#: ../src/daemon/main.c:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr ""
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr ""
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr ""
@@ -2095,19 +2095,19 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr ""
diff --git a/po/pl.po b/po/pl.po
index d489ad8..1d41dda 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-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\n"
"PO-Revision-Date: 2009-04-05 16:11+0200\n"
"Last-Translator: Piotr DrÄ
g <piotrdrag at gmail.com>\n"
"Language-Team: Polish <pl at li.org>\n"
@@ -69,7 +69,7 @@ msgstr ""
"Prawdopodobnie jest to bÅÄ
d sterownika ALSA \"%s\". ProszÄ zgÅosiÄ ten "
"problem programistom ALSA."
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -81,7 +81,7 @@ msgstr ""
"Prawdopodobnie jest to bÅÄ
d sterownika ALSA \"%s\". ProszÄ zgÅosiÄ ten "
"problem programistom ALSA."
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -93,11 +93,11 @@ msgstr ""
"Prawdopodobnie jest to bÅÄ
d sterownika ALSA \"%s\". ProszÄ zgÅosiÄ ten "
"problem programistom ALSA."
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
msgid "Internal Audio"
msgstr "WewnÄtrzny dźwiÄk"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr "Modem"
@@ -235,39 +235,39 @@ 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:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "Analiza wiersza poleceÅ nie powiodÅa siÄ."
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, 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:493
+#: ../src/daemon/main.c:507
#, 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:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit nadaÅ uprawnienie \"acquire-high-priority\"."
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit odmówiŠnadania uprawnienia \"acquire-high-priority\"."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit nadaÅ uprawnienie \"acquire-real-time\"."
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit odmówiŠnadania uprawnienia \"acquire-real-time\"."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -288,48 +288,48 @@ msgstr ""
"\" lub zwiÄkszyÄ ograniczenia zasobów RLIMIT_NICE/RLIMIT_RTPRIO dla tego "
"użytkownika."
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
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:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "PomyÅlnie zwiÄkszono RLIMIT_RTPRIO"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "Oddawanie CAP_NICE"
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
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:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "Demon nie jest uruchomiony"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "Demon jest uruchomiony jako PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Zniszczenie demona nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -337,158 +337,158 @@ msgstr ""
"Ten program nie powinien byÄ uruchomiany jako root (chyba, że podano --"
"system)."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
msgid "Root privileges required."
msgstr "Wymagane sÄ
uprawnienia roota."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start nie jest obsÅugiwane przy uruchamianiu systemowym."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
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:718
+#: ../src/daemon/main.c:732
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:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Uruchamianie w trybie systemowym, wymuszanie wyÅÄ
czenia trybu SHM!"
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
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:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "Uzyskanie standardowego wejÅcia/wyjÅcia nie powiodÅo siÄ."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "potok nie powiódÅ siÄ: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "fork() nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "read() nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "Uruchomienie demona nie powiodÅo siÄ."
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "PomyÅlnie uruchomiono demona."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "To jest PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "Komputer kompilacji: %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS kompilacji: %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "Uruchamianie na komputerze: %s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr "Znaleziono %u procesorów."
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "Rozmiar strony to %lu bajtów"
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "Skompilowano z obsÅugÄ
Valgrind: tak"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "Skompilowano z obsÅugÄ
Valgrind: nie"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Uruchamianie w trybie Valgrind: %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Budowanie optymalizowane: tak"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Budowanie optymalizowane: nie"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr "Podano NDEBUG, wszystkie asercje zostaÅy wyÅÄ
czone."
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "Podano FASTPATH, tylko szybkie asercje Åcieżek zostaÅy wyÅÄ
czone."
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr "Wszystkie asercje sÄ
wÅÄ
czone."
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "Uzyskanie identyfikatora komputera nie powiodÅo siÄ"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "Identyfikator komputera to %s."
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "Używanie folderu wykonywania %s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "Używanie folderu stanu %s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "Uruchamianie w trybie systemowym: %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() nie powiodÅo siÄ."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Åwieże zegary o wysokiej rozdzielczoÅci! Smacznego!"
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -496,27 +496,27 @@ msgstr ""
"KoleÅ, twoje jÄ
dro Åmierdzi! Szef kuchni poleca dzisiaj Linuksa w wÅÄ
czonymi "
"zegarami o wysokiej rozdzielczoÅci!"
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new() nie powiodÅo siÄ."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "Zainicjowanie demona nie powiodÅo siÄ."
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Uruchamianie demona bez żadnych wczytanych moduÅów, odmawianie pracy."
-#: ../src/daemon/main.c:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "ZakoÅczono uruchamianie demona."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "Zainicjowano wyÅÄ
czenie demona."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "Demon zostaÅ zniszczony."
@@ -2433,18 +2433,18 @@ msgid "Input %s"
msgstr "WejÅcie %s"
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr "WyÅÄ
cz"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr "Odtwarzanie o wysokiej dokÅadnoÅci (A2DP)"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr "Duplex telefoniczny (HSP/HFP)"
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr "Serwer dźwiÄku PulseAudio"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 427a4a9..9367f38 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-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\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"
@@ -71,7 +71,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -80,7 +80,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -89,12 +89,12 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
#, fuzzy
msgid "Internal Audio"
msgstr "Erro interno"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr ""
@@ -233,37 +233,37 @@ 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:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "Falha em interpretar a linha de comando."
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, 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:493
+#: ../src/daemon/main.c:507
#, 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:501
+#: ../src/daemon/main.c:515
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:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "O PolicyKit recusa a aquisição de privilégios de alta prioridade."
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
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:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "O PolicyKit recusa a aquisição de privilégios de tempo real."
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -276,48 +276,48 @@ msgid ""
"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
msgstr ""
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
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:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "RLIMIT_RTPRIO aumentado com sucesso"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO falhou: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "Abandonando CAP_NICE"
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
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:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "O daemon não está em execução"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "Daemon executando como PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Falha em encerrar o daemon: %s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -325,156 +325,156 @@ msgstr ""
"Este programa não é para ser executado como root (a não ser que --system "
"seja especificado)."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
#, fuzzy
msgid "Root privileges required."
msgstr "Privilégios de rot são requeridos."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start não tem suporte para instâncias de sistemas."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
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:718
+#: ../src/daemon/main.c:732
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:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Executando no modo system, desabilitando forçadamente o modo SHM!"
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
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:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "Falha em adquirir o stdio."
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "O pipe falhou: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "O fork() falhou: %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "A operação read() falhou: %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "Falha na partida do daemon."
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "Os daemons foram iniciados com sucesso."
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Este é o PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilação: %s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Compilação CFLAGS: %s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "Executando no host: %s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "O tamanho da página é %lu bytes"
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "Compilado com suporte do Valgrind: sim"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "Compilado com suporte do Valgrind: não"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Executando em modo valgrind: %s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "Build otimizado: sim"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "Build otimizado: não"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "Falha em obter o ID da máquina"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "A ID da máquina é %s."
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "Usando o diretório de runtime %s."
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "Usando o diretório de estado %s."
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "Executando em modo do sistema: %s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() falhou."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Timers de alta resolução frequinhos disponÃveis! Bon appetit!"
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -482,28 +482,28 @@ msgstr ""
"Cara, teu kernel fede! A recomendação do chef hoje é Linux com timers de "
"alta resolução habilitados!"
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new() falhou."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "Falha em iniciar o daemon."
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
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:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "A partida dos Daemon está completa."
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "O encerramento do Daemon foi iniciado."
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "Daemon terminado."
@@ -2385,19 +2385,19 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr ""
diff --git a/po/sv.po b/po/sv.po
index d731155..63d4045 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-04-05 03:15+0200\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\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"
@@ -68,7 +68,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -77,7 +77,7 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -86,12 +86,12 @@ msgid ""
"to the ALSA developers."
msgstr ""
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
#, fuzzy
msgid "Internal Audio"
msgstr "Internt fel"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr ""
@@ -229,37 +229,37 @@ msgstr ""
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) misslyckades: %s"
-#: ../src/daemon/main.c:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr ""
-#: ../src/daemon/main.c:493
+#: ../src/daemon/main.c:507
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr ""
-#: ../src/daemon/main.c:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -272,44 +272,44 @@ msgid ""
"the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
msgstr ""
-#: ../src/daemon/main.c:566
+#: ../src/daemon/main.c:580
msgid ""
"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr ""
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO misslyckades: %s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr ""
-#: ../src/daemon/main.c:612
+#: ../src/daemon/main.c:626
msgid ""
"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr ""
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr ""
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr ""
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -317,180 +317,180 @@ msgstr ""
"Detta program är inte tänkt att köras som root (såvida inte --system har "
"angivits)."
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
#, fuzzy
msgid "Root privileges required."
msgstr "Root-behörighet krävs."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "--start stöds inte för systeminstanser."
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:732
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "pipe misslyckades: %s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "fork() misslyckades: %s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "read() misslyckades: %s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr ""
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr ""
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "Detta är PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr ""
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr ""
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr ""
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr ""
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr ""
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr ""
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr ""
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr ""
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr ""
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr ""
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr ""
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr ""
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() misslyckades."
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new() misslyckades."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr ""
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
-#: ../src/daemon/main.c:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr ""
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr ""
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr ""
@@ -2109,19 +2109,19 @@ msgid "Input %s"
msgstr ""
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr ""
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr ""
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index 2d71939..161db3e 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -11,7 +11,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio.master-tx\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-04-05 08:27+0000\n"
+"POT-Creation-Date: 2009-04-10 02:02+0200\n"
"PO-Revision-Date: 2009-04-06 10:26+1000\n"
"Last-Translator: Leah Liu <lliu at redhat.com>\n"
"Language-Team: Simplified Chinese <zh at li.org>\n"
@@ -75,7 +75,7 @@ msgstr ""
"snd_pcm_avail() è¿åçå¼é常大ï¼%lu åèï¼%lu msï¼ã\n"
"å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸ç bugã请å ALSA å¼åè
举æ¥è¿ä¸ªé®é¢ã"
-#: ../src/modules/alsa/alsa-util.c:1649
+#: ../src/modules/alsa/alsa-util.c:1650
#, c-format
msgid ""
"snd_pcm_delay() returned a value that is exceptionally large: %li bytes (%s%"
@@ -86,7 +86,7 @@ msgstr ""
"snd_pcm_delay() è¿åçå¼é常大ï¼%li åèï¼%s%lu msï¼ã\n"
"å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸ç bugã请å ALSA å¼åè
举æ¥è¿ä¸ªé®é¢ã"
-#: ../src/modules/alsa/alsa-util.c:1695
+#: ../src/modules/alsa/alsa-util.c:1697
#, c-format
msgid ""
"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
@@ -97,11 +97,11 @@ msgstr ""
"snd_pcm_mmap_begin() è¿åçå¼é常大ï¼%lu åèï¼%lu msï¼ã\n"
"å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸ç bugã请å ALSA å¼åè
举æ¥è¿ä¸ªé®é¢ã"
-#: ../src/pulsecore/sink.c:2061
+#: ../src/pulsecore/sink.c:2131
msgid "Internal Audio"
msgstr "å
é¨é³é¢"
-#: ../src/pulsecore/sink.c:2067
+#: ../src/pulsecore/sink.c:2137
msgid "Modem"
msgstr "è°å¶è§£è°å¨"
@@ -238,37 +238,37 @@ msgstr "æ¤å¹³å°ä¸æ¯æsystem-wide模å¼ã"
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) 失败ï¼%s"
-#: ../src/daemon/main.c:462
+#: ../src/daemon/main.c:476
msgid "Failed to parse command line."
msgstr "åæå½ä»¤è¡å¤±è´¥ã"
-#: ../src/daemon/main.c:486
+#: ../src/daemon/main.c:500
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr "æ们å¨'%s'ç»ä¸ï¼å
许é«ä¼å
级è°åº¦ã"
-#: ../src/daemon/main.c:493
+#: ../src/daemon/main.c:507
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr "æ们å¨'%s'ç»ä¸ï¼å
许å®æ¶è°åº¦ã"
-#: ../src/daemon/main.c:501
+#: ../src/daemon/main.c:515
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKitæäºæ们âè·åé«ä¼å
级âæéã"
-#: ../src/daemon/main.c:504
+#: ../src/daemon/main.c:518
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKitæç»âè·åé«ä¼å
级âæéã"
-#: ../src/daemon/main.c:509
+#: ../src/daemon/main.c:523
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKitæäºæ们âè·åå®æ¶âæéã"
-#: ../src/daemon/main.c:512
+#: ../src/daemon/main.c:526
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKitæç»æ们âè·åå®æ¶âæéã"
-#: ../src/daemon/main.c:541
+#: ../src/daemon/main.c:555
#, c-format
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -286,220 +286,222 @@ msgstr ""
"è¦å¯ç¨å®æ¶/é«ä¼å
è°åº¦ï¼è¯·è·å¾éå½ç PolicyKit ç¹æï¼æè
æ为 '%s' æåï¼ä¹å¯"
"以为è¿ä¸ªç¨æ·å¢å RLIMIT_NICE/RLIMIT_RTPRIO èµæºéå¶ã"
-#: ../src/daemon/main.c:566
-msgid "High-priority scheduling enabled in configuration but not allowed by policy."
+#: ../src/daemon/main.c:580
+msgid ""
+"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr "é
ç½®ä¸å·²å¯ç¨é«ä¼å
级è°åº¦ï¼ä½çç¥æªå
许ã"
-#: ../src/daemon/main.c:595
+#: ../src/daemon/main.c:609
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "æé«RLIMIT_RTPRIOæåã"
-#: ../src/daemon/main.c:598
+#: ../src/daemon/main.c:612
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO失败ï¼%s"
-#: ../src/daemon/main.c:605
+#: ../src/daemon/main.c:619
msgid "Giving up CAP_NICE"
msgstr "æ£å¨æ¾å¼CAP_NICE"
-#: ../src/daemon/main.c:612
-msgid "Real-time scheduling enabled in configuration but not allowed by policy."
+#: ../src/daemon/main.c:626
+msgid ""
+"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr "é
ç½®ä¸å·²å¯ç¨å®æ¶è°åº¦ï¼ä½çç¥æªå
许ã"
-#: ../src/daemon/main.c:673
+#: ../src/daemon/main.c:687
msgid "Daemon not running"
msgstr "åå°ç¨åºæ²¡æè¿è¡"
-#: ../src/daemon/main.c:675
+#: ../src/daemon/main.c:689
#, c-format
msgid "Daemon running as PID %u"
msgstr "åå°ç¨åºæ£å¨è¿è¡ï¼PID %u"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:699
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ææ»åå°ç¨åºå¤±è´¥ï¼%s"
-#: ../src/daemon/main.c:703
+#: ../src/daemon/main.c:717
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr "ä¸åºä»¥root身份è¿è¡æ¬ç¨åºï¼é¤éæå® --systemï¼ã"
-#: ../src/daemon/main.c:705
+#: ../src/daemon/main.c:719
msgid "Root privileges required."
msgstr "éè¦ root æéã"
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:724
msgid "--start not supported for system instances."
msgstr "ç³»ç»å®ä¾ä¸æ¯æ --startã"
-#: ../src/daemon/main.c:715
+#: ../src/daemon/main.c:729
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼ä½æ¯ --disallow-exit æªè®¾å®ï¼"
-#: ../src/daemon/main.c:718
+#: ../src/daemon/main.c:732
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼ä½æ¯ --disallow-module-loading æªè®¾å®ï¼"
-#: ../src/daemon/main.c:721
+#: ../src/daemon/main.c:735
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼å¼ºå¶ç¦ç¨SHM模å¼ï¼"
-#: ../src/daemon/main.c:726
+#: ../src/daemon/main.c:740
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼å¼ºå¶ç¦ç¨éåºç©ºé²æ¶é´ï¼"
-#: ../src/daemon/main.c:753
+#: ../src/daemon/main.c:767
msgid "Failed to acquire stdio."
msgstr "è·åstdio失败ã"
-#: ../src/daemon/main.c:759
+#: ../src/daemon/main.c:773
#, c-format
msgid "pipe failed: %s"
msgstr "管é失败ï¼%s"
-#: ../src/daemon/main.c:764
+#: ../src/daemon/main.c:778
#, c-format
msgid "fork() failed: %s"
msgstr "fork()失败ï¼%s"
-#: ../src/daemon/main.c:778
+#: ../src/daemon/main.c:792
#, c-format
msgid "read() failed: %s"
msgstr "read()失败ï¼%s"
-#: ../src/daemon/main.c:784
+#: ../src/daemon/main.c:798
msgid "Daemon startup failed."
msgstr "åå°ç¨åºå¯å¨å¤±è´¥ã"
-#: ../src/daemon/main.c:786
+#: ../src/daemon/main.c:800
msgid "Daemon startup successful."
msgstr "åå°ç¨åºå¯å¨æåã"
-#: ../src/daemon/main.c:856
+#: ../src/daemon/main.c:870
#, c-format
msgid "This is PulseAudio %s"
msgstr "è¿æ¯ PulseAudio %s"
-#: ../src/daemon/main.c:857
+#: ../src/daemon/main.c:871
#, c-format
msgid "Compilation host: %s"
msgstr "ç¼è¯ä¸»æºï¼%s"
-#: ../src/daemon/main.c:858
+#: ../src/daemon/main.c:872
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "ç¼è¯CFLAGSï¼%s"
-#: ../src/daemon/main.c:861
+#: ../src/daemon/main.c:875
#, c-format
msgid "Running on host: %s"
msgstr "æ£å¨ä¸»æºä¸è¿è¡ï¼%s"
-#: ../src/daemon/main.c:864
+#: ../src/daemon/main.c:878
#, c-format
msgid "Found %u CPUs."
msgstr "æ¾å° %u CPUã"
-#: ../src/daemon/main.c:866
+#: ../src/daemon/main.c:880
#, c-format
msgid "Page size is %lu bytes"
msgstr "页é¢å¤§å°ä¸º%luåè"
-#: ../src/daemon/main.c:869
+#: ../src/daemon/main.c:883
msgid "Compiled with Valgrind support: yes"
msgstr "ç¼è¯å¯ç¨Valgrindæ¯æï¼æ¯"
-#: ../src/daemon/main.c:871
+#: ../src/daemon/main.c:885
msgid "Compiled with Valgrind support: no"
msgstr "ç¼è¯å¯ç¨Valgrindæ¯æï¼å¦"
-#: ../src/daemon/main.c:874
+#: ../src/daemon/main.c:888
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "æ£å¨ä»¥valgrind模å¼è¿è¡ï¼%s"
-#: ../src/daemon/main.c:877
+#: ../src/daemon/main.c:891
msgid "Optimized build: yes"
msgstr "ä¼åçæï¼æ¯"
-#: ../src/daemon/main.c:879
+#: ../src/daemon/main.c:893
msgid "Optimized build: no"
msgstr "ä¼åçæï¼å¦"
-#: ../src/daemon/main.c:883
+#: ../src/daemon/main.c:897
msgid "NDEBUG defined, all asserts disabled."
msgstr "æç» NDEBUGï¼ç¦ç¨ææ assert"
-#: ../src/daemon/main.c:885
+#: ../src/daemon/main.c:899
msgid "FASTPATH defined, only fast path asserts disabled."
msgstr "æç» FASTPATHï¼åªç¦ç¨å¿«éè·¯å¾ assertã"
-#: ../src/daemon/main.c:887
+#: ../src/daemon/main.c:901
msgid "All asserts enabled."
msgstr "å¯ç¨ææ assertã"
-#: ../src/daemon/main.c:891
+#: ../src/daemon/main.c:905
msgid "Failed to get machine ID"
msgstr "è·åmachine ID失败"
-#: ../src/daemon/main.c:894
+#: ../src/daemon/main.c:908
#, c-format
msgid "Machine ID is %s."
msgstr "machine IDæ¯%sã"
-#: ../src/daemon/main.c:899
+#: ../src/daemon/main.c:913
#, c-format
msgid "Using runtime directory %s."
msgstr "æ£å¨ä½¿ç¨è¿è¡æ¶æ件夹%sã"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:918
#, c-format
msgid "Using state directory %s."
msgstr "æ£å¨ä½¿ç¨ç¶ææ件夹%sã"
-#: ../src/daemon/main.c:907
+#: ../src/daemon/main.c:921
#, c-format
msgid "Running in system mode: %s"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼%s"
-#: ../src/daemon/main.c:922
+#: ../src/daemon/main.c:936
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create()失败ã"
-#: ../src/daemon/main.c:934
+#: ../src/daemon/main.c:948
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "æ°é²çé«å辨ç计æ¶å¨å¼é
äºï¼å个饱ï¼"
-#: ../src/daemon/main.c:936
+#: ../src/daemon/main.c:950
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr "èå
ï¼ä½ çå
æ ¸çèï¼ç°å¨æµè¡çæ¯å¯ç¨äºé«å辩ç计åå¨çLinuxï¼"
-#: ../src/daemon/main.c:948
+#: ../src/daemon/main.c:962
msgid "pa_core_new() failed."
msgstr "pa_core_new()失败ã"
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1024
msgid "Failed to initialize daemon."
msgstr "åå°ç¨åºåå§å失败ã"
-#: ../src/daemon/main.c:1015
+#: ../src/daemon/main.c:1029
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "åå°ç¨åºå¯å¨æªå 载任ä½æ¨¡åï¼æç»å·¥ä½ã"
-#: ../src/daemon/main.c:1032
+#: ../src/daemon/main.c:1046
msgid "Daemon startup complete."
msgstr "åå°ç¨åºå¯å¨å®æã"
-#: ../src/daemon/main.c:1038
+#: ../src/daemon/main.c:1052
msgid "Daemon shutdown initiated."
msgstr "å¼å§å
³éåå°ç¨åºã"
-#: ../src/daemon/main.c:1056
+#: ../src/daemon/main.c:1074
msgid "Daemon terminated."
msgstr "åå°ç¨åºå·²ç»æ¢ã"
@@ -828,7 +830,8 @@ msgid "Start the PulseAudio Sound System"
msgstr "å¯å¨ PulseAudio 声é³ç³»ç»"
#: ../src/daemon/org.pulseaudio.policy.in.h:1
-msgid "High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
+msgid ""
+"High-priority scheduling (negative Unix nice level) for the PulseAudio daemon"
msgstr "PulseAudio å®æ¤è¿ç¨çé«ä¼å
è°åº¦ï¼è´ç Unix nic ç级ï¼"
#: ../src/daemon/org.pulseaudio.policy.in.h:2
@@ -836,7 +839,8 @@ msgid "Real-time scheduling for the PulseAudio daemon"
msgstr "PulseAudio å®æ¤è¿ç¨çå®æ¶è°åº¦ã"
#: ../src/daemon/org.pulseaudio.policy.in.h:3
-msgid "System policy prevents PulseAudio from acquiring high-priority scheduling."
+msgid ""
+"System policy prevents PulseAudio from acquiring high-priority scheduling."
msgstr "ç³»ç»çç¥é²æ¢ PulseAudio è·å¾é«ä¼å
è°åº¦ã"
#: ../src/daemon/org.pulseaudio.policy.in.h:4
@@ -2322,8 +2326,10 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
"ALSA æéæ们å¨è¯¥è®¾å¤ä¸åå
¥æ°æ°æ®ï¼ä½å®é
ä¸æ²¡æä»ä¹å¯ä»¥åå
¥çï¼\n"
-"è¿å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸çä¸ä¸ª bugã请å ALSA å¼å人åæ¥åè¿ä¸ªé®é¢ã\n"
-"æéæ们设置 POLLOUT -- ä½ç»ææ¯ snd_pcm_avail() è¿å 0 æè
å¦ä¸ä¸ªå°äºæå°å¯ç¨å¼çæ°å¼ã"
+"è¿å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸çä¸ä¸ª bugã请å ALSA å¼å人åæ¥åè¿ä¸ªé®"
+"é¢ã\n"
+"æéæ们设置 POLLOUT -- ä½ç»ææ¯ snd_pcm_avail() è¿å 0 æè
å¦ä¸ä¸ªå°äºæå°å¯"
+"ç¨å¼çæ°å¼ã"
#: ../src/modules/alsa/alsa-source.c:377 ../src/modules/alsa/alsa-source.c:510
#, c-format
@@ -2336,8 +2342,10 @@ msgid ""
"returned 0 or another value < min_avail."
msgstr ""
"ALSA æéæ们ä»è¯¥è®¾å¤ä¸è¯»åæ°æ°æ®ï¼ä½å®é
ä¸æ²¡æä»ä¹å¯ä»¥è¯»åçï¼\n"
-"è¿å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸çä¸ä¸ª bugã请å ALSA å¼å人åæ¥åè¿ä¸ªé®é¢ã\n"
-"æéæ们设置 POLLOUT -- ä½ç»ææ¯ snd_pcm_avail() è¿å 0 æè
å¦ä¸ä¸ªå°äºæå°å¯ç¨å¼çæ°å¼ã"
+"è¿å¾å¯è½æ¯ ALSA 驱å¨ç¨åº '%s' ä¸çä¸ä¸ª bugã请å ALSA å¼å人åæ¥åè¿ä¸ªé®"
+"é¢ã\n"
+"æéæ们设置 POLLOUT -- ä½ç»ææ¯ snd_pcm_avail() è¿å 0 æè
å¦ä¸ä¸ªå°äºæå°å¯"
+"ç¨å¼çæ°å¼ã"
#: ../src/modules/alsa/module-alsa-card.c:114
#, c-format
@@ -2355,19 +2363,18 @@ msgid "Input %s"
msgstr "è¾å
¥ %s"
#: ../src/modules/alsa/module-alsa-card.c:170
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1864
+#: ../src/modules/bluetooth/module-bluetooth-device.c:2001
msgid "Off"
msgstr "å
³é"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1834
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1971
msgid "High Fidelity Playback (A2DP)"
msgstr "é«ä¿çåæ¾ï¼A2DPï¼"
-#: ../src/modules/bluetooth/module-bluetooth-device.c:1849
+#: ../src/modules/bluetooth/module-bluetooth-device.c:1986
msgid "Telephony Duplex (HSP/HFP)"
msgstr "åå·¥çµè¯ï¼HSP/HFPï¼"
-#: ../src/modules/reserve-wrap.c:125
+#: ../src/modules/reserve-wrap.c:127
msgid "PulseAudio Sound Server"
msgstr "PulseAudio 声é³æå¡å¨"
-
--
hooks/post-receive
PulseAudio Sound Server
More information about the pulseaudio-commits
mailing list