[pulseaudio-commits] [SCM] PulseAudio Sound Server branch, master-tx, updated. v0.9.15-test2-87-g6aa110a
Lennart Poettering
gitmailer-noreply at 0pointer.de
Thu Feb 19 18:26:58 PST 2009
This is an automated email from the git hooks/post-receive script. It was
generated because of a push to the "PulseAudio Sound Server" repository.
The master-tx branch has been updated
from aae5b15ef7a7a910dd9b8ad77a66dad56a35c4ac (commit)
- Log -----------------------------------------------------------------
6aa110a... run make update-po
3da3ea2... Merge commit 'origin/master-tx'
7bc1847... Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
26a270a... big alsa module rework to make things more robust to broken sound drivers and make it easier to debug them
adc9c2d... fix comment
fa2e07a... add test tool for debugging broken timing in sound drivers
9f813dd... Make sure we actually call _() for translating profile names
ef189d5... make it easier to debug timing related problems
fdca6ed... make profile names translatable
d69bd03... don't try to use weakref stuff on older compilers that don't really support it
2e250aa... Merge commit '38ded3bb31bc49664641965f856a35f432a8a956'
b0c0106... Merge commit 'elmarco/legacy-dir'
7c78c3f... alsa-util: check if mixer_poll_descriptors_count() < 0
800489e... pulsecore: don't leak p when make_random_dir_and_link()
f1dcbe0... pulsecore: don't leak d in case of error
4722fec... rtp: remove unused variable a
88fc458... protocol-native: don't leak a proplist
0684b23... stream-resotre: don't leak a name
c0cf22d... protocol-esound: don't accept a request of PROTOCOL_MAX
2c6abb8... daemon-conf: make sure c->log_level < LEVEL_MAX
4f1380b... pulsecore: use r returned from fgets()
204083c... pulsecore: unused variable e in hashmap_put()
60d53c6... tests/ipacl-test: check inet_pton()
bb52a67... padsp: don't use si if it's NULL
d1306e3... pulsecore: fix check for cb (m is already checked before)
67b0bae... pacat: remove unused variable
4512a2c... rtp-recv: remove unused variable assignment
927e501... pulsecore: remove unused variable from cli_command_load()
a252b61... main: remove unused lf variable
c3eb908... pactl: return in case of error reading file (avoid using freed d)
25bbea6... tests/thread-mainloop-test: check if threaded_mainloop_start() succeed
5ea7dac... tests/interpol-test: check if mainloop_start() succeed
a836927... tests/sync-playback: check if pa_context_connect succeed
93ed27d... pactl: check if pa_context_connect succeed
2aeab75... paplay: check if pa_context_connect() succeed
6c8d851... protocol-native: fix get_info() for cards
01f81d6... card-restore: it's not useful to check an array, let's check the length
ee0b5f7... log: don't leak bt
83cdcf2... alsa-util: make sure we check an initialized cn variable
7737b10... hal-detect: make sure r is initialized, so we don't take random path
7d16dcb... dbus-util: avoid double free
205b0ba... split out mixer setup into seperate functions to make things more readable
e1608d5... modernize pa_msleep() a bit
9cbdd3a... add pa_timespec_load
45218aa... make interpol-test useful for recording as well
5f5396b... additional validity check
928920c... additional validity check
7f8ccf9... handle both positive and negative errno's
6db3073... export card information for sinks/sources and number of sinks/sources a profile would create to clients
7b8bed3... introduce pa_realpath()
d85ef71... export pa_match()
be81a68... if we fail to import a memblock fill in silence to guarantee stability of timing
1737a19... allow importing of more memory blocks than exporting
07333f8... refer folks to the ALSA devs, not us
dc1ad08... minor optimizations
ff58fa8... simplify pa_alsa_init_proplist_pcm() a bit and include resolution bits in alsa device props
c9c63c2... allow pa to be run in a chroot() environment tht lacks /proc
c1892f2... bump required alsa version
05b7440... pulse/context: add --enable-legacy-runtime-dir
38ded3b... bluetooth: print SBC encoder implementation info
b4c391e... bluetooth: don't crash on pa_thread_mq_done() if pa_init() fail
b51e613... bluetooth: update SBC from upstream
0b8a6c6... bluetooth: fix message queue/rtpoll
a571565... don't open the alsa devices in hw:xxx mode
6790c03... unify ALSA mixer initialization
023998e... add doxygen comment for PA_GCC_WEAKREF
d447a8d... document all currently known properties
dc590c7... Optionally disable IPv6
9334d90... show whether gtk+ support is enabled after configure
fffe0ba... ignore gtk-test
e954a89... properly read icon/application name/display from gtk/glib/gdk
f863756... make PULSE_PROP env vars non-overriding but introduce PULSE_PROP_OVERRIDE for allowing overriding
689e6f8... add definition for GCC style weak references
44bca66... make PA_GCC_PACKED and PA_GCC_MALLOC actually work
c0fb91d... drop check for PA_PROP_APPLICATION_NAME since often enough we can deduce this better from g_get_application_name()
15e9b96... we reinit proplist since the server will copy from client proplist anyway
62818b8... fix aiff channel mapping for 6 channels
433751f... add a module that forwards cork/uncork requests to X11 as fake pause/resume key events
4fab9bf... add full set of argument description
6bb3dc8... don't try to recycle rtpoll objects
87e1342... don't claim that profile changes are always successful
52bfd47... use the same service fd shutdown logic when destructing module and changing profile
b18c875... minor service IO fixes
d9e3aba... the service fd is a stream socket, so handle things accordingly
-----------------------------------------------------------------------
Summary of changes:
configure.ac | 84 ++-
po/ca.po | 1163 ++++++++++++++---------
po/cs.po | 271 ++++--
po/de.po | 615 ++++++++-----
po/el.po | 271 ++++--
po/es.po | 271 ++++--
po/fi.po | 271 ++++--
po/fr.po | 271 ++++--
po/pl.po | 277 ++++--
po/pt_BR.po | 271 ++++--
po/sv.po | 271 ++++--
po/zh_CN.po | 271 ++++--
src/.gitignore | 1 +
src/Makefile.am | 36 +-
src/daemon/daemon-conf.c | 2 +-
src/daemon/main.c | 11 +-
src/daemon/start-pulseaudio-x11.in | 1 +
src/modules/alsa/alsa-sink.c | 574 ++++++------
src/modules/alsa/alsa-source.c | 532 ++++++-----
src/modules/alsa/alsa-util.c | 185 +++-
src/modules/alsa/alsa-util.h | 8 +-
src/modules/alsa/module-alsa-card.c | 10 +-
src/modules/bluetooth/module-bluetooth-device.c | 169 ++--
src/modules/bluetooth/sbc.c | 18 +-
src/modules/bluetooth/sbc.h | 1 +
src/modules/bluetooth/sbc_primitives.c | 1 +
src/modules/bluetooth/sbc_primitives.h | 1 +
src/modules/bluetooth/sbc_primitives_mmx.c | 1 +
src/modules/bluetooth/sbc_primitives_neon.c | 1 +
src/modules/dbus-util.c | 3 +-
src/modules/module-card-restore.c | 6 +-
src/modules/module-detect.c | 2 +-
src/modules/module-device-restore.c | 4 +-
src/modules/module-hal-detect.c | 1 +
src/modules/module-protocol-stub.c | 18 +
src/modules/module-stream-restore.c | 6 +-
src/modules/module-x11-cork-request.c | 189 ++++
src/modules/module-x11-publish.c | 6 +-
src/modules/rtp/module-rtp-recv.c | 20 +-
src/modules/rtp/module-rtp-send.c | 45 +-
src/modules/rtp/sap.c | 17 +-
src/modules/rtp/sdp.c | 13 +-
src/pulse/channelmap.c | 4 +-
src/pulse/context.c | 22 +-
src/pulse/gccmacro.h | 11 +-
src/pulse/introspect.c | 12 +-
src/pulse/introspect.h | 4 +
src/pulse/proplist.h | 171 +++--
src/pulse/scache.c | 4 +-
src/pulse/util.c | 6 +-
src/pulsecore/asyncmsgq.c | 10 +-
src/pulsecore/card.c | 2 +-
src/pulsecore/cli-command.c | 3 +-
src/pulsecore/core-error.c | 3 +
src/pulsecore/core-util.c | 35 +-
src/pulsecore/core-util.h | 4 +
src/pulsecore/hashmap.c | 2 +-
src/pulsecore/inet_ntop.c | 4 +
src/pulsecore/inet_pton.c | 4 +
src/pulsecore/ipacl.c | 12 +
src/pulsecore/log.c | 1 +
src/pulsecore/memblock.c | 2 +-
src/pulsecore/proplist-util.c | 103 ++-
src/pulsecore/protocol-esound.c | 2 +-
src/pulsecore/protocol-native.c | 62 +-
src/pulsecore/pstream.c | 9 +-
src/pulsecore/rtclock.c | 8 +
src/pulsecore/rtclock.h | 2 +
src/pulsecore/rtpoll.c | 51 +-
src/pulsecore/shm.c | 4 +-
src/pulsecore/sink.c | 3 +
src/pulsecore/socket-client.c | 18 +-
src/pulsecore/socket-client.h | 2 +
src/pulsecore/socket-server.c | 10 +
src/pulsecore/socket-server.h | 8 +-
src/pulsecore/socket-util.c | 8 +
src/pulsecore/source.c | 3 +
src/tests/alsa-time-test.c | 200 ++++
src/tests/gtk-test.c | 62 ++
src/tests/interpol-test.c | 38 +-
src/tests/ipacl-test.c | 7 +-
src/tests/sync-playback.c | 7 +-
src/tests/thread-mainloop-test.c | 2 +-
src/utils/pacat.c | 3 +-
src/utils/pactl.c | 6 +-
src/utils/padsp.c | 4 +-
src/utils/paplay.c | 5 +-
87 files changed, 4618 insertions(+), 2514 deletions(-)
create mode 100644 src/modules/module-x11-cork-request.c
create mode 100644 src/tests/alsa-time-test.c
create mode 100644 src/tests/gtk-test.c
-----------------------------------------------------------------------
commit d9e3abaf83ab2cf28ff6929495880cde0d9a933b
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 12 21:45:17 2009 +0100
the service fd is a stream socket, so handle things accordingly
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index b04834d..294fc66 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -154,17 +154,19 @@ struct userdata {
pa_bluetooth_device *device;
- int write_type, read_type;
+ int stream_write_type, stream_read_type;
+ int service_write_type, service_read_type;
};
static int init_bt(struct userdata *u);
static int init_profile(struct userdata *u);
-static int service_send(int fd, const bt_audio_msg_header_t *msg) {
+static int service_send(struct userdata *u, const bt_audio_msg_header_t *msg) {
size_t length;
ssize_t r;
- pa_assert(fd >= 0);
+ pa_assert(u);
+ pa_assert(u->service_fd >= 0);
pa_assert(msg);
length = msg->length ? msg->length : BT_SUGGESTED_BUFFER_SIZE;
@@ -173,52 +175,59 @@ static int service_send(int fd, const bt_audio_msg_header_t *msg) {
pa_strnull(bt_audio_strtype(msg->type)),
pa_strnull(bt_audio_strname(msg->name)));
- if ((r = send(fd, msg, length, 0)) == (ssize_t) length)
+ if ((r = pa_loop_write(u->service_fd, msg, length, &u->service_write_type)) == (ssize_t) length)
return 0;
if (r < 0)
pa_log_error("Error sending data to audio service: %s", pa_cstrerror(errno));
else
- pa_log_error("Short send()");
+ pa_log_error("Short write()");
return -1;
}
-static int service_recv(int fd, bt_audio_msg_header_t *msg, size_t expected_length) {
- size_t length;
+static int service_recv(struct userdata *u, bt_audio_msg_header_t *msg, size_t room) {
ssize_t r;
- pa_assert(fd >= 0);
+ pa_assert(u);
+ pa_assert(u->service_fd >= 0);
pa_assert(msg);
- length = expected_length ? expected_length : BT_SUGGESTED_BUFFER_SIZE;
-
- if (length < sizeof(bt_audio_error_t))
- length = sizeof(bt_audio_error_t);
+ if (room <= 0)
+ room = BT_SUGGESTED_BUFFER_SIZE;
pa_log_debug("Trying to receive message from audio service...");
- r = recv(fd, msg, length, 0);
+ /* First, read the header */
+ if ((r = pa_loop_read(u->service_fd, msg, sizeof(*msg), &u->service_read_type)) != sizeof(*msg))
+ goto read_fail;
- if (r > 0 && (r == (ssize_t) length || expected_length <= 0)) {
+ if (msg->length < sizeof(*msg)) {
+ pa_log_error("Invalid message size.");
+ return -1;
+ }
- if ((size_t) r < sizeof(*msg)) {
- pa_log_error("Packet read too small.");
- return -1;
- }
+ /* Second, read the payload */
+ if (msg->length > sizeof(*msg)) {
- if (r != msg->length) {
- pa_log_error("Size read doesn't match header size.");
- return -1;
- }
+ size_t remains = msg->length - sizeof(*msg);
- pa_log_debug("Received %s <- %s",
- pa_strnull(bt_audio_strtype(msg->type)),
- pa_strnull(bt_audio_strname(msg->name)));
+ if ((r = pa_loop_read(u->service_fd,
+ (uint8_t*) msg + sizeof(*msg),
+ remains,
+ &u->service_read_type)) != (ssize_t) remains)
+ goto read_fail;
- return 0;
}
+ pa_log_debug("Received %s <- %s",
+ pa_strnull(bt_audio_strtype(msg->type)),
+ pa_strnull(bt_audio_strname(msg->name)));
+
+ return 0;
+
+read_fail:
+
if (r < 0)
pa_log_error("Error receiving data from audio service: %s", pa_cstrerror(errno));
else
@@ -227,16 +236,19 @@ static int service_recv(int fd, bt_audio_msg_header_t *msg, size_t expected_leng
return -1;
}
-static ssize_t service_expect(int fd, bt_audio_msg_header_t *rsp, uint8_t expected_name, size_t expected_length) {
+static ssize_t service_expect(struct userdata*u, bt_audio_msg_header_t *rsp, size_t room, uint8_t expected_name, size_t expected_size) {
int r;
- pa_assert(fd >= 0);
+ pa_assert(u);
+ pa_assert(u->service_fd >= 0);
pa_assert(rsp);
- if ((r = service_recv(fd, rsp, expected_length)) < 0)
+ if ((r = service_recv(u, rsp, room)) < 0)
return r;
- if (rsp->type != BT_RESPONSE || rsp->name != expected_name) {
+ if ((rsp->type != BT_INDICATION && rsp->type != BT_RESPONSE) ||
+ rsp->name != expected_name ||
+ (expected_size > 0 && rsp->length != expected_size)) {
if (rsp->type == BT_ERROR && rsp->length == sizeof(bt_audio_error_t))
pa_log_error("Received error condition: %s", pa_cstrerror(((bt_audio_error_t*) rsp)->posix_errno));
@@ -328,10 +340,10 @@ static int get_caps(struct userdata *u) {
}
msg.getcaps_req.flags = BT_FLAG_AUTOCONNECT;
- if (service_send(u->service_fd, &msg.getcaps_req.h) < 0)
+ if (service_send(u, &msg.getcaps_req.h) < 0)
return -1;
- if (service_expect(u->service_fd, &msg.getcaps_rsp.h, BT_GET_CAPABILITIES, 0) < 0)
+ if (service_expect(u, &msg.getcaps_rsp.h, sizeof(msg), BT_GET_CAPABILITIES, 0) < 0)
return -1;
return parse_caps(u, &msg.getcaps_rsp);
@@ -610,10 +622,10 @@ static int set_conf(struct userdata *u) {
msg.setconf_req.h.length += msg.setconf_req.codec.length - sizeof(msg.setconf_req.codec);
}
- if (service_send(u->service_fd, &msg.setconf_req.h) < 0)
+ if (service_send(u, &msg.setconf_req.h) < 0)
return -1;
- if (service_expect(u->service_fd, &msg.setconf_rsp.h, BT_SET_CONFIGURATION, sizeof(msg.setconf_rsp)) < 0)
+ if (service_expect(u, &msg.setconf_rsp.h, sizeof(msg), BT_SET_CONFIGURATION, sizeof(msg.setconf_rsp)) < 0)
return -1;
if ((u->profile == PROFILE_A2DP && msg.setconf_rsp.transport != BT_CAPABILITIES_TRANSPORT_A2DP) ||
@@ -660,13 +672,13 @@ static int setup_stream_fd(struct userdata *u) {
msg.start_req.h.name = BT_START_STREAM;
msg.start_req.h.length = sizeof(msg.start_req);
- if (service_send(u->service_fd, &msg.start_req.h) < 0)
+ if (service_send(u, &msg.start_req.h) < 0)
return -1;
- if (service_expect(u->service_fd, &msg.rsp, BT_START_STREAM, sizeof(msg.start_rsp)) < 0)
+ if (service_expect(u, &msg.rsp, sizeof(msg), BT_START_STREAM, sizeof(msg.start_rsp)) < 0)
return -1;
- if (service_expect(u->service_fd, &msg.rsp, BT_NEW_STREAM, sizeof(msg.streamfd_ind)) < 0)
+ if (service_expect(u, &msg.rsp, sizeof(msg), BT_NEW_STREAM, sizeof(msg.streamfd_ind)) < 0)
return -1;
if ((u->stream_fd = bt_audio_service_get_data_fd(u->service_fd)) < 0) {
@@ -776,7 +788,7 @@ static int hsp_process_render(struct userdata *u) {
const void *p;
p = (const uint8_t*) pa_memblock_acquire(memchunk.memblock) + memchunk.index;
- l = pa_write(u->stream_fd, p, memchunk.length, &u->write_type);
+ l = pa_write(u->stream_fd, p, memchunk.length, &u->stream_write_type);
pa_memblock_release(memchunk.memblock);
pa_log_debug("Memblock written to socket: %lli bytes", (long long) l);
@@ -825,7 +837,7 @@ static int hsp_process_push(struct userdata *u) {
void *p;
p = pa_memblock_acquire(memchunk.memblock);
- l = pa_read(u->stream_fd, p, pa_memblock_get_length(memchunk.memblock), &u->read_type);
+ l = pa_read(u->stream_fd, p, pa_memblock_get_length(memchunk.memblock), &u->stream_read_type);
pa_memblock_release(memchunk.memblock);
if (l <= 0) {
@@ -941,7 +953,7 @@ static int a2dp_process_render(struct userdata *u) {
for (;;) {
ssize_t l;
- l = pa_write(u->stream_fd, p, left, &u->write_type);
+ l = pa_write(u->stream_fd, p, left, &u->stream_write_type);
/* pa_log_debug("write: requested %lu bytes; written %li bytes; mtu=%li", (unsigned long) left, (long) l, (unsigned long) u->link_mtu); */
pa_assert(l != 0);
@@ -1417,7 +1429,8 @@ static int init_bt(struct userdata *u) {
u->service_fd = -1;
}
- u->write_type = u->read_type = 0;
+ u->stream_write_type = u->stream_read_type = 0;
+ u->service_write_type = u->stream_write_type = 0;
/* connect to the bluez audio service */
if ((u->service_fd = bt_audio_service_open()) < 0) {
commit b18c8755d6de107486ebb305d0bb2909278bf29b
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 12 22:06:15 2009 +0100
minor service IO fixes
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 294fc66..9414eee 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -162,20 +162,18 @@ static int init_bt(struct userdata *u);
static int init_profile(struct userdata *u);
static int service_send(struct userdata *u, const bt_audio_msg_header_t *msg) {
- size_t length;
ssize_t r;
pa_assert(u);
pa_assert(u->service_fd >= 0);
pa_assert(msg);
-
- length = msg->length ? msg->length : BT_SUGGESTED_BUFFER_SIZE;
+ pa_assert(msg->length > 0);
pa_log_debug("Sending %s -> %s",
pa_strnull(bt_audio_strtype(msg->type)),
pa_strnull(bt_audio_strname(msg->name)));
- if ((r = pa_loop_write(u->service_fd, msg, length, &u->service_write_type)) == (ssize_t) length)
+ if ((r = pa_loop_write(u->service_fd, msg, msg->length, &u->service_write_type)) == (ssize_t) msg->length)
return 0;
if (r < 0)
@@ -207,7 +205,7 @@ static int service_recv(struct userdata *u, bt_audio_msg_header_t *msg, size_t r
return -1;
}
- /* Second, read the payload */
+ /* Secondly, read the payload */
if (msg->length > sizeof(*msg)) {
size_t remains = msg->length - sizeof(*msg);
@@ -217,7 +215,6 @@ static int service_recv(struct userdata *u, bt_audio_msg_header_t *msg, size_t r
remains,
&u->service_read_type)) != (ssize_t) remains)
goto read_fail;
-
}
pa_log_debug("Received %s <- %s",
@@ -231,7 +228,7 @@ read_fail:
if (r < 0)
pa_log_error("Error receiving data from audio service: %s", pa_cstrerror(errno));
else
- pa_log_error("Short recv()");
+ pa_log_error("Short read()");
return -1;
}
commit 52bfd47a493d927b4dac3c725454d2e7d4f8ca05
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 12 22:09:00 2009 +0100
use the same service fd shutdown logic when destructing module and changing profile
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 9414eee..3498088 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -1412,10 +1412,9 @@ static int add_source(struct userdata *u) {
return 0;
}
-static int init_bt(struct userdata *u) {
+static void shutdown_bt(struct userdata *u) {
pa_assert(u);
- /* shutdown bt */
if (u->stream_fd >= 0) {
pa_close(u->stream_fd);
u->stream_fd = -1;
@@ -1425,15 +1424,21 @@ static int init_bt(struct userdata *u) {
pa_close(u->service_fd);
u->service_fd = -1;
}
+}
+
+static int init_bt(struct userdata *u) {
+ pa_assert(u);
+
+ shutdown_bt(u);
u->stream_write_type = u->stream_read_type = 0;
- u->service_write_type = u->stream_write_type = 0;
+ u->service_write_type = u->service_write_type = 0;
- /* connect to the bluez audio service */
if ((u->service_fd = bt_audio_service_open()) < 0) {
pa_log_error("Couldn't connect to bluetooth audio service");
return -1;
}
+
pa_log_debug("Connected to the bluetooth audio service");
return 0;
@@ -1576,7 +1581,7 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
}
stop_thread(u);
- init_bt(u);
+ shutdown_bt(u);
if (u->write_memchunk.memblock) {
pa_memblock_unref(u->write_memchunk.memblock);
@@ -1586,6 +1591,7 @@ static int card_set_profile(pa_card *c, pa_card_profile *new_profile) {
u->profile = *d;
u->sample_spec = u->requested_sample_spec;
+ init_bt(u);
init_profile(u);
if (u->sink || u->source)
@@ -1923,11 +1929,7 @@ void pa__done(pa_module *m) {
if (u->read_smoother)
pa_smoother_free(u->read_smoother);
- if (u->stream_fd >= 0)
- pa_close(u->stream_fd);
-
- if (u->service_fd >= 0)
- pa_close(u->service_fd);
+ shutdown_bt(u);
if (u->device)
pa_bluetooth_device_free(u->device);
commit 87e134277dd54b55a62284844e3f35d9ffd5f49c
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 12 22:09:17 2009 +0100
don't claim that profile changes are always successful
diff --git a/src/pulsecore/card.c b/src/pulsecore/card.c
index 8e1ba53..515d1f9 100644
--- a/src/pulsecore/card.c
+++ b/src/pulsecore/card.c
@@ -229,7 +229,7 @@ int pa_card_set_profile(pa_card *c, const char *name) {
pa_subscription_post(c->core, PA_SUBSCRIPTION_EVENT_CARD|PA_SUBSCRIPTION_EVENT_CHANGE, c->index);
- pa_log_info("Successfully changed profile of card %u \"%s\" to %s", c->index, c->name, profile->name);
+ pa_log_info("Changed profile of card %u \"%s\" to %s", c->index, c->name, profile->name);
c->active_profile = profile;
commit 6bb3dc82ba0aa53168c21c9b82cb86cc11563640
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 12 22:52:02 2009 +0100
don't try to recycle rtpoll objects
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 3498088..6daae83 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -1522,6 +1522,13 @@ static void stop_thread(struct userdata *u) {
pa_source_unref(u->source);
u->source = NULL;
}
+
+ pa_thread_mq_done(&u->thread_mq);
+
+ if (u->rtpoll) {
+ pa_rtpoll_free(u->rtpoll);
+ u->rtpoll = NULL;
+ }
}
static int start_thread(struct userdata *u) {
@@ -1529,6 +1536,7 @@ static int start_thread(struct userdata *u) {
pa_assert(u);
pa_assert(!u->thread);
+ pa_assert(!u->rtpoll);
pa_assert(!u->rtpoll_item);
if (USE_SCO_OVER_PCM(u)) {
@@ -1537,6 +1545,9 @@ static int start_thread(struct userdata *u) {
return 0;
}
+ u->rtpoll = pa_rtpoll_new();
+ pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll);
+
u->rtpoll_item = pa_rtpoll_item_new(u->rtpoll, PA_RTPOLL_NEVER, 1);
pollfd = pa_rtpoll_item_get_pollfd(u->rtpoll_item, NULL);
pollfd->fd = u->stream_fd;
@@ -1764,8 +1775,6 @@ int pa__init(pa_module* m) {
u->service_fd = -1;
u->stream_fd = -1;
u->read_smoother = pa_smoother_new(PA_USEC_PER_SEC, PA_USEC_PER_SEC*2, TRUE, 10);
- u->rtpoll = pa_rtpoll_new();
- pa_thread_mq_init(&u->thread_mq, u->core->mainloop, u->rtpoll);
u->sample_spec = m->core->default_sample_spec;
u->modargs = ma;
@@ -1921,11 +1930,6 @@ void pa__done(pa_module *m) {
if (u->card)
pa_card_free(u->card);
- pa_thread_mq_done(&u->thread_mq);
-
- if (u->rtpoll)
- pa_rtpoll_free(u->rtpoll);
-
if (u->read_smoother)
pa_smoother_free(u->read_smoother);
diff --git a/src/pulsecore/rtpoll.c b/src/pulsecore/rtpoll.c
index 543262b..183d97c 100644
--- a/src/pulsecore/rtpoll.c
+++ b/src/pulsecore/rtpoll.c
@@ -156,7 +156,7 @@ void pa_rtpoll_install(pa_rtpoll *p) {
pa_assert(p);
pa_assert(!p->installed);
- p->installed = 1;
+ p->installed = TRUE;
#ifdef HAVE_PPOLL
# ifdef __linux__
commit 4fab9bf23874eccb36e9af5c41ce1a5f2b9c2330
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 12 23:14:24 2009 +0100
add full set of argument description
diff --git a/src/modules/module-x11-publish.c b/src/modules/module-x11-publish.c
index c6c5bac..fb27eba 100644
--- a/src/modules/module-x11-publish.c
+++ b/src/modules/module-x11-publish.c
@@ -55,7 +55,11 @@ PA_MODULE_AUTHOR("Lennart Poettering");
PA_MODULE_DESCRIPTION("X11 credential publisher");
PA_MODULE_VERSION(PACKAGE_VERSION);
PA_MODULE_LOAD_ONCE(FALSE);
-PA_MODULE_USAGE("display=<X11 display>");
+PA_MODULE_USAGE(
+ "display=<X11 display> "
+ "sink=<Sink to publish> "
+ "source=<Source to publish> "
+ "cookie=<Cookie file to publish> ");
static const char* const valid_modargs[] = {
"display",
commit 433751ff258b78f23a8e82b06f54522f820d3230
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 02:39:07 2009 +0100
add a module that forwards cork/uncork requests to X11 as fake pause/resume key events
diff --git a/configure.ac b/configure.ac
index 9189dd0..fbe134c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -485,7 +485,7 @@ AC_ARG_ENABLE([x11],
[x11=auto])
if test "x${x11}" != xno ; then
- PKG_CHECK_MODULES(X11, [ x11 ice sm ],
+ PKG_CHECK_MODULES(X11, [ x11 ice sm xtst ],
HAVE_X11=1,
[
HAVE_X11=0
diff --git a/src/Makefile.am b/src/Makefile.am
index fc47803..811b120 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -937,7 +937,8 @@ if HAVE_X11
modlibexec_LTLIBRARIES += \
module-x11-bell.la \
module-x11-publish.la \
- module-x11-xsmp.la
+ module-x11-xsmp.la \
+ module-x11-cork-request.la
endif
if HAVE_OSS
@@ -1059,6 +1060,7 @@ SYMDEF_FILES = \
modules/module-x11-bell-symdef.h \
modules/module-x11-publish-symdef.h \
modules/module-x11-xsmp-symdef.h \
+ modules/module-x11-cork-request-symdef.h \
modules/oss/module-oss-symdef.h \
modules/alsa/module-alsa-sink-symdef.h \
modules/alsa/module-alsa-source-symdef.h \
@@ -1247,6 +1249,11 @@ module_x11_xsmp_la_CFLAGS = $(AM_CFLAGS) $(X11_CFLAGS)
module_x11_xsmp_la_LDFLAGS = $(MODULE_LDFLAGS)
module_x11_xsmp_la_LIBADD = $(AM_LIBADD) $(X11_LIBS) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+module_x11_cork_request_la_SOURCES = modules/module-x11-cork-request.c
+module_x11_cork_request_la_CFLAGS = $(AM_CFLAGS) $(X11_CFLAGS)
+module_x11_cork_request_la_LDFLAGS = $(MODULE_LDFLAGS)
+module_x11_cork_request_la_LIBADD = $(AM_LIBADD) $(X11_LIBS) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecommon- at PA_MAJORMINORMICRO@.la libpulse.la
+
# OSS
liboss_util_la_SOURCES = modules/oss/oss-util.c modules/oss/oss-util.h
diff --git a/src/daemon/start-pulseaudio-x11.in b/src/daemon/start-pulseaudio-x11.in
index 3cccc4d..391a6d3 100755
--- a/src/daemon/start-pulseaudio-x11.in
+++ b/src/daemon/start-pulseaudio-x11.in
@@ -24,6 +24,7 @@ set -e
if [ x"$DISPLAY" != x ] ; then
@PACTL_BINARY@ load-module module-x11-publish "display=$DISPLAY" > /dev/null
+ @PACTL_BINARY@ load-module module-x11-cork-request "display=$DISPLAY" > /dev/null
if [ x"$SESSION_MANAGER" != x ] ; then
@PACTL_BINARY@ load-module module-x11-xsmp "display=$DISPLAY session_manager=$SESSION_MANAGER" > /dev/null
diff --git a/src/modules/module-x11-cork-request.c b/src/modules/module-x11-cork-request.c
new file mode 100644
index 0000000..0c9aedf
--- /dev/null
+++ b/src/modules/module-x11-cork-request.c
@@ -0,0 +1,189 @@
+/***
+ This file is part of PulseAudio.
+
+ Copyright 2009 Lennart Poettering
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with PulseAudio; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <X11/Xlib.h>
+#include <X11/extensions/XTest.h>
+#include <X11/XF86keysym.h>
+#include <X11/keysym.h>
+
+#include <pulse/util.h>
+#include <pulse/xmalloc.h>
+
+#include <pulsecore/module.h>
+#include <pulsecore/modargs.h>
+#include <pulsecore/log.h>
+#include <pulsecore/x11wrap.h>
+#include <pulsecore/core-util.h>
+
+#include "module-x11-cork-request-symdef.h"
+
+PA_MODULE_AUTHOR("Lennart Poettering");
+PA_MODULE_DESCRIPTION("Synthesize X11 media key events when cork/uncork is requested");
+PA_MODULE_VERSION(PACKAGE_VERSION);
+PA_MODULE_LOAD_ONCE(FALSE);
+PA_MODULE_USAGE("display=<X11 display>");
+
+static const char* const valid_modargs[] = {
+ "display",
+ NULL
+};
+
+struct userdata {
+ pa_module *module;
+
+ pa_x11_wrapper *x11_wrapper;
+ pa_x11_client *x11_client;
+
+ pa_hook_slot *hook_slot;
+};
+
+static void x11_kill_cb(pa_x11_wrapper *w, void *userdata) {
+ struct userdata *u = userdata;
+
+ pa_assert(w);
+ pa_assert(u);
+ pa_assert(u->x11_wrapper == w);
+
+ if (u->x11_client) {
+ pa_x11_client_free(u->x11_client);
+ u->x11_client = NULL;
+ }
+
+ if (u->x11_wrapper) {
+ pa_x11_wrapper_unref(u->x11_wrapper);
+ u->x11_wrapper = NULL;
+ }
+
+ pa_module_unload_request(u->module, TRUE);
+}
+
+static pa_hook_result_t sink_input_send_event_hook_cb(
+ pa_core *c,
+ pa_sink_input_send_event_hook_data *data,
+ struct userdata *u) {
+
+ KeySym sym;
+ KeyCode code;
+ Display *display;
+
+ pa_assert(c);
+ pa_assert(data);
+ pa_assert(u);
+
+ if (pa_streq(data->event, PA_STREAM_EVENT_REQUEST_CORK))
+ sym = XF86XK_AudioPause;
+ else if (pa_streq(data->event, PA_STREAM_EVENT_REQUEST_UNCORK))
+ sym = XF86XK_AudioPlay;
+ else
+ return PA_HOOK_OK;
+
+ pa_log_debug("Triggering X11 keysym: %s", XKeysymToString(sym));
+
+ display = pa_x11_wrapper_get_display(u->x11_wrapper);
+ code = XKeysymToKeycode(display, sym);
+
+ XTestFakeKeyEvent(display, code, True, CurrentTime);
+ XSync(display, False);
+
+ XTestFakeKeyEvent(display, code, False, CurrentTime);
+ XSync(display, False);
+
+ return PA_HOOK_OK;
+}
+
+int pa__init(pa_module *m) {
+ struct userdata *u;
+ pa_modargs *ma;
+ int xtest_event_base, xtest_error_base;
+ int major_version, minor_version;
+
+ pa_assert(m);
+
+ if (!(ma = pa_modargs_new(m->argument, valid_modargs))) {
+ pa_log("failed to parse module arguments");
+ goto fail;
+ }
+
+ m->userdata = u = pa_xnew0(struct userdata, 1);
+ u->module = m;
+
+ if (!(u->x11_wrapper = pa_x11_wrapper_get(m->core, pa_modargs_get_value(ma, "display", NULL))))
+ goto fail;
+
+ if (!XTestQueryExtension(
+ pa_x11_wrapper_get_display(u->x11_wrapper),
+ &xtest_event_base, &xtest_error_base,
+ &major_version, &minor_version)) {
+
+ pa_log("XTest extension not supported.");
+ goto fail;
+ }
+
+ pa_log_debug("XTest %i.%i supported.", major_version, minor_version);
+
+ u->x11_client = pa_x11_client_new(u->x11_wrapper, NULL, x11_kill_cb, u);
+
+ u->hook_slot = pa_hook_connect(
+ &m->core->hooks[PA_CORE_HOOK_SINK_INPUT_SEND_EVENT],
+ PA_HOOK_NORMAL,
+ (pa_hook_cb_t) sink_input_send_event_hook_cb, u);
+
+ pa_modargs_free(ma);
+
+ return 0;
+
+fail:
+ if (ma)
+ pa_modargs_free(ma);
+
+ pa__done(m);
+
+ return -1;
+}
+
+void pa__done(pa_module*m) {
+ struct userdata*u;
+
+ pa_assert(m);
+
+ if (!(u = m->userdata))
+ return;
+
+ if (u->x11_client)
+ pa_x11_client_free(u->x11_client);
+
+ if (u->x11_wrapper)
+ pa_x11_wrapper_unref(u->x11_wrapper);
+
+ if (u->hook_slot)
+ pa_hook_slot_free(u->hook_slot);
+
+ pa_xfree(u);
+}
commit 62818b8e57787f3b717443e72cb6dd28c4c0d4fd
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 15:48:34 2009 +0100
fix aiff channel mapping for 6 channels
diff --git a/src/pulse/channelmap.c b/src/pulse/channelmap.c
index 983b897..82e36c0 100644
--- a/src/pulse/channelmap.c
+++ b/src/pulse/channelmap.c
@@ -217,10 +217,10 @@ pa_channel_map* pa_channel_map_init_auto(pa_channel_map *m, unsigned channels, p
case 6:
m->map[0] = PA_CHANNEL_POSITION_FRONT_LEFT;
- m->map[1] = PA_CHANNEL_POSITION_SIDE_LEFT;
+ m->map[1] = PA_CHANNEL_POSITION_REAR_LEFT;
m->map[2] = PA_CHANNEL_POSITION_FRONT_CENTER;
m->map[3] = PA_CHANNEL_POSITION_FRONT_RIGHT;
- m->map[4] = PA_CHANNEL_POSITION_SIDE_RIGHT;
+ m->map[4] = PA_CHANNEL_POSITION_REAR_RIGHT;
m->map[5] = PA_CHANNEL_POSITION_LFE;
return m;
commit 15e9b968e1fe67eef272803c80bbecc8463c3c89
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 17:59:53 2009 +0100
we reinit proplist since the server will copy from client proplist anyway
diff --git a/src/pulse/scache.c b/src/pulse/scache.c
index c96c42a..a7e3cd8 100644
--- a/src/pulse/scache.c
+++ b/src/pulse/scache.c
@@ -66,10 +66,8 @@ int pa_stream_connect_upload(pa_stream *s, size_t length) {
pa_tagstruct_put_channel_map(t, &s->channel_map);
pa_tagstruct_putu32(t, (uint32_t) length);
- if (s->context->version >= 13) {
- pa_init_proplist(s->proplist);
+ if (s->context->version >= 13)
pa_tagstruct_put_proplist(t, s->proplist);
- }
pa_pstream_send_tagstruct(s->context->pstream, t);
pa_pdispatch_register_reply(s->context->pdispatch, tag, DEFAULT_TIMEOUT, pa_create_stream_callback, s, NULL);
commit c0fb91db545774ec45f208a6f771c22a0b153637
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 18:01:00 2009 +0100
drop check for PA_PROP_APPLICATION_NAME since often enough we can deduce this better from g_get_application_name()
diff --git a/src/pulse/context.c b/src/pulse/context.c
index 8105091..8686e0d 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -129,9 +129,6 @@ pa_context *pa_context_new_with_proplist(pa_mainloop_api *mainloop, const char *
pa_init_i18n();
- if (!name && !pa_proplist_contains(p, PA_PROP_APPLICATION_NAME))
- return NULL;
-
c = pa_xnew(pa_context, 1);
PA_REFCNT_INIT(c);
commit 44bca66c5929e63bb39ed68420a74c97523b411f
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 18:02:47 2009 +0100
make PA_GCC_PACKED and PA_GCC_MALLOC actually work
diff --git a/src/modules/module-card-restore.c b/src/modules/module-card-restore.c
index 4dffd36..909c095 100644
--- a/src/modules/module-card-restore.c
+++ b/src/modules/module-card-restore.c
@@ -70,10 +70,10 @@ struct userdata {
#define ENTRY_VERSION 1
-struct entry PA_GCC_PACKED {
+struct entry {
uint8_t version;
char profile[PA_NAME_MAX];
-};
+} PA_GCC_PACKED ;
static void save_time_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *tv, void *userdata) {
struct userdata *u = userdata;
diff --git a/src/modules/module-device-restore.c b/src/modules/module-device-restore.c
index 7c56c24..e6a4881 100644
--- a/src/modules/module-device-restore.c
+++ b/src/modules/module-device-restore.c
@@ -81,12 +81,12 @@ struct userdata {
#define ENTRY_VERSION 1
-struct entry PA_GCC_PACKED {
+struct entry {
uint8_t version;
pa_bool_t muted:1;
pa_channel_map channel_map;
pa_cvolume volume;
-};
+} PA_GCC_PACKED;
static void save_time_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *tv, void *userdata) {
struct userdata *u = userdata;
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 2dd2045..434dc7a 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -93,7 +93,7 @@ struct userdata {
#define ENTRY_VERSION 1
-struct entry PA_GCC_PACKED {
+struct entry {
uint8_t version;
pa_bool_t muted_valid:1, relative_volume_valid:1, absolute_volume_valid:1, device_valid:1;
pa_bool_t muted:1;
@@ -101,7 +101,7 @@ struct entry PA_GCC_PACKED {
pa_cvolume relative_volume;
pa_cvolume absolute_volume;
char device[PA_NAME_MAX];
-};
+} PA_GCC_PACKED;
enum {
SUBCOMMAND_TEST,
diff --git a/src/pulse/gccmacro.h b/src/pulse/gccmacro.h
index 0b1a1a6..0f751c0 100644
--- a/src/pulse/gccmacro.h
+++ b/src/pulse/gccmacro.h
@@ -88,7 +88,7 @@
#endif
#ifndef PA_GCC_PACKED
-#ifdef __GNUCC__
+#ifdef __GNUC__
#define PA_GCC_PACKED __attribute__ ((packed))
#else
/** Structure shall be packed in memory **/
@@ -109,7 +109,7 @@
#endif
#ifndef PA_GCC_MALLOC
-#ifdef __GNUCC__
+#ifdef __GNUC__
#define PA_GCC_MALLOC __attribute__ ((malloc))
#else
/** Macro for usage of GCC's malloc attribute */
diff --git a/src/pulsecore/shm.c b/src/pulsecore/shm.c
index c59d247..b8c5f78 100644
--- a/src/pulsecore/shm.c
+++ b/src/pulsecore/shm.c
@@ -70,14 +70,14 @@
/* We now put this SHM marker at the end of each segment. It's
* optional, to not require a reboot when upgrading, though */
-struct shm_marker PA_GCC_PACKED {
+struct shm_marker {
pa_atomic_t marker; /* 0xbeefcafe */
pa_atomic_t pid;
uint64_t _reserved1;
uint64_t _reserved2;
uint64_t _reserved3;
uint64_t _reserved4;
-};
+} PA_GCC_PACKED;
static char *segment_name(char *fn, size_t l, unsigned id) {
pa_snprintf(fn, l, "/pulse-shm-%u", id);
commit 689e6f8a811e9fb00928bc57f2acbb859ac3923a
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 18:03:21 2009 +0100
add definition for GCC style weak references
diff --git a/src/pulse/gccmacro.h b/src/pulse/gccmacro.h
index 0f751c0..8d9d4f0 100644
--- a/src/pulse/gccmacro.h
+++ b/src/pulse/gccmacro.h
@@ -117,4 +117,10 @@
#endif
#endif
+#ifndef PA_GCC_WEAKREF
+#ifdef __GNUC__
+#define PA_GCC_WEAKREF(x) __attribute__((weakref(#x)));
+#endif
+#endif
+
#endif
commit f863756b430bed8cd43c31535eda5d973abbc1b1
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 18:06:30 2009 +0100
make PULSE_PROP env vars non-overriding but introduce PULSE_PROP_OVERRIDE for allowing overriding
diff --git a/src/pulsecore/proplist-util.c b/src/pulsecore/proplist-util.c
index 8a447cf..ae8e080 100644
--- a/src/pulsecore/proplist-util.c
+++ b/src/pulsecore/proplist-util.c
@@ -58,18 +58,27 @@ void pa_init_proplist(pa_proplist *p) {
for (e = environ; *e; e++) {
if (pa_startswith(*e, "PULSE_PROP_")) {
- size_t kl = strcspn(*e+11, "=");
+ size_t kl, skip;
char *k;
+ pa_bool_t override;
- if ((*e)[11+kl] != '=')
- continue;
+ if (pa_startswith(*e, "PULSE_PROP_OVERRIDE_")) {
+ skip = 20;
+ override = TRUE;
+ } else {
+ skip = 11;
+ override = FALSE;
+ }
+
+ kl = strcspn(*e+skip, "=");
- if (!pa_utf8_valid(*e+11+kl+1))
+ if ((*e)[skip+kl] != '=')
continue;
- k = pa_xstrndup(*e+11, kl);
+ k = pa_xstrndup(*e+skip, kl);
- pa_proplist_sets(p, k, *e+11+kl+1);
+ if (override || !pa_proplist_contains(p, k))
+ pa_proplist_sets(p, k, *e+skip+kl+1);
pa_xfree(k);
}
}
@@ -79,6 +88,15 @@ void pa_init_proplist(pa_proplist *p) {
pa_proplist *t;
if ((t = pa_proplist_from_string(pp))) {
+ pa_proplist_update(p, PA_UPDATE_MERGE, t);
+ pa_proplist_free(t);
+ }
+ }
+
+ if ((pp = getenv("PULSE_PROP_OVERRIDE"))) {
+ pa_proplist *t;
+
+ if ((t = pa_proplist_from_string(pp))) {
pa_proplist_update(p, PA_UPDATE_REPLACE, t);
pa_proplist_free(t);
}
commit e954a89d89a88774a7a8ebb32f08f9b0f377d4fe
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 18:19:10 2009 +0100
properly read icon/application name/display from gtk/glib/gdk
diff --git a/configure.ac b/configure.ac
index fbe134c..e809839 100644
--- a/configure.ac
+++ b/configure.ac
@@ -721,6 +721,45 @@ AC_SUBST(GLIB20_LIBS)
AC_SUBST(HAVE_GLIB20)
AM_CONDITIONAL([HAVE_GLIB20], [test "x$HAVE_GLIB20" = x1])
+if test "x$HAVE_GLIB20" = x1 ; then
+ AC_DEFINE([HAVE_GLIB], 1, [Have GLIB?])
+fi
+
+#### GTK2 support (optional) ####
+
+AC_ARG_ENABLE([gtk2],
+ AS_HELP_STRING([--disable-gtk2],[Disable optional Gtk+ 2 support]),
+ [
+ case "${enableval}" in
+ yes) gtk2=yes ;;
+ no) gtk2=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --disable-gtk2) ;;
+ esac
+ ],
+ [gtk2=auto])
+
+if test "x${gtk2}" != xno ; then
+ PKG_CHECK_MODULES(GTK20, [ gtk+-2.0 >= 2.4.0 ],
+ HAVE_GTK20=1,
+ [
+ HAVE_GTK20=0
+ if test "x$gtk2" = xyes ; then
+ AC_MSG_ERROR([*** Gtk+ 2 support not found])
+ fi
+ ])
+else
+ HAVE_GTK20=0
+fi
+
+AC_SUBST(GTK20_CFLAGS)
+AC_SUBST(GTK20_LIBS)
+AC_SUBST(HAVE_GTK20)
+AM_CONDITIONAL([HAVE_GTK20], [test "x$HAVE_GTK20" = x1])
+
+if test "x$HAVE_GTK20" = x1 ; then
+ AC_DEFINE([HAVE_GTK], 1, [Have GTK?])
+fi
+
#### GConf support (optional) ####
AC_ARG_ENABLE([gconf],
diff --git a/src/Makefile.am b/src/Makefile.am
index 811b120..f385c0a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -308,6 +308,11 @@ TESTS_BINARIES += \
mainloop-test-glib
endif
+if HAVE_GTK20
+TESTS_BINARIES += \
+ gtk-test
+endif
+
if BUILD_TESTS_DEFAULT
noinst_PROGRAMS = $(TESTS_BINARIES)
else
@@ -504,6 +509,11 @@ prioq_test_LDADD = $(AM_LDADD) libpulsecore- at PA_MAJORMINORMICRO@.la libpulsecomm
prioq_test_CFLAGS = $(AM_CFLAGS) $(LIBOIL_CFLAGS)
prioq_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) $(LIBOIL_LIBS)
+gtk_test_SOURCES = tests/gtk-test.c
+gtk_test_LDADD = $(AM_LDADD) libpulse.la libpulse-mainloop-glib.la
+gtk_test_CFLAGS = $(AM_CFLAGS) $(GTK20_CFLAGS)
+gtk_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) $(GTK20_LIBS)
+
###################################
# Common library #
###################################
@@ -571,6 +581,9 @@ libpulsecommon_ at PA_MAJORMINORMICRO@_la_CFLAGS = $(AM_CFLAGS)
libpulsecommon_ at PA_MAJORMINORMICRO@_la_LDFLAGS = $(AM_LDFLAGS) -avoid-version
libpulsecommon_ at PA_MAJORMINORMICRO@_la_LIBADD = $(AM_LIBADD) $(LIBWRAP_LIBS) $(WINSOCK_LIBS) $(LTLIBICONV)
+# proplist-util.h uses these header files, but not the library itself!
+libpulsecommon_ at PA_MAJORMINORMICRO@_la_CFLAGS += $(GLIB20_CFLAGS) $(GTK20_CFLAGS)
+
## Please note that libpulsecommon implicitly also depends on<
## libpulse! i.e. we have a cyclic dependancy here. Which is intended
## since libpulse only includes stable, official APIs, while
diff --git a/src/pulsecore/proplist-util.c b/src/pulsecore/proplist-util.c
index ae8e080..bdae0e6 100644
--- a/src/pulsecore/proplist-util.c
+++ b/src/pulsecore/proplist-util.c
@@ -34,6 +34,7 @@
extern char **environ;
#endif
+#include <pulse/gccmacro.h>
#include <pulse/proplist.h>
#include <pulse/utf8.h>
#include <pulse/xmalloc.h>
@@ -41,8 +42,64 @@ extern char **environ;
#include <pulsecore/core-util.h>
+#if defined(HAVE_GLIB) && defined(PA_GCC_WEAKREF)
+#include <glib.h>
+static G_CONST_RETURN gchar* _g_get_application_name(void) PA_GCC_WEAKREF(g_get_application_name);
+#endif
+
+#if defined(HAVE_GTK) && defined(PA_GCC_WEAKREF)
+#include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+static G_CONST_RETURN gchar* _gtk_window_get_default_icon_name(void) PA_GCC_WEAKREF(gtk_window_get_default_icon_name);
+static Display *_gdk_display PA_GCC_WEAKREF(gdk_display);
+#endif
+
#include "proplist-util.h"
+static void add_glib_properties(pa_proplist *p) {
+
+#if defined(HAVE_GLIB) && defined(PA_GCC_WEAKREF)
+
+ if (!pa_proplist_contains(p, PA_PROP_APPLICATION_NAME))
+ if (_g_get_application_name) {
+ const gchar *t;
+
+ /* We ignore the tiny race condition here. */
+
+ if ((t = _g_get_application_name()))
+ pa_proplist_sets(p, PA_PROP_APPLICATION_NAME, t);
+ }
+
+#endif
+}
+
+static void add_gtk_properties(pa_proplist *p) {
+
+#if defined(HAVE_GTK) && defined(PA_GCC_WEAKREF)
+
+ if (!pa_proplist_contains(p, PA_PROP_APPLICATION_ICON_NAME))
+ if (_gtk_window_get_default_icon_name) {
+ const gchar *t;
+
+ /* We ignore the tiny race condition here. */
+
+ if ((t = _gtk_window_get_default_icon_name()))
+ pa_proplist_sets(p, PA_PROP_APPLICATION_ICON_NAME, t);
+ }
+
+ if (!pa_proplist_contains(p, PA_PROP_WINDOW_X11_DISPLAY))
+ if (&_gdk_display && _gdk_display) {
+ const char *t;
+
+ /* We ignore the tiny race condition here. */
+
+ if ((t = DisplayString(_gdk_display)))
+ pa_proplist_sets(p, PA_PROP_WINDOW_X11_DISPLAY, t);
+ }
+
+#endif
+}
+
void pa_init_proplist(pa_proplist *p) {
char **e;
const char *pp;
@@ -135,20 +192,8 @@ void pa_init_proplist(pa_proplist *p) {
}
}
-#ifdef RTLD_NOLOAD
- if (!pa_proplist_contains(p, PA_PROP_APPLICATION_NAME)) {
- void *dl;
-
- if ((dl = dlopen("libglib-2.0", RTLD_NOLOAD))) {
- const char *(*_g_get_application_name)(void);
-
- if ((*(void**) &_g_get_application_name = dlsym(dl, "g_get_application_name")))
- pa_proplist_sets(p, PA_PROP_APPLICATION_NAME, _g_get_application_name());
-
- dlclose(dl);
- }
- }
-#endif
+ add_glib_properties(p);
+ add_gtk_properties(p);
if (!pa_proplist_contains(p, PA_PROP_APPLICATION_NAME)) {
const char *t;
diff --git a/src/tests/gtk-test.c b/src/tests/gtk-test.c
new file mode 100644
index 0000000..a2d3e69
--- /dev/null
+++ b/src/tests/gtk-test.c
@@ -0,0 +1,62 @@
+/***
+ This file is part of PulseAudio.
+
+ PulseAudio is free software; you can redistribute it and/or modify
+ it under the terms of the GNU Lesser General Public License as published
+ by the Free Software Foundation; either version 2 of the License,
+ or (at your option) any later version.
+
+ PulseAudio is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public License
+ along with PulseAudio; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
+ USA.
+***/
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+#include <glib.h>
+
+#include <pulse/context.h>
+#include <pulse/glib-mainloop.h>
+
+int main(int argc, char *argv[]) {
+
+ pa_context *c;
+ pa_glib_mainloop *m;
+ GtkWidget *window;
+ int r;
+
+ gtk_init(&argc, &argv);
+
+ g_set_application_name("This is a test");
+ gtk_window_set_default_icon_name("foobar");
+ g_setenv("PULSE_PROP_media.role", "phone", TRUE);
+
+ window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ gtk_window_set_title(GTK_WINDOW (window), g_get_application_name());
+ gtk_widget_show_all(window);
+
+ m = pa_glib_mainloop_new(NULL);
+ g_assert(m);
+
+ c = pa_context_new(pa_glib_mainloop_get_api(m), NULL);
+ g_assert(c);
+
+ r = pa_context_connect(c, NULL, 0, NULL);
+ g_assert(r == 0);
+
+ gtk_main();
+
+ pa_context_unref(c);
+ pa_glib_mainloop_free(m);
+
+ return 0;
+}
commit fffe0baf363367d9a7aea8a6b6def58323dc429a
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 21:57:00 2009 +0100
ignore gtk-test
diff --git a/src/.gitignore b/src/.gitignore
index 66738d0..4da445b 100644
--- a/src/.gitignore
+++ b/src/.gitignore
@@ -1,3 +1,4 @@
+gtk-test
prioq-test
lock-autospawn-test
*.lo
commit 9334d900e5f04982f1b55180c15c9e74005d3ea2
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 21:57:27 2009 +0100
show whether gtk+ support is enabled after configure
diff --git a/configure.ac b/configure.ac
index e809839..0124112 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1268,6 +1268,11 @@ if test "x$HAVE_SOLARIS" = "x1" ; then
ENABLE_SOLARIS=yes
fi
+ENABLE_GTK20=no
+if test "x$HAVE_GTK20" = "x1" ; then
+ ENABLE_GTK20=yes
+fi
+
ENABLE_GLIB20=no
if test "x$HAVE_GLIB20" = "x1" ; then
ENABLE_GLIB20=yes
@@ -1350,6 +1355,7 @@ echo "
Enable Alsa: ${ENABLE_ALSA}
Enable Solaris: ${ENABLE_SOLARIS}
Enable GLib 2.0: ${ENABLE_GLIB20}
+ Enable Gtk+ 2.0: ${ENABLE_GTK20}
Enable GConf: ${ENABLE_GCONF}
Enable Avahi: ${ENABLE_AVAHI}
Enable Jack: ${ENABLE_JACK}
commit dc590c7d0aced673bb395f12f39749b4ac8407fd
Author: Iain Hibbert <plunky at rya-online.net>
Date: Fri Feb 13 21:58:09 2009 +0100
Optionally disable IPv6
Closes #79
diff --git a/configure.ac b/configure.ac
index 0124112..c28a72c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1087,6 +1087,27 @@ AC_SUBST(POLKIT_LIBS)
AC_SUBST(HAVE_POLKIT)
AM_CONDITIONAL([HAVE_POLKIT], [test "x$HAVE_POLKIT" = x1])
+
+### IPv6 connection support (optional) ###
+
+AC_ARG_ENABLE([ipv6],
+ AS_HELP_STRING([--disable-ipv6],[Disable optional IPv6 support]),
+ [
+ case "${enableval}" in
+ yes) ipv6=yes ;;
+ no) ipv6=no ;;
+ *) AC_MSG_ERROR(bad value ${enableval} for --disable-ipv6) ;;
+ esac
+ ],
+ [ipv6=auto])
+
+if test "x${ipv6}" != xno ; then
+ AC_DEFINE([HAVE_IPV6], [1], [Define this to enable IPv6 connection support])
+ HAVE_IPV6=1
+else
+ HAVE_IPV6=0
+fi
+
#### OpenSSL support (optional) ####
AC_ARG_ENABLE([openssl],
@@ -1333,6 +1354,11 @@ if test "x${HAVE_OPENSSL}" = "x1" ; then
ENABLE_OPENSSL=yes
fi
+ENABLE_IPV6=no
+if test "x${HAVE_IPV6}" = "x1" ; then
+ ENABLE_IPV6=yes
+fi
+
ENABLE_PER_USER_ESOUND_SOCKET=no
if test "x$per_user_esound_socket" = "x1" ; then
ENABLE_PER_USER_ESOUND_SOCKET=yes
@@ -1366,6 +1392,7 @@ echo "
Enable TCP Wrappers: ${ENABLE_TCPWRAP}
Enable libsamplerate: ${ENABLE_LIBSAMPLERATE}
Enable PolicyKit: ${ENABLE_POLKIT}
+ Enable IPv6: ${ENABLE_IPV6}
Enable OpenSSL (for Airtunes): ${ENABLE_OPENSSL}
System User: ${PA_SYSTEM_USER}
diff --git a/src/modules/module-protocol-stub.c b/src/modules/module-protocol-stub.c
index aefd402..ca9274d 100644
--- a/src/modules/module-protocol-stub.c
+++ b/src/modules/module-protocol-stub.c
@@ -211,7 +211,9 @@ struct userdata {
#if defined(USE_TCP_SOCKETS)
pa_socket_server *socket_server_ipv4;
+# ifdef HAVE_IPV6
pa_socket_server *socket_server_ipv6;
+# endif
#else
pa_socket_server *socket_server_unix;
char *socket_path;
@@ -299,20 +301,30 @@ int pa__init(pa_module*m) {
listen_on = pa_modargs_get_value(ma, "listen", NULL);
if (listen_on) {
+# ifdef HAVE_IPV6
u->socket_server_ipv6 = pa_socket_server_new_ipv6_string(m->core->mainloop, listen_on, (uint16_t) port, TCPWRAP_SERVICE);
+# endif
u->socket_server_ipv4 = pa_socket_server_new_ipv4_string(m->core->mainloop, listen_on, (uint16_t) port, TCPWRAP_SERVICE);
} else {
+# ifdef HAVE_IPV6
u->socket_server_ipv6 = pa_socket_server_new_ipv6_any(m->core->mainloop, (uint16_t) port, TCPWRAP_SERVICE);
+# endif
u->socket_server_ipv4 = pa_socket_server_new_ipv4_any(m->core->mainloop, (uint16_t) port, TCPWRAP_SERVICE);
}
+# ifdef HAVE_IPV6
if (!u->socket_server_ipv4 && !u->socket_server_ipv6)
+# else
+ if (!u->socket_server_ipv4)
+# endif
goto fail;
if (u->socket_server_ipv4)
pa_socket_server_set_callback(u->socket_server_ipv4, socket_server_on_connection_cb, u);
+# ifdef HAVE_IPV6
if (u->socket_server_ipv6)
pa_socket_server_set_callback(u->socket_server_ipv6, socket_server_on_connection_cb, u);
+# endif
#else
@@ -358,9 +370,11 @@ int pa__init(pa_module*m) {
if (pa_socket_server_get_address(u->socket_server_ipv4, t, sizeof(t)))
pa_native_protocol_add_server_string(u->native_protocol, t);
+# ifdef HAVE_IPV6
if (u->socket_server_ipv6)
if (pa_socket_server_get_address(u->socket_server_ipv6, t, sizeof(t)))
pa_native_protocol_add_server_string(u->native_protocol, t);
+# endif
# else
if (pa_socket_server_get_address(u->socket_server_unix, t, sizeof(t)))
pa_native_protocol_add_server_string(u->native_protocol, t);
@@ -418,9 +432,11 @@ void pa__done(pa_module*m) {
if (pa_socket_server_get_address(u->socket_server_ipv4, t, sizeof(t)))
pa_native_protocol_remove_server_string(u->native_protocol, t);
+# ifdef HAVE_IPV6
if (u->socket_server_ipv6)
if (pa_socket_server_get_address(u->socket_server_ipv6, t, sizeof(t)))
pa_native_protocol_remove_server_string(u->native_protocol, t);
+# endif
# else
if (u->socket_server_unix)
if (pa_socket_server_get_address(u->socket_server_unix, t, sizeof(t)))
@@ -444,8 +460,10 @@ void pa__done(pa_module*m) {
#if defined(USE_TCP_SOCKETS)
if (u->socket_server_ipv4)
pa_socket_server_unref(u->socket_server_ipv4);
+# ifdef HAVE_IPV6
if (u->socket_server_ipv6)
pa_socket_server_unref(u->socket_server_ipv6);
+# endif
#else
if (u->socket_server_unix)
pa_socket_server_unref(u->socket_server_unix);
diff --git a/src/modules/rtp/module-rtp-recv.c b/src/modules/rtp/module-rtp-recv.c
index c118b5c..063ba72 100644
--- a/src/modules/rtp/module-rtp-recv.c
+++ b/src/modules/rtp/module-rtp-recv.c
@@ -373,11 +373,13 @@ static int mcast_socket(const struct sockaddr* sa, socklen_t salen) {
memset(&mr4, 0, sizeof(mr4));
mr4.imr_multiaddr = ((const struct sockaddr_in*) sa)->sin_addr;
r = setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mr4, sizeof(mr4));
+#ifdef HAVE_IPV6
} else {
struct ipv6_mreq mr6;
memset(&mr6, 0, sizeof(mr6));
mr6.ipv6mr_multiaddr = ((const struct sockaddr_in6*) sa)->sin6_addr;
r = setsockopt(fd, IPPROTO_IPV6, IPV6_JOIN_GROUP, &mr6, sizeof(mr6));
+#endif
}
if (r < 0) {
@@ -608,7 +610,9 @@ int pa__init(pa_module*m) {
struct userdata *u;
pa_modargs *ma = NULL;
struct sockaddr_in sa4;
+#ifdef HAVE_IPV6
struct sockaddr_in6 sa6;
+#endif
struct sockaddr *sa;
socklen_t salen;
const char *sap_address;
@@ -624,16 +628,18 @@ int pa__init(pa_module*m) {
sap_address = pa_modargs_get_value(ma, "sap_address", DEFAULT_SAP_ADDRESS);
- if (inet_pton(AF_INET6, sap_address, &sa6.sin6_addr) > 0) {
- sa6.sin6_family = AF_INET6;
- sa6.sin6_port = htons(SAP_PORT);
- sa = (struct sockaddr*) &sa6;
- salen = sizeof(sa6);
- } else if (inet_pton(AF_INET, sap_address, &sa4.sin_addr) > 0) {
+ if (inet_pton(AF_INET, sap_address, &sa4.sin_addr) > 0) {
sa4.sin_family = AF_INET;
sa4.sin_port = htons(SAP_PORT);
sa = (struct sockaddr*) &sa4;
salen = sizeof(sa4);
+#ifdef HAVE_IPV6
+ } else if (inet_pton(AF_INET6, sap_address, &sa6.sin6_addr) > 0) {
+ sa6.sin6_family = AF_INET6;
+ sa6.sin6_port = htons(SAP_PORT);
+ sa = (struct sockaddr*) &sa6;
+ salen = sizeof(sa6);
+#endif
} else {
pa_log("Invalid SAP address '%s'", sap_address);
goto fail;
diff --git a/src/modules/rtp/module-rtp-send.c b/src/modules/rtp/module-rtp-send.c
index 762cdc1..fef745a 100644
--- a/src/modules/rtp/module-rtp-send.c
+++ b/src/modules/rtp/module-rtp-send.c
@@ -177,7 +177,9 @@ int pa__init(pa_module*m) {
pa_sample_spec ss;
pa_channel_map cm;
struct sockaddr_in sa4, sap_sa4;
+#ifdef HAVE_IPV6
struct sockaddr_in6 sa6, sap_sa6;
+#endif
struct sockaddr_storage sa_dst;
pa_source_output *o = NULL;
uint8_t payload;
@@ -247,16 +249,18 @@ int pa__init(pa_module*m) {
dest = pa_modargs_get_value(ma, "destination", DEFAULT_DESTINATION);
- if (inet_pton(AF_INET6, dest, &sa6.sin6_addr) > 0) {
- sa6.sin6_family = af = AF_INET6;
- sa6.sin6_port = htons((uint16_t) port);
- sap_sa6 = sa6;
- sap_sa6.sin6_port = htons(SAP_PORT);
- } else if (inet_pton(AF_INET, dest, &sa4.sin_addr) > 0) {
+ if (inet_pton(AF_INET, dest, &sa4.sin_addr) > 0) {
sa4.sin_family = af = AF_INET;
sa4.sin_port = htons((uint16_t) port);
sap_sa4 = sa4;
sap_sa4.sin_port = htons(SAP_PORT);
+#ifdef HAVE_IPV6
+ } else if (inet_pton(AF_INET6, dest, &sa6.sin6_addr) > 0) {
+ sa6.sin6_family = af = AF_INET6;
+ sa6.sin6_port = htons((uint16_t) port);
+ sap_sa6 = sa6;
+ sap_sa6.sin6_port = htons(SAP_PORT);
+#endif
} else {
pa_log("Invalid destination '%s'", dest);
goto fail;
@@ -267,9 +271,14 @@ int pa__init(pa_module*m) {
goto fail;
}
- if (connect(fd, af == AF_INET ? (struct sockaddr*) &sa4 : (struct sockaddr*) &sa6, (socklen_t) (af == AF_INET ? sizeof(sa4) : sizeof(sa6))) < 0) {
+ if (af == AF_INET && connect(fd, (struct sockaddr*) &sa4, sizeof(sa4)) < 0) {
pa_log("connect() failed: %s", pa_cstrerror(errno));
goto fail;
+#ifdef HAVE_IPV6
+ } else if (af == AF_INET6 && connect(fd, (struct sockaddr*) &sa6, sizeof(sa6)) < 0) {
+ pa_log("connect() failed: %s", pa_cstrerror(errno));
+ goto fail;
+#endif
}
if ((sap_fd = socket(af, SOCK_DGRAM, 0)) < 0) {
@@ -277,9 +286,14 @@ int pa__init(pa_module*m) {
goto fail;
}
- if (connect(sap_fd, af == AF_INET ? (struct sockaddr*) &sap_sa4 : (struct sockaddr*) &sap_sa6, (socklen_t) (af == AF_INET ? sizeof(sap_sa4) : sizeof(sap_sa6))) < 0) {
+ if (af == AF_INET && connect(sap_fd, (struct sockaddr*) &sap_sa4, sizeof(sap_sa4)) < 0) {
+ pa_log("connect() failed: %s", pa_cstrerror(errno));
+ goto fail;
+#ifdef HAVE_IPV6
+ } else if (af == AF_INET6 && connect(sap_fd, (struct sockaddr*) &sap_sa6, sizeof(sap_sa6)) < 0) {
pa_log("connect() failed: %s", pa_cstrerror(errno));
goto fail;
+#endif
}
j = !!loop;
@@ -357,10 +371,19 @@ int pa__init(pa_module*m) {
n = pa_sprintf_malloc("PulseAudio RTP Stream on %s", pa_get_fqdn(hn, sizeof(hn)));
- p = pa_sdp_build(af,
- af == AF_INET ? (void*) &((struct sockaddr_in*) &sa_dst)->sin_addr : (void*) &((struct sockaddr_in6*) &sa_dst)->sin6_addr,
- af == AF_INET ? (void*) &sa4.sin_addr : (void*) &sa6.sin6_addr,
+ if (af == AF_INET) {
+ p = pa_sdp_build(af,
+ (void*) &((struct sockaddr_in*) &sa_dst)->sin_addr,
+ (void*) &sa4.sin_addr,
+ n, (uint16_t) port, payload, &ss);
+#ifdef HAVE_IPV6
+ } else {
+ p = pa_sdp_build(af,
+ (void*) &((struct sockaddr_in6*) &sa_dst)->sin6_addr,
+ (void*) &sa6.sin6_addr,
n, (uint16_t) port, payload, &ss);
+#endif
+ }
pa_xfree(n);
diff --git a/src/modules/rtp/sap.c b/src/modules/rtp/sap.c
index 7764f7b..b5d9df6 100644
--- a/src/modules/rtp/sap.c
+++ b/src/modules/rtp/sap.c
@@ -87,18 +87,31 @@ int pa_sap_send(pa_sap_context *c, pa_bool_t goodbye) {
return -1;
}
+#ifdef HAVE_IPV6
pa_assert(sa->sa_family == AF_INET || sa->sa_family == AF_INET6);
+#else
+ pa_assert(sa->sa_family == AF_INET);
+#endif
header = htonl(((uint32_t) 1 << 29) |
+#ifdef HAVE_IPV6
(sa->sa_family == AF_INET6 ? (uint32_t) 1 << 28 : 0) |
+#endif
(goodbye ? (uint32_t) 1 << 26 : 0) |
(c->msg_id_hash));
iov[0].iov_base = &header;
iov[0].iov_len = sizeof(header);
- iov[1].iov_base = sa->sa_family == AF_INET ? (void*) &((struct sockaddr_in*) sa)->sin_addr : (void*) &((struct sockaddr_in6*) sa)->sin6_addr;
- iov[1].iov_len = sa->sa_family == AF_INET ? 4U : 16U;
+ if (sa->sa_family == AF_INET) {
+ iov[1].iov_base = (void*) &((struct sockaddr_in*) sa)->sin_addr;
+ iov[1].iov_len = 4U;
+#ifdef HAVE_IPV6
+ } else {
+ iov[1].iov_base = (void*) &((struct sockaddr_in6*) sa)->sin6_addr;
+ iov[1].iov_len = 16U;
+#endif
+ }
iov[2].iov_base = (char*) MIME_TYPE;
iov[2].iov_len = sizeof(MIME_TYPE);
diff --git a/src/modules/rtp/sdp.c b/src/modules/rtp/sdp.c
index 59989e1..643361f 100644
--- a/src/modules/rtp/sdp.c
+++ b/src/modules/rtp/sdp.c
@@ -48,7 +48,12 @@ char *pa_sdp_build(int af, const void *src, const void *dst, const char *name, u
pa_assert(src);
pa_assert(dst);
+
+#ifdef HAVE_IPV6
pa_assert(af == AF_INET || af == AF_INET6);
+#else
+ pa_assert(af == AF_INET);
+#endif
pa_assert_se(f = pa_rtp_format_to_string(ss->format));
@@ -162,6 +167,7 @@ pa_sdp_info *pa_sdp_parse(const char *t, pa_sdp_info *i, int is_goodbye) {
((struct sockaddr_in*) &i->sa)->sin_family = AF_INET;
((struct sockaddr_in*) &i->sa)->sin_port = 0;
i->salen = sizeof(struct sockaddr_in);
+#ifdef HAVE_IPV6
} else if (pa_startswith(t, "c=IN IP6 ")) {
char a[64];
size_t k;
@@ -179,6 +185,7 @@ pa_sdp_info *pa_sdp_parse(const char *t, pa_sdp_info *i, int is_goodbye) {
((struct sockaddr_in6*) &i->sa)->sin6_family = AF_INET6;
((struct sockaddr_in6*) &i->sa)->sin6_port = 0;
i->salen = sizeof(struct sockaddr_in6);
+#endif
} else if (pa_startswith(t, "m=audio ")) {
if (i->payload > 127) {
diff --git a/src/pulsecore/inet_ntop.c b/src/pulsecore/inet_ntop.c
index 8755123..012a1a0 100644
--- a/src/pulsecore/inet_ntop.c
+++ b/src/pulsecore/inet_ntop.c
@@ -38,7 +38,9 @@
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) {
struct in_addr *in = (struct in_addr*)src;
+#ifdef HAVE_IPV6
struct in6_addr *in6 = (struct in6_addr*)src;
+#endif
assert(src && dst);
@@ -57,6 +59,7 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) {
(int)(in->s_addr >> 24) & 0xff);
#endif
break;
+#ifdef HAVE_IPV6
case AF_INET6:
pa_snprintf(dst, cnt, "%x:%x:%x:%x:%x:%x:%x:%x",
in6->s6_addr[ 0] << 8 | in6->s6_addr[ 1],
@@ -68,6 +71,7 @@ const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt) {
in6->s6_addr[12] << 8 | in6->s6_addr[13],
in6->s6_addr[14] << 8 | in6->s6_addr[15]);
break;
+#endif
default:
errno = EAFNOSUPPORT;
return NULL;
diff --git a/src/pulsecore/inet_pton.c b/src/pulsecore/inet_pton.c
index d191e55..abdfa46 100644
--- a/src/pulsecore/inet_pton.c
+++ b/src/pulsecore/inet_pton.c
@@ -38,7 +38,9 @@
int inet_pton(int af, const char *src, void *dst) {
struct in_addr *in = (struct in_addr*)dst;
+#ifdef HAVE_IPV6
struct in6_addr *in6 = (struct in6_addr*)dst;
+#endif
assert(src && dst);
@@ -48,8 +50,10 @@ int inet_pton(int af, const char *src, void *dst) {
if (in->s_addr == INADDR_NONE)
return 0;
break;
+#ifdef HAVE_IPV6
case AF_INET6:
/* FIXME */
+#endif
default:
errno = EAFNOSUPPORT;
return -1;
diff --git a/src/pulsecore/ipacl.c b/src/pulsecore/ipacl.c
index 6d5080f..312e040 100644
--- a/src/pulsecore/ipacl.c
+++ b/src/pulsecore/ipacl.c
@@ -62,7 +62,9 @@ struct acl_entry {
PA_LLIST_FIELDS(struct acl_entry);
int family;
struct in_addr address_ipv4;
+#ifdef HAVE_IPV6
struct in6_addr address_ipv6;
+#endif
int bits;
};
@@ -109,6 +111,7 @@ pa_ip_acl* pa_ip_acl_new(const char *s) {
if (e.bits < 32 && (uint32_t) (ntohl(e.address_ipv4.s_addr) << e.bits) != 0)
pa_log_warn("Host part of ACL entry '%s/%u' is not zero!", a, e.bits);
+#ifdef HAVE_IPV6
} else if (inet_pton(AF_INET6, a, &e.address_ipv6) > 0) {
e.bits = bits == (uint32_t) -1 ? 128 : (int) bits;
@@ -138,6 +141,7 @@ pa_ip_acl* pa_ip_acl_new(const char *s) {
if (t)
pa_log_warn("Host part of ACL entry '%s/%u' is not zero!", a, e.bits);
}
+#endif
} else {
pa_log_warn("Failed to parse address: %s", a);
@@ -183,14 +187,20 @@ int pa_ip_acl_check(pa_ip_acl *acl, int fd) {
if (getpeername(fd, (struct sockaddr*) &sa, &salen) < 0)
return -1;
+#ifdef HAVE_IPV6
if (sa.ss_family != AF_INET && sa.ss_family != AF_INET6)
+#else
+ if (sa.ss_family != AF_INET)
+#endif
return -1;
if (sa.ss_family == AF_INET && salen != sizeof(struct sockaddr_in))
return -1;
+#ifdef HAVE_IPV6
if (sa.ss_family == AF_INET6 && salen != sizeof(struct sockaddr_in6))
return -1;
+#endif
for (e = acl->entries; e; e = e->next) {
@@ -203,6 +213,7 @@ int pa_ip_acl_check(pa_ip_acl *acl, int fd) {
if (e->bits == 0 || /* this needs special handling because >> takes the right-hand side modulo 32 */
(ntohl(sai->sin_addr.s_addr ^ e->address_ipv4.s_addr) >> (32 - e->bits)) == 0)
return 1;
+#ifdef HAVE_IPV6
} else if (e->family == AF_INET6) {
int i, bits ;
struct sockaddr_in6 *sai = (struct sockaddr_in6*) &sa;
@@ -230,6 +241,7 @@ int pa_ip_acl_check(pa_ip_acl *acl, int fd) {
if (bits == 0)
return 1;
}
+#endif
}
}
diff --git a/src/pulsecore/socket-client.c b/src/pulsecore/socket-client.c
index 6739eff..dc23bff 100644
--- a/src/pulsecore/socket-client.c
+++ b/src/pulsecore/socket-client.c
@@ -278,7 +278,11 @@ static int sockaddr_prepare(pa_socket_client *c, const struct sockaddr *sa, size
pa_make_fd_cloexec(c->fd);
+#ifdef HAVE_IPV6
if (sa->sa_family == AF_INET || sa->sa_family == AF_INET6)
+#else
+ if (sa->sa_family == AF_INET)
+#endif
pa_make_tcp_socket_low_delay(c->fd);
else
pa_make_socket_low_delay(c->fd);
@@ -353,6 +357,7 @@ void pa_socket_client_set_callback(pa_socket_client *c, pa_socket_client_cb_t on
c->userdata = userdata;
}
+#ifdef HAVE_IPV6
pa_socket_client* pa_socket_client_new_ipv6(pa_mainloop_api *m, uint8_t address[16], uint16_t port) {
struct sockaddr_in6 sa;
@@ -367,6 +372,7 @@ pa_socket_client* pa_socket_client_new_ipv6(pa_mainloop_api *m, uint8_t address[
return pa_socket_client_new_sockaddr(m, (struct sockaddr*) &sa, sizeof(sa));
}
+#endif
#ifdef HAVE_LIBASYNCNS
@@ -470,7 +476,15 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
pa_snprintf(port, sizeof(port), "%u", (unsigned) a.port);
memset(&hints, 0, sizeof(hints));
- hints.ai_family = a.type == PA_PARSED_ADDRESS_TCP4 ? PF_INET : (a.type == PA_PARSED_ADDRESS_TCP6 ? PF_INET6 : PF_UNSPEC);
+ if (a.type == PA_PARSED_ADDRESS_TCP4)
+ hints.ai_family = PF_INET;
+#ifdef HAVE_IPV6
+ else if (a.type == PA_PARSED_ADDRESS_TCP6)
+ hints.ai_family = PF_INET6;
+#endif
+ else
+ hints.ai_family = PF_UNSPEC;
+
hints.ai_socktype = SOCK_STREAM;
#if defined(HAVE_LIBASYNCNS)
@@ -509,11 +523,13 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
struct hostent *host = NULL;
struct sockaddr_in s;
+#ifdef HAVE_IPV6
/* FIXME: PF_INET6 support */
if (hints.ai_family == PF_INET6) {
pa_log_error("IPv6 is not supported on Windows");
goto finish;
}
+#endif
host = gethostbyname(a.path_or_host);
if (!host) {
diff --git a/src/pulsecore/socket-client.h b/src/pulsecore/socket-client.h
index 9ceeadd..ed36400 100644
--- a/src/pulsecore/socket-client.h
+++ b/src/pulsecore/socket-client.h
@@ -35,7 +35,9 @@ typedef struct pa_socket_client pa_socket_client;
typedef void (*pa_socket_client_cb_t)(pa_socket_client *c, pa_iochannel*io, void *userdata);
pa_socket_client* pa_socket_client_new_ipv4(pa_mainloop_api *m, uint32_t address, uint16_t port);
+#ifdef HAVE_IPV6
pa_socket_client* pa_socket_client_new_ipv6(pa_mainloop_api *m, uint8_t address[16], uint16_t port);
+#endif
pa_socket_client* pa_socket_client_new_unix(pa_mainloop_api *m, const char *filename);
pa_socket_client* pa_socket_client_new_sockaddr(pa_mainloop_api *m, const struct sockaddr *sa, size_t salen);
pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char *a, uint16_t default_port);
diff --git a/src/pulsecore/socket-server.c b/src/pulsecore/socket-server.c
index a600e0a..19c2fd0 100644
--- a/src/pulsecore/socket-server.c
+++ b/src/pulsecore/socket-server.c
@@ -289,6 +289,7 @@ fail:
return NULL;
}
+#ifdef HAVE_IPV6
pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t address[16], uint16_t port, const char *tcpwrap_service) {
pa_socket_server *ss;
int fd = -1;
@@ -347,6 +348,7 @@ fail:
return NULL;
}
+#endif
pa_socket_server* pa_socket_server_new_ipv4_loopback(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service) {
pa_assert(m);
@@ -355,12 +357,14 @@ pa_socket_server* pa_socket_server_new_ipv4_loopback(pa_mainloop_api *m, uint16_
return pa_socket_server_new_ipv4(m, INADDR_LOOPBACK, port, tcpwrap_service);
}
+#ifdef HAVE_IPV6
pa_socket_server* pa_socket_server_new_ipv6_loopback(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service) {
pa_assert(m);
pa_assert(port > 0);
return pa_socket_server_new_ipv6(m, in6addr_loopback.s6_addr, port, tcpwrap_service);
}
+#endif
pa_socket_server* pa_socket_server_new_ipv4_any(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service) {
pa_assert(m);
@@ -369,12 +373,14 @@ pa_socket_server* pa_socket_server_new_ipv4_any(pa_mainloop_api *m, uint16_t por
return pa_socket_server_new_ipv4(m, INADDR_ANY, port, tcpwrap_service);
}
+#ifdef HAVE_IPV6
pa_socket_server* pa_socket_server_new_ipv6_any(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service) {
pa_assert(m);
pa_assert(port > 0);
return pa_socket_server_new_ipv6(m, in6addr_any.s6_addr, port, tcpwrap_service);
}
+#endif
pa_socket_server* pa_socket_server_new_ipv4_string(pa_mainloop_api *m, const char *name, uint16_t port, const char *tcpwrap_service) {
struct in_addr ipv4;
@@ -389,6 +395,7 @@ pa_socket_server* pa_socket_server_new_ipv4_string(pa_mainloop_api *m, const cha
return NULL;
}
+#ifdef HAVE_IPV6
pa_socket_server* pa_socket_server_new_ipv6_string(pa_mainloop_api *m, const char *name, uint16_t port, const char *tcpwrap_service) {
struct in6_addr ipv6;
@@ -401,6 +408,7 @@ pa_socket_server* pa_socket_server_new_ipv6_string(pa_mainloop_api *m, const cha
return NULL;
}
+#endif
static void socket_server_free(pa_socket_server*s) {
pa_assert(s);
@@ -441,6 +449,7 @@ char *pa_socket_server_get_address(pa_socket_server *s, char *c, size_t l) {
pa_assert(l > 0);
switch (s->type) {
+#ifdef HAVE_IPV6
case SOCKET_SERVER_IPV6: {
struct sockaddr_in6 sa;
socklen_t sa_len = sizeof(sa);
@@ -476,6 +485,7 @@ char *pa_socket_server_get_address(pa_socket_server *s, char *c, size_t l) {
return c;
}
+#endif
case SOCKET_SERVER_IPV4: {
struct sockaddr_in sa;
diff --git a/src/pulsecore/socket-server.h b/src/pulsecore/socket-server.h
index 1edfb43..b9a2c40 100644
--- a/src/pulsecore/socket-server.h
+++ b/src/pulsecore/socket-server.h
@@ -34,13 +34,15 @@ typedef struct pa_socket_server pa_socket_server;
pa_socket_server* pa_socket_server_new(pa_mainloop_api *m, int fd);
pa_socket_server* pa_socket_server_new_unix(pa_mainloop_api *m, const char *filename);
pa_socket_server* pa_socket_server_new_ipv4(pa_mainloop_api *m, uint32_t address, uint16_t port, const char *tcpwrap_service);
-pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t address[16], uint16_t port, const char *tcpwrap_service);
pa_socket_server* pa_socket_server_new_ipv4_loopback(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service);
-pa_socket_server* pa_socket_server_new_ipv6_loopback(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service);
pa_socket_server* pa_socket_server_new_ipv4_any(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service);
-pa_socket_server* pa_socket_server_new_ipv6_any(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service);
pa_socket_server* pa_socket_server_new_ipv4_string(pa_mainloop_api *m, const char *name, uint16_t port, const char *tcpwrap_service);
+#ifdef HAVE_IPV6
+pa_socket_server* pa_socket_server_new_ipv6(pa_mainloop_api *m, const uint8_t address[16], uint16_t port, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv6_loopback(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service);
+pa_socket_server* pa_socket_server_new_ipv6_any(pa_mainloop_api *m, uint16_t port, const char *tcpwrap_service);
pa_socket_server* pa_socket_server_new_ipv6_string(pa_mainloop_api *m, const char *name, uint16_t port, const char *tcpwrap_service);
+#endif
void pa_socket_server_unref(pa_socket_server*s);
pa_socket_server* pa_socket_server_ref(pa_socket_server *s);
diff --git a/src/pulsecore/socket-util.c b/src/pulsecore/socket-util.c
index a092002..e44f646 100644
--- a/src/pulsecore/socket-util.c
+++ b/src/pulsecore/socket-util.c
@@ -93,7 +93,9 @@ void pa_socket_peer_to_string(int fd, char *c, size_t l) {
union {
struct sockaddr sa;
struct sockaddr_in in;
+#ifdef HAVE_IPV6
struct sockaddr_in6 in6;
+#endif
#ifdef HAVE_SYS_UN_H
struct sockaddr_un un;
#endif
@@ -112,6 +114,7 @@ void pa_socket_peer_to_string(int fd, char *c, size_t l) {
ip & 0xFF,
ntohs(sa.in.sin_port));
return;
+#ifdef HAVE_IPV6
} else if (sa.sa.sa_family == AF_INET6) {
char buf[INET6_ADDRSTRLEN];
const char *res;
@@ -121,6 +124,7 @@ void pa_socket_peer_to_string(int fd, char *c, size_t l) {
pa_snprintf(c, l, "TCP/IP client from [%s]:%u", buf, ntohs(sa.in6.sin6_port));
return;
}
+#endif
#ifdef HAVE_SYS_UN_H
} else if (sa.sa.sa_family == AF_UNIX) {
pa_snprintf(c, l, "UNIX socket client");
@@ -298,8 +302,10 @@ pa_bool_t pa_socket_address_is_local(const struct sockaddr *sa) {
case AF_INET:
return ((const struct sockaddr_in*) sa)->sin_addr.s_addr == INADDR_LOOPBACK;
+#ifdef HAVE_IPV6
case AF_INET6:
return memcmp(&((const struct sockaddr_in6*) sa)->sin6_addr, &in6addr_loopback, sizeof(struct in6_addr)) == 0;
+#endif
default:
return FALSE;
@@ -311,7 +317,9 @@ pa_bool_t pa_socket_is_local(int fd) {
union {
struct sockaddr sa;
struct sockaddr_in in;
+#ifdef HAVE_IPV6
struct sockaddr_in6 in6;
+#endif
#ifdef HAVE_SYS_UN_H
struct sockaddr_un un;
#endif
diff --git a/src/tests/ipacl-test.c b/src/tests/ipacl-test.c
index bcdd469..7b7564a 100644
--- a/src/tests/ipacl-test.c
+++ b/src/tests/ipacl-test.c
@@ -30,7 +30,9 @@
int main(int argc, char *argv[]) {
struct sockaddr_in sa;
+#ifdef HAVE_IPV6
struct sockaddr_in6 sa6;
+#endif
int fd;
int r;
pa_ip_acl *acl;
@@ -87,6 +89,7 @@ int main(int argc, char *argv[]) {
close(fd);
+#ifdef HAVE_IPV6
fd = socket(PF_INET6, SOCK_STREAM, 0);
assert(fd >= 0);
@@ -129,6 +132,7 @@ int main(int argc, char *argv[]) {
pa_ip_acl_free(acl);
close(fd);
+#endif
return 0;
}
commit d447a8dbbbc1aa4e5389ae1ea9880ddde6222590
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 23:01:24 2009 +0100
document all currently known properties
diff --git a/src/pulse/proplist.h b/src/pulse/proplist.h
index 57a23d9..c0c3459 100644
--- a/src/pulse/proplist.h
+++ b/src/pulse/proplist.h
@@ -30,110 +30,163 @@
PA_C_DECL_BEGIN
-/* Defined properties:
- *
- * media.name "Guns'N'Roses: Civil War"
- * media.title "Civil War"
- * media.artist "Guns'N'Roses"
- * media.language "de_DE"
- * media.filename
- * media.icon Binary blob containing PNG icon data
- * media.icon_name Name from XDG icon naming spec
- * media.role video, music, game, event, phone, animation, production, filter, abstract, stream
- * event.id Name from XDG sound naming spec
- * event.description "Button blabla clicked" for a11y
- * event.mouse.x
- * event.mouse.y
- * event.mouse.hpos Float formatted as string in range 0..1
- * event.mouse.vpos Float formatted as string in range 0..1
- * event.mouse.button Button number following X11 ordering
- * window.name
- * window.id "org.gnome.rhytmbox.MainWindow"
- * window.icon Binary blob containing PNG icon data
- * window.icon_name Name from XDG icon naming spec
- * window.x11.display
- * window.x11.screen
- * window.x11.monitor
- * window.x11.xid
- * application.name "Rhythmbox Media Player"
- * application.id "org.gnome.rhythmbox"
- * application.version
- * application.icon Binary blob containing PNG icon data
- * application.icon_name Name from XDG icon naming spec
- * application.language
- * application.process.id
- * application.process.binary
- * application.process.user
- * application.process.host
- * application.process.machine_id D-Bus machine ID
- * device.string
- * device.api oss, alsa, sunaudio
- * device.description
- * device.bus_path
- * device.serial
- * device.vendor_product_id
- * device.class sound, modem, monitor, filter, abstract
- * device.form_factor laptop-speakers, external-speakers, telephone, tv-capture, webcam-capture, microphone-capture, headset, headphones, hands-free, car, hifi, computer, portable
- * device.connector isa, pci, usb, firewire, bluetooth
- * device.access_mode mmap, mmap_rewrite, serial
- * device.master_device
- * device.buffering.buffer_size
- * device.buffering.fragment_size
- * device.profile.name analog-stereo, analog-surround-40, iec958-stereo, ...
- * device.profile.description "Analog Stereo", ...
- */
+/** For streams: localized media name, formatted as UTF-8. e.g. "Guns'N'Roses: Civil War".*/
#define PA_PROP_MEDIA_NAME "media.name"
+
+/** For streams: localized media title if applicable, formatted as UTF-8. e.g. "Civil War" */
#define PA_PROP_MEDIA_TITLE "media.title"
+
+/** For streams: localized media artist if applicable, formatted as UTF-8. e.g. "Guns'N'Roses" */
#define PA_PROP_MEDIA_ARTIST "media.artist"
+
+/** For streams: media language if applicable, in standard POSIX format. e.g. "de_DE" */
#define PA_PROP_MEDIA_LANGUAGE "media.language"
+
+/** For streams: source filename if applicable, in URI format or local path. e.g. "/home/lennart/music/foobar.ogg" */
#define PA_PROP_MEDIA_FILENAME "media.filename"
+
+/** For streams: icon for the media. A binary blob containing PNG image data */
#define PA_PROP_MEDIA_ICON "media.icon"
+
+/** For streams: an XDG icon name for the media. e.g. "audio-x-mp3" */
#define PA_PROP_MEDIA_ICON_NAME "media.icon_name"
+
+/** For streams: logic role of this media. One of the strings "video", "music", "game", "event", "phone", "animation", "production" */
#define PA_PROP_MEDIA_ROLE "media.role"
+
+/** For event sound streams: XDG event sound name. e.g. "message-new-email" (Event sound streams are those with media.role set to "event") */
#define PA_PROP_EVENT_ID "event.id"
+
+/** For event sound streams: localized human readable one-line description of the event, formatted as UTF-8. e.g. "Email from lennart at example.com received." */
#define PA_PROP_EVENT_DESCRIPTION "event.description"
+
+/** For event sound streams: absolute horizontal mouse position on the screen if the event sound was triggered by a mouse click, integer formatted as text string. e.g. "865" */
#define PA_PROP_EVENT_MOUSE_X "event.mouse.x"
+
+/** For event sound streams: absolute vertical mouse position on the screen if the event sound was triggered by a mouse click, integer formatted as text string. e.g. "432" */
#define PA_PROP_EVENT_MOUSE_Y "event.mouse.y"
+
+/** For event sound streams: relative horizontal mouse position on the screen if the event sound was triggered by a mouse click, float formatted as text string, ranging from 0.0 (left side of the screen) to 1.0 (right side of the screen). e.g. "0.65" */
#define PA_PROP_EVENT_MOUSE_HPOS "event.mouse.hpos"
+
+/** For event sound streams: relative vertical mouse position on the screen if the event sound was triggered by a mouse click, float formatted as text string, ranging from 0.0 (top of the screen) to 1.0 (bottom of the screen). e.g. "0.43" */
#define PA_PROP_EVENT_MOUSE_VPOS "event.mouse.vpos"
+
+/** For event sound streams: mouse button that triggered the event if applicable, integer formatted as string with 0=left, 1=middle, 2=right. e.g. "0" */
#define PA_PROP_EVENT_MOUSE_BUTTON "event.mouse.button"
+
+/** For streams that belong to a window on the screen: localized window title. e.g. "Totem Music Player" */
#define PA_PROP_WINDOW_NAME "window.name"
+
+/** For streams that belong to a window on the screen: a textual id for identifying a window logically. e.g. "org.gnome.Totem.MainWindow" */
#define PA_PROP_WINDOW_ID "window.id"
+
+/** For streams that belong to a window on the screen: window icon. A binary blob containing PNG image data */
#define PA_PROP_WINDOW_ICON "window.icon"
+
+/** For streams that belong to a window on the screen: an XDG icon name for the window. e.g. "totem" */
#define PA_PROP_WINDOW_ICON_NAME "window.icon_name"
+
+/** For streams that belong to an X11 window on the screen: the X11 display string. e.g. ":0.0" */
#define PA_PROP_WINDOW_X11_DISPLAY "window.x11.display"
+
+/** For streams that belong to an X11 window on the screen: the X11 screen the window is on, an integer formatted as string. e.g. "0" */
#define PA_PROP_WINDOW_X11_SCREEN "window.x11.screen"
+
+/** For streams that belong to an X11 window on the screen: the X11 monitor the window is on, an integer formatted as string. e.g. "0" */
#define PA_PROP_WINDOW_X11_MONITOR "window.x11.monitor"
+
+/** For streams that belong to an X11 window on the screen: the window XID, an integer formatted as string. e.g. "25632" */
#define PA_PROP_WINDOW_X11_XID "window.x11.xid"
+
+/** For clients/streams: localized human readable application name. e.g. "Totem Music Player" */
#define PA_PROP_APPLICATION_NAME "application.name"
+
+/** For clients/streams: a textual id for identifying an application logically. e.g. "org.gnome.Totem" */
#define PA_PROP_APPLICATION_ID "application.id"
+
+/** For clients/streams: a version string e.g. "0.6.88" */
#define PA_PROP_APPLICATION_VERSION "application.version"
+
+/** For clients/streams: application icon. A binary blob containing PNG image data */
#define PA_PROP_APPLICATION_ICON "application.icon"
+
+/** For clients/streams: an XDG icon name for the application. e.g. "totem" */
#define PA_PROP_APPLICATION_ICON_NAME "application.icon_name"
+
+/** For clients/streams: application language if applicable, in standard POSIX format. e.g. "de_DE" */
#define PA_PROP_APPLICATION_LANGUAGE "application.language"
+
+/** For clients/streams on UNIX: application process PID, an integer formatted as string. e.g. "4711" */
#define PA_PROP_APPLICATION_PROCESS_ID "application.process.id"
+
+/** For clients/streams: application process name. e.g. "totem" */
#define PA_PROP_APPLICATION_PROCESS_BINARY "application.process.binary"
+
+/** For clients/streams: application user name. e.g. "lennart" */
#define PA_PROP_APPLICATION_PROCESS_USER "application.process.user"
+
+/** For clients/streams: host name the application runs on. e.g. "omega" */
#define PA_PROP_APPLICATION_PROCESS_HOST "application.process.host"
+
+/** For clients/streams: the D-Bus host id the application runs on. e.g. "543679e7b01393ed3e3e650047d78f6e" */
#define PA_PROP_APPLICATION_PROCESS_MACHINE_ID "application.process.machine_id"
+
+/** For devices: device string in the underlying audio layer's format. e.g. "surround51:0" */
#define PA_PROP_DEVICE_STRING "device.string"
+
+/** For devices: API this device is access with. e.g. "alsa" */
#define PA_PROP_DEVICE_API "device.api"
+
+/** For devices: localized human readable device one-line description, e.g. "Foobar Industries USB Headset 2000+ Ultra" */
#define PA_PROP_DEVICE_DESCRIPTION "device.description"
+
+/** For devices: bus path to the device in the OS' format. e.g. "/sys/bus/pci/devices/0000:00:1f.2" */
#define PA_PROP_DEVICE_BUS_PATH "device.bus_path"
+
+/** For devices: serial number if applicable. e.g. "4711-0815-1234" */
#define PA_PROP_DEVICE_SERIAL "device.serial"
+
+/** For devices: vendor/product ID if applicable. e.g. 1274:1371 */
#define PA_PROP_DEVICE_VENDOR_PRODUCT_ID "device.vendor_product_id"
+
+/** For devices: device class. One of "sound", "modem", "monitor", "filter" */
#define PA_PROP_DEVICE_CLASS "device.class"
+
+/** For devices: form factor if applicable. One of "laptop-speakers", "external-speakers", "telephone", "tv-capture", "webcam-capture", "microphone-capture", "headset", "headphones", "hands-free", "car", "hifi", "computer", "portable" */
#define PA_PROP_DEVICE_FORM_FACTOR "device.form_factor"
+
+/** For devices: connector of the device if applicable. One of "isa", "pci", "usb", "firewire", "bluetooth" */
#define PA_PROP_DEVICE_CONNECTOR "device.connector"
+
+/** For devices: access mode of the device if applicable. One of "mmap", "mmap_rewrite", "serial" */
#define PA_PROP_DEVICE_ACCESS_MODE "device.access_mode"
+
+/** For filter devices: master device id if applicable. */
#define PA_PROP_DEVICE_MASTER_DEVICE "device.master_device"
+
+/** For devices: buffer size in bytes, integer formatted as string.. */
#define PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE "device.buffering.buffer_size"
+
+/** For devices: fragment size in bytes, integer formatted as string. */
#define PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE "device.buffering.fragment_size"
+
+/** For devices: profile identifier for the profile this devices is in. e.g. "analog-stereo", "analog-surround-40", "iec958-stereo", ...*/
#define PA_PROP_DEVICE_PROFILE_NAME "device.profile.name"
+
+/** For devices: human readable one-line description of the profile this device is in. e.g. "Analog Stereo", ... */
#define PA_PROP_DEVICE_PROFILE_DESCRIPTION "device.profile.description"
+
+/** For modules: the author's name, formatted as UTF-8 string. e.g. "Lennart Poettering" */
#define PA_PROP_MODULE_AUTHOR "module.author"
+
+/** For modules: a human readable one-line description of the module's purpose formatted as UTF-8. e.g. "Frobnicate sounds with a flux compensator" */
#define PA_PROP_MODULE_DESCRIPTION "module.description"
+
+/** For modules: a human readable usage description of the module's arguments formatted as UTF-8. */
#define PA_PROP_MODULE_USAGE "module.usage"
+
+/** For modules: a version string for the module. e.g. "0.9.15" */
#define PA_PROP_MODULE_VERSION "module.version"
/** A property list object. Basically a dictionary with ASCII strings
@@ -179,17 +232,17 @@ int pa_proplist_get(pa_proplist *p, const char *key, const void **data, size_t *
/** Update mode enum for pa_proplist_update(). \since 0.9.11 */
typedef enum pa_update_mode {
- PA_UPDATE_SET,
- /*< Replace the entirey property list with the new one. Don't keep
- * any of the old data around */
+ PA_UPDATE_SET
+ /**< Replace the entirey property list with the new one. Don't keep
+ * any of the old data around */,
- PA_UPDATE_MERGE,
- /*< Merge new property list into the existing one, not replacing
+ PA_UPDATE_MERGE
+ /**< Merge new property list into the existing one, not replacing
* any old entries if they share a common key with the new
- * property list. */
+ * property list. */,
PA_UPDATE_REPLACE
- /*< Merge new property list into the existing one, replacing all
+ /**< Merge new property list into the existing one, replacing all
* old entries that share a common key with the new property
* list. */
} pa_update_mode_t;
commit 023998e3c84c3158ab9f02e26949dbcd3e048886
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 23:06:41 2009 +0100
add doxygen comment for PA_GCC_WEAKREF
diff --git a/src/pulse/gccmacro.h b/src/pulse/gccmacro.h
index 8d9d4f0..f110a74 100644
--- a/src/pulse/gccmacro.h
+++ b/src/pulse/gccmacro.h
@@ -119,6 +119,7 @@
#ifndef PA_GCC_WEAKREF
#ifdef __GNUC__
+/** Macro for usgae of GCC's weakref attribute */
#define PA_GCC_WEAKREF(x) __attribute__((weakref(#x)));
#endif
#endif
commit 6790c03f91708540da284c80d0cb72cacf41c83d
Author: Lennart Poettering <lennart at poettering.net>
Date: Sat Feb 14 00:21:36 2009 +0100
unify ALSA mixer initialization
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index c56614c..1474cfe 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1386,43 +1386,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
/* ALSA might tweak the sample spec, so recalculate the frame size */
frame_size = pa_frame_size(&ss);
- if ((err = snd_mixer_open(&u->mixer_handle, 0)) < 0)
- pa_log_warn("Error opening mixer: %s", snd_strerror(err));
- else {
- pa_bool_t found = FALSE;
-
- if (pa_alsa_prepare_mixer(u->mixer_handle, u->device_name) >= 0)
- found = TRUE;
- else {
- snd_pcm_info_t *info;
-
- snd_pcm_info_alloca(&info);
-
- if (snd_pcm_info(u->pcm_handle, info) >= 0) {
- char *md;
- int card_idx;
-
- if ((card_idx = snd_pcm_info_get_card(info)) >= 0) {
-
- md = pa_sprintf_malloc("hw:%i", card_idx);
-
- if (strcmp(u->device_name, md))
- if (pa_alsa_prepare_mixer(u->mixer_handle, md) >= 0)
- found = TRUE;
- pa_xfree(md);
- }
- }
- }
-
- if (found)
- if (!(u->mixer_elem = pa_alsa_find_elem(u->mixer_handle, "Master", "PCM", TRUE)))
- found = FALSE;
-
- if (!found) {
- snd_mixer_close(u->mixer_handle);
- u->mixer_handle = NULL;
- }
- }
+ pa_alsa_find_mixer_and_elem(u->pcm_handle, &u->mixer_handle, &u->mixer_elem);
pa_sink_new_data_init(&data);
data.driver = driver;
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 2b42d3f..192645d 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -1211,43 +1211,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
/* ALSA might tweak the sample spec, so recalculate the frame size */
frame_size = pa_frame_size(&ss);
- if ((err = snd_mixer_open(&u->mixer_handle, 0)) < 0)
- pa_log("Error opening mixer: %s", snd_strerror(err));
- else {
- pa_bool_t found = FALSE;
-
- if (pa_alsa_prepare_mixer(u->mixer_handle, u->device_name) >= 0)
- found = TRUE;
- else {
- snd_pcm_info_t* info;
-
- snd_pcm_info_alloca(&info);
-
- if (snd_pcm_info(u->pcm_handle, info) >= 0) {
- char *md;
- int card_idx;
-
- if ((card_idx = snd_pcm_info_get_card(info)) >= 0) {
-
- md = pa_sprintf_malloc("hw:%i", card_idx);
-
- if (strcmp(u->device_name, md))
- if (pa_alsa_prepare_mixer(u->mixer_handle, md) >= 0)
- found = TRUE;
- pa_xfree(md);
- }
- }
- }
-
- if (found)
- if (!(u->mixer_elem = pa_alsa_find_elem(u->mixer_handle, "Capture", "Mic", FALSE)))
- found = FALSE;
-
- if (!found) {
- snd_mixer_close(u->mixer_handle);
- u->mixer_handle = NULL;
- }
- }
+ pa_alsa_find_mixer_and_elem(u->pcm_handle, &u->mixer_handle, &u->mixer_elem);
pa_source_new_data_init(&data);
data.driver = driver;
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 5236d02..d7caa0f 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1057,6 +1057,86 @@ success:
return elem;
}
+
+int pa_alsa_find_mixer_and_elem(
+ snd_pcm_t *pcm,
+ snd_mixer_t **_m,
+ snd_mixer_elem_t **_e) {
+
+ int err;
+ snd_mixer_t *m;
+ snd_mixer_elem_t *e;
+ pa_bool_t found = FALSE;
+ const char *dev;
+
+ pa_assert(pcm);
+ pa_assert(_m);
+ pa_assert(_e);
+
+ if ((err = snd_mixer_open(&m, 0)) < 0) {
+ pa_log("Error opening mixer: %s", snd_strerror(err));
+ return -1;
+ }
+
+ /* First, try by name */
+ if ((dev = snd_pcm_name(pcm)))
+ if (pa_alsa_prepare_mixer(m, dev) >= 0)
+ found = TRUE;
+
+ /* Then, try by card index */
+ if (!found) {
+ snd_pcm_info_t* info;
+ snd_pcm_info_alloca(&info);
+
+ if (snd_pcm_info(pcm, info) >= 0) {
+ char *md;
+ int card_idx;
+
+ if ((card_idx = snd_pcm_info_get_card(info)) >= 0) {
+
+ md = pa_sprintf_malloc("hw:%i", card_idx);
+
+ if (!dev || !pa_streq(dev, md))
+ if (pa_alsa_prepare_mixer(m, md) >= 0)
+ found = TRUE;
+
+ pa_xfree(md);
+ }
+ }
+ }
+
+ if (!found) {
+ snd_mixer_close(m);
+ return -1;
+ }
+
+ switch (snd_pcm_stream(pcm)) {
+
+ case SND_PCM_STREAM_PLAYBACK:
+ e = pa_alsa_find_elem(m, "Master", "PCM", TRUE);
+ break;
+
+ case SND_PCM_STREAM_CAPTURE:
+ e = pa_alsa_find_elem(m, "Capture", "Mic", FALSE);
+ break;
+
+ default:
+ pa_assert_not_reached();
+ }
+
+ if (!e) {
+ snd_mixer_close(m);
+ return -1;
+ }
+
+ pa_assert(e && m);
+
+ *_m = m;
+ *_e = e;
+
+ return 0;
+}
+
static const snd_mixer_selem_channel_id_t alsa_channel_ids[PA_CHANNEL_POSITION_MAX] = {
[PA_CHANNEL_POSITION_MONO] = SND_MIXER_SCHN_MONO, /* The ALSA name is just an alias! */
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 8a20934..8b08339 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -54,6 +54,7 @@ int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min);
int pa_alsa_prepare_mixer(snd_mixer_t *mixer, const char *dev);
snd_mixer_elem_t *pa_alsa_find_elem(snd_mixer_t *mixer, const char *name, const char *fallback, pa_bool_t playback);
+int pa_alsa_find_mixer_and_elem(snd_pcm_t *pcm, snd_mixer_t **_m, snd_mixer_elem_t **_e);
typedef struct pa_alsa_profile_info {
pa_channel_map map;
commit a571565f86a34d4ce4f16669c021be92494e132d
Author: Lennart Poettering <lennart at poettering.net>
Date: Sun Feb 15 20:34:38 2009 +0100
don't open the alsa devices in hw:xxx mode
diff --git a/src/modules/module-detect.c b/src/modules/module-detect.c
index 9ed262d..773e1d8 100644
--- a/src/modules/module-detect.c
+++ b/src/modules/module-detect.c
@@ -100,7 +100,7 @@ static int detect_alsa(pa_core *c, int just_one) {
if (subdevice != 0)
continue;
- pa_snprintf(args, sizeof(args), "device=hw:%u", device);
+ pa_snprintf(args, sizeof(args), "device_id=%u", device);
if (!pa_module_load(c, is_sink ? "module-alsa-sink" : "module-alsa-source", args))
continue;
commit 0b8a6c66dc0dec79110f40ffa6ee791b4c557ca8
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 13 00:14:48 2009 +0200
bluetooth: fix message queue/rtpoll
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 6daae83..35338dc 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -1349,9 +1349,6 @@ static int add_sink(struct userdata *u) {
u->sink->userdata = u;
u->sink->parent.process_msg = sink_process_msg;
-
- pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
- pa_sink_set_rtpoll(u->sink, u->rtpoll);
}
/* u->sink->get_volume = sink_get_volume_cb; */
@@ -1396,9 +1393,6 @@ static int add_source(struct userdata *u) {
u->source->userdata = u;
u->source->parent.process_msg = source_process_msg;
-
- pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
- pa_source_set_rtpoll(u->source, u->rtpoll);
}
/* u->source->get_volume = source_get_volume_cb; */
@@ -1559,11 +1553,17 @@ static int start_thread(struct userdata *u) {
return -1;
}
- if (u->sink)
+ if (u->sink) {
+ pa_sink_set_asyncmsgq(u->sink, u->thread_mq.inq);
+ pa_sink_set_rtpoll(u->sink, u->rtpoll);
pa_sink_put(u->sink);
+ }
- if (u->source)
+ if (u->source) {
+ pa_source_set_asyncmsgq(u->source, u->thread_mq.inq);
+ pa_source_set_rtpoll(u->source, u->rtpoll);
pa_source_put(u->source);
+ }
return 0;
}
commit b51e6135e87221b05acb1e8796d28bec1cf06dff
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 15:20:08 2009 +0200
bluetooth: update SBC from upstream
diff --git a/src/modules/bluetooth/sbc.c b/src/modules/bluetooth/sbc.c
index 29258d0..a33ed57 100644
--- a/src/modules/bluetooth/sbc.c
+++ b/src/modules/bluetooth/sbc.c
@@ -985,7 +985,7 @@ int sbc_decode(sbc_t *sbc, void *input, int input_len, void *output,
char *ptr;
int i, ch, framelen, samples;
- if (!sbc && !input)
+ if (!sbc || !input)
return -EIO;
priv = sbc->priv;
@@ -1053,7 +1053,7 @@ int sbc_encode(sbc_t *sbc, void *input, int input_len, void *output,
const uint8_t *pcm, int16_t X[2][SBC_X_BUFFER_SIZE],
int nsamples, int nchannels);
- if (!sbc && !input)
+ if (!sbc || !input)
return -EIO;
priv = sbc->priv;
@@ -1221,6 +1221,20 @@ uint16_t sbc_get_codesize(sbc_t *sbc)
return subbands * blocks * channels * 2;
}
+const char *sbc_get_implementation_info(sbc_t *sbc)
+{
+ struct sbc_priv *priv;
+
+ if (!sbc)
+ return NULL;
+
+ priv = sbc->priv;
+ if (!priv)
+ return NULL;
+
+ return priv->enc_state.implementation_info;
+}
+
int sbc_reinit(sbc_t *sbc, unsigned long flags)
{
struct sbc_priv *priv;
diff --git a/src/modules/bluetooth/sbc.h b/src/modules/bluetooth/sbc.h
index b0a1488..f9d506b 100644
--- a/src/modules/bluetooth/sbc.h
+++ b/src/modules/bluetooth/sbc.h
@@ -89,6 +89,7 @@ int sbc_encode(sbc_t *sbc, void *input, int input_len, void *output,
int sbc_get_frame_length(sbc_t *sbc);
int sbc_get_frame_duration(sbc_t *sbc);
uint16_t sbc_get_codesize(sbc_t *sbc);
+const char *sbc_get_implementation_info(sbc_t *sbc);
void sbc_finish(sbc_t *sbc);
#ifdef __cplusplus
diff --git a/src/modules/bluetooth/sbc_primitives.c b/src/modules/bluetooth/sbc_primitives.c
index 303f3fe..6b0be3f 100644
--- a/src/modules/bluetooth/sbc_primitives.c
+++ b/src/modules/bluetooth/sbc_primitives.c
@@ -456,6 +456,7 @@ void sbc_init_primitives(struct sbc_encoder_state *state)
/* Default implementation for scale factors calculation */
state->sbc_calc_scalefactors = sbc_calc_scalefactors;
+ state->implementation_info = "Generic C";
/* X86/AMD64 optimizations */
#ifdef SBC_BUILD_WITH_MMX_SUPPORT
diff --git a/src/modules/bluetooth/sbc_primitives.h b/src/modules/bluetooth/sbc_primitives.h
index 2708c82..3d01c11 100644
--- a/src/modules/bluetooth/sbc_primitives.h
+++ b/src/modules/bluetooth/sbc_primitives.h
@@ -62,6 +62,7 @@ struct sbc_encoder_state {
void (*sbc_calc_scalefactors)(int32_t sb_sample_f[16][2][8],
uint32_t scale_factor[2][8],
int blocks, int channels, int subbands);
+ const char *implementation_info;
};
/*
diff --git a/src/modules/bluetooth/sbc_primitives_mmx.c b/src/modules/bluetooth/sbc_primitives_mmx.c
index 1870a9b..08e9ca2 100644
--- a/src/modules/bluetooth/sbc_primitives_mmx.c
+++ b/src/modules/bluetooth/sbc_primitives_mmx.c
@@ -313,6 +313,7 @@ void sbc_init_primitives_mmx(struct sbc_encoder_state *state)
if (check_mmx_support()) {
state->sbc_analyze_4b_4s = sbc_analyze_4b_4s_mmx;
state->sbc_analyze_4b_8s = sbc_analyze_4b_8s_mmx;
+ state->implementation_info = "MMX";
}
}
diff --git a/src/modules/bluetooth/sbc_primitives_neon.c b/src/modules/bluetooth/sbc_primitives_neon.c
index d9c12f9..f1bc7b4 100644
--- a/src/modules/bluetooth/sbc_primitives_neon.c
+++ b/src/modules/bluetooth/sbc_primitives_neon.c
@@ -240,6 +240,7 @@ void sbc_init_primitives_neon(struct sbc_encoder_state *state)
{
state->sbc_analyze_4b_4s = sbc_analyze_4b_4s_neon;
state->sbc_analyze_4b_8s = sbc_analyze_4b_8s_neon;
+ state->implementation_info = "NEON";
}
#endif
commit b4c391ee5eaa61c31fa297b6b3f6e3a65d662948
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Fri Feb 13 12:18:14 2009 +0200
bluetooth: don't crash on pa_thread_mq_done() if pa_init() fail
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 35338dc..748a2d4 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -1517,9 +1517,9 @@ static void stop_thread(struct userdata *u) {
u->source = NULL;
}
- pa_thread_mq_done(&u->thread_mq);
-
if (u->rtpoll) {
+ pa_thread_mq_done(&u->thread_mq);
+
pa_rtpoll_free(u->rtpoll);
u->rtpoll = NULL;
}
commit 38ded3bb31bc49664641965f856a35f432a8a956
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Fri Feb 13 15:09:16 2009 +0200
bluetooth: print SBC encoder implementation info
The encoder initialization is done lazily, so we can only get the
information once encoding start. This is abit annoying..
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 748a2d4..b8f6729 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -904,6 +904,11 @@ static int a2dp_process_render(struct userdata *u) {
(void*) p, u->write_memchunk.length,
d, left,
&written);
+
+ PA_ONCE_BEGIN {
+ pa_log_debug("Using SBC encoder implementation: %s", pa_strnull(sbc_get_implementation_info(&a2dp->sbc)));
+ } PA_ONCE_END;
+
pa_memblock_release(u->write_memchunk.memblock);
if (encoded <= 0) {
commit 05b74404813931744e1479c96f039ae2a79b0c7d
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 16:51:37 2009 +0200
pulse/context: add --enable-legacy-runtime-dir
diff --git a/configure.ac b/configure.ac
index c28a72c..2ac40cc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1220,6 +1220,12 @@ AC_SUBST(PA_SYSTEM_STATE_PATH)
# Output #
###################################
+AC_ARG_ENABLE([legacy-runtime-dir],
+ AS_HELP_STRING([--disable-legacy-runtime-dir], [Try to connect on legacy (< 0.9.12) socket paths.]))
+if test "x$enable_legacy_runtime_dir" != "xno" ; then
+ AC_DEFINE(ENABLE_LEGACY_RUNTIME_DIR, [1], [Legacy runtime dir])
+fi
+
AC_ARG_ENABLE(
[static-bins],
AS_HELP_STRING([--enable-static-bins],[Statically link executables.]),
diff --git a/src/pulse/context.c b/src/pulse/context.c
index 8686e0d..9cc1ea7 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -555,6 +555,7 @@ static void setup_context(pa_context *c, pa_iochannel *io) {
pa_context_unref(c);
}
+#if ENABLE_LEGACY_RUNTIME_DIR
static char *get_old_legacy_runtime_dir(void) {
char *p, u[128];
struct stat st;
@@ -598,10 +599,12 @@ static char *get_very_old_legacy_runtime_dir(void) {
return p;
}
-
+#endif
static pa_strlist *prepend_per_user(pa_strlist *l) {
char *ufn;
+
+#if ENABLE_LEGACY_RUNTIME_DIR
static char *legacy_dir;
/* The very old per-user instance path (< 0.9.11). This is supported only to ease upgrades */
@@ -619,6 +622,7 @@ static pa_strlist *prepend_per_user(pa_strlist *l) {
pa_xfree(p);
pa_xfree(legacy_dir);
}
+#endif
/* The per-user instance */
if ((ufn = pa_runtime_path(PA_NATIVE_DEFAULT_UNIX_SOCKET))) {
commit c1892f29de7962a95806f78719d0ff9af87b49a3
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:44:30 2009 +0100
bump required alsa version
diff --git a/configure.ac b/configure.ac
index c28a72c..ddf7a1c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -638,7 +638,7 @@ AC_ARG_ENABLE([alsa],
[alsa=auto])
if test "x${alsa}" != xno ; then
- PKG_CHECK_MODULES(ASOUNDLIB, [ alsa >= 1.0.17 ],
+ PKG_CHECK_MODULES(ASOUNDLIB, [ alsa >= 1.0.19 ],
[
HAVE_ALSA=1
AC_DEFINE([HAVE_ALSA], 1, [Have ALSA?])
@@ -646,7 +646,7 @@ if test "x${alsa}" != xno ; then
[
HAVE_ALSA=0
if test "x$alsa" = xyes ; then
- AC_MSG_ERROR([*** Needed alsa >= 1.0.17 support not found])
+ AC_MSG_ERROR([*** Needed alsa >= 1.0.19 support not found])
fi
])
else
commit c9c63c295f8f7bfa825a095d6e09b199c9eab859
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:45:06 2009 +0100
allow pa to be run in a chroot() environment tht lacks /proc
diff --git a/src/daemon/main.c b/src/daemon/main.c
index 936c214..d3e02fa 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -369,8 +369,11 @@ int main(int argc, char *argv[]) {
* value of $LD_BIND_NOW on initialization. */
pa_set_env("LD_BIND_NOW", "1");
- pa_assert_se(rp = pa_readlink("/proc/self/exe"));
- pa_assert_se(execv(rp, argv) == 0);
+
+ if ((rp = pa_readlink("/proc/self/exe")))
+ pa_assert_se(execv(rp, argv) == 0);
+ else
+ pa_log_warn("Couldn't read /proc/self/exe, cannot self execute. Running in a chroot()?");
}
#endif
commit ff58fa8870a62c88dba0fb26a77331e1f27c73a8
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:49:31 2009 +0100
simplify pa_alsa_init_proplist_pcm() a bit and include resolution bits in alsa device props
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 1474cfe..5fc3468 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1236,14 +1236,11 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
uint32_t nfrags, hwbuf_size, frag_size, tsched_size, tsched_watermark;
snd_pcm_uframes_t period_frames, tsched_frames;
size_t frame_size;
- snd_pcm_info_t *pcm_info = NULL;
int err;
pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE;
pa_usec_t usec;
pa_sink_new_data data;
- snd_pcm_info_alloca(&pcm_info);
-
pa_assert(m);
pa_assert(ma);
@@ -1378,11 +1375,6 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
if (u->use_tsched)
pa_log_info("Successfully enabled timer-based scheduling mode.");
- if ((err = snd_pcm_info(u->pcm_handle, pcm_info)) < 0) {
- pa_log("Error fetching PCM info: %s", snd_strerror(err));
- goto fail;
- }
-
/* ALSA might tweak the sample spec, so recalculate the frame size */
frame_size = pa_frame_size(&ss);
@@ -1396,7 +1388,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
pa_sink_new_data_set_sample_spec(&data, &ss);
pa_sink_new_data_set_channel_map(&data, &map);
- pa_alsa_init_proplist_pcm(m->core, data.proplist, pcm_info);
+ pa_alsa_init_proplist_pcm(m->core, data.proplist, u->pcm_handle);
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, u->device_name);
pa_proplist_setf(data.proplist, PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE, "%lu", (unsigned long) (period_frames * frame_size * nfrags));
pa_proplist_setf(data.proplist, PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE, "%lu", (unsigned long) (period_frames * frame_size));
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 192645d..1909cae 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -1071,13 +1071,10 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
uint32_t nfrags, hwbuf_size, frag_size, tsched_size, tsched_watermark;
snd_pcm_uframes_t period_frames, tsched_frames;
size_t frame_size;
- snd_pcm_info_t *pcm_info = NULL;
int err;
pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE;
pa_source_new_data data;
- snd_pcm_info_alloca(&pcm_info);
-
pa_assert(m);
ss = m->core->default_sample_spec;
@@ -1203,11 +1200,6 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
if (u->use_tsched)
pa_log_info("Successfully enabled timer-based scheduling mode.");
- if ((err = snd_pcm_info(u->pcm_handle, pcm_info)) < 0) {
- pa_log("Error fetching PCM info: %s", snd_strerror(err));
- goto fail;
- }
-
/* ALSA might tweak the sample spec, so recalculate the frame size */
frame_size = pa_frame_size(&ss);
@@ -1221,7 +1213,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
pa_source_new_data_set_sample_spec(&data, &ss);
pa_source_new_data_set_channel_map(&data, &map);
- pa_alsa_init_proplist_pcm(m->core, data.proplist, pcm_info);
+ pa_alsa_init_proplist_pcm(m->core, data.proplist, u->pcm_handle);
pa_proplist_sets(data.proplist, PA_PROP_DEVICE_STRING, u->device_name);
pa_proplist_setf(data.proplist, PA_PROP_DEVICE_BUFFERING_BUFFER_SIZE, "%lu", (unsigned long) (period_frames * frame_size * nfrags));
pa_proplist_setf(data.proplist, PA_PROP_DEVICE_BUFFERING_FRAGMENT_SIZE, "%lu", (unsigned long) (period_frames * frame_size));
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index d7caa0f..7cecfd1 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -37,6 +37,7 @@
#include <pulsecore/macro.h>
#include <pulsecore/core-util.h>
#include <pulsecore/atomic.h>
+#include <pulsecore/core-error.h>
#include "alsa-util.h"
@@ -1361,7 +1362,7 @@ void pa_alsa_init_proplist_card(pa_core *c, pa_proplist *p, int card) {
#endif
}
-void pa_alsa_init_proplist_pcm(pa_core *c, pa_proplist *p, snd_pcm_info_t *pcm_info) {
+void pa_alsa_init_proplist_pcm_info(pa_core *c, pa_proplist *p, snd_pcm_info_t *pcm_info) {
static const char * const alsa_class_table[SND_PCM_CLASS_LAST+1] = {
[SND_PCM_CLASS_GENERIC] = "generic",
@@ -1427,6 +1428,28 @@ void pa_alsa_init_proplist_pcm(pa_core *c, pa_proplist *p, snd_pcm_info_t *pcm_i
pa_proplist_sets(p, PA_PROP_DEVICE_DESCRIPTION, n);
}
+void pa_alsa_init_proplist_pcm(pa_core *c, pa_proplist *p, snd_pcm_t *pcm) {
+ snd_pcm_hw_params_t *hwparams;
+ snd_pcm_info_t *info;
+ int bits, err;
+
+ snd_pcm_hw_params_alloca(&hwparams);
+ snd_pcm_info_alloca(&info);
+
+ if ((err = snd_pcm_hw_params_current(pcm, hwparams)) < 0)
+ pa_log_warn("Error fetching hardware parameter info: %s", snd_strerror(err));
+ else {
+
+ if ((bits = snd_pcm_hw_params_get_sbits(hwparams)) >= 0)
+ pa_proplist_setf(p, "alsa.resolution_bits", "%i", bits);
+ }
+
+ if ((err = snd_pcm_info(pcm, info)) < 0)
+ pa_log_warn("Error fetching PCM info: %s", snd_strerror(err));
+ else
+ pa_alsa_init_proplist_pcm_info(c, p, info);
+}
+
int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents) {
snd_pcm_state_t state;
int err;
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 8b08339..9eab644 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -120,8 +120,9 @@ void pa_alsa_dump_status(snd_pcm_t *pcm);
void pa_alsa_redirect_errors_inc(void);
void pa_alsa_redirect_errors_dec(void);
-void pa_alsa_init_proplist_pcm(pa_core *c, pa_proplist *p, snd_pcm_info_t *pcm_info);
+void pa_alsa_init_proplist_pcm_info(pa_core *c, pa_proplist *p, snd_pcm_info_t *pcm_info);
void pa_alsa_init_proplist_card(pa_core *c, pa_proplist *p, int card);
+void pa_alsa_init_proplist_pcm(pa_core *c, pa_proplist *p, snd_pcm_t *pcm);
int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents);
commit dc1ad08a65302c537d607f29be51a0c64cddec7c
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:50:09 2009 +0100
minor optimizations
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 7cecfd1..50ba35a 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -343,7 +343,8 @@ int pa_alsa_set_hw_params(
goto finish;
if (_use_mmap) {
- if ((ret = snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_MMAP_INTERLEAVED)) < 0) {
+
+ if (snd_pcm_hw_params_set_access(pcm_handle, hwparams, SND_PCM_ACCESS_MMAP_INTERLEAVED) < 0) {
/* mmap() didn't work, fall back to interleaved */
@@ -806,8 +807,7 @@ snd_pcm_t *pa_alsa_open_by_device_string(
SND_PCM_NO_AUTO_CHANNELS|
(reformat ? 0 : SND_PCM_NO_AUTO_FORMAT))) < 0) {
pa_log_info("Error opening PCM device %s: %s", d, snd_strerror(err));
- pa_xfree(d);
- return NULL;
+ goto fail;
}
if ((err = pa_alsa_set_hw_params(pcm_handle, ss, nfrags, period_size, tsched_size, use_mmap, use_tsched, require_exact_channel_number)) < 0) {
@@ -835,9 +835,9 @@ snd_pcm_t *pa_alsa_open_by_device_string(
}
pa_log_info("Failed to set hardware parameters on %s: %s", d, snd_strerror(err));
- pa_xfree(d);
snd_pcm_close(pcm_handle);
- return NULL;
+
+ goto fail;
}
if (dev)
@@ -850,6 +850,11 @@ snd_pcm_t *pa_alsa_open_by_device_string(
return pcm_handle;
}
+
+fail:
+ pa_xfree(d);
+
+ return NULL;
}
int pa_alsa_probe_profiles(
commit 07333f8cae480a25af02ad32286ab38d4272698e
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:50:27 2009 +0100
refer folks to the ALSA devs, not us
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 50ba35a..1bb7ddf 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1553,8 +1553,8 @@ snd_pcm_sframes_t pa_alsa_safe_avail_update(snd_pcm_t *pcm, size_t hwbuf_size, c
if (k >= hwbuf_size * 3 ||
k >= pa_bytes_per_second(ss)*10)
- pa_log("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms) "
- "Most likely this is an ALSA driver bug. Please report this issue to the PulseAudio developers.",
+ pa_log("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms). "
+ "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers.",
(unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
return n;
@@ -1585,8 +1585,8 @@ int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas
k >= hwbuf_size * 3 ||
k >= pa_bytes_per_second(ss)*10)
- pa_log("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms) "
- "Most likely this is an ALSA driver bug. Please report this issue to the PulseAudio developers.",
+ pa_log("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms). "
+ "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers.",
(unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
return r;
commit 1737a19c86d34d1a3721d019f649beaa9aea02b3
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:52:21 2009 +0100
allow importing of more memory blocks than exporting
diff --git a/src/pulsecore/memblock.c b/src/pulsecore/memblock.c
index 1d7f455..fbf0a47 100644
--- a/src/pulsecore/memblock.c
+++ b/src/pulsecore/memblock.c
@@ -57,7 +57,7 @@
#define PA_MEMEXPORT_SLOTS_MAX 128
-#define PA_MEMIMPORT_SLOTS_MAX 128
+#define PA_MEMIMPORT_SLOTS_MAX 160
#define PA_MEMIMPORT_SEGMENTS_MAX 16
struct pa_memblock {
commit be81a681ac84ac56208c3bb315e04d04c2e53606
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:55:55 2009 +0100
if we fail to import a memblock fill in silence to guarantee stability of timing
diff --git a/src/pulse/context.c b/src/pulse/context.c
index 8686e0d..d8d0a51 100644
--- a/src/pulse/context.c
+++ b/src/pulse/context.c
@@ -335,8 +335,7 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
pa_assert(p);
pa_assert(chunk);
- pa_assert(chunk->memblock);
- pa_assert(chunk->length);
+ pa_assert(chunk->length > 0);
pa_assert(c);
pa_assert(PA_REFCNT_VALUE(c) >= 1);
@@ -344,11 +343,11 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
if ((s = pa_dynarray_get(c->record_streams, channel))) {
- pa_assert(seek == PA_SEEK_RELATIVE);
- pa_assert(offset == 0);
-
- pa_memblockq_seek(s->record_memblockq, offset, seek);
- pa_memblockq_push_align(s->record_memblockq, chunk);
+ if (chunk->memblock) {
+ pa_memblockq_seek(s->record_memblockq, offset, seek);
+ pa_memblockq_push_align(s->record_memblockq, chunk);
+ } else
+ pa_memblockq_seek(s->record_memblockq, offset+chunk->length, seek);
if (s->read_callback) {
size_t l;
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index c303261..fd7d936 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -4144,17 +4144,20 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
if (playback_stream_isinstance(stream)) {
playback_stream *ps = PLAYBACK_STREAM(stream);
- if (seek != PA_SEEK_RELATIVE || offset != 0)
- pa_asyncmsgq_post(ps->sink_input->sink->asyncmsgq, PA_MSGOBJECT(ps->sink_input), SINK_INPUT_MESSAGE_SEEK, PA_UINT_TO_PTR(seek), offset, NULL, NULL);
+ if (chunk->memblock) {
+ if (seek != PA_SEEK_RELATIVE || offset != 0)
+ pa_asyncmsgq_post(ps->sink_input->sink->asyncmsgq, PA_MSGOBJECT(ps->sink_input), SINK_INPUT_MESSAGE_SEEK, PA_UINT_TO_PTR(seek), offset, NULL, NULL);
- pa_asyncmsgq_post(ps->sink_input->sink->asyncmsgq, PA_MSGOBJECT(ps->sink_input), SINK_INPUT_MESSAGE_POST_DATA, NULL, 0, chunk, NULL);
+ pa_asyncmsgq_post(ps->sink_input->sink->asyncmsgq, PA_MSGOBJECT(ps->sink_input), SINK_INPUT_MESSAGE_POST_DATA, NULL, 0, chunk, NULL);
+ } else
+ pa_asyncmsgq_post(ps->sink_input->sink->asyncmsgq, PA_MSGOBJECT(ps->sink_input), SINK_INPUT_MESSAGE_SEEK, PA_UINT_TO_PTR(seek), offset+chunk->length, NULL, NULL);
} else {
upload_stream *u = UPLOAD_STREAM(stream);
size_t l;
if (!u->memchunk.memblock) {
- if (u->length == chunk->length) {
+ if (u->length == chunk->length && chunk->memblock) {
u->memchunk = *chunk;
pa_memblock_ref(u->memchunk.memblock);
u->length = 0;
@@ -4170,17 +4173,22 @@ static void pstream_memblock_callback(pa_pstream *p, uint32_t channel, int64_t o
if (l > chunk->length)
l = chunk->length;
-
if (l > 0) {
- void *src, *dst;
+ void *dst;
dst = pa_memblock_acquire(u->memchunk.memblock);
- src = pa_memblock_acquire(chunk->memblock);
- memcpy((uint8_t*) dst + u->memchunk.index + u->memchunk.length,
- (uint8_t*) src+chunk->index, l);
+ if (chunk->memblock) {
+ void *src;
+ src = pa_memblock_acquire(chunk->memblock);
+
+ memcpy((uint8_t*) dst + u->memchunk.index + u->memchunk.length,
+ (uint8_t*) src + chunk->index, l);
+
+ pa_memblock_release(chunk->memblock);
+ } else
+ pa_silence_memory((uint8_t*) dst + u->memchunk.index + u->memchunk.length, l, &u->sample_spec);
pa_memblock_release(u->memchunk.memblock);
- pa_memblock_release(chunk->memblock);
u->memchunk.length += l;
u->length -= l;
diff --git a/src/pulsecore/pstream.c b/src/pulsecore/pstream.c
index 7ff8edc..ef1105b 100644
--- a/src/pulsecore/pstream.c
+++ b/src/pulsecore/pstream.c
@@ -832,8 +832,8 @@ static int do_read(pa_pstream *p) {
ntohl(p->read.shm_info[PA_PSTREAM_SHM_INDEX]),
ntohl(p->read.shm_info[PA_PSTREAM_SHM_LENGTH])))) {
- pa_log_warn("Failed to import memory block.");
- return -1;
+ if (pa_log_ratelimit())
+ pa_log_debug("Failed to import memory block.");
}
if (p->recieve_memblock_callback) {
@@ -842,7 +842,7 @@ static int do_read(pa_pstream *p) {
chunk.memblock = b;
chunk.index = 0;
- chunk.length = pa_memblock_get_length(b);
+ chunk.length = b ? pa_memblock_get_length(b) : ntohl(p->read.shm_info[PA_PSTREAM_SHM_LENGTH]);
offset = (int64_t) (
(((uint64_t) ntohl(p->read.descriptor[PA_PSTREAM_DESCRIPTOR_OFFSET_HI])) << 32) |
@@ -857,7 +857,8 @@ static int do_read(pa_pstream *p) {
p->recieve_memblock_callback_userdata);
}
- pa_memblock_unref(b);
+ if (b)
+ pa_memblock_unref(b);
}
goto frame_done;
commit d85ef716757f8c91ec1c97f87daf75e48bbe2de1
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:57:16 2009 +0100
export pa_match()
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index ad6c6ca..d0ff751 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -704,7 +704,7 @@ void pa_reset_priority(void) {
#endif
}
-static int match(const char *expr, const char *v) {
+int pa_match(const char *expr, const char *v) {
int k;
regex_t re;
int r;
@@ -744,12 +744,12 @@ int pa_parse_boolean(const char *v) {
/* And then we check language dependant */
if ((expr = nl_langinfo(YESEXPR)))
if (expr[0])
- if ((r = match(expr, v)) > 0)
+ if ((r = pa_match(expr, v)) > 0)
return 1;
if ((expr = nl_langinfo(NOEXPR)))
if (expr[0])
- if ((r = match(expr, v)) > 0)
+ if ((r = pa_match(expr, v)) > 0)
return 0;
errno = EINVAL;
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index 442815f..8fd521b 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -141,6 +141,8 @@ size_t pa_vsnprintf(char *str, size_t size, const char *format, va_list ap);
char *pa_truncate_utf8(char *c, size_t l);
+int pa_match(const char *expr, const char *v);
+
char *pa_getcwd(void);
char *pa_make_path_absolute(const char *p);
pa_bool_t pa_is_path_absolute(const char *p);
commit 7b8bed3e285f31537aa39f88600e59b749ac6508
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 21:57:57 2009 +0100
introduce pa_realpath()
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index d0ff751..61f9a65 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2604,3 +2604,28 @@ char *pa_unescape(char *p) {
return p;
}
+
+char *pa_realpath(const char *path) {
+ char *r, *t;
+ pa_assert(path);
+
+ /* We want only abolsute paths */
+ if (path[0] != '/') {
+ errno = EINVAL;
+ return NULL;
+ }
+
+#ifndef __GLIBC__
+#error "It's not clear whether this system supports realpath(..., NULL) like GNU libc does. If it doesn't we need a private version of realpath() here."
+#endif
+
+ if (!(r = realpath(path, NULL)))
+ return NULL;
+
+ /* We copy this here in case our pa_xmalloc() is not implemented
+ * on top of libc malloc() */
+ t = pa_xstrdup(r);
+ pa_xfree(r);
+
+ return t;
+}
diff --git a/src/pulsecore/core-util.h b/src/pulsecore/core-util.h
index 8fd521b..0ba33f3 100644
--- a/src/pulsecore/core-util.h
+++ b/src/pulsecore/core-util.h
@@ -221,4 +221,6 @@ char *pa_replace(const char*s, const char*a, const char *b);
char *pa_unescape(char *p);
+char *pa_realpath(const char *path);
+
#endif
commit 6db307360b7ef95211aff13548206464e8909882
Author: Lennart Poettering <lennart at poettering.net>
Date: Wed Feb 18 22:11:50 2009 +0100
export card information for sinks/sources and number of sinks/sources a profile would create to clients
diff --git a/src/pulse/introspect.c b/src/pulse/introspect.c
index 1d50939..04bcd4f 100644
--- a/src/pulse/introspect.c
+++ b/src/pulse/introspect.c
@@ -162,6 +162,7 @@ static void context_get_sink_info_callback(pa_pdispatch *pd, uint32_t command, u
i.n_volume_steps = PA_VOLUME_NORM+1;
mute = FALSE;
state = PA_SINK_INVALID_STATE;
+ i.card = PA_INVALID_INDEX;
if (pa_tagstruct_getu32(t, &i.index) < 0 ||
pa_tagstruct_gets(t, &i.name) < 0 ||
@@ -182,7 +183,8 @@ static void context_get_sink_info_callback(pa_pdispatch *pd, uint32_t command, u
(o->context->version >= 15 &&
(pa_tagstruct_get_volume(t, &i.base_volume) < 0 ||
pa_tagstruct_getu32(t, &state) < 0 ||
- pa_tagstruct_getu32(t, &i.n_volume_steps) < 0))) {
+ pa_tagstruct_getu32(t, &i.n_volume_steps) < 0 ||
+ pa_tagstruct_getu32(t, &i.card) < 0))) {
pa_context_fail(o->context, PA_ERR_PROTOCOL);
pa_proplist_free(i.proplist);
@@ -293,6 +295,7 @@ static void context_get_source_info_callback(pa_pdispatch *pd, uint32_t command,
i.n_volume_steps = PA_VOLUME_NORM+1;
mute = FALSE;
state = PA_SOURCE_INVALID_STATE;
+ i.card = PA_INVALID_INDEX;
if (pa_tagstruct_getu32(t, &i.index) < 0 ||
pa_tagstruct_gets(t, &i.name) < 0 ||
@@ -313,7 +316,8 @@ static void context_get_source_info_callback(pa_pdispatch *pd, uint32_t command,
(o->context->version >= 15 &&
(pa_tagstruct_get_volume(t, &i.base_volume) < 0 ||
pa_tagstruct_getu32(t, &state) < 0 ||
- pa_tagstruct_getu32(t, &i.n_volume_steps) < 0))) {
+ pa_tagstruct_getu32(t, &i.n_volume_steps) < 0 ||
+ pa_tagstruct_getu32(t, &i.card) < 0))) {
pa_context_fail(o->context, PA_ERR_PROTOCOL);
pa_proplist_free(i.proplist);
@@ -517,7 +521,9 @@ static void context_get_card_info_callback(pa_pdispatch *pd, uint32_t command, u
for (j = 0; j < i.n_profiles; j++) {
if (pa_tagstruct_gets(t, &i.profiles[j].name) < 0 ||
- pa_tagstruct_gets(t, &i.profiles[j].description) < 0) {
+ pa_tagstruct_gets(t, &i.profiles[j].description) < 0 ||
+ pa_tagstruct_getu32(t, &i.profiles[j].n_sinks) < 0 ||
+ pa_tagstruct_getu32(t, &i.profiles[j].n_sources)< 0) {
pa_context_fail(o->context, PA_ERR_PROTOCOL);
pa_xfree(i.profiles);
diff --git a/src/pulse/introspect.h b/src/pulse/introspect.h
index badc787..b873a84 100644
--- a/src/pulse/introspect.h
+++ b/src/pulse/introspect.h
@@ -215,6 +215,7 @@ typedef struct pa_sink_info {
pa_volume_t base_volume; /**< Some kind of "base" volume that refers to unamplified/unattenuated volume in the context of the output device. \since 0.9.15 */
pa_sink_state_t state; /**< State \since 0.9.15 */
uint32_t n_volume_steps; /**< Number of volume steps for sinks which do not support arbitrary volumes. \since 0.9.15 */
+ uint32_t card; /**< Card index, or PA_INVALID_INDEX. \since 0.9.15 */
} pa_sink_info;
/** Callback prototype for pa_context_get_sink_info_by_name() and friends */
@@ -273,6 +274,7 @@ typedef struct pa_source_info {
pa_volume_t base_volume; /**< Some kind of "base" volume that refers to unamplified/unattenuated volume in the context of the input device. \since 0.9.15 */
pa_source_state_t state; /**< State \since 0.9.15 */
uint32_t n_volume_steps; /**< Number of volume steps for sources which do not support arbitrary volumes. \since 0.9.15 */
+ uint32_t card; /**< Card index, or PA_INVALID_INDEX. \since 0.9.15 */
} pa_source_info;
/** Callback prototype for pa_context_get_source_info_by_name() and friends */
@@ -396,6 +398,8 @@ pa_operation* pa_context_kill_client(pa_context *c, uint32_t idx, pa_context_suc
typedef struct pa_card_profile_info {
const char *name; /**< Name of this profile */
const char *description; /**< Description of this profile */
+ uint32_t n_sinks; /**< Number of sinks this profile would create */
+ uint32_t n_sources; /**< Number of sources this profile would create */
} pa_card_profile_info;
/** Stores information about cards. Please note that this structure
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index fd7d936..79b9b06 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -2749,6 +2749,7 @@ static void sink_fill_tagstruct(pa_native_connection *c, pa_tagstruct *t, pa_sin
pa_log_error("Internal sink state is invalid.");
pa_tagstruct_putu32(t, pa_sink_get_state(sink));
pa_tagstruct_putu32(t, sink->n_volume_steps);
+ pa_tagstruct_putu32(t, sink->card ? sink->card->index : PA_INVALID_INDEX);
}
}
@@ -2788,6 +2789,7 @@ static void source_fill_tagstruct(pa_native_connection *c, pa_tagstruct *t, pa_s
pa_log_error("Internal source state is invalid.");
pa_tagstruct_putu32(t, pa_source_get_state(source));
pa_tagstruct_putu32(t, source->n_volume_steps);
+ pa_tagstruct_putu32(t, source->card ? source->card->index : PA_INVALID_INDEX);
}
}
@@ -2822,6 +2824,8 @@ static void card_fill_tagstruct(pa_native_connection *c, pa_tagstruct *t, pa_car
while ((p = pa_hashmap_iterate(card->profiles, &state, NULL))) {
pa_tagstruct_puts(t, p->name);
pa_tagstruct_puts(t, p->description);
+ pa_tagstruct_putu32(t, p->n_sinks);
+ pa_tagstruct_putu32(t, p->n_sources);
}
}
commit 7f8ccf9e7cf2d0e4042cd5fa85bc49a2982e6807
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 03:56:31 2009 +0100
handle both positive and negative errno's
diff --git a/src/pulsecore/core-error.c b/src/pulsecore/core-error.c
index 3d6c2c3..d9caa94 100644
--- a/src/pulsecore/core-error.c
+++ b/src/pulsecore/core-error.c
@@ -47,6 +47,9 @@ const char* pa_cstrerror(int errnum) {
char *translated, *t;
char errbuf[128];
+ if (errnum < 0)
+ errnum = -errnum;
+
if ((t = PA_STATIC_TLS_GET(cstrerror)))
pa_xfree(t);
commit 928920c8b81b20ff1a8257231904cd0f06804988
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 03:58:52 2009 +0100
additional validity check
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 4f39d67..7441e97 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -1846,6 +1846,9 @@ void pa_sink_update_latency_range(pa_sink *s, pa_usec_t min_latency, pa_usec_t m
pa_sink_assert_ref(s);
+ pa_assert(!min_latency || !max_latency ||
+ min_latency <= max_latency);
+
s->thread_info.min_latency = min_latency;
s->thread_info.max_latency = max_latency;
commit 5f5396bb15c6b939ac6a71efa36950817f9e18bf
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 03:59:04 2009 +0100
additional validity check
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 0009d85..c0d6d9e 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -1120,6 +1120,9 @@ void pa_source_update_latency_range(pa_source *s, pa_usec_t min_latency, pa_usec
pa_source_assert_ref(s);
+ pa_assert(!min_latency || !max_latency ||
+ min_latency <= max_latency);
+
s->thread_info.min_latency = min_latency;
s->thread_info.max_latency = max_latency;
commit 45218aa2268e9fc231d42d1479adf7685eb3b507
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 03:59:56 2009 +0100
make interpol-test useful for recording as well
diff --git a/src/tests/interpol-test.c b/src/tests/interpol-test.c
index 9d93077..20d2c23 100644
--- a/src/tests/interpol-test.c
+++ b/src/tests/interpol-test.c
@@ -39,10 +39,23 @@
static pa_context *context = NULL;
static pa_stream *stream = NULL;
static pa_mainloop_api *mainloop_api = NULL;
+static pa_bool_t playback = TRUE;
static void stream_write_cb(pa_stream *p, size_t nbytes, void *userdata) {
/* Just some silence */
- pa_stream_write(p, pa_xmalloc0(nbytes), nbytes, pa_xfree, 0, PA_SEEK_RELATIVE);
+ pa_assert_se(pa_stream_write(p, pa_xmalloc0(nbytes), nbytes, pa_xfree, 0, PA_SEEK_RELATIVE) == 0);
+}
+
+static void stream_read_cb(pa_stream *p, size_t nbytes, void *userdata) {
+ /* We don't care, just drop the data */
+
+ while (pa_stream_readable_size(p) > 0) {
+ const void *d;
+ size_t b;
+
+ pa_assert_se(pa_stream_peek(p, &d, &b) == 0);
+ pa_assert_se(pa_stream_drop(p) == 0);
+ }
}
/* This is called whenever the context status changes */
@@ -68,8 +81,13 @@ static void context_state_callback(pa_context *c, void *userdata) {
stream = pa_stream_new(c, "interpol-test", &ss, NULL);
assert(stream);
- pa_stream_connect_playback(stream, NULL, NULL, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_AUTO_TIMING_UPDATE, NULL, NULL);
- pa_stream_set_write_callback(stream, stream_write_cb, NULL);
+ if (playback) {
+ pa_assert_se(pa_stream_connect_playback(stream, NULL, NULL, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_AUTO_TIMING_UPDATE, NULL, NULL) == 0);
+ pa_stream_set_write_callback(stream, stream_write_cb, NULL);
+ } else {
+ pa_assert_se(pa_stream_connect_record(stream, NULL, NULL, PA_STREAM_INTERPOLATE_TIMING|PA_STREAM_AUTO_TIMING_UPDATE) == 0);
+ pa_stream_set_read_callback(stream, stream_read_cb, NULL);
+ }
break;
}
@@ -90,6 +108,8 @@ int main(int argc, char *argv[]) {
struct timeval start, last_info = { 0, 0 };
pa_usec_t old_t = 0, old_rtc = 0;
+ playback = argc <= 1 || !pa_streq(argv[1], "-r");
+
/* Set up a new main loop */
m = pa_threaded_mainloop_new();
assert(m);
@@ -138,7 +158,14 @@ int main(int argc, char *argv[]) {
if (success) {
rtc = pa_timeval_diff(&now, &start);
- printf("%i\t%llu\t%llu\t%llu\t%llu\t%u\t%u\n", k, (unsigned long long) rtc, (unsigned long long) t, (unsigned long long) (rtc-old_rtc), (unsigned long long) (t-old_t), changed, playing);
+ printf("%i\t%llu\t%llu\t%llu\t%llu\t%u\t%u\n", k,
+ (unsigned long long) rtc,
+ (unsigned long long) t,
+ (unsigned long long) (rtc-old_rtc),
+ (unsigned long long) (t-old_t),
+ changed,
+ playing);
+
fflush(stdout);
old_t = t;
old_rtc = rtc;
commit 9cbdd3a968cc167ca7f0060089efc69c4c2c1f13
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 04:00:29 2009 +0100
add pa_timespec_load
diff --git a/src/pulsecore/rtclock.c b/src/pulsecore/rtclock.c
index 5fc6da2..dcbd118 100644
--- a/src/pulsecore/rtclock.c
+++ b/src/pulsecore/rtclock.c
@@ -141,3 +141,11 @@ struct timeval* pa_rtclock_from_wallclock(struct timeval *tv) {
return tv;
}
+
+pa_usec_t pa_timespec_load(const struct timespec *ts) {
+ pa_assert(ts);
+
+ return
+ (pa_usec_t) ts->tv_sec * PA_USEC_PER_SEC +
+ (pa_usec_t) ts->tv_nsec / PA_NSEC_PER_USEC;
+}
diff --git a/src/pulsecore/rtclock.h b/src/pulsecore/rtclock.h
index 281461d..03cc1c7 100644
--- a/src/pulsecore/rtclock.h
+++ b/src/pulsecore/rtclock.h
@@ -42,4 +42,6 @@ void pa_rtclock_hrtimer_enable(void);
struct timeval* pa_rtclock_from_wallclock(struct timeval *tv);
+pa_usec_t pa_timespec_load(const struct timespec *ts);
+
#endif
commit e1608d5db2c270965b8143f93e1b8b9a1c301e26
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 04:01:12 2009 +0100
modernize pa_msleep() a bit
diff --git a/src/pulse/util.c b/src/pulse/util.c
index b20ea46..54a188d 100644
--- a/src/pulse/util.c
+++ b/src/pulse/util.c
@@ -54,6 +54,8 @@
#endif
#include <pulse/xmalloc.h>
+#include <pulse/timeval.h>
+
#include <pulsecore/winsock.h>
#include <pulsecore/core-error.h>
#include <pulsecore/log.h>
@@ -260,8 +262,8 @@ int pa_msleep(unsigned long t) {
#elif defined(HAVE_NANOSLEEP)
struct timespec ts;
- ts.tv_sec = (time_t) (t/1000UL);
- ts.tv_nsec = (long) ((t % 1000UL) * 1000000UL);
+ ts.tv_sec = (time_t) (t / PA_MSEC_PER_SEC);
+ ts.tv_nsec = (long) ((t % PA_MSEC_PER_SEC) * PA_NSEC_PER_MSEC);
return nanosleep(&ts, NULL);
#else
commit 205b0ba08e1f796481e0bba11c0813266af3947f
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 04:04:42 2009 +0100
split out mixer setup into seperate functions to make things more readable
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 5fc3468..eeac5e7 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -1227,6 +1227,91 @@ static void set_sink_name(pa_sink_new_data *data, pa_modargs *ma, const char *de
pa_xfree(t);
}
+static int setup_mixer(struct userdata *u, pa_bool_t ignore_dB) {
+ pa_assert(u);
+
+ if (!u->mixer_handle)
+ return 0;
+
+ pa_assert(u->mixer_elem);
+
+ if (snd_mixer_selem_has_playback_volume(u->mixer_elem)) {
+ pa_bool_t suitable = FALSE;
+
+ if (snd_mixer_selem_get_playback_volume_range(u->mixer_elem, &u->hw_volume_min, &u->hw_volume_max) < 0)
+ pa_log_info("Failed to get volume range. Falling back to software volume control.");
+ else if (u->hw_volume_min >= u->hw_volume_max)
+ pa_log_warn("Your kernel driver is broken: it reports a volume range from %li to %li which makes no sense.", u->hw_volume_min, u->hw_volume_max);
+ else {
+ pa_log_info("Volume ranges from %li to %li.", u->hw_volume_min, u->hw_volume_max);
+ suitable = TRUE;
+ }
+
+ if (suitable) {
+ if (ignore_dB || snd_mixer_selem_get_playback_dB_range(u->mixer_elem, &u->hw_dB_min, &u->hw_dB_max) < 0)
+ pa_log_info("Mixer doesn't support dB information or data is ignored.");
+ else {
+#ifdef HAVE_VALGRIND_MEMCHECK_H
+ VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_min, sizeof(u->hw_dB_min));
+ VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_max, sizeof(u->hw_dB_max));
+#endif
+
+ if (u->hw_dB_min >= u->hw_dB_max)
+ pa_log_warn("Your kernel driver is broken: it reports a volume range from %0.2f dB to %0.2f dB which makes no sense.", (double) u->hw_dB_min/100.0, (double) u->hw_dB_max/100.0);
+ else {
+ pa_log_info("Volume ranges from %0.2f dB to %0.2f dB.", (double) u->hw_dB_min/100.0, (double) u->hw_dB_max/100.0);
+ u->hw_dB_supported = TRUE;
+
+ if (u->hw_dB_max > 0) {
+ u->sink->base_volume = pa_sw_volume_from_dB(- (double) u->hw_dB_max/100.0);
+ pa_log_info("Fixing base volume to %0.2f dB", pa_sw_volume_to_dB(u->sink->base_volume));
+ } else
+ pa_log_info("No particular base volume set, fixing to 0 dB");
+ }
+ }
+
+ if (!u->hw_dB_supported &&
+ u->hw_volume_max - u->hw_volume_min < 3) {
+
+ pa_log_info("Device doesn't do dB volume and has less than 4 volume levels. Falling back to software volume control.");
+ suitable = FALSE;
+ }
+ }
+
+ if (suitable) {
+ u->mixer_seperate_channels = pa_alsa_calc_mixer_map(u->mixer_elem, &u->sink->channel_map, u->mixer_map, TRUE) >= 0;
+
+ u->sink->get_volume = sink_get_volume_cb;
+ u->sink->set_volume = sink_set_volume_cb;
+ u->sink->flags |= PA_SINK_HW_VOLUME_CTRL | (u->hw_dB_supported ? PA_SINK_DECIBEL_VOLUME : 0);
+ pa_log_info("Using hardware volume control. Hardware dB scale %s.", u->hw_dB_supported ? "supported" : "not supported");
+
+ if (!u->hw_dB_supported)
+ u->sink->n_volume_steps = u->hw_volume_max - u->hw_volume_min + 1;
+ } else
+ pa_log_info("Using software volume control.");
+ }
+
+ if (snd_mixer_selem_has_playback_switch(u->mixer_elem)) {
+ u->sink->get_mute = sink_get_mute_cb;
+ u->sink->set_mute = sink_set_mute_cb;
+ u->sink->flags |= PA_SINK_HW_MUTE_CTRL;
+ } else
+ pa_log_info("Using software mute control.");
+
+ u->mixer_fdl = pa_alsa_fdlist_new();
+
+ if (pa_alsa_fdlist_set_mixer(u->mixer_fdl, u->mixer_handle, u->core->mainloop) < 0) {
+ pa_log("Failed to initialize file descriptor monitoring");
+ return -1;
+ }
+
+ snd_mixer_elem_set_callback(u->mixer_elem, mixer_callback);
+ snd_mixer_elem_set_callback_private(u->mixer_elem, u);
+
+ return 0;
+}
+
pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_card *card, const pa_alsa_profile_info *profile) {
struct userdata *u = NULL;
@@ -1236,7 +1321,6 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
uint32_t nfrags, hwbuf_size, frag_size, tsched_size, tsched_watermark;
snd_pcm_uframes_t period_frames, tsched_frames;
size_t frame_size;
- int err;
pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE;
pa_usec_t usec;
pa_sink_new_data data;
@@ -1365,7 +1449,7 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
}
if (use_tsched && (!b || !d)) {
- pa_log_info("Cannot enabled timer-based scheduling, falling back to sound IRQ scheduling.");
+ pa_log_info("Cannot enable timer-based scheduling, falling back to sound IRQ scheduling.");
u->use_tsched = use_tsched = FALSE;
}
@@ -1448,86 +1532,8 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
if (update_sw_params(u) < 0)
goto fail;
- pa_memchunk_reset(&u->memchunk);
-
- if (u->mixer_handle) {
- pa_assert(u->mixer_elem);
-
- if (snd_mixer_selem_has_playback_volume(u->mixer_elem)) {
- pa_bool_t suitable = FALSE;
-
- if (snd_mixer_selem_get_playback_volume_range(u->mixer_elem, &u->hw_volume_min, &u->hw_volume_max) < 0)
- pa_log_info("Failed to get volume range. Falling back to software volume control.");
- else if (u->hw_volume_min >= u->hw_volume_max)
- pa_log_warn("Your kernel driver is broken: it reports a volume range from %li to %li which makes no sense.", u->hw_volume_min, u->hw_volume_max);
- else {
- pa_log_info("Volume ranges from %li to %li.", u->hw_volume_min, u->hw_volume_max);
- suitable = TRUE;
- }
-
- if (suitable) {
- if (ignore_dB || snd_mixer_selem_get_playback_dB_range(u->mixer_elem, &u->hw_dB_min, &u->hw_dB_max) < 0)
- pa_log_info("Mixer doesn't support dB information or data is ignored.");
- else {
-#ifdef HAVE_VALGRIND_MEMCHECK_H
- VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_min, sizeof(u->hw_dB_min));
- VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_max, sizeof(u->hw_dB_max));
-#endif
-
- if (u->hw_dB_min >= u->hw_dB_max)
- pa_log_warn("Your kernel driver is broken: it reports a volume range from %0.2f dB to %0.2f dB which makes no sense.", (double) u->hw_dB_min/100.0, (double) u->hw_dB_max/100.0);
- else {
- pa_log_info("Volume ranges from %0.2f dB to %0.2f dB.", (double) u->hw_dB_min/100.0, (double) u->hw_dB_max/100.0);
- u->hw_dB_supported = TRUE;
-
- if (u->hw_dB_max > 0) {
- u->sink->base_volume = pa_sw_volume_from_dB(- (double) u->hw_dB_max/100.0);
- pa_log_info("Fixing base volume to %0.2f dB", pa_sw_volume_to_dB(u->sink->base_volume));
- } else
- pa_log_info("No particular base volume set, fixing to 0 dB");
- }
- }
-
- if (!u->hw_dB_supported &&
- u->hw_volume_max - u->hw_volume_min < 3) {
-
- pa_log_info("Device doesn't do dB volume and has less than 4 volume levels. Falling back to software volume control.");
- suitable = FALSE;
- }
- }
-
- if (suitable) {
- u->mixer_seperate_channels = pa_alsa_calc_mixer_map(u->mixer_elem, &map, u->mixer_map, TRUE) >= 0;
-
- u->sink->get_volume = sink_get_volume_cb;
- u->sink->set_volume = sink_set_volume_cb;
- u->sink->flags |= PA_SINK_HW_VOLUME_CTRL | (u->hw_dB_supported ? PA_SINK_DECIBEL_VOLUME : 0);
- pa_log_info("Using hardware volume control. Hardware dB scale %s.", u->hw_dB_supported ? "supported" : "not supported");
-
- if (!u->hw_dB_supported)
- u->sink->n_volume_steps = u->hw_volume_max - u->hw_volume_min + 1;
- } else
- pa_log_info("Using software volume control.");
- }
-
- if (snd_mixer_selem_has_playback_switch(u->mixer_elem)) {
- u->sink->get_mute = sink_get_mute_cb;
- u->sink->set_mute = sink_set_mute_cb;
- u->sink->flags |= PA_SINK_HW_MUTE_CTRL;
- } else
- pa_log_info("Using software mute control.");
-
- u->mixer_fdl = pa_alsa_fdlist_new();
-
- if (pa_alsa_fdlist_set_mixer(u->mixer_fdl, u->mixer_handle, m->core->mainloop) < 0) {
- pa_log("Failed to initialize file descriptor monitoring");
- goto fail;
- }
-
- snd_mixer_elem_set_callback(u->mixer_elem, mixer_callback);
- snd_mixer_elem_set_callback_private(u->mixer_elem, u);
- } else
- u->mixer_fdl = NULL;
+ if (setup_mixer(u, ignore_dB) < 0)
+ goto fail;
pa_alsa_dump(u->pcm_handle);
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 1909cae..81d7c0b 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -1062,6 +1062,91 @@ static void set_source_name(pa_source_new_data *data, pa_modargs *ma, const char
pa_xfree(t);
}
+static int setup_mixer(struct userdata *u, pa_bool_t ignore_dB) {
+ pa_assert(u);
+
+ if (!u->mixer_handle)
+ return 0;
+
+ pa_assert(u->mixer_elem);
+
+ if (snd_mixer_selem_has_capture_volume(u->mixer_elem)) {
+ pa_bool_t suitable = FALSE;
+
+ if (snd_mixer_selem_get_capture_volume_range(u->mixer_elem, &u->hw_volume_min, &u->hw_volume_max) < 0)
+ pa_log_info("Failed to get volume range. Falling back to software volume control.");
+ else if (u->hw_volume_min >= u->hw_volume_max)
+ pa_log_warn("Your kernel driver is broken: it reports a volume range from %li to %li which makes no sense.", u->hw_volume_min, u->hw_volume_max);
+ else {
+ pa_log_info("Volume ranges from %li to %li.", u->hw_volume_min, u->hw_volume_max);
+ suitable = TRUE;
+ }
+
+ if (suitable) {
+ if (ignore_dB || snd_mixer_selem_get_capture_dB_range(u->mixer_elem, &u->hw_dB_min, &u->hw_dB_max) < 0)
+ pa_log_info("Mixer doesn't support dB information or data is ignored.");
+ else {
+#ifdef HAVE_VALGRIND_MEMCHECK_H
+ VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_min, sizeof(u->hw_dB_min));
+ VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_max, sizeof(u->hw_dB_max));
+#endif
+
+ if (u->hw_dB_min >= u->hw_dB_max)
+ pa_log_warn("Your kernel driver is broken: it reports a volume range from %0.2f dB to %0.2f dB which makes no sense.", (double) u->hw_dB_min/100.0, (double) u->hw_dB_max/100.0);
+ else {
+ pa_log_info("Volume ranges from %0.2f dB to %0.2f dB.", (double) u->hw_dB_min/100.0, (double) u->hw_dB_max/100.0);
+ u->hw_dB_supported = TRUE;
+
+ if (u->hw_dB_max > 0) {
+ u->source->base_volume = pa_sw_volume_from_dB(- (double) u->hw_dB_max/100.0);
+ pa_log_info("Fixing base volume to %0.2f dB", pa_sw_volume_to_dB(u->source->base_volume));
+ } else
+ pa_log_info("No particular base volume set, fixing to 0 dB");
+ }
+ }
+
+ if (!u->hw_dB_supported &&
+ u->hw_volume_max - u->hw_volume_min < 3) {
+
+ pa_log_info("Device has less than 4 volume levels. Falling back to software volume control.");
+ suitable = FALSE;
+ }
+ }
+
+ if (suitable) {
+ u->mixer_seperate_channels = pa_alsa_calc_mixer_map(u->mixer_elem, &u->source->channel_map, u->mixer_map, FALSE) >= 0;
+
+ u->source->get_volume = source_get_volume_cb;
+ u->source->set_volume = source_set_volume_cb;
+ u->source->flags |= PA_SOURCE_HW_VOLUME_CTRL | (u->hw_dB_supported ? PA_SOURCE_DECIBEL_VOLUME : 0);
+ pa_log_info("Using hardware volume control. Hardware dB scale %s.", u->hw_dB_supported ? "supported" : "not supported");
+
+ if (!u->hw_dB_supported)
+ u->source->n_volume_steps = u->hw_volume_max - u->hw_volume_min + 1;
+ } else
+ pa_log_info("Using software volume control.");
+ }
+
+ if (snd_mixer_selem_has_capture_switch(u->mixer_elem)) {
+ u->source->get_mute = source_get_mute_cb;
+ u->source->set_mute = source_set_mute_cb;
+ u->source->flags |= PA_SOURCE_HW_MUTE_CTRL;
+ } else
+ pa_log_info("Using software mute control.");
+
+ u->mixer_fdl = pa_alsa_fdlist_new();
+
+ if (pa_alsa_fdlist_set_mixer(u->mixer_fdl, u->mixer_handle, u->core->mainloop) < 0) {
+ pa_log("Failed to initialize file descriptor monitoring");
+ return -1;
+ }
+
+ snd_mixer_elem_set_callback(u->mixer_elem, mixer_callback);
+ snd_mixer_elem_set_callback_private(u->mixer_elem, u);
+
+ return 0;
+}
+
pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, pa_card *card, const pa_alsa_profile_info *profile) {
struct userdata *u = NULL;
@@ -1071,11 +1156,11 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
uint32_t nfrags, hwbuf_size, frag_size, tsched_size, tsched_watermark;
snd_pcm_uframes_t period_frames, tsched_frames;
size_t frame_size;
- int err;
pa_bool_t use_mmap = TRUE, b, use_tsched = TRUE, d, ignore_dB = FALSE;
pa_source_new_data data;
pa_assert(m);
+ pa_assert(ma);
ss = m->core->default_sample_spec;
if (pa_modargs_get_sample_spec_and_channel_map(ma, &ss, &map, PA_CHANNEL_MAP_ALSA) < 0) {
@@ -1190,7 +1275,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
}
if (use_tsched && (!b || !d)) {
- pa_log_info("Cannot enabled timer-based scheduling, falling back to sound IRQ scheduling.");
+ pa_log_info("Cannot enable timer-based scheduling, falling back to sound IRQ scheduling.");
u->use_tsched = use_tsched = FALSE;
}
@@ -1270,85 +1355,8 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
if (update_sw_params(u) < 0)
goto fail;
- if (u->mixer_handle) {
- pa_assert(u->mixer_elem);
-
- if (snd_mixer_selem_has_capture_volume(u->mixer_elem)) {
- pa_bool_t suitable = FALSE;
-
- if (snd_mixer_selem_get_capture_volume_range(u->mixer_elem, &u->hw_volume_min, &u->hw_volume_max) < 0)
- pa_log_info("Failed to get volume range. Falling back to software volume control.");
- else if (u->hw_volume_min >= u->hw_volume_max)
- pa_log_warn("Your kernel driver is broken: it reports a volume range from %li to %li which makes no sense.", u->hw_volume_min, u->hw_volume_max);
- else {
- pa_log_info("Volume ranges from %li to %li.", u->hw_volume_min, u->hw_volume_max);
- suitable = TRUE;
- }
-
- if (suitable) {
- if (ignore_dB || snd_mixer_selem_get_capture_dB_range(u->mixer_elem, &u->hw_dB_min, &u->hw_dB_max) < 0)
- pa_log_info("Mixer doesn't support dB information or data is ignored.");
- else {
-#ifdef HAVE_VALGRIND_MEMCHECK_H
- VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_min, sizeof(u->hw_dB_min));
- VALGRIND_MAKE_MEM_DEFINED(&u->hw_dB_max, sizeof(u->hw_dB_max));
-#endif
-
- if (u->hw_dB_min >= u->hw_dB_max)
- pa_log_warn("Your kernel driver is broken: it reports a volume range from %0.2f dB to %0.2f dB which makes no sense.", (double) u->hw_dB_min/100.0, (double) u->hw_dB_max/100.0);
- else {
- pa_log_info("Volume ranges from %0.2f dB to %0.2f dB.", (double) u->hw_dB_min/100.0, (double) u->hw_dB_max/100.0);
- u->hw_dB_supported = TRUE;
-
- if (u->hw_dB_max > 0) {
- u->source->base_volume = pa_sw_volume_from_dB(- (double) u->hw_dB_max/100.0);
- pa_log_info("Fixing base volume to %0.2f dB", pa_sw_volume_to_dB(u->source->base_volume));
- } else
- pa_log_info("No particular base volume set, fixing to 0 dB");
-
- }
- }
-
- if (!u->hw_dB_supported &&
- u->hw_volume_max - u->hw_volume_min < 3) {
-
- pa_log_info("Device has less than 4 volume levels. Falling back to software volume control.");
- suitable = FALSE;
- }
- }
-
- if (suitable) {
- u->mixer_seperate_channels = pa_alsa_calc_mixer_map(u->mixer_elem, &map, u->mixer_map, FALSE) >= 0;
-
- u->source->get_volume = source_get_volume_cb;
- u->source->set_volume = source_set_volume_cb;
- u->source->flags |= PA_SOURCE_HW_VOLUME_CTRL | (u->hw_dB_supported ? PA_SOURCE_DECIBEL_VOLUME : 0);
- pa_log_info("Using hardware volume control. Hardware dB scale %s.", u->hw_dB_supported ? "supported" : "not supported");
-
- if (!u->hw_dB_supported)
- u->source->n_volume_steps = u->hw_volume_max - u->hw_volume_min + 1;
- } else
- pa_log_info("Using software volume control.");
- }
-
- if (snd_mixer_selem_has_capture_switch(u->mixer_elem)) {
- u->source->get_mute = source_get_mute_cb;
- u->source->set_mute = source_set_mute_cb;
- u->source->flags |= PA_SOURCE_HW_MUTE_CTRL;
- } else
- pa_log_info("Using software mute control.");
-
- u->mixer_fdl = pa_alsa_fdlist_new();
-
- if (pa_alsa_fdlist_set_mixer(u->mixer_fdl, u->mixer_handle, m->core->mainloop) < 0) {
- pa_log("Failed to initialize file descriptor monitoring");
- goto fail;
- }
-
- snd_mixer_elem_set_callback(u->mixer_elem, mixer_callback);
- snd_mixer_elem_set_callback_private(u->mixer_elem, u);
- } else
- u->mixer_fdl = NULL;
+ if (setup_mixer(u, ignore_dB) < 0)
+ goto fail;
pa_alsa_dump(u->pcm_handle);
commit 7d16dcb6cc8dc931020186f5dab37f32ecc815d9
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 19:19:07 2009 +0200
dbus-util: avoid double free
diff --git a/src/modules/dbus-util.c b/src/modules/dbus-util.c
index f6a986a..4218bca 100644
--- a/src/modules/dbus-util.c
+++ b/src/modules/dbus-util.c
@@ -403,8 +403,7 @@ void pa_dbus_pending_free(pa_dbus_pending *p) {
pa_assert(p);
if (p->pending) {
- dbus_pending_call_cancel(p->pending);
- dbus_pending_call_unref(p->pending);
+ dbus_pending_call_cancel(p->pending); /* p->pending is freed by cancel() */
}
if (p->message)
commit 7737b10ac6cd03d844c6de77c58f2d39b60a7ad3
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 19:26:21 2009 +0200
hal-detect: make sure r is initialized, so we don't take random path
diff --git a/src/modules/module-hal-detect.c b/src/modules/module-hal-detect.c
index e603738..ce04f36 100644
--- a/src/modules/module-hal-detect.c
+++ b/src/modules/module-hal-detect.c
@@ -370,6 +370,7 @@ static struct device* hal_device_add(struct userdata *u, const char *udi) {
d->originating_udi = NULL;
d->module = PA_INVALID_INDEX;
d->sink_name = d->source_name = d->card_name = NULL;
+ r = -1;
#ifdef HAVE_ALSA
if (pa_streq(u->capability, CAPABILITY_ALSA))
commit 83cdcf2f53f4a449cd4d6eb67c1e079a5db0257a
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 19:35:01 2009 +0200
alsa-util: make sure we check an initialized cn variable
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 1bb7ddf..c53fd10 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -1,7 +1,7 @@
/***
This file is part of PulseAudio.
- Copyright 2004-2006 Lennart Poettering
+ Copyright 2004-2009 Lennart Poettering
Copyright 2006 Pierre Ossman <ossman at cendio.se> for Cendio AB
PulseAudio is free software; you can redistribute it and/or modify
@@ -1388,7 +1388,7 @@ void pa_alsa_init_proplist_pcm_info(pa_core *c, pa_proplist *p, snd_pcm_info_t *
snd_pcm_class_t class;
snd_pcm_subclass_t subclass;
- const char *n, *id, *sdn, *cn;
+ const char *n, *id, *sdn, *cn = NULL;
int card;
pa_assert(p);
commit ee0b5f71861f3ebad0c24f8c27000210fd986e54
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 20:06:35 2009 +0200
log: don't leak bt
diff --git a/src/pulsecore/log.c b/src/pulsecore/log.c
index 1ae4383..89b75da 100644
--- a/src/pulsecore/log.c
+++ b/src/pulsecore/log.c
@@ -351,6 +351,7 @@ void pa_log_levelv_meta(
}
errno = saved_errno;
+ pa_xfree(bt);
}
void pa_log_level_meta(
commit 01f81d697346d3cb052d11137913aaa59a854c0b
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Thu Feb 19 04:49:58 2009 +0100
card-restore: it's not useful to check an array, let's check the length
diff --git a/src/modules/module-card-restore.c b/src/modules/module-card-restore.c
index 909c095..c769605 100644
--- a/src/modules/module-card-restore.c
+++ b/src/modules/module-card-restore.c
@@ -191,7 +191,7 @@ static pa_hook_result_t card_new_hook_callback(pa_core *c, pa_card_new_data *new
pa_assert(new_data);
- if ((e = read_entry(u, new_data->name)) && e->profile) {
+ if ((e = read_entry(u, new_data->name)) && e->profile[0]) {
if (!new_data->active_profile) {
pa_card_new_data_set_profile(new_data, e->profile);
commit 6c8d851643a8413678c7557abc9758cc1bee94c0
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 20:18:56 2009 +0200
protocol-native: fix get_info() for cards
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 79b9b06..39b8282 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -3011,7 +3011,7 @@ static void command_get_info(pa_pdispatch *pd, uint32_t command, uint32_t tag, p
source_fill_tagstruct(c, reply, source);
else if (client)
client_fill_tagstruct(c, reply, client);
- else if (client)
+ else if (card)
card_fill_tagstruct(c, reply, card);
else if (module)
module_fill_tagstruct(c, reply, module);
commit 2aeab75c6893c882800975866178c79dfe85202a
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 20:27:45 2009 +0200
paplay: check if pa_context_connect() succeed
diff --git a/src/utils/paplay.c b/src/utils/paplay.c
index df2edf6..dec80e5 100644
--- a/src/utils/paplay.c
+++ b/src/utils/paplay.c
@@ -400,7 +400,10 @@ int main(int argc, char *argv[]) {
pa_context_set_state_callback(context, context_state_callback, NULL);
/* Connect the context */
- pa_context_connect(context, server, 0, NULL);
+ if (pa_context_connect(context, server, 0, NULL) < 0) {
+ fprintf(stderr, _("pa_context_connect() failed: %s"), pa_strerror(pa_context_errno(context)));
+ goto quit;
+ }
/* Run the main loop */
if (pa_mainloop_run(m, &ret) < 0) {
commit 93ed27d5617202441bd9be346ce916289fe7128d
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 20:31:06 2009 +0200
pactl: check if pa_context_connect succeed
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index 154e7f9..e020f37 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -1029,7 +1029,10 @@ int main(int argc, char *argv[]) {
}
pa_context_set_state_callback(context, context_state_callback, NULL);
- pa_context_connect(context, server, 0, NULL);
+ if (pa_context_connect(context, server, 0, NULL) < 0) {
+ fprintf(stderr, _("pa_context_connect() failed: %s"), pa_strerror(pa_context_errno(context)));
+ goto quit;
+ }
if (pa_mainloop_run(m, &ret) < 0) {
fprintf(stderr, _("pa_mainloop_run() failed.\n"));
commit a8369274952ad81ed2b05800d182e35efd26e41d
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 20:34:05 2009 +0200
tests/sync-playback: check if pa_context_connect succeed
diff --git a/src/tests/sync-playback.c b/src/tests/sync-playback.c
index 42c479a..f2a1560 100644
--- a/src/tests/sync-playback.c
+++ b/src/tests/sync-playback.c
@@ -174,11 +174,16 @@ int main(int argc, char *argv[]) {
pa_context_set_state_callback(context, context_state_callback, NULL);
- pa_context_connect(context, NULL, 0, NULL);
+ /* Connect the context */
+ if (pa_context_connect(context, NULL, 0, NULL) < 0) {
+ fprintf(stderr, "pa_context_connect() failed.\n");
+ goto quit;
+ }
if (pa_mainloop_run(m, &ret) < 0)
fprintf(stderr, "pa_mainloop_run() failed.\n");
+quit:
pa_context_unref(context);
for (i = 0; i < NSTREAMS; i++)
commit 5ea7dac11c225aa26367974d7cf37e71a096ef27
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 20:36:38 2009 +0200
tests/interpol-test: check if mainloop_start() succeed
diff --git a/src/tests/interpol-test.c b/src/tests/interpol-test.c
index 20d2c23..d7da660 100644
--- a/src/tests/interpol-test.c
+++ b/src/tests/interpol-test.c
@@ -126,7 +126,8 @@ int main(int argc, char *argv[]) {
pa_gettimeofday(&start);
- pa_threaded_mainloop_start(m);
+ r = pa_threaded_mainloop_start(m);
+ assert(r >= 0);
for (k = 0; k < 5000; k++) {
pa_bool_t success = FALSE, changed = FALSE;
commit 25bbea67492cb7c6e9b8e78beb6553864c290a1a
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 20:38:51 2009 +0200
tests/thread-mainloop-test: check if threaded_mainloop_start() succeed
diff --git a/src/tests/thread-mainloop-test.c b/src/tests/thread-mainloop-test.c
index 263cd57..3bcf4f1 100644
--- a/src/tests/thread-mainloop-test.c
+++ b/src/tests/thread-mainloop-test.c
@@ -47,7 +47,7 @@ int main(int argc, char *argv[]) {
pa_assert_se(m = pa_threaded_mainloop_new());
pa_assert_se(a = pa_threaded_mainloop_get_api(m));
- pa_threaded_mainloop_start(m);
+ pa_assert_se(pa_threaded_mainloop_start(m) >= 0);
pa_threaded_mainloop_lock(m);
commit c3eb9086b819eb7abb0248e0a253c21e5853fe99
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 20:52:11 2009 +0200
pactl: return in case of error reading file (avoid using freed d)
diff --git a/src/utils/pactl.c b/src/utils/pactl.c
index e020f37..d3da90e 100644
--- a/src/utils/pactl.c
+++ b/src/utils/pactl.c
@@ -649,6 +649,7 @@ static void stream_write_callback(pa_stream *s, size_t length, void *userdata) {
pa_xfree(d);
fprintf(stderr, _("Premature end of file\n"));
quit(1);
+ return;
}
pa_stream_write(s, d, length, pa_xfree, 0, PA_SEEK_RELATIVE);
commit a252b61be1d81f833a3cca87a2294d7fe65532fd
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 21:59:45 2009 +0200
main: remove unused lf variable
diff --git a/src/daemon/main.c b/src/daemon/main.c
index d3e02fa..5f94ec6 100644
--- a/src/daemon/main.c
+++ b/src/daemon/main.c
@@ -348,7 +348,6 @@ int main(int argc, char *argv[]) {
pa_time_event *win32_timer;
struct timeval win32_tv;
#endif
- char *lf = NULL;
int autospawn_fd = -1;
pa_bool_t autospawn_locked = FALSE;
@@ -1000,9 +999,6 @@ finish:
pa_autospawn_lock_done(FALSE);
}
- if (lf)
- pa_xfree(lf);
-
#ifdef OS_IS_WIN32
if (win32_timer)
pa_mainloop_get_api(mainloop)->time_free(win32_timer);
commit 927e501920f629eca1f73627b0d7a5a03a9e8bdc
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 22:07:57 2009 +0200
pulsecore: remove unused variable from cli_command_load()
diff --git a/src/pulsecore/cli-command.c b/src/pulsecore/cli-command.c
index 1df0bd6..5e45c1a 100644
--- a/src/pulsecore/cli-command.c
+++ b/src/pulsecore/cli-command.c
@@ -401,7 +401,6 @@ static int pa_cli_command_info(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_b
}
static int pa_cli_command_load(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_bool_t *fail) {
- pa_module *m;
const char *name;
pa_core_assert_ref(c);
@@ -414,7 +413,7 @@ static int pa_cli_command_load(pa_core *c, pa_tokenizer *t, pa_strbuf *buf, pa_b
return -1;
}
- if (!(m = pa_module_load(c, name, pa_tokenizer_get(t, 2)))) {
+ if (!pa_module_load(c, name, pa_tokenizer_get(t, 2))) {
pa_strbuf_puts(buf, "Module load failed.\n");
return -1;
}
commit 4512a2ce9ce15bdcded9d5aa457016716edd459a
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 22:06:25 2009 +0200
rtp-recv: remove unused variable assignment
diff --git a/src/modules/rtp/module-rtp-recv.c b/src/modules/rtp/module-rtp-recv.c
index 063ba72..0d86459 100644
--- a/src/modules/rtp/module-rtp-recv.c
+++ b/src/modules/rtp/module-rtp-recv.c
@@ -562,7 +562,7 @@ static void sap_event_cb(pa_mainloop_api *m, pa_io_event *e, int fd, pa_io_event
} else {
if (!(s = pa_hashmap_get(u->by_origin, info.origin))) {
- if (!(s = session_new(u, &info)))
+ if (!session_new(u, &info))
pa_sdp_info_destroy(&info);
} else {
commit 67b0baecc41745afcf8591949fbdffb8678fe83f
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 22:17:10 2009 +0200
pacat: remove unused variable
diff --git a/src/utils/pacat.c b/src/utils/pacat.c
index 10015ce..2224da9 100644
--- a/src/utils/pacat.c
+++ b/src/utils/pacat.c
@@ -336,7 +336,6 @@ static void context_drain_complete(pa_context*c, void *userdata) {
/* Stream draining complete */
static void stream_drain_complete(pa_stream*s, int success, void *userdata) {
- pa_operation *o;
if (!success) {
fprintf(stderr, _("Failed to drain stream: %s\n"), pa_strerror(pa_context_errno(context)));
@@ -350,7 +349,7 @@ static void stream_drain_complete(pa_stream*s, int success, void *userdata) {
pa_stream_unref(stream);
stream = NULL;
- if (!(o = pa_context_drain(context, context_drain_complete, NULL)))
+ if (!pa_context_drain(context, context_drain_complete, NULL))
pa_context_disconnect(context);
else {
if (verbose)
commit d1306e3020137251fc0aa57386dd79ee1ec5ebb0
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 22:32:40 2009 +0200
pulsecore: fix check for cb (m is already checked before)
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 39b8282..59fae98 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -4070,7 +4070,7 @@ static void command_extension(pa_pdispatch *pd, uint32_t command, uint32_t tag,
CHECK_VALIDITY(c->pstream, m->load_once || idx != PA_INVALID_INDEX, tag, PA_ERR_INVALID);
cb = (pa_native_protocol_ext_cb_t) (unsigned long) pa_hashmap_get(c->protocol->extensions, m);
- CHECK_VALIDITY(c->pstream, m, tag, PA_ERR_NOEXTENSION);
+ CHECK_VALIDITY(c->pstream, cb, tag, PA_ERR_NOEXTENSION);
if (cb(c->protocol, m, c, tag, t) < 0)
protocol_error(c);
commit bb52a6753b907e18b0de31bffd424b8ed273c5a9
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 22:37:16 2009 +0200
padsp: don't use si if it's NULL
diff --git a/src/utils/padsp.c b/src/utils/padsp.c
index 046bae4..76e86c8 100644
--- a/src/utils/padsp.c
+++ b/src/utils/padsp.c
@@ -1202,7 +1202,7 @@ fail:
static void sink_info_cb(pa_context *context, const pa_sink_info *si, int eol, void *userdata) {
fd_info *i = userdata;
- if (!si && eol < 0) {
+ if (!si || eol < 0) {
i->operation_success = 0;
pa_threaded_mainloop_signal(i->mainloop, 0);
return;
@@ -1224,7 +1224,7 @@ static void sink_info_cb(pa_context *context, const pa_sink_info *si, int eol, v
static void source_info_cb(pa_context *context, const pa_source_info *si, int eol, void *userdata) {
fd_info *i = userdata;
- if (!si && eol < 0) {
+ if (!si || eol < 0) {
i->operation_success = 0;
pa_threaded_mainloop_signal(i->mainloop, 0);
return;
commit 60d53c6523dfd59fbcc99ff443ba993e285ca366
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Tue Feb 17 22:58:59 2009 +0200
tests/ipacl-test: check inet_pton()
diff --git a/src/tests/ipacl-test.c b/src/tests/ipacl-test.c
index 7b7564a..f89665c 100644
--- a/src/tests/ipacl-test.c
+++ b/src/tests/ipacl-test.c
@@ -25,6 +25,7 @@
#endif
#include "../pulsecore/winsock.h"
+#include "../pulsecore/macro.h"
#include <pulsecore/ipacl.h>
@@ -96,7 +97,7 @@ int main(int argc, char *argv[]) {
memset(&sa6, 0, sizeof(sa6));
sa6.sin6_family = AF_INET6;
sa6.sin6_port = htons(22);
- inet_pton(AF_INET6, "::1", &sa6.sin6_addr);
+ pa_assert_se(inet_pton(AF_INET6, "::1", &sa6.sin6_addr) == 1);
r = connect(fd, (struct sockaddr*) &sa6, sizeof(sa6));
assert(r >= 0);
commit 204083cb325ba3db09ca75b70e9d3d6adfb67e0d
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 18:16:45 2009 +0200
pulsecore: unused variable e in hashmap_put()
diff --git a/src/pulsecore/hashmap.c b/src/pulsecore/hashmap.c
index 3c6f41e..57607b6 100644
--- a/src/pulsecore/hashmap.c
+++ b/src/pulsecore/hashmap.c
@@ -138,7 +138,7 @@ int pa_hashmap_put(pa_hashmap *h, const void *key, void *value) {
hash = h->hash_func(key) % NBUCKETS;
- if ((e = hash_scan(h, hash, key)))
+ if (hash_scan(h, hash, key))
return -1;
if (!(e = pa_flist_pop(PA_STATIC_FLIST_GET(entries))))
commit 4f1380b7138d5862e8f12c9060ef46f0355c160b
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 18:21:25 2009 +0200
pulsecore: use r returned from fgets()
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 61f9a65..432ee3b 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -2459,7 +2459,7 @@ char *pa_machine_id(void) {
pa_strip_nl(ln);
- if (ln[0])
+ if (r && ln[0])
return pa_xstrdup(ln);
}
commit 2c6abb87938d2172963a99979449c1ff0b63a9f3
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 19:15:43 2009 +0200
daemon-conf: make sure c->log_level < LEVEL_MAX
diff --git a/src/daemon/daemon-conf.c b/src/daemon/daemon-conf.c
index 7d3b89f..7dfef27 100644
--- a/src/daemon/daemon-conf.c
+++ b/src/daemon/daemon-conf.c
@@ -639,7 +639,7 @@ char *pa_daemon_conf_dump(pa_daemon_conf *c) {
if (c->config_file)
pa_strbuf_printf(s, _("### Read from configuration file: %s ###\n"), c->config_file);
- pa_assert(c->log_level <= PA_LOG_LEVEL_MAX);
+ pa_assert(c->log_level < PA_LOG_LEVEL_MAX);
pa_strbuf_printf(s, "daemonize = %s\n", pa_yes_no(c->daemonize));
pa_strbuf_printf(s, "fail = %s\n", pa_yes_no(c->fail));
commit c0cf22d0812d766fb7528449be1351ca2e030a8c
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 19:26:21 2009 +0200
protocol-esound: don't accept a request of PROTOCOL_MAX
diff --git a/src/pulsecore/protocol-esound.c b/src/pulsecore/protocol-esound.c
index e1643cb..840f458 100644
--- a/src/pulsecore/protocol-esound.c
+++ b/src/pulsecore/protocol-esound.c
@@ -924,7 +924,7 @@ static int do_read(connection *c) {
c->request = PA_MAYBE_INT32_SWAP(c->swap_byte_order, c->request);
- if (c->request < ESD_PROTO_CONNECT || c->request > ESD_PROTO_MAX) {
+ if (c->request < ESD_PROTO_CONNECT || c->request >= ESD_PROTO_MAX) {
pa_log("recieved invalid request.");
return -1;
}
commit 0684b236f0ad2fc367971bfa02cb466c2170aafd
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 19:44:55 2009 +0200
stream-resotre: don't leak a name
diff --git a/src/modules/module-stream-restore.c b/src/modules/module-stream-restore.c
index 434dc7a..d935caf 100644
--- a/src/modules/module-stream-restore.c
+++ b/src/modules/module-stream-restore.c
@@ -532,6 +532,7 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
pa_xfree(n);
continue;
}
+ pa_xfree(n);
if (u->restore_volume) {
pa_cvolume v;
@@ -581,6 +582,7 @@ static void apply_entry(struct userdata *u, const char *name, struct entry *e) {
pa_xfree(n);
continue;
}
+ pa_xfree(n);
if (u->restore_device &&
e->device_valid &&
commit 88fc458393e00834cec5abe6c26a3cf114398532
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 20:00:57 2009 +0200
protocol-native: don't leak a proplist
diff --git a/src/pulsecore/protocol-native.c b/src/pulsecore/protocol-native.c
index 59fae98..a963f78 100644
--- a/src/pulsecore/protocol-native.c
+++ b/src/pulsecore/protocol-native.c
@@ -2560,7 +2560,10 @@ static void command_create_upload_stream(pa_pdispatch *pd, uint32_t command, uin
if (!(name = pa_proplist_gets(p, PA_PROP_EVENT_ID)))
name = pa_proplist_gets(p, PA_PROP_MEDIA_NAME);
- CHECK_VALIDITY(c->pstream, name && pa_namereg_is_valid_name(name), tag, PA_ERR_INVALID);
+ if (!name || !pa_namereg_is_valid_name(name)) {
+ pa_proplist_free(p);
+ CHECK_VALIDITY(c->pstream, FALSE, tag, PA_ERR_INVALID);
+ }
s = upload_stream_new(c, &ss, &map, name, length, p);
pa_proplist_free(p);
@@ -3590,24 +3593,30 @@ static void command_update_proplist(pa_pdispatch *pd, uint32_t command, uint32_t
}
}
- CHECK_VALIDITY(c->pstream, mode == PA_UPDATE_SET || mode == PA_UPDATE_MERGE || mode == PA_UPDATE_REPLACE, tag, PA_ERR_INVALID);
+ if (!(mode == PA_UPDATE_SET || mode == PA_UPDATE_MERGE || mode == PA_UPDATE_REPLACE)) {
+ pa_proplist_free(p);
+ CHECK_VALIDITY(c->pstream, FALSE, tag, PA_ERR_INVALID);
+ }
if (command == PA_COMMAND_UPDATE_PLAYBACK_STREAM_PROPLIST) {
playback_stream *s;
s = pa_idxset_get_by_index(c->output_streams, idx);
- CHECK_VALIDITY(c->pstream, s, tag, PA_ERR_NOENTITY);
- CHECK_VALIDITY(c->pstream, playback_stream_isinstance(s), tag, PA_ERR_NOENTITY);
-
+ if (!s || !playback_stream_isinstance(s)) {
+ pa_proplist_free(p);
+ CHECK_VALIDITY(c->pstream, FALSE, tag, PA_ERR_NOENTITY);
+ }
pa_sink_input_update_proplist(s->sink_input, mode, p);
} else if (command == PA_COMMAND_UPDATE_RECORD_STREAM_PROPLIST) {
record_stream *s;
- s = pa_idxset_get_by_index(c->record_streams, idx);
- CHECK_VALIDITY(c->pstream, s, tag, PA_ERR_NOENTITY);
-
+ if (!(s = pa_idxset_get_by_index(c->record_streams, idx))) {
+ pa_proplist_free(p);
+ CHECK_VALIDITY(c->pstream, FALSE, tag, PA_ERR_NOENTITY);
+ }
pa_source_output_update_proplist(s->source_output, mode, p);
+
} else {
pa_assert(command == PA_COMMAND_UPDATE_CLIENT_PROPLIST);
@@ -3615,6 +3624,7 @@ static void command_update_proplist(pa_pdispatch *pd, uint32_t command, uint32_t
}
pa_pstream_send_simple_ack(c->pstream, tag);
+ pa_proplist_free(p);
}
static void command_remove_proplist(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata) {
commit 4722fecb993440db4df6a87203aee5eb796c5763
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 20:31:54 2009 +0200
rtp: remove unused variable a
diff --git a/src/modules/rtp/sdp.c b/src/modules/rtp/sdp.c
index 643361f..7c54743 100644
--- a/src/modules/rtp/sdp.c
+++ b/src/modules/rtp/sdp.c
@@ -44,7 +44,7 @@
char *pa_sdp_build(int af, const void *src, const void *dst, const char *name, uint16_t port, uint8_t payload, const pa_sample_spec *ss) {
uint32_t ntp;
char buf_src[64], buf_dst[64], un[64];
- const char *u, *f, *a;
+ const char *u, *f;
pa_assert(src);
pa_assert(dst);
@@ -62,8 +62,8 @@ char *pa_sdp_build(int af, const void *src, const void *dst, const char *name, u
ntp = (uint32_t) time(NULL) + 2208988800U;
- pa_assert_se(a = inet_ntop(af, src, buf_src, sizeof(buf_src)));
- pa_assert_se(a = inet_ntop(af, dst, buf_dst, sizeof(buf_dst)));
+ pa_assert_se(inet_ntop(af, src, buf_src, sizeof(buf_src)));
+ pa_assert_se(inet_ntop(af, dst, buf_dst, sizeof(buf_dst)));
return pa_sprintf_malloc(
PA_SDP_HEADER
commit f1dcbe0f5d363f96d7ad44dcb5bd84d09b54ba3a
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 21:21:25 2009 +0200
pulsecore: don't leak d in case of error
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 432ee3b..623a488 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -1443,6 +1443,7 @@ char *pa_get_runtime_dir(void) {
if (pa_make_secure_dir(d, m, (uid_t) -1, (gid_t) -1) < 0) {
pa_log_error("Failed to create secure directory: %s", pa_cstrerror(errno));
+ pa_xfree(d);
goto fail;
}
commit 800489eea907815427d08659034ad69dbb56b5e6
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 21:23:41 2009 +0200
pulsecore: don't leak p when make_random_dir_and_link()
diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c
index 623a488..a184beb 100644
--- a/src/pulsecore/core-util.c
+++ b/src/pulsecore/core-util.c
@@ -1411,6 +1411,7 @@ static int make_random_dir_and_link(mode_t m, const char *k) {
return -1;
}
+ pa_xfree(p);
return 0;
}
commit 7c78c3f6589eeba9e2a4d7f7abbcaaeb6a89d833
Author: Marc-André Lureau <marc-andre.lureau at nokia.com>
Date: Wed Feb 18 21:35:18 2009 +0200
alsa-util: check if mixer_poll_descriptors_count() < 0
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index c53fd10..a0907c4 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -113,7 +113,7 @@ static void io_cb(pa_mainloop_api*a, pa_io_event* e, int fd, pa_io_event_flags_t
static void defer_cb(pa_mainloop_api*a, pa_defer_event* e, void *userdata) {
struct pa_alsa_fdlist *fdl = userdata;
unsigned num_fds, i;
- int err;
+ int err, n;
struct pollfd *temp;
pa_assert(a);
@@ -122,7 +122,11 @@ static void defer_cb(pa_mainloop_api*a, pa_defer_event* e, void *userdata) {
a->defer_enable(fdl->defer, 0);
- num_fds = (unsigned) snd_mixer_poll_descriptors_count(fdl->mixer);
+ if ((n = snd_mixer_poll_descriptors_count(fdl->mixer)) < 0) {
+ pa_log("snd_mixer_poll_descriptors_count() failed: %s", snd_strerror(n));
+ return;
+ }
+ num_fds = (unsigned) n;
if (num_fds != fdl->num_fds) {
if (fdl->fds)
commit b0c0106824b47e7b21f022cb0f8dbf5b54a7b269
Merge: 7c78c3f... 05b7440...
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 05:02:52 2009 +0100
Merge commit 'elmarco/legacy-dir'
commit 2e250aaebb7708b25b5342d8ced657364adedc95
Merge: b0c0106... 38ded3b...
Author: Lennart Poettering <lennart at poettering.net>
Date: Thu Feb 19 05:17:08 2009 +0100
Merge commit '38ded3bb31bc49664641965f856a35f432a8a956'
commit d69bd0339f77e487bc4db328a892872eb47e4083
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 00:32:15 2009 +0100
don't try to use weakref stuff on older compilers that don't really support it
diff --git a/src/pulse/gccmacro.h b/src/pulse/gccmacro.h
index f110a74..58188ee 100644
--- a/src/pulse/gccmacro.h
+++ b/src/pulse/gccmacro.h
@@ -118,7 +118,7 @@
#endif
#ifndef PA_GCC_WEAKREF
-#ifdef __GNUC__
+#if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ > 1)) || (__GNUC__ > 4))
/** Macro for usgae of GCC's weakref attribute */
#define PA_GCC_WEAKREF(x) __attribute__((weakref(#x)));
#endif
commit fdca6edf20906b151f725b2750dd4733f3eb9c8c
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 01:18:37 2009 +0100
make profile names translatable
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index eeac5e7..5290268 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -35,6 +35,7 @@
#include <pulse/xmalloc.h>
#include <pulse/util.h>
#include <pulse/timeval.h>
+#include <pulse/i18n.h>
#include <pulsecore/core.h>
#include <pulsecore/module.h>
@@ -254,9 +255,9 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
if (PA_UNLIKELY(n <= u->hwbuf_unused_frames)) {
if (polled && pa_log_ratelimit())
- pa_log("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
- "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
- "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0.");
+ pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
+ "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
+ "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
break;
}
@@ -377,9 +378,9 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
if (PA_UNLIKELY(n <= u->hwbuf_unused_frames)) {
if (polled && pa_log_ratelimit())
- pa_log("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
- "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
- "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0.");
+ pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
+ "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
+ "We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
break;
}
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index 81d7c0b..a5de388 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -35,6 +35,7 @@
#include <pulse/xmalloc.h>
#include <pulse/util.h>
#include <pulse/timeval.h>
+#include <pulse/i18n.h>
#include <pulsecore/core-error.h>
#include <pulsecore/core.h>
@@ -240,9 +241,9 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
if (PA_UNLIKELY(n <= 0)) {
if (polled && pa_log_ratelimit())
- pa_log("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
- "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
- "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0.");
+ pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
+ "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
+ "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
break;
}
@@ -348,9 +349,9 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
if (PA_UNLIKELY(n <= 0)) {
if (polled && pa_log_ratelimit())
- pa_log("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
- "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
- "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0.");
+ pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
+ "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
+ "We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
return work_done;
}
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 1bb7ddf..95e872b 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -32,6 +32,7 @@
#include <pulse/xmalloc.h>
#include <pulse/timeval.h>
#include <pulse/util.h>
+#include <pulse/i18n.h>
#include <pulsecore/log.h>
#include <pulsecore/macro.h>
@@ -501,39 +502,39 @@ int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min) {
static const struct pa_alsa_profile_info device_table[] = {
{{ 1, { PA_CHANNEL_POSITION_MONO }},
"hw",
- "Analog Mono",
+ N_("Analog Mono"),
"analog-mono",
1 },
{{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
"front",
- "Analog Stereo",
+ N_("Analog Stereo"),
"analog-stereo",
10 },
{{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
"iec958",
- "IEC958 Digital Stereo",
+ N_("Digital Stereo (IEC958)"),
"iec958-stereo",
5 },
{{ 2, { PA_CHANNEL_POSITION_LEFT, PA_CHANNEL_POSITION_RIGHT }},
"hdmi",
- "HDMI Digital Stereo",
+ N_("Digital Stereo (HDMI)"),
"hdmi-stereo",
4 },
{{ 4, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT }},
"surround40",
- "Analog Surround 4.0",
+ N_("Analog Surround 4.0"),
"analog-surround-40",
7 },
{{ 4, { PA_CHANNEL_POSITION_FRONT_LEFT, PA_CHANNEL_POSITION_FRONT_RIGHT,
PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT }},
"a52",
- "IEC958/AC3 Digital Surround 4.0",
+ N_("Digital Surround 4.0 (IEC958/AC3)"),
"iec958-ac3-surround-40",
2 },
@@ -541,7 +542,7 @@ static const struct pa_alsa_profile_info device_table[] = {
PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
PA_CHANNEL_POSITION_LFE }},
"surround41",
- "Analog Surround 4.1",
+ N_("Analog Surround 4.1"),
"analog-surround-41",
7 },
@@ -549,7 +550,7 @@ static const struct pa_alsa_profile_info device_table[] = {
PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
PA_CHANNEL_POSITION_CENTER }},
"surround50",
- "Analog Surround 5.0",
+ N_("Analog Surround 5.0"),
"analog-surround-50",
7 },
@@ -557,7 +558,7 @@ static const struct pa_alsa_profile_info device_table[] = {
PA_CHANNEL_POSITION_REAR_LEFT, PA_CHANNEL_POSITION_REAR_RIGHT,
PA_CHANNEL_POSITION_CENTER, PA_CHANNEL_POSITION_LFE }},
"surround51",
- "Analog Surround 5.1",
+ N_("Analog Surround 5.1"),
"analog-surround-51",
8 },
@@ -565,7 +566,7 @@ static const struct pa_alsa_profile_info device_table[] = {
PA_CHANNEL_POSITION_FRONT_RIGHT, PA_CHANNEL_POSITION_REAR_LEFT,
PA_CHANNEL_POSITION_REAR_RIGHT, PA_CHANNEL_POSITION_LFE}},
"a52",
- "IEC958/AC3 Digital Surround 5.1",
+ N_("Digital Surround 5.1 (IEC958/AC3)"),
"iec958-ac3-surround-51",
3 },
@@ -574,7 +575,7 @@ static const struct pa_alsa_profile_info device_table[] = {
PA_CHANNEL_POSITION_CENTER, PA_CHANNEL_POSITION_LFE,
PA_CHANNEL_POSITION_SIDE_LEFT, PA_CHANNEL_POSITION_SIDE_RIGHT }},
"surround71",
- "Analog Surround 7.1",
+ N_("Analog Surround 7.1"),
"analog-surround-71",
7 },
@@ -1553,8 +1554,8 @@ snd_pcm_sframes_t pa_alsa_safe_avail_update(snd_pcm_t *pcm, size_t hwbuf_size, c
if (k >= hwbuf_size * 3 ||
k >= pa_bytes_per_second(ss)*10)
- pa_log("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms). "
- "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers.",
+ pa_log(_("snd_pcm_avail_update() returned a value that is exceptionally large: %lu bytes (%lu ms). "
+ "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
(unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
return n;
@@ -1585,8 +1586,8 @@ int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas
k >= hwbuf_size * 3 ||
k >= pa_bytes_per_second(ss)*10)
- pa_log("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms). "
- "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers.",
+ pa_log(_("snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes (%lu ms). "
+ "Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers."),
(unsigned long) k, (unsigned long) (pa_bytes_to_usec(k, ss) / PA_USEC_PER_MSEC));
return r;
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 9eab644..79d0999 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -59,7 +59,7 @@ int pa_alsa_find_mixer_and_elem(snd_pcm_t *pcm, snd_mixer_t **_m, snd_mixer_elem
typedef struct pa_alsa_profile_info {
pa_channel_map map;
const char *alsa_name;
- const char *description;
+ const char *description; /* internationalized */
const char *name;
unsigned priority;
} pa_alsa_profile_info;
diff --git a/src/modules/bluetooth/module-bluetooth-device.c b/src/modules/bluetooth/module-bluetooth-device.c
index 6daae83..27f9e7c 100644
--- a/src/modules/bluetooth/module-bluetooth-device.c
+++ b/src/modules/bluetooth/module-bluetooth-device.c
@@ -33,6 +33,8 @@
#include <pulse/xmalloc.h>
#include <pulse/timeval.h>
#include <pulse/sample.h>
+#include <pulse/i18n.h>
+
#include <pulsecore/module.h>
#include <pulsecore/modargs.h>
#include <pulsecore/core-util.h>
@@ -1655,7 +1657,7 @@ static int add_card(struct userdata *u, const char * default_profile) {
data.profiles = pa_hashmap_new(pa_idxset_string_hash_func, pa_idxset_string_compare_func);
if (u->device->audio_sink_info_valid > 0) {
- p = pa_card_profile_new("a2dp", "A2DP Advanced Audio Distribution Profile", sizeof(enum profile));
+ p = pa_card_profile_new("a2dp", _("High Fidelity Playback (A2DP)"), sizeof(enum profile));
p->priority = 10;
p->n_sinks = 1;
p->n_sources = 0;
@@ -1669,7 +1671,7 @@ static int add_card(struct userdata *u, const char * default_profile) {
}
if (u->device->headset_info_valid > 0) {
- p = pa_card_profile_new("hsp", "HSP/HFP Headset/Hands-Free Profile", sizeof(enum profile));
+ p = pa_card_profile_new("hsp", _("Telephony Duplex (HSP/HFP)"), sizeof(enum profile));
p->priority = 20;
p->n_sinks = 1;
p->n_sources = 1;
@@ -1684,7 +1686,7 @@ static int add_card(struct userdata *u, const char * default_profile) {
pa_assert(!pa_hashmap_isempty(data.profiles));
- p = pa_card_profile_new("off", "Off", sizeof(enum profile));
+ p = pa_card_profile_new("off", _("Off"), sizeof(enum profile));
d = PA_CARD_PROFILE_DATA(p);
*d = PROFILE_OFF;
pa_hashmap_put(data.profiles, p->name, p);
commit ef189d50a7357a7f158c9d6f4e59a0f32fcaa92d
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 03:16:54 2009 +0100
make it easier to debug timing related problems
diff --git a/src/pulsecore/rtpoll.c b/src/pulsecore/rtpoll.c
index 183d97c..01dfd62 100644
--- a/src/pulsecore/rtpoll.c
+++ b/src/pulsecore/rtpoll.c
@@ -50,29 +50,39 @@
#include <pulsecore/rtsig.h>
#include <pulsecore/flist.h>
#include <pulsecore/core-util.h>
-
#include <pulsecore/winsock.h>
+#include <pulsecore/ratelimit.h>
#include "rtpoll.h"
+/* #define DEBUG_TIMING */
+
struct pa_rtpoll {
struct pollfd *pollfd, *pollfd2;
unsigned n_pollfd_alloc, n_pollfd_used;
- pa_bool_t timer_enabled;
struct timeval next_elapse;
+ pa_bool_t timer_enabled:1;
- pa_bool_t scan_for_dead;
- pa_bool_t running, installed, rebuild_needed, quit;
+ pa_bool_t scan_for_dead:1;
+ pa_bool_t running:1;
+ pa_bool_t installed:1;
+ pa_bool_t rebuild_needed:1;
+ pa_bool_t quit:1;
#ifdef HAVE_PPOLL
+ pa_bool_t timer_armed:1;
+#ifdef __linux__
+ pa_bool_t dont_use_ppoll:1;
+#endif
int rtsig;
sigset_t sigset_unblocked;
timer_t timer;
- pa_bool_t timer_armed;
-#ifdef __linux__
- pa_bool_t dont_use_ppoll;
#endif
+
+#ifdef DEBUG_TIMING
+ pa_usec_t timestamp;
+ pa_usec_t slept, awake;
#endif
PA_LLIST_HEAD(pa_rtpoll_item, items);
@@ -149,6 +159,11 @@ pa_rtpoll *pa_rtpoll_new(void) {
PA_LLIST_HEAD_INIT(pa_rtpoll_item, p->items);
+#ifdef DEBUG_TIMING
+ p->timestamp = pa_rtclock_usec();
+ p->slept = p->awake = 0;
+#endif
+
return p;
}
@@ -377,6 +392,14 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait) {
pa_timeval_add(&timeout, pa_timeval_diff(&p->next_elapse, &now));
}
+#ifdef DEBUG_TIMING
+ {
+ pa_usec_t now = pa_rtclock_usec();
+ p->awake = now - p->timestamp;
+ p->timestamp = now;
+ }
+#endif
+
/* OK, now let's sleep */
#ifdef HAVE_PPOLL
@@ -396,6 +419,18 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait) {
#endif
r = poll(p->pollfd, p->n_pollfd_used, (!wait || p->quit || p->timer_enabled) ? (int) ((timeout.tv_sec*1000) + (timeout.tv_usec / 1000)) : -1);
+#ifdef DEBUG_TIMING
+ {
+ pa_usec_t now = pa_rtclock_usec();
+ p->slept = now - p->timestamp;
+ p->timestamp = now;
+
+ pa_log("Process time %llu ms; sleep time %llu ms",
+ (unsigned long long) (p->awake / PA_USEC_PER_MSEC),
+ (unsigned long long) (p->slept / PA_USEC_PER_MSEC));
+ }
+#endif
+
if (r < 0) {
if (errno == EAGAIN || errno == EINTR)
r = 0;
commit 9f813dd5b306e59b40c5c88c52406638a8062749
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 03:17:53 2009 +0100
Make sure we actually call _() for translating profile names
diff --git a/src/modules/alsa/module-alsa-card.c b/src/modules/alsa/module-alsa-card.c
index e63414e..e517ddc 100644
--- a/src/modules/alsa/module-alsa-card.c
+++ b/src/modules/alsa/module-alsa-card.c
@@ -24,6 +24,8 @@
#endif
#include <pulse/xmalloc.h>
+#include <pulse/i18n.h>
+
#include <pulsecore/core-util.h>
#include <pulsecore/modargs.h>
#include <pulsecore/queue.h>
@@ -104,14 +106,14 @@ static void enumerate_cb(
if (sink && source) {
n = pa_sprintf_malloc("output-%s+input-%s", sink->name, source->name);
- t = pa_sprintf_malloc("Output %s + Input %s", sink->description, source->description);
+ t = pa_sprintf_malloc(_("Output %s + Input %s"), sink->description, _(source->description));
} else if (sink) {
n = pa_sprintf_malloc("output-%s", sink->name);
- t = pa_sprintf_malloc("Output %s", sink->description);
+ t = pa_sprintf_malloc(_("Output %s"), _(sink->description));
} else {
pa_assert(source);
n = pa_sprintf_malloc("input-%s", source->name);
- t = pa_sprintf_malloc("Input %s", source->description);
+ t = pa_sprintf_malloc(_("Input %s"), _(source->description));
}
pa_log_info("Found output profile '%s'", t);
@@ -142,7 +144,7 @@ static void add_disabled_profile(pa_hashmap *profiles) {
pa_card_profile *p;
struct profile_data *d;
- p = pa_card_profile_new("off", "Off", sizeof(struct profile_data));
+ p = pa_card_profile_new("off", _("Off"), sizeof(struct profile_data));
d = PA_CARD_PROFILE_DATA(p);
d->sink_profile = d->source_profile = NULL;
commit fa2e07a0bd4d02280c397099b612ce4d56673c10
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 03:19:33 2009 +0100
add test tool for debugging broken timing in sound drivers
diff --git a/src/Makefile.am b/src/Makefile.am
index f385c0a..ceafdf7 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -313,6 +313,11 @@ TESTS_BINARIES += \
gtk-test
endif
+if HAVE_ALSA
+TESTS_BINARIES += \
+ alsa-time-test
+endif
+
if BUILD_TESTS_DEFAULT
noinst_PROGRAMS = $(TESTS_BINARIES)
else
@@ -514,6 +519,11 @@ gtk_test_LDADD = $(AM_LDADD) libpulse.la libpulse-mainloop-glib.la
gtk_test_CFLAGS = $(AM_CFLAGS) $(GTK20_CFLAGS)
gtk_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) $(GTK20_LIBS)
+alsa_time_test_SOURCES = tests/alsa-time-test.c
+alsa_time_test_LDADD = $(AM_LDADD)
+alsa_time_test_CFLAGS = $(AM_CFLAGS) $(ASOUNDLIB_CFLAGS)
+alsa_time_test_LDFLAGS = $(AM_LDFLAGS) $(BINLDFLAGS) $(ASOUNDLIB_LIBS)
+
###################################
# Common library #
###################################
@@ -960,6 +970,8 @@ modlibexec_LTLIBRARIES += \
module-oss.la
endif
+pulselibexec_PROGRAMS =
+
if HAVE_ALSA
modlibexec_LTLIBRARIES += \
libalsa-util.la \
@@ -995,8 +1007,6 @@ modlibexec_LTLIBRARIES += \
module-jack-source.la
endif
-pulselibexec_PROGRAMS =
-
if HAVE_GCONF
modlibexec_LTLIBRARIES += \
module-gconf.la
diff --git a/src/tests/alsa-time-test.c b/src/tests/alsa-time-test.c
new file mode 100644
index 0000000..3858bf7
--- /dev/null
+++ b/src/tests/alsa-time-test.c
@@ -0,0 +1,200 @@
+#include <assert.h>
+#include <inttypes.h>
+#include <time.h>
+
+#include <alsa/asoundlib.h>
+
+static uint64_t timespec_us(const struct timespec *ts) {
+ return
+ ts->tv_sec * 1000000LLU +
+ ts->tv_nsec / 1000LLU;
+}
+
+int main(int argc, char *argv[]) {
+ const char *dev;
+ int r;
+ snd_pcm_hw_params_t *hwparams;
+ snd_pcm_sw_params_t *swparams;
+ snd_pcm_status_t *status;
+ snd_pcm_t *pcm;
+ unsigned rate = 44100;
+ unsigned periods = 0;
+ snd_pcm_uframes_t boundary, buffer_size = 44100/10; /* 100s */
+ int dir = 1;
+ struct timespec start, last_timestamp = { 0, 0 };
+ uint64_t start_us;
+ snd_pcm_sframes_t last_avail, last_delay;
+ struct pollfd *pollfds;
+ int n_pollfd;
+ int64_t sample_count = 0;
+
+ snd_pcm_hw_params_alloca(&hwparams);
+ snd_pcm_sw_params_alloca(&swparams);
+ snd_pcm_status_alloca(&status);
+
+ r = clock_gettime(CLOCK_MONOTONIC, &start);
+ assert(r == 0);
+
+ start_us = timespec_us(&start);
+
+ dev = argc > 1 ? argv[1] : "front:AudioPCI";
+
+ r = snd_pcm_open(&pcm, dev, SND_PCM_STREAM_PLAYBACK, 0);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_any(pcm, hwparams);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_set_rate_resample(pcm, hwparams, 0);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_set_access(pcm, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_set_format(pcm, hwparams, SND_PCM_FORMAT_S16_LE);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_set_rate_near(pcm, hwparams, &rate, NULL);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_set_channels(pcm, hwparams, 2);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_set_periods_integer(pcm, hwparams);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_set_periods_near(pcm, hwparams, &periods, &dir);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_set_buffer_size_near(pcm, hwparams, &buffer_size);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params(pcm, hwparams);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_current(pcm, hwparams);
+ assert(r == 0);
+
+ r = snd_pcm_sw_params_set_avail_min(pcm, swparams, 1);
+ assert(r == 0);
+
+ r = snd_pcm_sw_params_set_period_event(pcm, swparams, 1);
+ assert(r == 0);
+
+ r = snd_pcm_hw_params_get_buffer_size(hwparams, &buffer_size);
+ assert(r == 0);
+ r = snd_pcm_sw_params_set_start_threshold(pcm, swparams, buffer_size);
+ assert(r == 0);
+
+ r = snd_pcm_sw_params_get_boundary(swparams, &boundary);
+ assert(r == 0);
+ r = snd_pcm_sw_params_set_stop_threshold(pcm, swparams, boundary);
+ assert(r == 0);
+
+ r = snd_pcm_sw_params_set_tstamp_mode(pcm, swparams, SND_PCM_TSTAMP_ENABLE);
+ assert(r == 0);
+
+ r = snd_pcm_sw_params(pcm, swparams);
+ assert(r == 0);
+
+ r = snd_pcm_prepare(pcm);
+ assert(r == 0);
+
+ r = snd_pcm_sw_params_current(pcm, swparams);
+ assert(r == 0);
+
+/* assert(snd_pcm_hw_params_is_monotonic(hwparams) > 0); */
+
+ n_pollfd = snd_pcm_poll_descriptors_count(pcm);
+ assert(n_pollfd > 0);
+
+ pollfds = malloc(sizeof(struct pollfd) * n_pollfd);
+ assert(pollfds);
+
+ r = snd_pcm_poll_descriptors(pcm, pollfds, n_pollfd);
+ assert(r == n_pollfd);
+
+ for (;;) {
+ snd_pcm_sframes_t avail, delay;
+/* snd_pcm_uframes_t avail2; */
+ struct timespec now, timestamp;
+ unsigned short revents;
+ int written = 0;
+ uint64_t now_us, timestamp_us;
+ snd_pcm_state_t state;
+
+ r = poll(pollfds, n_pollfd, 0);
+ assert(r >= 0);
+
+ r = snd_pcm_poll_descriptors_revents(pcm, pollfds, n_pollfd, &revents);
+ assert(r == 0);
+
+ assert((revents & ~POLLOUT) == 0);
+
+/* state = snd_pcm_get_state(pcm); */
+
+ avail = snd_pcm_avail(pcm);
+ assert(avail >= 0);
+
+ r = snd_pcm_status(pcm, status);
+ assert(r == 0);
+
+ printf("%lu %lu\n", (unsigned long) avail, (unsigned long) snd_pcm_status_get_avail(status));
+
+ assert(avail == (snd_pcm_sframes_t) snd_pcm_status_get_avail(status));
+ snd_pcm_status_get_htstamp(status, ×tamp);
+ delay = snd_pcm_status_get_delay(status);
+ state = snd_pcm_status_get_state(status);
+
+/* r = snd_pcm_avail_delay(pcm, &avail, &delay); */
+/* assert(r == 0); */
+
+/* r = snd_pcm_htimestamp(pcm, &avail2, ×tamp); */
+/* assert(r == 0); */
+
+/* assert(avail == (snd_pcm_sframes_t) avail2); */
+
+ r = clock_gettime(CLOCK_MONOTONIC, &now);
+ assert(r == 0);
+
+ assert(!revents || avail > 0);
+
+ if (avail) {
+ snd_pcm_sframes_t sframes;
+ static const uint16_t samples[2] = { 0, 0 };
+
+ sframes = snd_pcm_writei(pcm, samples, 1);
+ assert(sframes == 1);
+
+ written = 1;
+ sample_count++;
+ }
+
+ if (!written &&
+ memcmp(×tamp, &last_timestamp, sizeof(timestamp)) == 0 &&
+ avail == last_avail &&
+ delay == last_delay) {
+ /* This is boring */
+ continue;
+ }
+
+ now_us = timespec_us(&now);
+ timestamp_us = timespec_us(×tamp);
+
+ printf("%llu\t%llu\t%llu\t%li\t%li\t%i\t%i\t%i\n",
+ (unsigned long long) (now_us - start_us),
+ (unsigned long long) (timestamp_us ? timestamp_us - start_us : 0),
+ (unsigned long long) ((sample_count - 1 - delay) * 1000000LU / 44100),
+ (signed long) avail,
+ (signed long) delay,
+ revents,
+ written,
+ state);
+
+ last_avail = avail;
+ last_delay = delay;
+ last_timestamp = timestamp;
+ }
+
+ return 0;
+}
commit adc9c2db6b4820be4d44faae4b0e523468cd3c14
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 03:20:36 2009 +0100
fix comment
diff --git a/src/pulsecore/asyncmsgq.c b/src/pulsecore/asyncmsgq.c
index 5c7af2a..e191b05 100644
--- a/src/pulsecore/asyncmsgq.c
+++ b/src/pulsecore/asyncmsgq.c
@@ -159,7 +159,7 @@ int pa_asyncmsgq_send(pa_asyncmsgq *a, pa_msgobject *object, int code, const voi
pa_assert_se(i.semaphore);
- /* Thus mutex makes the queue multiple-writer safe. This lock is only used on the writing side */
+ /* This mutex makes the queue multiple-writer safe. This lock is only used on the writing side */
pa_mutex_lock(a->mutex);
pa_assert_se(pa_asyncq_push(a->asyncq, &i, TRUE) == 0);
pa_mutex_unlock(a->mutex);
@@ -196,7 +196,13 @@ int pa_asyncmsgq_get(pa_asyncmsgq *a, pa_msgobject **object, int *code, void **u
if (chunk)
*chunk = a->current->memchunk;
-/* pa_log_debug("Get q=%p object=%p (%s) code=%i data=%p chunk.length=%lu", (void*) a, (void*) a->current->object, a->current->object ? a->current->object->parent.type_name : NULL, a->current->code, (void*) a->current->userdata, (unsigned long) a->current->memchunk.length); */
+/* pa_log_debug("Get q=%p object=%p (%s) code=%i data=%p chunk.length=%lu", */
+/* (void*) a, */
+/* (void*) a->current->object, */
+/* a->current->object ? a->current->object->parent.type_name : NULL, */
+/* a->current->code, */
+/* (void*) a->current->userdata, */
+/* (unsigned long) a->current->memchunk.length); */
return 0;
}
commit 26a270a934f0f174f7bd7eb89e85301963721deb
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 03:21:17 2009 +0100
big alsa module rework to make things more robust to broken sound drivers and make it easier to debug them
diff --git a/src/modules/alsa/alsa-sink.c b/src/modules/alsa/alsa-sink.c
index 5290268..239a9d7 100644
--- a/src/modules/alsa/alsa-sink.c
+++ b/src/modules/alsa/alsa-sink.c
@@ -56,11 +56,13 @@
#include "alsa-util.h"
#include "alsa-sink.h"
+/* #define DEBUG_TIMING */
+
#define DEFAULT_DEVICE "default"
#define DEFAULT_TSCHED_BUFFER_USEC (2*PA_USEC_PER_SEC) /* 2s */
#define DEFAULT_TSCHED_WATERMARK_USEC (20*PA_USEC_PER_MSEC) /* 20ms */
-#define TSCHED_MIN_SLEEP_USEC (3*PA_USEC_PER_MSEC) /* 3ms */
-#define TSCHED_MIN_WAKEUP_USEC (3*PA_USEC_PER_MSEC) /* 3ms */
+#define TSCHED_MIN_SLEEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms */
+#define TSCHED_MIN_WAKEUP_USEC (4*PA_USEC_PER_MSEC) /* 4ms */
struct userdata {
pa_core *core;
@@ -78,17 +80,17 @@ struct userdata {
snd_mixer_elem_t *mixer_elem;
long hw_volume_max, hw_volume_min;
long hw_dB_max, hw_dB_min;
- pa_bool_t hw_dB_supported;
- pa_bool_t mixer_seperate_channels;
+ pa_bool_t hw_dB_supported:1;
+ pa_bool_t mixer_seperate_channels:1;
pa_cvolume hardware_volume;
- size_t frame_size, fragment_size, hwbuf_size, tsched_watermark;
+ size_t frame_size, fragment_size, hwbuf_size, tsched_watermark, hwbuf_unused, min_sleep, min_wakeup;
unsigned nfragments;
pa_memchunk memchunk;
char *device_name;
- pa_bool_t use_mmap, use_tsched;
+ pa_bool_t use_mmap:1, use_tsched:1;
pa_bool_t first, after_rewind;
@@ -97,39 +99,70 @@ struct userdata {
snd_mixer_selem_channel_id_t mixer_map[SND_MIXER_SCHN_LAST];
pa_smoother *smoother;
- int64_t frame_index;
+ uint64_t write_count;
uint64_t since_start;
-
- snd_pcm_sframes_t hwbuf_unused_frames;
};
static void userdata_free(struct userdata *u);
+static void fix_min_sleep_wakeup(struct userdata *u) {
+ size_t max_use, max_use_2;
+
+ pa_assert(u);
+
+ max_use = u->hwbuf_size - u->hwbuf_unused;
+ max_use_2 = pa_frame_align(max_use/2, &u->sink->sample_spec);
+
+ u->min_sleep = pa_usec_to_bytes(TSCHED_MIN_SLEEP_USEC, &u->sink->sample_spec);
+ u->min_sleep = PA_CLAMP(u->min_sleep, u->frame_size, max_use_2);
+
+ u->min_wakeup = pa_usec_to_bytes(TSCHED_MIN_WAKEUP_USEC, &u->sink->sample_spec);
+ u->min_wakeup = PA_CLAMP(u->min_wakeup, u->frame_size, max_use_2);
+}
+
static void fix_tsched_watermark(struct userdata *u) {
size_t max_use;
- size_t min_sleep, min_wakeup;
pa_assert(u);
- max_use = u->hwbuf_size - (size_t) u->hwbuf_unused_frames * u->frame_size;
+ max_use = u->hwbuf_size - u->hwbuf_unused;
- min_sleep = pa_usec_to_bytes(TSCHED_MIN_SLEEP_USEC, &u->sink->sample_spec);
- min_wakeup = pa_usec_to_bytes(TSCHED_MIN_WAKEUP_USEC, &u->sink->sample_spec);
+ if (u->tsched_watermark > max_use - u->min_sleep)
+ u->tsched_watermark = max_use - u->min_sleep;
- if (min_sleep > max_use/2)
- min_sleep = pa_frame_align(max_use/2, &u->sink->sample_spec);
- if (min_sleep < u->frame_size)
- min_sleep = u->frame_size;
+ if (u->tsched_watermark < u->min_wakeup)
+ u->tsched_watermark = u->min_wakeup;
+}
+
+static void adjust_after_underrun(struct userdata *u) {
+ size_t old_watermark;
+ pa_usec_t old_min_latency, new_min_latency;
- if (min_wakeup > max_use/2)
- min_wakeup = pa_frame_align(max_use/2, &u->sink->sample_spec);
- if (min_wakeup < u->frame_size)
- min_wakeup = u->frame_size;
+ pa_assert(u);
- if (u->tsched_watermark > max_use-min_sleep)
- u->tsched_watermark = max_use-min_sleep;
+ /* First, just try to increase the watermark */
+ old_watermark = u->tsched_watermark;
+ u->tsched_watermark *= 2;
+ fix_tsched_watermark(u);
- if (u->tsched_watermark < min_wakeup)
- u->tsched_watermark = min_wakeup;
+ if (old_watermark != u->tsched_watermark) {
+ pa_log_notice("Increasing wakeup watermark to %0.2f ms",
+ (double) pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
+ return;
+ }
+
+ /* Hmm, we cannot increase the watermark any further, hence let's raise the latency */
+ old_min_latency = u->sink->thread_info.min_latency;
+ new_min_latency = PA_MIN(old_min_latency * 2, u->sink->thread_info.max_latency);
+
+ if (old_min_latency != new_min_latency) {
+ pa_log_notice("Increasing minimal latency to %0.2f ms",
+ (double) new_min_latency / PA_USEC_PER_MSEC);
+
+ pa_sink_update_latency_range(u->sink, new_min_latency, u->sink->thread_info.max_latency);
+ return;
+ }
+
+ /* When we reach this we're officialy fucked! */
}
static void hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_usec_t*process_usec) {
@@ -145,17 +178,20 @@ static void hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_usec_t*p
if (usec == (pa_usec_t) -1)
usec = pa_bytes_to_usec(u->hwbuf_size, &u->sink->sample_spec);
-/* pa_log_debug("hw buffer time: %u ms", (unsigned) (usec / PA_USEC_PER_MSEC)); */
-
wm = pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec);
- if (usec >= wm) {
- *sleep_usec = usec - wm;
- *process_usec = wm;
- } else
- *process_usec = *sleep_usec = usec / 2;
+ if (wm > usec)
+ wm = usec/2;
+
+ *sleep_usec = usec - wm;
+ *process_usec = wm;
-/* pa_log_debug("after watermark: %u ms", (unsigned) (*sleep_usec / PA_USEC_PER_MSEC)); */
+#ifdef DEBUG_TIMING
+ pa_log_debug("Buffer time: %lu ms; Sleep time: %lu ms; Process time: %lu ms",
+ (unsigned long) (usec / PA_USEC_PER_MSEC),
+ (unsigned long) (*sleep_usec / PA_USEC_PER_MSEC),
+ (unsigned long) (*process_usec / PA_USEC_PER_MSEC));
+#endif
}
static int try_recover(struct userdata *u, const char *call, int err) {
@@ -170,40 +206,45 @@ static int try_recover(struct userdata *u, const char *call, int err) {
if (err == -EPIPE)
pa_log_debug("%s: Buffer underrun!", call);
- if ((err = snd_pcm_recover(u->pcm_handle, err, 1)) == 0) {
- u->first = TRUE;
- u->since_start = 0;
- return 0;
+ if ((err = snd_pcm_recover(u->pcm_handle, err, 1)) < 0) {
+ pa_log("%s: %s", call, snd_strerror(err));
+ return -1;
}
- pa_log("%s: %s", call, snd_strerror(err));
- return -1;
+ u->first = TRUE;
+ u->since_start = 0;
+ return 0;
}
-static size_t check_left_to_play(struct userdata *u, snd_pcm_sframes_t n) {
+static size_t check_left_to_play(struct userdata *u, size_t n_bytes) {
size_t left_to_play;
- if ((size_t) n*u->frame_size < u->hwbuf_size)
- left_to_play = u->hwbuf_size - ((size_t) n*u->frame_size);
- else
- left_to_play = 0;
+ /* We use <= instead of < for this check here because an underrun
+ * only happens after the last sample was processed, not already when
+ * it is removed from the buffer. This is particularly important
+ * when block transfer is used. */
- if (left_to_play > 0) {
-/* pa_log_debug("%0.2f ms left to play", (double) pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) / PA_USEC_PER_MSEC); */
- } else if (!u->first && !u->after_rewind) {
+ if (n_bytes <= u->hwbuf_size) {
+ left_to_play = u->hwbuf_size - n_bytes;
- if (pa_log_ratelimit())
- pa_log_info("Underrun!");
+#ifdef DEBUG_TIMING
+ pa_log_debug("%0.2f ms left to play", (double) pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
+#endif
- if (u->use_tsched) {
- size_t old_watermark = u->tsched_watermark;
+ } else {
+ left_to_play = 0;
- u->tsched_watermark *= 2;
- fix_tsched_watermark(u);
+#ifdef DEBUG_TIMING
+ PA_DEBUG_TRAP;
+#endif
+
+ if (!u->first && !u->after_rewind) {
+
+ if (pa_log_ratelimit())
+ pa_log_info("Underrun!");
- if (old_watermark != u->tsched_watermark)
- pa_log_notice("Increasing wakeup watermark to %0.2f ms",
- (double) pa_bytes_to_usec(u->tsched_watermark, &u->sink->sample_spec) / PA_USEC_PER_MSEC);
+ if (u->use_tsched)
+ adjust_after_underrun(u);
}
}
@@ -211,7 +252,7 @@ static size_t check_left_to_play(struct userdata *u, snd_pcm_sframes_t n) {
}
static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled) {
- int work_done = 0;
+ pa_bool_t work_done = TRUE;
pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_play;
@@ -223,22 +264,27 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
for (;;) {
snd_pcm_sframes_t n;
+ size_t n_bytes;
int r;
- snd_pcm_hwsync(u->pcm_handle);
-
/* First we determine how many samples are missing to fill the
* buffer up to 100% */
- if (PA_UNLIKELY((n = pa_alsa_safe_avail_update(u->pcm_handle, u->hwbuf_size, &u->sink->sample_spec)) < 0)) {
+ if (PA_UNLIKELY((n = pa_alsa_safe_avail(u->pcm_handle, u->hwbuf_size, &u->sink->sample_spec)) < 0)) {
- if ((r = try_recover(u, "snd_pcm_avail_update", (int) n)) == 0)
+ if ((r = try_recover(u, "snd_pcm_avail", (int) n)) == 0)
continue;
return r;
}
- left_to_play = check_left_to_play(u, n);
+ n_bytes = (size_t) n * u->frame_size;
+
+#ifdef DEBUG_TIMING
+ pa_log_debug("avail: %lu", (unsigned long) n_bytes);
+#endif
+
+ left_to_play = check_left_to_play(u, n_bytes);
if (u->use_tsched)
@@ -249,33 +295,42 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
* a single hw buffer length. */
if (!polled &&
- pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) > process_usec+max_sleep_usec/2)
+ pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) > process_usec+max_sleep_usec/2) {
+#ifdef DEBUG_TIMING
+ pa_log_debug("Not filling up, because too early.");
+#endif
break;
+ }
- if (PA_UNLIKELY(n <= u->hwbuf_unused_frames)) {
+ if (PA_UNLIKELY(n_bytes <= u->hwbuf_unused)) {
if (polled && pa_log_ratelimit())
pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
"Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
"We were woken up with POLLOUT set -- however a subsequent snd_pcm_avail_update() returned 0."));
+#ifdef DEBUG_TIMING
+ pa_log_debug("Not filling up, because not necessary.");
+#endif
break;
}
- n -= u->hwbuf_unused_frames;
-
+ n_bytes -= u->hwbuf_unused;
polled = FALSE;
-/* pa_log_debug("Filling up"); */
+#ifdef DEBUG_TIMING
+ pa_log_debug("Filling up");
+#endif
for (;;) {
pa_memchunk chunk;
void *p;
int err;
const snd_pcm_channel_area_t *areas;
- snd_pcm_uframes_t offset, frames = (snd_pcm_uframes_t) n;
+ snd_pcm_uframes_t offset, frames;
snd_pcm_sframes_t sframes;
+ frames = (snd_pcm_uframes_t) (n_bytes / u->frame_size);
/* pa_log_debug("%lu frames to write", (unsigned long) frames); */
if (PA_UNLIKELY((err = pa_alsa_safe_mmap_begin(u->pcm_handle, &areas, &offset, &frames, u->hwbuf_size, &u->sink->sample_spec)) < 0)) {
@@ -305,9 +360,6 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
chunk.index = 0;
pa_sink_render_into_full(u->sink, &chunk);
-
- /* FIXME: Maybe we can do something to keep this memory block
- * a little bit longer around? */
pa_memblock_unref_fixed(chunk.memblock);
if (PA_UNLIKELY((sframes = snd_pcm_mmap_commit(u->pcm_handle, offset, frames)) < 0)) {
@@ -318,26 +370,28 @@ static int mmap_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
return r;
}
- work_done = 1;
+ work_done = TRUE;
- u->frame_index += (int64_t) frames;
+ u->write_count += frames * u->frame_size;
u->since_start += frames * u->frame_size;
-/* pa_log_debug("wrote %lu frames", (unsigned long) frames); */
+#ifdef DEBUG_TIMING
+ pa_log_debug("Wrote %lu bytes", (unsigned long) (frames * u->frame_size));
+#endif
- if (frames >= (snd_pcm_uframes_t) n)
+ if ((size_t) frames * u->frame_size >= n_bytes)
break;
- n -= (snd_pcm_sframes_t) frames;
+ n_bytes -= (size_t) frames * u->frame_size;
}
}
*sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) - process_usec;
- return work_done;
+ return work_done ? 1 : 0;
}
static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled) {
- int work_done = 0;
+ pa_bool_t work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_play;
@@ -349,19 +403,19 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
for (;;) {
snd_pcm_sframes_t n;
+ size_t n_bytes;
int r;
- snd_pcm_hwsync(u->pcm_handle);
+ if (PA_UNLIKELY((n = pa_alsa_safe_avail(u->pcm_handle, u->hwbuf_size, &u->sink->sample_spec)) < 0)) {
- if (PA_UNLIKELY((n = pa_alsa_safe_avail_update(u->pcm_handle, u->hwbuf_size, &u->sink->sample_spec)) < 0)) {
-
- if ((r = try_recover(u, "snd_pcm_avail_update", (int) n)) == 0)
+ if ((r = try_recover(u, "snd_pcm_avail", (int) n)) == 0)
continue;
return r;
}
- left_to_play = check_left_to_play(u, n);
+ n_bytes = (size_t) n * u->frame_size;
+ left_to_play = check_left_to_play(u, n_bytes);
if (u->use_tsched)
@@ -375,7 +429,7 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) > process_usec+max_sleep_usec/2)
break;
- if (PA_UNLIKELY(n <= u->hwbuf_unused_frames)) {
+ if (PA_UNLIKELY(n_bytes <= u->hwbuf_unused)) {
if (polled && pa_log_ratelimit())
pa_log(_("ALSA woke us up to write new data to the device, but there was actually nothing to write! "
@@ -385,8 +439,7 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
break;
}
- n -= u->hwbuf_unused_frames;
-
+ n_bytes -= u->hwbuf_unused;
polled = FALSE;
for (;;) {
@@ -396,14 +449,14 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
/* pa_log_debug("%lu frames to write", (unsigned long) frames); */
if (u->memchunk.length <= 0)
- pa_sink_render(u->sink, (size_t) n * u->frame_size, &u->memchunk);
+ pa_sink_render(u->sink, n_bytes, &u->memchunk);
pa_assert(u->memchunk.length > 0);
frames = (snd_pcm_sframes_t) (u->memchunk.length / u->frame_size);
- if (frames > n)
- frames = n;
+ if (frames > (snd_pcm_sframes_t) (n_bytes/u->frame_size))
+ frames = (snd_pcm_sframes_t) (n_bytes/u->frame_size);
p = pa_memblock_acquire(u->memchunk.memblock);
frames = snd_pcm_writei(u->pcm_handle, (const uint8_t*) p + u->memchunk.index, (snd_pcm_uframes_t) frames);
@@ -427,30 +480,29 @@ static int unix_write(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polle
pa_memchunk_reset(&u->memchunk);
}
- work_done = 1;
+ work_done = TRUE;
- u->frame_index += frames;
- u->since_start += (size_t) frames * u->frame_size;
+ u->write_count += frames * u->frame_size;
+ u->since_start += frames * u->frame_size;
/* pa_log_debug("wrote %lu frames", (unsigned long) frames); */
- if (frames >= n)
+ if ((size_t) frames * u->frame_size >= n_bytes)
break;
- n -= frames;
+ n_bytes -= (size_t) frames * u->frame_size;
}
}
*sleep_usec = pa_bytes_to_usec(left_to_play, &u->sink->sample_spec) - process_usec;
- return work_done;
+ return work_done ? 1 : 0;
}
static void update_smoother(struct userdata *u) {
- snd_pcm_sframes_t delay = 0;
- int64_t frames;
+ snd_pcm_sframes_t delay = 0;
+ int64_t position;
int err;
- pa_usec_t now1, now2;
-/* struct timeval timestamp; */
+ pa_usec_t now1 = 0, now2;
snd_pcm_status_t *status;
snd_pcm_status_alloca(&status);
@@ -460,36 +512,35 @@ static void update_smoother(struct userdata *u) {
/* Let's update the time smoother */
- snd_pcm_hwsync(u->pcm_handle);
- snd_pcm_avail_update(u->pcm_handle);
-
-/* if (PA_UNLIKELY((err = snd_pcm_status(u->pcm_handle, status)) < 0)) { */
-/* pa_log("Failed to query DSP status data: %s", snd_strerror(err)); */
-/* return; */
-/* } */
-
-/* delay = snd_pcm_status_get_delay(status); */
-
if (PA_UNLIKELY((err = snd_pcm_delay(u->pcm_handle, &delay)) < 0)) {
- pa_log("Failed to query DSP status data: %s", snd_strerror(err));
+ pa_log_warn("Failed to query DSP status data: %s", snd_strerror(err));
return;
}
- frames = u->frame_index - delay;
+ if (PA_UNLIKELY((err = snd_pcm_status(u->pcm_handle, status)) < 0))
+ pa_log_warn("Failed to get timestamp: %s", snd_strerror(err));
+ else {
+ snd_htimestamp_t htstamp = { 0, 0 };
+ snd_pcm_status_get_htstamp(status, &htstamp);
+ now1 = pa_timespec_load(&htstamp);
+ }
-/* pa_log_debug("frame_index = %llu, delay = %llu, p = %llu", (unsigned long long) u->frame_index, (unsigned long long) delay, (unsigned long long) frames); */
+ position = (int64_t) u->write_count - ((int64_t) delay * (int64_t) u->frame_size);
-/* snd_pcm_status_get_tstamp(status, ×tamp); */
-/* pa_rtclock_from_wallclock(×tamp); */
-/* now1 = pa_timeval_load(×tamp); */
+ if (PA_UNLIKELY(position < 0))
+ position = 0;
+
+ /* Hmm, if the timestamp is 0, then it wasn't set and we take the current time */
+ if (now1 <= 0)
+ now1 = pa_rtclock_usec();
+
+ now2 = pa_bytes_to_usec((uint64_t) position, &u->sink->sample_spec);
- now1 = pa_rtclock_usec();
- now2 = pa_bytes_to_usec((uint64_t) frames * u->frame_size, &u->sink->sample_spec);
pa_smoother_put(u->smoother, now1, now2);
}
static pa_usec_t sink_get_latency(struct userdata *u) {
- pa_usec_t r = 0;
+ pa_usec_t r;
int64_t delay;
pa_usec_t now1, now2;
@@ -498,10 +549,9 @@ static pa_usec_t sink_get_latency(struct userdata *u) {
now1 = pa_rtclock_usec();
now2 = pa_smoother_get(u->smoother, now1);
- delay = (int64_t) pa_bytes_to_usec((uint64_t) u->frame_index * u->frame_size, &u->sink->sample_spec) - (int64_t) now2;
+ delay = (int64_t) pa_bytes_to_usec(u->write_count, &u->sink->sample_spec) - (int64_t) now2;
- if (delay > 0)
- r = (pa_usec_t) delay;
+ r = delay >= 0 ? (pa_usec_t) delay : 0;
if (u->memchunk.memblock)
r += pa_bytes_to_usec(u->memchunk.length, &u->sink->sample_spec);
@@ -550,7 +600,7 @@ static int update_sw_params(struct userdata *u) {
pa_assert(u);
/* Use the full buffer if noone asked us for anything specific */
- u->hwbuf_unused_frames = 0;
+ u->hwbuf_unused = 0;
if (u->use_tsched) {
pa_usec_t latency;
@@ -558,7 +608,7 @@ static int update_sw_params(struct userdata *u) {
if ((latency = pa_sink_get_requested_latency_within_thread(u->sink)) != (pa_usec_t) -1) {
size_t b;
- pa_log_debug("latency set to %0.2fms", (double) latency / PA_USEC_PER_MSEC);
+ pa_log_debug("Latency set to %0.2fms", (double) latency / PA_USEC_PER_MSEC);
b = pa_usec_to_bytes(latency, &u->sink->sample_spec);
@@ -567,18 +617,17 @@ static int update_sw_params(struct userdata *u) {
if (PA_UNLIKELY(b < u->frame_size))
b = u->frame_size;
- u->hwbuf_unused_frames = (snd_pcm_sframes_t)
- (PA_LIKELY(b < u->hwbuf_size) ?
- ((u->hwbuf_size - b) / u->frame_size) : 0);
+ u->hwbuf_unused = PA_LIKELY(b < u->hwbuf_size) ? (u->hwbuf_size - b) : 0;
}
+ fix_min_sleep_wakeup(u);
fix_tsched_watermark(u);
}
- pa_log_debug("hwbuf_unused_frames=%lu", (unsigned long) u->hwbuf_unused_frames);
+ pa_log_debug("hwbuf_unused=%lu", (unsigned long) u->hwbuf_unused);
/* We need at last one frame in the used part of the buffer */
- avail_min = (snd_pcm_uframes_t) u->hwbuf_unused_frames + 1;
+ avail_min = (snd_pcm_uframes_t) u->hwbuf_unused / u->frame_size + 1;
if (u->use_tsched) {
pa_usec_t sleep_usec, process_usec;
@@ -594,7 +643,7 @@ static int update_sw_params(struct userdata *u) {
return err;
}
- pa_sink_set_max_request(u->sink, u->hwbuf_size - (size_t) u->hwbuf_unused_frames * u->frame_size);
+ pa_sink_set_max_request(u->sink, u->hwbuf_size - u->hwbuf_unused);
return 0;
}
@@ -655,8 +704,6 @@ static int unsuspend(struct userdata *u) {
if (build_pollfd(u) < 0)
goto fail;
- /* FIXME: We need to reload the volume somehow */
-
u->first = TRUE;
u->since_start = 0;
@@ -981,13 +1028,13 @@ static void sink_set_mute_cb(pa_sink *s) {
static void sink_update_requested_latency_cb(pa_sink *s) {
struct userdata *u = s->userdata;
- snd_pcm_sframes_t before;
+ size_t before;
pa_assert(u);
if (!u->pcm_handle)
return;
- before = u->hwbuf_unused_frames;
+ before = u->hwbuf_unused;
update_sw_params(u);
/* Let's check whether we now use only a smaller part of the
@@ -996,7 +1043,7 @@ static void sink_update_requested_latency_cb(pa_sink *s) {
current fill level. Thus, let's do a full rewind once, to clear
things up. */
- if (u->hwbuf_unused_frames > before) {
+ if (u->hwbuf_unused > before) {
pa_log_debug("Requesting rewind due to latency change.");
pa_sink_request_rewind(s, (size_t) -1);
}
@@ -1051,7 +1098,7 @@ static int process_rewind(struct userdata *u) {
if (rewind_nbytes <= 0)
pa_log_info("Tried rewind, but was apparently not possible.");
else {
- u->frame_index -= out_frames;
+ u->write_count -= out_frames * u->frame_size;
pa_log_debug("Rewound %lu bytes.", (unsigned long) rewind_nbytes);
pa_sink_process_rewind(u->sink, rewind_nbytes);
@@ -1086,7 +1133,9 @@ static void thread_func(void *userdata) {
for (;;) {
int ret;
-/* pa_log_debug("loop"); */
+#ifdef DEBUG_TIMING
+ pa_log_debug("Loop");
+#endif
/* Render some data and write it to the dsp */
if (PA_SINK_IS_OPENED(u->sink->thread_info.state)) {
@@ -1132,7 +1181,7 @@ static void thread_func(void *userdata) {
* we have filled the buffer at least once
* completely.*/
- /*pa_log_debug("Cutting sleep time for the initial iterations by half.");*/
+ pa_log_debug("Cutting sleep time for the initial iterations by half.");
sleep_usec /= 2;
}
@@ -1178,16 +1227,15 @@ static void thread_func(void *userdata) {
goto fail;
}
- if (revents & (POLLIN|POLLERR|POLLNVAL|POLLHUP|POLLPRI)) {
+ if (revents & ~POLLOUT) {
if (pa_alsa_recover_from_poll(u->pcm_handle, revents) < 0)
goto fail;
u->first = TRUE;
u->since_start = 0;
- }
+ } else if (revents && u->use_tsched && pa_log_ratelimit())
+ pa_log_debug("Wakeup from ALSA!");
- if (revents && u->use_tsched && pa_log_ratelimit())
- pa_log_debug("Wakeup from ALSA!%s%s", (revents & POLLIN) ? " INPUT" : "", (revents & POLLOUT) ? " OUTPUT" : "");
} else
revents = 0;
}
@@ -1382,11 +1430,8 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
u->use_mmap = use_mmap;
u->use_tsched = use_tsched;
u->first = TRUE;
- u->since_start = 0;
- u->after_rewind = FALSE;
u->rtpoll = pa_rtpoll_new();
pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
- u->alsa_rtpoll_item = NULL;
u->smoother = pa_smoother_new(DEFAULT_TSCHED_BUFFER_USEC*2, DEFAULT_TSCHED_BUFFER_USEC*2, TRUE, 5);
usec = pa_rtclock_usec();
@@ -1503,17 +1548,13 @@ pa_sink *pa_alsa_sink_new(pa_module *m, pa_modargs *ma, const char*driver, pa_ca
u->fragment_size = frag_size = (uint32_t) (period_frames * frame_size);
u->nfragments = nfrags;
u->hwbuf_size = u->fragment_size * nfrags;
- u->hwbuf_unused_frames = 0;
u->tsched_watermark = tsched_watermark;
- u->frame_index = 0;
- u->hw_dB_supported = FALSE;
- u->hw_dB_min = u->hw_dB_max = 0;
- u->hw_volume_min = u->hw_volume_max = 0;
- u->mixer_seperate_channels = FALSE;
pa_cvolume_mute(&u->hardware_volume, u->sink->sample_spec.channels);
- if (use_tsched)
+ if (use_tsched) {
+ fix_min_sleep_wakeup(u);
fix_tsched_watermark(u);
+ }
u->sink->thread_info.max_rewind = use_tsched ? u->hwbuf_size : 0;
u->sink->thread_info.max_request = u->hwbuf_size;
diff --git a/src/modules/alsa/alsa-source.c b/src/modules/alsa/alsa-source.c
index a5de388..50cdb31 100644
--- a/src/modules/alsa/alsa-source.c
+++ b/src/modules/alsa/alsa-source.c
@@ -57,11 +57,13 @@
#include "alsa-util.h"
#include "alsa-source.h"
+/* #define DEBUG_TIMING */
+
#define DEFAULT_DEVICE "default"
#define DEFAULT_TSCHED_BUFFER_USEC (2*PA_USEC_PER_SEC) /* 2s */
#define DEFAULT_TSCHED_WATERMARK_USEC (20*PA_USEC_PER_MSEC) /* 20ms */
-#define TSCHED_MIN_SLEEP_USEC (3*PA_USEC_PER_MSEC) /* 3ms */
-#define TSCHED_MIN_WAKEUP_USEC (3*PA_USEC_PER_MSEC) /* 3ms */
+#define TSCHED_MIN_SLEEP_USEC (10*PA_USEC_PER_MSEC) /* 10ms */
+#define TSCHED_MIN_WAKEUP_USEC (4*PA_USEC_PER_MSEC) /* 4ms */
struct userdata {
pa_core *core;
@@ -79,55 +81,85 @@ struct userdata {
snd_mixer_elem_t *mixer_elem;
long hw_volume_max, hw_volume_min;
long hw_dB_max, hw_dB_min;
- pa_bool_t hw_dB_supported;
- pa_bool_t mixer_seperate_channels;
+ pa_bool_t hw_dB_supported:1;
+ pa_bool_t mixer_seperate_channels:1;
pa_cvolume hardware_volume;
- size_t frame_size, fragment_size, hwbuf_size, tsched_watermark;
+ size_t frame_size, fragment_size, hwbuf_size, tsched_watermark, hwbuf_unused, min_sleep, min_wakeup;
unsigned nfragments;
char *device_name;
- pa_bool_t use_mmap, use_tsched;
+ pa_bool_t use_mmap:1, use_tsched:1;
pa_rtpoll_item *alsa_rtpoll_item;
snd_mixer_selem_channel_id_t mixer_map[SND_MIXER_SCHN_LAST];
pa_smoother *smoother;
- int64_t frame_index;
-
- snd_pcm_sframes_t hwbuf_unused_frames;
+ uint64_t read_count;
};
static void userdata_free(struct userdata *u);
+static void fix_min_sleep_wakeup(struct userdata *u) {
+ size_t max_use, max_use_2;
+ pa_assert(u);
+
+ max_use = u->hwbuf_size - u->hwbuf_unused;
+ max_use_2 = pa_frame_align(max_use/2, &u->source->sample_spec);
+
+ u->min_sleep = pa_usec_to_bytes(TSCHED_MIN_SLEEP_USEC, &u->source->sample_spec);
+ u->min_sleep = PA_CLAMP(u->min_sleep, u->frame_size, max_use_2);
+
+ u->min_wakeup = pa_usec_to_bytes(TSCHED_MIN_WAKEUP_USEC, &u->source->sample_spec);
+ u->min_wakeup = PA_CLAMP(u->min_wakeup, u->frame_size, max_use_2);
+}
+
static void fix_tsched_watermark(struct userdata *u) {
size_t max_use;
- size_t min_sleep, min_wakeup;
pa_assert(u);
- max_use = u->hwbuf_size - (size_t) u->hwbuf_unused_frames * u->frame_size;
+ max_use = u->hwbuf_size - u->hwbuf_unused;
+
+ if (u->tsched_watermark > max_use - u->min_sleep)
+ u->tsched_watermark = max_use - u->min_sleep;
- min_sleep = pa_usec_to_bytes(TSCHED_MIN_SLEEP_USEC, &u->source->sample_spec);
- min_wakeup = pa_usec_to_bytes(TSCHED_MIN_WAKEUP_USEC, &u->source->sample_spec);
+ if (u->tsched_watermark < u->min_wakeup)
+ u->tsched_watermark = u->min_wakeup;
+}
+
+static void adjust_after_overrun(struct userdata *u) {
+ size_t old_watermark;
+ pa_usec_t old_min_latency, new_min_latency;
+
+ pa_assert(u);
+
+ /* First, just try to increase the watermark */
+ old_watermark = u->tsched_watermark;
+ u->tsched_watermark *= 2;
+ fix_tsched_watermark(u);
+
+ if (old_watermark != u->tsched_watermark) {
+ pa_log_notice("Increasing wakeup watermark to %0.2f ms",
+ (double) pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec) / PA_USEC_PER_MSEC);
+ return;
+ }
- if (min_sleep > max_use/2)
- min_sleep = pa_frame_align(max_use/2, &u->source->sample_spec);
- if (min_sleep < u->frame_size)
- min_sleep = u->frame_size;
+ /* Hmm, we cannot increase the watermark any further, hence let's raise the latency */
+ old_min_latency = u->source->thread_info.min_latency;
+ new_min_latency = PA_MIN(old_min_latency * 2, u->source->thread_info.max_latency);
- if (min_wakeup > max_use/2)
- min_wakeup = pa_frame_align(max_use/2, &u->source->sample_spec);
- if (min_wakeup < u->frame_size)
- min_wakeup = u->frame_size;
+ if (old_min_latency != new_min_latency) {
+ pa_log_notice("Increasing minimal latency to %0.2f ms",
+ (double) new_min_latency / PA_USEC_PER_MSEC);
- if (u->tsched_watermark > max_use-min_sleep)
- u->tsched_watermark = max_use-min_sleep;
+ pa_source_update_latency_range(u->source, new_min_latency, u->source->thread_info.max_latency);
+ return;
+ }
- if (u->tsched_watermark < min_wakeup)
- u->tsched_watermark = min_wakeup;
+ /* When we reach this we're officialy fucked! */
}
static pa_usec_t hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_usec_t*process_usec) {
@@ -140,17 +172,20 @@ static pa_usec_t hw_sleep_time(struct userdata *u, pa_usec_t *sleep_usec, pa_use
if (usec == (pa_usec_t) -1)
usec = pa_bytes_to_usec(u->hwbuf_size, &u->source->sample_spec);
-/* pa_log_debug("hw buffer time: %u ms", (unsigned) (usec / PA_USEC_PER_MSEC)); */
-
wm = pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec);
- if (usec >= wm) {
- *sleep_usec = usec - wm;
- *process_usec = wm;
- } else
- *process_usec = *sleep_usec = usec /= 2;
+ if (wm > usec)
+ wm = usec/2;
-/* pa_log_debug("after watermark: %u ms", (unsigned) (*sleep_usec / PA_USEC_PER_MSEC)); */
+ *sleep_usec = usec - wm;
+ *process_usec = wm;
+
+#ifdef DEBUG_TIMING
+ pa_log_debug("Buffer time: %lu ms; Sleep time: %lu ms; Process time: %lu ms",
+ (unsigned long) (usec / PA_USEC_PER_MSEC),
+ (unsigned long) (*sleep_usec / PA_USEC_PER_MSEC),
+ (unsigned long) (*process_usec / PA_USEC_PER_MSEC));
+#endif
return usec;
}
@@ -167,47 +202,50 @@ static int try_recover(struct userdata *u, const char *call, int err) {
if (err == -EPIPE)
pa_log_debug("%s: Buffer overrun!", call);
- if ((err = snd_pcm_recover(u->pcm_handle, err, 1)) == 0) {
- snd_pcm_start(u->pcm_handle);
- return 0;
+ if ((err = snd_pcm_recover(u->pcm_handle, err, 1)) < 0) {
+ pa_log("%s: %s", call, snd_strerror(err));
+ return -1;
}
- pa_log("%s: %s", call, snd_strerror(err));
- return -1;
+ snd_pcm_start(u->pcm_handle);
+ return 0;
}
-static size_t check_left_to_record(struct userdata *u, snd_pcm_sframes_t n) {
+static size_t check_left_to_record(struct userdata *u, size_t n_bytes) {
size_t left_to_record;
- size_t rec_space = u->hwbuf_size - (size_t) u->hwbuf_unused_frames*u->frame_size;
+ size_t rec_space = u->hwbuf_size - u->hwbuf_unused;
- if ((size_t) n*u->frame_size < rec_space)
- left_to_record = rec_space - ((size_t) n*u->frame_size);
- else
- left_to_record = 0;
+ /* We use <= instead of < for this check here because an overrun
+ * only happens after the last sample was processed, not already when
+ * it is removed from the buffer. This is particularly important
+ * when block transfer is used. */
+
+ if (n_bytes <= rec_space) {
+ left_to_record = rec_space - n_bytes;
+
+#ifdef DEBUG_TIMING
+ pa_log_debug("%0.2f ms left to record", (double) pa_bytes_to_usec(left_to_record, &u->source->sample_spec) / PA_USEC_PER_MSEC);
+#endif
- if (left_to_record > 0) {
-/* pa_log_debug("%0.2f ms left to record", (double) pa_bytes_to_usec(left_to_record, &u->source->sample_spec) / PA_USEC_PER_MSEC); */
} else {
- if (pa_log_ratelimit())
- pa_log_info("Overrun!");
+ left_to_record = 0;
- if (u->use_tsched) {
- size_t old_watermark = u->tsched_watermark;
+#ifdef DEBUG_TIMING
+ PA_DEBUG_TRAP;
+#endif
- u->tsched_watermark *= 2;
- fix_tsched_watermark(u);
+ if (pa_log_ratelimit())
+ pa_log_info("Overrun!");
- if (old_watermark != u->tsched_watermark)
- pa_log_notice("Increasing wakeup watermark to %0.2f ms",
- (double) pa_bytes_to_usec(u->tsched_watermark, &u->source->sample_spec) / PA_USEC_PER_MSEC);
- }
+ if (u->use_tsched)
+ adjust_after_overrun(u);
}
return left_to_record;
}
static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled) {
- int work_done = 0;
+ pa_bool_t work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_record;
@@ -219,45 +257,63 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
for (;;) {
snd_pcm_sframes_t n;
+ size_t n_bytes;
int r;
- snd_pcm_hwsync(u->pcm_handle);
-
- if (PA_UNLIKELY((n = pa_alsa_safe_avail_update(u->pcm_handle, u->hwbuf_size, &u->source->sample_spec)) < 0)) {
+ if (PA_UNLIKELY((n = pa_alsa_safe_avail(u->pcm_handle, u->hwbuf_size, &u->source->sample_spec)) < 0)) {
- if ((r = try_recover(u, "snd_pcm_avail_update", (int) n)) == 0)
+ if ((r = try_recover(u, "snd_pcm_avail", (int) n)) == 0)
continue;
return r;
}
- left_to_record = check_left_to_record(u, n);
+ n_bytes = (size_t) n * u->frame_size;
+
+#ifdef DEBUG_TIMING
+ pa_log_debug("avail: %lu", (unsigned long) n_bytes);
+#endif
+
+ left_to_record = check_left_to_record(u, n_bytes);
if (u->use_tsched)
if (!polled &&
- pa_bytes_to_usec(left_to_record, &u->source->sample_spec) > process_usec+max_sleep_usec/2)
+ pa_bytes_to_usec(left_to_record, &u->source->sample_spec) > process_usec+max_sleep_usec/2) {
+#ifdef DEBUG_TIMING
+ pa_log_debug("Not reading, because too early.");
+#endif
break;
+ }
- if (PA_UNLIKELY(n <= 0)) {
+ if (PA_UNLIKELY(n_bytes <= 0)) {
if (polled && pa_log_ratelimit())
pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
"Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
+#ifdef DEBUG_TIMING
+ pa_log_debug("Not reading, because not necessary.");
+#endif
break;
}
polled = FALSE;
+#ifdef DEBUG_TIMING
+ pa_log_debug("Reading");
+#endif
+
for (;;) {
int err;
const snd_pcm_channel_area_t *areas;
- snd_pcm_uframes_t offset, frames = (snd_pcm_uframes_t) n;
+ snd_pcm_uframes_t offset, frames;
pa_memchunk chunk;
void *p;
snd_pcm_sframes_t sframes;
+ frames = (snd_pcm_uframes_t) (n_bytes / u->frame_size);
+
/* pa_log_debug("%lu frames to read", (unsigned long) frames); */
if (PA_UNLIKELY((err = pa_alsa_safe_mmap_begin(u->pcm_handle, &areas, &offset, &frames, u->hwbuf_size, &u->source->sample_spec)) < 0)) {
@@ -297,25 +353,27 @@ static int mmap_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
return r;
}
- work_done = 1;
+ work_done = TRUE;
- u->frame_index += (int64_t) frames;
+ u->read_count += frames * u->frame_size;
-/* pa_log_debug("read %lu frames", (unsigned long) frames); */
+#ifdef DEBUG_TIMING
+ pa_log_debug("Read %lu bytes", (unsigned long) (frames * u->frame_size));
+#endif
- if (frames >= (snd_pcm_uframes_t) n)
+ if ((size_t) frames * u->frame_size >= n_bytes)
break;
- n -= (snd_pcm_sframes_t) frames;
+ n_bytes -= (size_t) frames * u->frame_size;
}
}
*sleep_usec = pa_bytes_to_usec(left_to_record, &u->source->sample_spec) - process_usec;
- return work_done;
+ return work_done ? 1 : 0;
}
static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled) {
- int work_done = 0;
+ int work_done = FALSE;
pa_usec_t max_sleep_usec = 0, process_usec = 0;
size_t left_to_record;
@@ -327,33 +385,33 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
for (;;) {
snd_pcm_sframes_t n;
+ size_t n_bytes;
int r;
- snd_pcm_hwsync(u->pcm_handle);
-
- if (PA_UNLIKELY((n = pa_alsa_safe_avail_update(u->pcm_handle, u->hwbuf_size, &u->source->sample_spec)) < 0)) {
+ if (PA_UNLIKELY((n = pa_alsa_safe_avail(u->pcm_handle, u->hwbuf_size, &u->source->sample_spec)) < 0)) {
- if ((r = try_recover(u, "snd_pcm_avail_update", (int) n)) == 0)
+ if ((r = try_recover(u, "snd_pcm_avail", (int) n)) == 0)
continue;
return r;
}
- left_to_record = check_left_to_record(u, n);
+ n_bytes = (size_t) n * u->frame_size;
+ left_to_record = check_left_to_record(u, n_bytes);
if (u->use_tsched)
if (!polled &&
pa_bytes_to_usec(left_to_record, &u->source->sample_spec) > process_usec+max_sleep_usec/2)
break;
- if (PA_UNLIKELY(n <= 0)) {
+ if (PA_UNLIKELY(n_bytes <= 0)) {
if (polled && pa_log_ratelimit())
pa_log(_("ALSA woke us up to read new data from the device, but there was actually nothing to read! "
"Most likely this is an ALSA driver bug. Please report this issue to the ALSA developers. "
"We were woken up with POLLIN set -- however a subsequent snd_pcm_avail_update() returned 0."));
- return work_done;
+ break;
}
polled = FALSE;
@@ -367,8 +425,8 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
frames = (snd_pcm_sframes_t) (pa_memblock_get_length(chunk.memblock) / u->frame_size);
- if (frames > n)
- frames = n;
+ if (frames > (snd_pcm_sframes_t) (n_bytes/u->frame_size))
+ frames = (snd_pcm_sframes_t) (n_bytes/u->frame_size);
/* pa_log_debug("%lu frames to read", (unsigned long) n); */
@@ -393,53 +451,63 @@ static int unix_read(struct userdata *u, pa_usec_t *sleep_usec, pa_bool_t polled
pa_source_post(u->source, &chunk);
pa_memblock_unref(chunk.memblock);
- work_done = 1;
+ work_done = TRUE;
- u->frame_index += frames;
+ u->read_count += frames * u->frame_size;
/* pa_log_debug("read %lu frames", (unsigned long) frames); */
- if (frames >= n)
+ if ((size_t) frames * u->frame_size >= n_bytes)
break;
- n -= frames;
+ n_bytes -= (size_t) frames * u->frame_size;
}
}
*sleep_usec = pa_bytes_to_usec(left_to_record, &u->source->sample_spec) - process_usec;
- return work_done;
+ return work_done ? 1 : 0;
}
static void update_smoother(struct userdata *u) {
snd_pcm_sframes_t delay = 0;
- int64_t frames;
+ uint64_t position;
int err;
- pa_usec_t now1, now2;
+ pa_usec_t now1 = 0, now2;
+ snd_pcm_status_t *status;
+
+ snd_pcm_status_alloca(&status);
pa_assert(u);
pa_assert(u->pcm_handle);
/* Let's update the time smoother */
- snd_pcm_hwsync(u->pcm_handle);
- snd_pcm_avail_update(u->pcm_handle);
-
if (PA_UNLIKELY((err = snd_pcm_delay(u->pcm_handle, &delay)) < 0)) {
pa_log_warn("Failed to get delay: %s", snd_strerror(err));
return;
}
- frames = u->frame_index + delay;
+ if (PA_UNLIKELY((err = snd_pcm_status(u->pcm_handle, status)) < 0))
+ pa_log_warn("Failed to get timestamp: %s", snd_strerror(err));
+ else {
+ snd_htimestamp_t htstamp = { 0, 0 };
+ snd_pcm_status_get_htstamp(status, &htstamp);
+ now1 = pa_timespec_load(&htstamp);
+ }
- now1 = pa_rtclock_usec();
- now2 = pa_bytes_to_usec((uint64_t) frames * u->frame_size, &u->source->sample_spec);
+ position = u->read_count + ((uint64_t) delay * (uint64_t) u->frame_size);
+
+ /* Hmm, if the timestamp is 0, then it wasn't set and we take the current time */
+ if (now1 <= 0)
+ now1 = pa_rtclock_usec();
+
+ now2 = pa_bytes_to_usec(position, &u->source->sample_spec);
pa_smoother_put(u->smoother, now1, now2);
}
static pa_usec_t source_get_latency(struct userdata *u) {
- pa_usec_t r = 0;
- int64_t delay;
+ int64_t delay;
pa_usec_t now1, now2;
pa_assert(u);
@@ -447,12 +515,9 @@ static pa_usec_t source_get_latency(struct userdata *u) {
now1 = pa_rtclock_usec();
now2 = pa_smoother_get(u->smoother, now1);
- delay = (int64_t) now2 - (int64_t) pa_bytes_to_usec((uint64_t) u->frame_index * u->frame_size, &u->source->sample_spec);
-
- if (delay > 0)
- r = (pa_usec_t) delay;
+ delay = (int64_t) now2 - (int64_t) pa_bytes_to_usec(u->read_count, &u->source->sample_spec);
- return r;
+ return delay >= 0 ? (pa_usec_t) delay : 0;
}
static int build_pollfd(struct userdata *u) {
@@ -495,7 +560,7 @@ static int update_sw_params(struct userdata *u) {
pa_assert(u);
/* Use the full buffer if noone asked us for anything specific */
- u->hwbuf_unused_frames = 0;
+ u->hwbuf_unused = 0;
if (u->use_tsched) {
pa_usec_t latency;
@@ -512,15 +577,14 @@ static int update_sw_params(struct userdata *u) {
if (PA_UNLIKELY(b < u->frame_size))
b = u->frame_size;
- u->hwbuf_unused_frames = (snd_pcm_sframes_t)
- (PA_LIKELY(b < u->hwbuf_size) ?
- ((u->hwbuf_size - b) / u->frame_size) : 0);
+ u->hwbuf_unused = PA_LIKELY(b < u->hwbuf_size) ? (u->hwbuf_size - b) : 0;
}
+ fix_min_sleep_wakeup(u);
fix_tsched_watermark(u);
}
- pa_log_debug("hwbuf_unused_frames=%lu", (unsigned long) u->hwbuf_unused_frames);
+ pa_log_debug("hwbuf_unused=%lu", (unsigned long) u->hwbuf_unused);
avail_min = 1;
@@ -952,11 +1016,13 @@ static void thread_func(void *userdata) {
for (;;) {
int ret;
-/* pa_log_debug("loop"); */
+#ifdef DEBUG_TIMING
+ pa_log_debug("Loop");
+#endif
/* Read some data and pass it to the sources */
if (PA_SOURCE_IS_OPENED(u->source->thread_info.state)) {
- int work_done = 0;
+ int work_done;
pa_usec_t sleep_usec = 0;
if (u->use_mmap)
@@ -1014,15 +1080,14 @@ static void thread_func(void *userdata) {
goto fail;
}
- if (revents & (POLLOUT|POLLERR|POLLNVAL|POLLHUP|POLLPRI)) {
+ if (revents & ~POLLIN) {
if (pa_alsa_recover_from_poll(u->pcm_handle, revents) < 0)
goto fail;
snd_pcm_start(u->pcm_handle);
- }
+ } else if (revents && u->use_tsched && pa_log_ratelimit())
+ pa_log_debug("Wakeup from ALSA!");
- if (revents && u->use_tsched && pa_log_ratelimit())
- pa_log_debug("Wakeup from ALSA!%s%s", (revents & POLLIN) ? " INPUT" : "", (revents & POLLOUT) ? " OUTPUT" : "");
} else
revents = 0;
}
@@ -1219,7 +1284,7 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
pa_thread_mq_init(&u->thread_mq, m->core->mainloop, u->rtpoll);
u->alsa_rtpoll_item = NULL;
- u->smoother = pa_smoother_new(DEFAULT_TSCHED_WATERMARK_USEC, DEFAULT_TSCHED_WATERMARK_USEC, TRUE, 5);
+ u->smoother = pa_smoother_new(DEFAULT_TSCHED_WATERMARK_USEC*2, DEFAULT_TSCHED_WATERMARK_USEC*2, TRUE, 5);
pa_smoother_set_time_offset(u->smoother, pa_rtclock_usec());
b = use_mmap;
@@ -1329,17 +1394,13 @@ pa_source *pa_alsa_source_new(pa_module *m, pa_modargs *ma, const char*driver, p
u->fragment_size = frag_size = (uint32_t) (period_frames * frame_size);
u->nfragments = nfrags;
u->hwbuf_size = u->fragment_size * nfrags;
- u->hwbuf_unused_frames = 0;
u->tsched_watermark = tsched_watermark;
- u->frame_index = 0;
- u->hw_dB_supported = FALSE;
- u->hw_dB_min = u->hw_dB_max = 0;
- u->hw_volume_min = u->hw_volume_max = 0;
- u->mixer_seperate_channels = FALSE;
pa_cvolume_mute(&u->hardware_volume, u->source->sample_spec.channels);
- if (use_tsched)
+ if (use_tsched) {
+ fix_min_sleep_wakeup(u);
fix_tsched_watermark(u);
+ }
pa_source_set_latency_range(u->source,
!use_tsched ? pa_bytes_to_usec(u->hwbuf_size, &ss) : (pa_usec_t) -1,
diff --git a/src/modules/alsa/alsa-util.c b/src/modules/alsa/alsa-util.c
index 95e872b..8607e46 100644
--- a/src/modules/alsa/alsa-util.c
+++ b/src/modules/alsa/alsa-util.c
@@ -465,6 +465,7 @@ finish:
int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min) {
snd_pcm_sw_params_t *swparams;
+ snd_pcm_uframes_t boundary;
int err;
pa_assert(pcm);
@@ -476,7 +477,22 @@ int pa_alsa_set_sw_params(snd_pcm_t *pcm, snd_pcm_uframes_t avail_min) {
return err;
}
- if ((err = snd_pcm_sw_params_set_stop_threshold(pcm, swparams, (snd_pcm_uframes_t) -1)) < 0) {
+ if ((err = snd_pcm_sw_params_set_period_event(pcm, swparams, 0)) < 0) {
+ pa_log_warn("Unable to disable period event: %s\n", snd_strerror(err));
+ return err;
+ }
+
+ if ((err = snd_pcm_sw_params_set_tstamp_mode(pcm, swparams, SND_PCM_TSTAMP_ENABLE)) < 0) {
+ pa_log_warn("Unable to enable time stamping: %s\n", snd_strerror(err));
+ return err;
+ }
+
+ if ((err = snd_pcm_sw_params_get_boundary(swparams, &boundary)) < 0) {
+ pa_log_warn("Unable to get boundary: %s\n", snd_strerror(err));
+ return err;
+ }
+
+ if ((err = snd_pcm_sw_params_set_stop_threshold(pcm, swparams, boundary)) < 0) {
pa_log_warn("Unable to set stop threshold: %s\n", snd_strerror(err));
return err;
}
@@ -1534,7 +1550,7 @@ pa_rtpoll_item* pa_alsa_build_pollfd(snd_pcm_t *pcm, pa_rtpoll *rtpoll) {
return item;
}
-snd_pcm_sframes_t pa_alsa_safe_avail_update(snd_pcm_t *pcm, size_t hwbuf_size, const pa_sample_spec *ss) {
+snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa_sample_spec *ss) {
snd_pcm_sframes_t n;
size_t k;
@@ -1545,7 +1561,7 @@ snd_pcm_sframes_t pa_alsa_safe_avail_update(snd_pcm_t *pcm, size_t hwbuf_size, c
/* Some ALSA driver expose weird bugs, let's inform the user about
* what is going on */
- n = snd_pcm_avail_update(pcm);
+ n = snd_pcm_avail(pcm);
if (n <= 0)
return n;
diff --git a/src/modules/alsa/alsa-util.h b/src/modules/alsa/alsa-util.h
index 79d0999..2d0f407 100644
--- a/src/modules/alsa/alsa-util.h
+++ b/src/modules/alsa/alsa-util.h
@@ -128,7 +128,7 @@ int pa_alsa_recover_from_poll(snd_pcm_t *pcm, int revents);
pa_rtpoll_item* pa_alsa_build_pollfd(snd_pcm_t *pcm, pa_rtpoll *rtpoll);
-snd_pcm_sframes_t pa_alsa_safe_avail_update(snd_pcm_t *pcm, size_t hwbuf_size, const pa_sample_spec *ss);
+snd_pcm_sframes_t pa_alsa_safe_avail(snd_pcm_t *pcm, size_t hwbuf_size, const pa_sample_spec *ss);
int pa_alsa_safe_mmap_begin(snd_pcm_t *pcm, const snd_pcm_channel_area_t **areas, snd_pcm_uframes_t *offset, snd_pcm_uframes_t *frames, size_t hwbuf_size, const pa_sample_spec *ss);
char *pa_alsa_get_driver_name(int card);
commit 7bc1847596bdedea6a06c8c0a019da773476a965
Merge: 26a270a... 2e250aa...
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 03:21:46 2009 +0100
Merge branch 'master' of ssh://rootserver/home/lennart/git/public/pulseaudio
commit 3da3ea2678d4107bd87d1a466464a0bf4682236f
Merge: 7bc1847... aae5b15...
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 03:24:27 2009 +0100
Merge commit 'origin/master-tx'
commit 6aa110ad4e55bdffebd2f187933ebfcfd5b23e50
Author: Lennart Poettering <lennart at poettering.net>
Date: Fri Feb 20 03:25:05 2009 +0100
run make update-po
diff --git a/po/ca.po b/po/ca.po
index 7a61f96..6fe1d4a 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: 2008-11-08 01:48+0000\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2009-02-13 23:27+0100\n"
"Last-Translator: Agusti Grau <fletxa at gmail.com>\n"
"Language-Team: Catalan <fedora at softcatala.net>\n"
@@ -27,15 +27,80 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: ../src/daemon/ltdl-bind-now.c:177
-#: ../src/daemon/ltdl-bind-now.c:197
-msgid "Failed to add bind-now-loader."
-msgstr "S'ha produït un error en afegir bind-now-loader."
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
+#: ../src/daemon/ltdl-bind-now.c:124
+#, fuzzy
+msgid "Failed to find original lt_dlopen loader."
+msgstr "No s'ha trobat el carregador dlopen original."
-#: ../src/daemon/ltdl-bind-now.c:184
-msgid "Failed to find original dlopen loader."
+#: ../src/daemon/ltdl-bind-now.c:129
+#, fuzzy
+msgid "Failed to allocate new dl loader."
msgstr "No s'ha trobat el carregador dlopen original."
+#: ../src/daemon/ltdl-bind-now.c:142
+msgid "Failed to add bind-now-loader."
+msgstr "S'ha produït un error en afegir bind-now-loader."
+
#: ../src/daemon/polkit.c:55
#, c-format
msgid "Cannot connect to system bus: %s"
@@ -124,8 +189,7 @@ msgstr "El GID de l'usuari '%s' i del grup '%s' no coincideixen"
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "El directori arrel de l'usuari '%s' no és '%s', s'ignorarà ."
-#: ../src/daemon/main.c:201
-#: ../src/daemon/main.c:206
+#: ../src/daemon/main.c:201 ../src/daemon/main.c:206
#, c-format
msgid "Failed to create '%s': %s"
msgstr "S'ha produït un error durant la creació '%s': %s"
@@ -158,258 +222,274 @@ 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:425
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr "S'ha produït un error en interpretar la lÃnia de comandes."
-#: ../src/daemon/main.c:441
+#: ../src/daemon/main.c:453
#, 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."
+msgstr ""
+"Aquesta aplicació està en el grup '%s', s'està establint la prioritat alta."
-#: ../src/daemon/main.c:448
+#: ../src/daemon/main.c:460
#, 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."
+msgstr ""
+"Aquesta aplicació està en el grup '%s', s'està establint la prioritat en "
+"temps real."
-#: ../src/daemon/main.c:456
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit ha permés el permÃs acquire-high-priority."
-#: ../src/daemon/main.c:459
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit ha rebutjat el permÃs acquire-high-priority."
-#: ../src/daemon/main.c:464
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit h permés el permÃs acquire-real-time."
-#: ../src/daemon/main.c:467
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit ha rebutjat el permÃs acquire-real-time."
-#: ../src/daemon/main.c:479
+#: ../src/daemon/main.c:508
+#, fuzzy
msgid ""
-"Called SUID root and real-time/high-priority scheduling was requested in the configuration. However, we lack the necessary priviliges:\n"
+"Called SUID root and real-time and/or high-priority scheduling was requested "
+"in the configuration. However, we lack the necessary privileges:\n"
"We are not in group '"
msgstr ""
-"La crida de la SUID de root i la prioritat alta/temps real està n especificades en la configuració, però no té els permissos necessaris:\n"
+"La crida de la SUID de root i la prioritat alta/temps real està n "
+"especificades en la configuració, però no té els permissos necessaris:\n"
"No es pertany al grup '"
-#: ../src/daemon/main.c:480
+#: ../src/daemon/main.c:532
msgid ""
-"' and PolicyKit refuse to grant us priviliges. Dropping SUID again.\n"
-"For enabling real-time scheduling please acquire the appropriate PolicyKit priviliges, or become a member of '"
+"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr ""
-"' i PolicyKit ha denegat els permÃsos. S'està lliberant SUID. \n"
-"Per habilitar la prioritat en temps real, s'ha de adquirir els permissos de PolicyKit, o pertanyer a '"
-
-#: ../src/daemon/main.c:481
-msgid "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
-msgstr "', o incremetar els lÃmits de recursos RLIMIT_NICE/RLIMIT_RTPRIO per aquest usuari."
+"La prioritat alta està habilitada en la configuració però no està permesa "
+"per la polÃtica."
-#: ../src/daemon/main.c:497
-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:522
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "S'ha incrementat el valor de RLIMIT_RTPRIO amb éxit."
-#: ../src/daemon/main.c:525
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "S'ha produït un error amb RLIMIT_RTPRIO: %s"
-#: ../src/daemon/main.c:532
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr "Es deixa CAP_NICE"
-#: ../src/daemon/main.c:539
-msgid "Real-time scheduling enabled in configuration but not allowed by policy."
-msgstr "La prioritat temps real està habilitada en la configuració però no està permesa per la polÃtica."
+#: ../src/daemon/main.c:578
+msgid ""
+"Real-time scheduling enabled in configuration but not allowed by policy."
+msgstr ""
+"La prioritat temps real està habilitada en la configuració però no està "
+"permesa per la polÃtica."
-#: ../src/daemon/main.c:597
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "El dimoni no s'està executant."
-#: ../src/daemon/main.c:599
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "El dimoni s'està executant amb PID %u"
-#: ../src/daemon/main.c:609
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "S'ha produït un error en matar el dimoni: %s"
-#: ../src/daemon/main.c:627
-msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr "No és necessari executar aquesta aplicació com a root (excepte si s'especifica --system)"
+#: ../src/daemon/main.c:669
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"No és necessari executar aquesta aplicació com a root (excepte si "
+"s'especifica --system)"
-#: ../src/daemon/main.c:629
-msgid "Root priviliges required."
+#: ../src/daemon/main.c:671
+#, fuzzy
+msgid "Root privileges required."
msgstr "Es requereixen permÃsos de root."
-#: ../src/daemon/main.c:634
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "La opció --start no està suportada per a instà ncies de sistema."
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:681
msgid "Running in system mode, but --disallow-exit not set!"
-msgstr "S'està executant en mode sistema, però no s'ha especificat la opció --disallow-exit."
+msgstr ""
+"S'està executant en mode sistema, però no s'ha especificat la opció --"
+"disallow-exit."
-#: ../src/daemon/main.c:642
+#: ../src/daemon/main.c:684
msgid "Running in system mode, but --disallow-module-loading not set!"
-msgstr "S'està executant en mode sistema, però no s'ha especificat la opció --disallow-module-loading."
+msgstr ""
+"S'està executant en mode sistema, però no s'ha especificat la opció --"
+"disallow-module-loading."
-#: ../src/daemon/main.c:645
+#: ../src/daemon/main.c:687
msgid "Running in system mode, forcibly disabling SHM mode!"
-msgstr "S'està executant en mode sistema, es deshabilitarà el mode SHM forçosament."
+msgstr ""
+"S'està executant en mode sistema, es deshabilitarà el mode SHM forçosament."
-#: ../src/daemon/main.c:650
+#: ../src/daemon/main.c:692
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."
+msgstr ""
+"S'està executant en mode sistema, la sortida per temps d'inactivitat es "
+"deshabilita."
-#: ../src/daemon/main.c:677
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr "S'ha produït un error en adquirir stdio."
-#: ../src/daemon/main.c:683
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "Ha fallat la canonada: %s"
-#: ../src/daemon/main.c:688
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "Ha fallat fork(): %s"
-#: ../src/daemon/main.c:702
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "Ha fallat read(): %s"
-#: ../src/daemon/main.c:708
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "S'ha produït un error en iniciar el dimoni."
-#: ../src/daemon/main.c:710
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "S'ha iniciat el dimoni."
-#: ../src/daemon/main.c:780
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "Aquest és el PulseAudio %s"
-#: ../src/daemon/main.c:781
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilació: %s"
-#: ../src/daemon/main.c:782
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS de compilació: %s"
-#: ../src/daemon/main.c:785
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "S'està executant en el host: %s"
-#: ../src/daemon/main.c:788
+#: ../src/daemon/main.c:830
+#, c-format
+msgid "Found %u CPUs."
+msgstr ""
+
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "La mida de pà gina és de %lu bytes."
-#: ../src/daemon/main.c:791
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "Compilat amb suport per a Valgrind: sÃ"
-#: ../src/daemon/main.c:793
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "Compilat amb suport per a Valgrind: no"
-#: ../src/daemon/main.c:796
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "S'està executant amb el mode valgrind: %s"
-#: ../src/daemon/main.c:799
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "Construcció optimitzada: sÃ"
-#: ../src/daemon/main.c:801
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "Construcció optmitzada: no"
-#: ../src/daemon/main.c:805
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "S'ha produït un error en obtenir la ID de la mà quina"
-#: ../src/daemon/main.c:808
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "La ID de la mà quina és %s."
-#: ../src/daemon/main.c:813
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "S'esta utilitzant el directori d'execució %s."
-#: ../src/daemon/main.c:818
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "S'està utilitzant el directori d'estat %s."
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "S'està executant en mode sistema: %s"
-#: ../src/daemon/main.c:836
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "S'ha produït un error en pa_pid_file_create()."
-#: ../src/daemon/main.c:848
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Està n disponibles els temporitzadors frescos de alta resolució."
-#: ../src/daemon/main.c:850
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
-msgstr "Es recomana la utilització d'un kernel amb els temporitzadors d'alta resolució habilitats."
+#: ../src/daemon/main.c:894
+msgid ""
+"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
+"resolution timers enabled!"
+msgstr ""
+"Es recomana la utilització d'un kernel amb els temporitzadors d'alta "
+"resolució habilitats."
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "S'ha produït un error en pa_core_new()."
-#: ../src/daemon/main.c:921
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "S'ha produït un error en inicialitzar el dimoni."
-#: ../src/daemon/main.c:926
+#: ../src/daemon/main.c:972
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:931
-#, c-format
-msgid "Default sink name (%s) does not exist in name register."
-msgstr "El nom sink per omissió (%s) no existeix en el registre de noms."
-
-#: ../src/daemon/main.c:944
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "S'ha completat la inicialització del dimoni."
-#: ../src/daemon/main.c:950
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "S'ha iniciat l'aturada del dimoni."
-#: ../src/daemon/main.c:971
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "S'ha aturat el dimoni."
-#: ../src/daemon/cmdline.c:117
+#: ../src/daemon/cmdline.c:121
#, fuzzy, c-format
msgid ""
"%s [options]\n"
@@ -420,34 +500,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\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"
-" -p, --dl-search-path=PATH Set the search path for dynamic shared\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"
" objects (plugins)\n"
" --resample-method=METHOD Use the specified resampling method\n"
" (See --dump-resample-methods for\n"
@@ -458,10 +552,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"
@@ -471,37 +567,51 @@ msgstr ""
"COMANDES:\n"
" -h, --help Mostra aquesta ajuda\n"
" --version Mostra la versió\n"
-" --dump-conf Volca la configuració per omissió\n"
+" --dump-conf Volca la configuració per "
+"omissió\n"
" --dump-modules Volca la llista de mòduls\n"
-" --dump-resample-methods Volca els mètodes disponibles de remostratge\n"
-" --cleanup-shm Neteja els segments de memòria compartia rancis\n"
-" --start Inicia el dimoni si aquest no està corrent\n"
+" --dump-resample-methods Volca els mètodes "
+"disponibles de remostratge\n"
+" --cleanup-shm Neteja els segments de "
+"memòria compartia rancis\n"
+" --start Inicia el dimoni si aquest no està "
+"corrent\n"
" -k --kill Mata el dimoni en execució\n"
" --check Comprova l'execució del dimoni\n"
"\n"
"OPCIONS:\n"
-" --system[=BOOL] Executa com una instà ncia de sistema\n"
-" -D, --daemonize[=BOOL] Converteix en dimoni després de la inicialització\n"
+" --system[=BOOL] Executa com una instà ncia de "
+"sistema\n"
+" -D, --daemonize[=BOOL] Converteix en dimoni després de la "
+"inicialització\n"
" --fail[=BOOL] Surt quan falli la inicialització\n"
" --high-priority[=BOOL] Prova de establir un nivell\n"
-" nice alt(només disponivle com a root,\n"
-" amb SUID o amb un elevat RLIMIT_NICE)\n"
+" nice alt(només disponivle com a "
+"root,\n"
+" amb SUID o amb un elevat "
+"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"
-" -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"
@@ -512,64 +622,80 @@ msgstr ""
" --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"
-#: ../src/daemon/cmdline.c:245
+#: ../src/daemon/cmdline.c:252
msgid "--daemonize expects boolean argument"
msgstr "--daemonize necessita un argument booleà "
-#: ../src/daemon/cmdline.c:252
+#: ../src/daemon/cmdline.c:259
msgid "--fail expects boolean argument"
msgstr "--fail necessita un argument booleà "
-#: ../src/daemon/cmdline.c:262
-msgid "--log-level expects log level argument (either numeric in range 0..4 or one of debug, info, notice, warn, error)."
-msgstr "--log-level necessita un argument de nivell de log (valor númeric 0..4 o debug, info, notice, warn, error)."
+#: ../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 necessita un argument de nivell de log (valor númeric 0..4 o "
+"debug, info, notice, warn, error)."
-#: ../src/daemon/cmdline.c:274
+#: ../src/daemon/cmdline.c:281
msgid "--high-priority expects boolean argument"
msgstr "--high-priority necessita un argument booleà "
-#: ../src/daemon/cmdline.c:281
+#: ../src/daemon/cmdline.c:288
msgid "--realtime expects boolean argument"
msgstr "--realtime necessita un argument booleà "
-#: ../src/daemon/cmdline.c:288
+#: ../src/daemon/cmdline.c:295
msgid "--disallow-module-loading expects boolean argument"
msgstr "--disallow-module-loading necessita un argument booleà "
-#: ../src/daemon/cmdline.c:295
+#: ../src/daemon/cmdline.c:302
msgid "--disallow-exit boolean argument"
msgstr "--disallow-exit necessita un argument booleà "
-#: ../src/daemon/cmdline.c:302
+#: ../src/daemon/cmdline.c:309
msgid "--use-pid-file expects boolean argument"
msgstr "--use-pid-file necessita un argument booleà "
-#: ../src/daemon/cmdline.c:319
+#: ../src/daemon/cmdline.c:326
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
msgstr "Objectiu de log invà lid: utilitzeu 'syslog', 'stderr' o 'auto'."
-#: ../src/daemon/cmdline.c:338
+#: ../src/daemon/cmdline.c:333
+#, fuzzy
+msgid "--log-time boolean argument"
+msgstr "--disallow-exit necessita un argument booleà "
+
+#: ../src/daemon/cmdline.c:340
+#, fuzzy
+msgid "--log-meta boolean argument"
+msgstr "--disallow-exit necessita un argument booleà "
+
+#: ../src/daemon/cmdline.c:359
#, c-format
msgid "Invalid resample method '%s'."
msgstr "Mètode de remostratge invà lid '%s'."
-#: ../src/daemon/cmdline.c:345
+#: ../src/daemon/cmdline.c:366
msgid "--system expects boolean argument"
msgstr "--system necessita un argument booleà "
-#: ../src/daemon/cmdline.c:352
+#: ../src/daemon/cmdline.c:373
msgid "--no-cpu-limit expects boolean argument"
msgstr "--no-cpu-limit necessita un argument booleà "
-#: ../src/daemon/cmdline.c:359
+#: ../src/daemon/cmdline.c:380
msgid "--disable-shm expects boolean argument"
msgstr "--disable-shm necessita un argument booleà "
@@ -613,290 +739,314 @@ msgstr "CÃ rrega: %s\n"
msgid "Path: %s\n"
msgstr "Ruta: %s\n"
-#: ../src/daemon/daemon-conf.c:205
+#: ../src/daemon/daemon-conf.c:212
#, c-format
msgid "[%s:%u] Invalid log target '%s'."
msgstr "[%s:%u] Destà de registre incorrecte '%s'"
-#: ../src/daemon/daemon-conf.c:221
+#: ../src/daemon/daemon-conf.c:228
#, c-format
msgid "[%s:%u] Invalid log level '%s'."
msgstr "[%s:%u] Nivell de registre incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:237
+#: ../src/daemon/daemon-conf.c:244
#, c-format
msgid "[%s:%u] Invalid resample method '%s'."
msgstr "[%s:%u] Mètode de remostreig incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:260
+#: ../src/daemon/daemon-conf.c:267
#, c-format
msgid "[%s:%u] Invalid rlimit '%s'."
msgstr "[%s:%u] rlimit incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:267
+#: ../src/daemon/daemon-conf.c:274
#, c-format
msgid "[%s:%u] rlimit not supported on this platform."
msgstr "[%s:%u] rlimit no disponible en aquesta plataforma."
-#: ../src/daemon/daemon-conf.c:283
+#: ../src/daemon/daemon-conf.c:290
#, c-format
msgid "[%s:%u] Invalid sample format '%s'."
msgstr "[%s:%u] Format de mostra incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:301
+#: ../src/daemon/daemon-conf.c:308
#, c-format
msgid "[%s:%u] Invalid sample rate '%s'."
msgstr "[%s:%u] Velocitat de mostreig '%s'."
-#: ../src/daemon/daemon-conf.c:319
+#: ../src/daemon/daemon-conf.c:326
#, c-format
msgid "[%s:%u] Invalid sample channels '%s'."
msgstr "[%s:%u] Canals de mostreig incorrectes '%s'."
-#: ../src/daemon/daemon-conf.c:337
+#: ../src/daemon/daemon-conf.c:344
#, c-format
msgid "[%s:%u] Invalid number of fragments '%s'."
msgstr "[%s:%u] Nombre de fragments incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:355
+#: ../src/daemon/daemon-conf.c:362
#, c-format
msgid "[%s:%u] Invalid fragment size '%s'."
msgstr "[%s:%u] Mida de fragment incorrecta '%s'."
-#: ../src/daemon/daemon-conf.c:373
+#: ../src/daemon/daemon-conf.c:380
#, c-format
msgid "[%s:%u] Invalid nice level '%s'."
msgstr "[%s:%u] Nivell de prioritat incorrecte '%s'."
-#: ../src/daemon/daemon-conf.c:570
+#: ../src/daemon/daemon-conf.c:566
#, c-format
msgid "Failed to open configuration file: %s"
msgstr "Error en obrir el fitxer de configuració: %s"
-#: ../src/daemon/daemon-conf.c:644
+#: ../src/daemon/daemon-conf.c:640
#, c-format
msgid "### Read from configuration file: %s ###\n"
msgstr "### Lectura del fitxer de configuració: %s ###\n"
#: ../src/daemon/caps.c:63
-msgid "Dropping root priviliges."
+#, fuzzy
+msgid "Dropping root privileges."
msgstr "Alliberant privilegis de root."
#: ../src/daemon/caps.c:103
msgid "Limited capabilities successfully to CAP_SYS_NICE."
msgstr "S'han limitat les capacitats a CAP_SYS_NICE correctament."
-#: ../src/pulse/channelmap.c:102
+#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
msgid "Mono"
msgstr "Mono"
-#: ../src/pulse/channelmap.c:104
+#: ../src/pulse/channelmap.c:105
msgid "Front Center"
msgstr "Frontal central"
-#: ../src/pulse/channelmap.c:105
+#: ../src/pulse/channelmap.c:106
msgid "Front Left"
msgstr "Frontal esquerra"
-#: ../src/pulse/channelmap.c:106
+#: ../src/pulse/channelmap.c:107
msgid "Front Right"
msgstr "Frontal dreta"
-#: ../src/pulse/channelmap.c:108
+#: ../src/pulse/channelmap.c:109
msgid "Rear Center"
msgstr "Posterior central"
-#: ../src/pulse/channelmap.c:109
+#: ../src/pulse/channelmap.c:110
msgid "Rear Left"
msgstr "Posterior esquerra"
-#: ../src/pulse/channelmap.c:110
+#: ../src/pulse/channelmap.c:111
msgid "Rear Right"
msgstr "Posterior dreta"
-#: ../src/pulse/channelmap.c:112
+#: ../src/pulse/channelmap.c:113
msgid "Low Frequency Emmiter"
msgstr "Emisor de baixa freqüència"
-#: ../src/pulse/channelmap.c:114
+#: ../src/pulse/channelmap.c:115
msgid "Front Left-of-center"
msgstr "Frontal central part esquerra"
-#: ../src/pulse/channelmap.c:115
+#: ../src/pulse/channelmap.c:116
msgid "Front Right-of-center"
msgstr "Frontal central part dreta"
-#: ../src/pulse/channelmap.c:117
+#: ../src/pulse/channelmap.c:118
msgid "Side Left"
msgstr "Lateral esquerra"
-#: ../src/pulse/channelmap.c:118
+#: ../src/pulse/channelmap.c:119
msgid "Side Right"
msgstr "Lateral dreta"
-#: ../src/pulse/channelmap.c:120
+#: ../src/pulse/channelmap.c:121
msgid "Auxiliary 0"
msgstr "Auxiliar 0"
-#: ../src/pulse/channelmap.c:121
+#: ../src/pulse/channelmap.c:122
msgid "Auxiliary 1"
msgstr "Auxiliar 1"
-#: ../src/pulse/channelmap.c:122
+#: ../src/pulse/channelmap.c:123
msgid "Auxiliary 2"
msgstr "Auxiliar 2"
-#: ../src/pulse/channelmap.c:123
+#: ../src/pulse/channelmap.c:124
msgid "Auxiliary 3"
msgstr "Auxiliar 3"
-#: ../src/pulse/channelmap.c:124
+#: ../src/pulse/channelmap.c:125
msgid "Auxiliary 4"
msgstr "Auxiliar 4"
-#: ../src/pulse/channelmap.c:125
+#: ../src/pulse/channelmap.c:126
msgid "Auxiliary 5"
msgstr "Auxiliar 5"
-#: ../src/pulse/channelmap.c:126
+#: ../src/pulse/channelmap.c:127
msgid "Auxiliary 6"
msgstr "Auxiliar 6"
-#: ../src/pulse/channelmap.c:127
+#: ../src/pulse/channelmap.c:128
msgid "Auxiliary 7"
msgstr "Auxiliar 7"
-#: ../src/pulse/channelmap.c:128
+#: ../src/pulse/channelmap.c:129
msgid "Auxiliary 8"
msgstr "Auxiliar 8"
-#: ../src/pulse/channelmap.c:129
+#: ../src/pulse/channelmap.c:130
msgid "Auxiliary 9"
msgstr "Auxiliar 9"
-#: ../src/pulse/channelmap.c:130
+#: ../src/pulse/channelmap.c:131
msgid "Auxiliary 10"
msgstr "Auxiliar 10"
-#: ../src/pulse/channelmap.c:131
+#: ../src/pulse/channelmap.c:132
msgid "Auxiliary 11"
msgstr "Auxiliar 11"
-#: ../src/pulse/channelmap.c:132
+#: ../src/pulse/channelmap.c:133
msgid "Auxiliary 12"
msgstr "Auxiliar 12"
-#: ../src/pulse/channelmap.c:133
+#: ../src/pulse/channelmap.c:134
msgid "Auxiliary 13"
msgstr "Auxiliar 13"
-#: ../src/pulse/channelmap.c:134
+#: ../src/pulse/channelmap.c:135
msgid "Auxiliary 14"
msgstr "Auxiliar 14"
-#: ../src/pulse/channelmap.c:135
+#: ../src/pulse/channelmap.c:136
msgid "Auxiliary 15"
msgstr "Auxiliar 15"
-#: ../src/pulse/channelmap.c:136
+#: ../src/pulse/channelmap.c:137
msgid "Auxiliary 16"
msgstr "Auxiliar 16"
-#: ../src/pulse/channelmap.c:137
+#: ../src/pulse/channelmap.c:138
msgid "Auxiliary 17"
msgstr "Auxiliar 17"
-#: ../src/pulse/channelmap.c:138
+#: ../src/pulse/channelmap.c:139
msgid "Auxiliary 18"
msgstr "Auxiliar 18"
-#: ../src/pulse/channelmap.c:139
+#: ../src/pulse/channelmap.c:140
msgid "Auxiliary 19"
msgstr "Auxiliar 19"
-#: ../src/pulse/channelmap.c:140
+#: ../src/pulse/channelmap.c:141
msgid "Auxiliary 20"
msgstr "Auxiliar 20"
-#: ../src/pulse/channelmap.c:141
+#: ../src/pulse/channelmap.c:142
msgid "Auxiliary 21"
msgstr "Auxiliar 21"
-#: ../src/pulse/channelmap.c:142
+#: ../src/pulse/channelmap.c:143
msgid "Auxiliary 22"
msgstr "Auxiliar 22"
-#: ../src/pulse/channelmap.c:143
+#: ../src/pulse/channelmap.c:144
msgid "Auxiliary 23"
msgstr "Auxiliar 23"
-#: ../src/pulse/channelmap.c:144
+#: ../src/pulse/channelmap.c:145
msgid "Auxiliary 24"
msgstr "Auxiliar 24"
-#: ../src/pulse/channelmap.c:145
+#: ../src/pulse/channelmap.c:146
msgid "Auxiliary 25"
msgstr "Auxiliar 25"
-#: ../src/pulse/channelmap.c:146
+#: ../src/pulse/channelmap.c:147
msgid "Auxiliary 26"
msgstr "Auxiliar 26"
-#: ../src/pulse/channelmap.c:147
+#: ../src/pulse/channelmap.c:148
msgid "Auxiliary 27"
msgstr "Auxiliar 27"
-#: ../src/pulse/channelmap.c:148
+#: ../src/pulse/channelmap.c:149
msgid "Auxiliary 28"
msgstr "Auxiliar 28"
-#: ../src/pulse/channelmap.c:149
+#: ../src/pulse/channelmap.c:150
msgid "Auxiliary 29"
msgstr "Auxiliar 31"
-#: ../src/pulse/channelmap.c:150
+#: ../src/pulse/channelmap.c:151
msgid "Auxiliary 30"
msgstr "Auxiliar 30"
-#: ../src/pulse/channelmap.c:151
+#: ../src/pulse/channelmap.c:152
msgid "Auxiliary 31"
msgstr "Auxiliar 31"
-#: ../src/pulse/channelmap.c:153
+#: ../src/pulse/channelmap.c:154
msgid "Top Center"
msgstr "Superior central"
-#: ../src/pulse/channelmap.c:155
+#: ../src/pulse/channelmap.c:156
msgid "Top Front Center"
msgstr "Superior frontal central"
-#: ../src/pulse/channelmap.c:156
+#: ../src/pulse/channelmap.c:157
msgid "Top Front Left"
msgstr "Superior frontal central"
-#: ../src/pulse/channelmap.c:157
+#: ../src/pulse/channelmap.c:158
msgid "Top Front Right"
msgstr "Superior frontal dreta"
-#: ../src/pulse/channelmap.c:159
+#: ../src/pulse/channelmap.c:160
msgid "Top Rear Center"
msgstr "Superior posterior central"
-#: ../src/pulse/channelmap.c:160
+#: ../src/pulse/channelmap.c:161
msgid "Top Rear Left"
msgstr "Superior posterior esquerra"
-#: ../src/pulse/channelmap.c:161
+#: ../src/pulse/channelmap.c:162
msgid "Top Rear Right"
msgstr "Superior posterior dreta"
-#: ../src/pulse/channelmap.c:472
-#: ../src/pulse/sample.c:144
-#: ../src/pulse/volume.c:163
-#: ../src/pulse/volume.c:194
+#: ../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 "(incorrecte)"
+#: ../src/pulse/channelmap.c:808
+msgid "Stereo"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:813
+msgid "Surround 4.0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:819
+msgid "Surround 4.1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:825
+msgid "Surround 5.0"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:831
+msgid "Surround 5.1"
+msgstr ""
+
+#: ../src/pulse/channelmap.c:838
+msgid "Surround 7.1"
+msgstr ""
+
#: ../src/pulse/error.c:43
msgid "OK"
msgstr "D'acord"
@@ -985,8 +1135,40 @@ msgstr "Codi d'error desconegut"
msgid "No such extension"
msgstr "No existeix l'extensió"
-#: ../src/pulse/client-conf-x11.c:55
-#: ../src/utils/pax11publish.c:100
+#: ../src/pulse/error.c:65
+msgid "Obsolete functionality"
+msgstr ""
+
+#: ../src/pulse/error.c:66
+msgid "Missing implementation"
+msgstr ""
+
+#: ../src/pulse/sample.c:169
+#, c-format
+msgid "%s %uch %uHz"
+msgstr ""
+
+#: ../src/pulse/sample.c:181
+#, c-format
+msgid "%0.1f GiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:183
+#, c-format
+msgid "%0.1f MiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:185
+#, c-format
+msgid "%0.1f KiB"
+msgstr ""
+
+#: ../src/pulse/sample.c:187
+#, c-format
+msgid "%u B"
+msgstr ""
+
+#: ../src/pulse/client-conf-x11.c:55 ../src/utils/pax11publish.c:100
msgid "XOpenDisplay() failed"
msgstr "Ha fallat XOpenDisplay()"
@@ -999,45 +1181,35 @@ msgstr "Ha fallat el parseig de les dades de la cookie"
msgid "Failed to open configuration file '%s': %s"
msgstr "S'ha produït un error en obrir el fitxer de configuració '%s': %s"
-#: ../src/pulse/context.c:516
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "No s'ha carregat cap cookie. S'està intentant connectar sense aquesta."
-#: ../src/pulse/context.c:642
+#: ../src/pulse/context.c:649
#, c-format
msgid "fork(): %s"
msgstr "fork(): %s"
-#: ../src/pulse/context.c:695
+#: ../src/pulse/context.c:702
#, c-format
msgid "waitpid(): %s"
msgstr "waitpid(): %s"
-#: ../src/pulse/context.c:1256
+#: ../src/pulse/context.c:1279
#, c-format
msgid "Received message for unknown extension '%s'"
msgstr "S'ha rebut un missatge per a l'extensió desconeguda '%s'"
-#: ../src/utils/pacat.c:93
+#: ../src/utils/pacat.c:94
#, c-format
msgid "pa_stream_write() failed: %s\n"
msgstr "Ha fallat pa_stream_write(): %s\n"
-#: ../src/utils/pacat.c:132
+#: ../src/utils/pacat.c:133
#, c-format
msgid "pa_stream_peek() failed: %s\n"
msgstr "Ha fallat pa_stream_peek(): %s\n"
-#: ../src/utils/pacat.c:141
-#, c-format
-msgid "Buffer overrun, dropping incoming data\n"
-msgstr "S'ha sobrepassat la memòria intermitja, s'estan descartant les dades entrants\n"
-
-#: ../src/utils/pacat.c:143
-#, c-format
-msgid "pa_stream_drop() failed: %s\n"
-msgstr "Ha fallat pa_stream_drop(): %s\n"
-
#: ../src/utils/pacat.c:169
#, c-format
msgid "Stream successfully created.\n"
@@ -1061,7 +1233,9 @@ msgstr "Mètriques del buffer: maxlength=%u, fragsize=%u\n"
#: ../src/utils/pacat.c:183
#, c-format
msgid "Using sample spec '%s', channel map '%s'.\n"
-msgstr "S'estan utilitzant les especificacions de mostreig '%s', mapeig del canal '%s'.\n"
+msgstr ""
+"S'estan utilitzant les especificacions de mostreig '%s', mapeig del canal '%"
+"s'.\n"
#: ../src/utils/pacat.c:187
#, c-format
@@ -1107,93 +1281,88 @@ msgstr "S'ha mogut l'stream al dispositiu %s (%u, %s suspés).%s\n"
msgid "not "
msgstr "no"
-#: ../src/utils/pacat.c:259
+#: ../src/utils/pacat.c:271
#, c-format
msgid "Connection established.%s \n"
msgstr "S'ha establert la connexió.%s\n"
-#: ../src/utils/pacat.c:262
+#: ../src/utils/pacat.c:274
#, c-format
msgid "pa_stream_new() failed: %s\n"
msgstr "Ha fallat pa_stream_new(): %s\n"
-#: ../src/utils/pacat.c:287
+#: ../src/utils/pacat.c:301
#, c-format
msgid "pa_stream_connect_playback() failed: %s\n"
msgstr "Ha fallat pa_stream_connect_playback(): %s\n"
-#: ../src/utils/pacat.c:293
+#: ../src/utils/pacat.c:307
#, c-format
msgid "pa_stream_connect_record() failed: %s\n"
msgstr "Ha fallat pa_stream_connect_record(): %s\n"
-#: ../src/utils/pacat.c:307
-#: ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:666
-#: ../src/utils/paplay.c:183
+#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "Ha fallat la connexió: %s\n"
-#: ../src/utils/pacat.c:328
-#: ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "S'ha produït un error en drenar l'stream: %s\n"
-#: ../src/utils/pacat.c:333
-#: ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr "Flux de reproducció drenat.\n"
-#: ../src/utils/pacat.c:343
-#: ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr "S'està drenant la connexió amb el servidor.\n"
-#: ../src/utils/pacat.c:369
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "S'ha llegit EOF.\n"
-#: ../src/utils/pacat.c:375
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain(): %s\n"
-#: ../src/utils/pacat.c:385
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "Ha fallat read(): %s\n"
-#: ../src/utils/pacat.c:417
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "Ha fallat write(): %s\n"
-#: ../src/utils/pacat.c:438
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr "S'ha rebut una signal, s'està sortint.\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:457
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr ""
-#: ../src/utils/pacat.c:477
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:490
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1206,30 +1375,47 @@ 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 ""
-#: ../src/utils/pacat.c:591
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1237,94 +1423,89 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:647
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:676
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:683
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:694
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr ""
-#: ../src/utils/pacat.c:699
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr ""
-#: ../src/utils/pacat.c:706
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr ""
-#: ../src/utils/pacat.c:706
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr ""
-#: ../src/utils/pacat.c:706
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr ""
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr ""
-#: ../src/utils/pacat.c:719
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr ""
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr ""
-#: ../src/utils/pacat.c:742
-#: ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:909
-#: ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:763
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:769
-#: ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:923
-#: ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:777
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:788
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:795
-#: ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:931
-#: ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr ""
@@ -1354,8 +1535,7 @@ msgstr ""
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:176
-#: ../src/utils/pactl.c:672
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1373,7 +1553,8 @@ 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 ""
@@ -1385,32 +1566,32 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pactl.c:107
+#: ../src/utils/pactl.c:108
#, c-format
msgid "Failed to get statistics: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:113
+#: ../src/utils/pactl.c:114
#, c-format
msgid "Currently in use: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:116
+#: ../src/utils/pactl.c:117
#, c-format
msgid "Allocated during whole lifetime: %u blocks containing %s bytes total.\n"
msgstr ""
-#: ../src/utils/pactl.c:119
+#: ../src/utils/pactl.c:120
#, c-format
msgid "Sample cache size: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:128
+#: ../src/utils/pactl.c:129
#, c-format
msgid "Failed to get server information: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:135
+#: ../src/utils/pactl.c:136
#, c-format
msgid ""
"User name: %s\n"
@@ -1423,206 +1604,212 @@ msgid ""
"Cookie: %08x\n"
msgstr ""
-#: ../src/utils/pactl.c:160
+#: ../src/utils/pactl.c:175
#, c-format
msgid "Failed to get sink information: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:176
+#: ../src/utils/pactl.c:191
#, c-format
msgid ""
-"*** Sink #%u ***\n"
-"Name: %s\n"
-"Driver: %s\n"
-"Sample Specification: %s\n"
-"Channel Map: %s\n"
-"Owner Module: %u\n"
-"Volume: %s\n"
-"Monitor Source: %s\n"
-"Latency: %0.0f usec, configured %0.0f usec\n"
-"Flags: %s%s%s%s%s%s\n"
-"Properties:\n"
-"%s"
-msgstr ""
-
-#: ../src/utils/pactl.c:193
-#: ../src/utils/pactl.c:371
-msgid "muted"
-msgstr ""
-
-#: ../src/utils/pactl.c:212
+"Sink #%u\n"
+"\tState: %s\n"
+"\tName: %s\n"
+"\tDescription: %s\n"
+"\tDriver: %s\n"
+"\tSample Specification: %s\n"
+"\tChannel Map: %s\n"
+"\tOwner Module: %u\n"
+"\tMute: %s\n"
+"\tVolume: %s%s%s\n"
+"\t balance %0.2f\n"
+"\tBase Volume: %s%s%s\n"
+"\tMonitor Source: %s\n"
+"\tLatency: %0.0f usec, configured %0.0f usec\n"
+"\tFlags: %s%s%s%s%s%s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:255
#, c-format
msgid "Failed to get source information: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:228
+#: ../src/utils/pactl.c:271
#, c-format
msgid ""
-"*** Source #%u ***\n"
-"Name: %s\n"
-"Driver: %s\n"
-"Sample Specification: %s\n"
-"Channel Map: %s\n"
-"Owner Module: %u\n"
-"Volume: %s\n"
-"Monitor of Sink: %s\n"
-"Latency: %0.0f usec, configured %0.0f usec\n"
-"Flags: %s%s%s%s%s%s\n"
-"Properties:\n"
-"%s"
-msgstr ""
-
-#: ../src/utils/pactl.c:246
-#: ../src/utils/pactl.c:289
-#: ../src/utils/pactl.c:322
-#: ../src/utils/pactl.c:366
-#: ../src/utils/pactl.c:367
-#: ../src/utils/pactl.c:374
-#: ../src/utils/pactl.c:418
-#: ../src/utils/pactl.c:419
-#: ../src/utils/pactl.c:425
-#: ../src/utils/pactl.c:468
-#: ../src/utils/pactl.c:469
-#: ../src/utils/pactl.c:473
+"Source #%u\n"
+"\tState: %s\n"
+"\tName: %s\n"
+"\tDescription: %s\n"
+"\tDriver: %s\n"
+"\tSample Specification: %s\n"
+"\tChannel Map: %s\n"
+"\tOwner Module: %u\n"
+"\tMute: %s\n"
+"\tVolume: %s%s%s\n"
+"\t balance %0.2f\n"
+"\tBase Volume: %s%s%s\n"
+"\tMonitor of Sink: %s\n"
+"\tLatency: %0.0f usec, configured %0.0f usec\n"
+"\tFlags: %s%s%s%s%s%s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
+#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
+#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
+#: ../src/utils/pactl.c:591
msgid "n/a"
msgstr ""
-#: ../src/utils/pactl.c:263
+#: ../src/utils/pactl.c:321
#, c-format
msgid "Failed to get module information: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:281
+#: ../src/utils/pactl.c:339
#, c-format
msgid ""
-"*** Module #%u ***\n"
-"Name: %s\n"
-"Argument: %s\n"
-"Usage counter: %s\n"
-"Auto unload: %s\n"
+"Module #%u\n"
+"\tName: %s\n"
+"\tArgument: %s\n"
+"\tUsage counter: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:298
+#: ../src/utils/pactl.c:358
#, c-format
msgid "Failed to get client information: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:316
+#: ../src/utils/pactl.c:376
#, c-format
msgid ""
-"*** Client #%u ***\n"
-"Driver: %s\n"
-"Owner Module: %s\n"
-"Properties:\n"
-"%s"
+"Client #%u\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:333
+#: ../src/utils/pactl.c:393
+#, fuzzy, c-format
+msgid "Failed to get card information: %s\n"
+msgstr "Error en obrir el fitxer de configuració: %s"
+
+#: ../src/utils/pactl.c:411
#, c-format
-msgid "Failed to get sink input information: %s\n"
+msgid ""
+"Card #%u\n"
+"\tName: %s\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
msgstr ""
-#: ../src/utils/pactl.c:352
+#: ../src/utils/pactl.c:425
#, c-format
-msgid ""
-"*** Sink Input #%u ***\n"
-"Driver: %s\n"
-"Owner Module: %s\n"
-"Client: %s\n"
-"Sink: %u\n"
-"Sample Specification: %s\n"
-"Channel Map: %s\n"
-"Volume: %s\n"
-"Buffer Latency: %0.0f usec\n"
-"Sink Latency: %0.0f usec\n"
-"Resample method: %s\n"
-"Properties:\n"
-"%s"
-msgstr ""
-
-#: ../src/utils/pactl.c:385
+msgid "\tProfiles:\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:431
+#, fuzzy, c-format
+msgid "\tActive Profile: %s\n"
+msgstr "Ha fallat la canonada: %s"
+
+#: ../src/utils/pactl.c:442
#, c-format
-msgid "Failed to get source output information: %s\n"
+msgid "Failed to get sink input information: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:405
+#: ../src/utils/pactl.c:461
#, c-format
msgid ""
-"*** Source Output #%u ***\n"
-"Driver: %s\n"
-"Owner Module: %s\n"
-"Client: %s\n"
-"Source: %u\n"
-"Sample Specification: %s\n"
-"Channel Map: %s\n"
-"Buffer Latency: %0.0f usec\n"
-"Source Latency: %0.0f usec\n"
-"Resample method: %s\n"
-"Properties:\n"
-"%s"
-msgstr ""
-
-#: ../src/utils/pactl.c:436
+"Sink Input #%u\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tClient: %s\n"
+"\tSink: %u\n"
+"\tSample Specification: %s\n"
+"\tChannel Map: %s\n"
+"\tMute: %s\n"
+"\tVolume: %s\n"
+"\t %s\n"
+"\t balance %0.2f\n"
+"\tBuffer Latency: %0.0f usec\n"
+"\tSink Latency: %0.0f usec\n"
+"\tResample method: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:500
#, c-format
-msgid "Failed to get sample information: %s\n"
+msgid "Failed to get source output information: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:455
+#: ../src/utils/pactl.c:520
#, c-format
msgid ""
-"*** Sample #%u ***\n"
-"Name: %s\n"
-"Volume: %s\n"
-"Sample Specification: %s\n"
-"Channel Map: %s\n"
-"Duration: %0.1fs\n"
-"Size: %s\n"
-"Lazy: %s\n"
-"Filename: %s\n"
-"Properties:\n"
-"%s"
-msgstr ""
-
-#: ../src/utils/pactl.c:481
+"Source Output #%u\n"
+"\tDriver: %s\n"
+"\tOwner Module: %s\n"
+"\tClient: %s\n"
+"\tSource: %u\n"
+"\tSample Specification: %s\n"
+"\tChannel Map: %s\n"
+"\tBuffer Latency: %0.0f usec\n"
+"\tSource Latency: %0.0f usec\n"
+"\tResample method: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:551
#, c-format
-msgid "Failed to get autoload information: %s\n"
+msgid "Failed to get sample information: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:497
+#: ../src/utils/pactl.c:569
#, c-format
msgid ""
-"*** Autoload Entry #%u ***\n"
-"Name: %s\n"
-"Type: %s\n"
-"Module: %s\n"
-"Argument: %s\n"
-msgstr ""
-
-#: ../src/utils/pactl.c:504
-msgid "sink"
-msgstr ""
-
-#: ../src/utils/pactl.c:504
-msgid "source"
-msgstr ""
-
-#: ../src/utils/pactl.c:511
-#: ../src/utils/pactl.c:521
+"Sample #%u\n"
+"\tName: %s\n"
+"\tSample Specification: %s\n"
+"\tChannel Map: %s\n"
+"\tVolume: %s\n"
+"\t %s\n"
+"\t balance %0.2f\n"
+"\tDuration: %0.1fs\n"
+"\tSize: %s\n"
+"\tLazy: %s\n"
+"\tFilename: %s\n"
+"\tProperties:\n"
+"\t\t%s\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
#, c-format
msgid "Failure: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:545
+#: ../src/utils/pactl.c:633
#, c-format
msgid "Failed to upload sample: %s\n"
msgstr ""
-#: ../src/utils/pactl.c:562
+#: ../src/utils/pactl.c:650
#, c-format
msgid "Premature end of file\n"
msgstr ""
-#: ../src/utils/pactl.c:678
+#: ../src/utils/pactl.c:771
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1637,15 +1824,18 @@ msgid ""
"%s [options] unload-module ID\n"
"%s [options] suspend-sink [SINK] 1|0\n"
"%s [options] suspend-source [SOURCE] 1|0\n"
+"%s [options] set-card-profile [CARD] [PROFILE] \n"
"\n"
" -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 ""
-#: ../src/utils/pactl.c:729
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1653,57 +1843,66 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pactl.c:768
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr ""
-#: ../src/utils/pactl.c:790
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr ""
-#: ../src/utils/pactl.c:802
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr ""
-#: ../src/utils/pactl.c:814
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr ""
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr ""
-#: ../src/utils/pactl.c:831
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr ""
-#: ../src/utils/pactl.c:845
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr ""
-#: ../src/utils/pactl.c:865
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr ""
-#: ../src/utils/pactl.c:875
+#: ../src/utils/pactl.c:969
#, c-format
-msgid "You may not specify more than one sink. You have to specify at least one boolean value.\n"
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean "
+"value.\n"
+msgstr ""
+
+#: ../src/utils/pactl.c:982
+#, c-format
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value.\n"
msgstr ""
-#: ../src/utils/pactl.c:888
+#: ../src/utils/pactl.c:994
#, c-format
-msgid "You may not specify more than one source. You have to specify at least one boolean value.\n"
+msgid "You have to specify a card name/index and a profile name\n"
msgstr ""
-#: ../src/utils/pactl.c:904
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr ""
@@ -1715,7 +1914,8 @@ 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 ""
@@ -1797,19 +1997,17 @@ msgstr ""
msgid "Daemon not responding."
msgstr ""
-#: ../src/utils/pacmd.c:112
+#: ../src/utils/pacmd.c:144
#, c-format
msgid "select(): %s"
msgstr "select(): %s"
-#: ../src/utils/pacmd.c:124
-#: ../src/utils/pacmd.c:140
+#: ../src/utils/pacmd.c:154 ../src/utils/pacmd.c:171
#, c-format
msgid "read(): %s"
msgstr "read(): %s"
-#: ../src/utils/pacmd.c:153
-#: ../src/utils/pacmd.c:167
+#: ../src/utils/pacmd.c:187 ../src/utils/pacmd.c:201
#, c-format
msgid "write(): %s"
msgstr "write(): %s"
@@ -1839,11 +2037,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 ""
@@ -1875,8 +2077,33 @@ msgstr ""
msgid "Using sample spec '%s'\n"
msgstr ""
-#: ../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 ""
+#~ msgid ""
+#~ "' and PolicyKit refuse to grant us priviliges. Dropping SUID again.\n"
+#~ "For enabling real-time scheduling please acquire the appropriate "
+#~ "PolicyKit priviliges, or become a member of '"
+#~ msgstr ""
+#~ "' i PolicyKit ha denegat els permÃsos. S'està lliberant SUID. \n"
+#~ "Per habilitar la prioritat en temps real, s'ha de adquirir els permissos "
+#~ "de PolicyKit, o pertanyer a '"
+
+#~ msgid ""
+#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
+#~ "user."
+#~ msgstr ""
+#~ "', o incremetar els lÃmits de recursos RLIMIT_NICE/RLIMIT_RTPRIO per "
+#~ "aquest usuari."
+
+#~ msgid "Default sink name (%s) does not exist in name register."
+#~ msgstr "El nom sink per omissió (%s) no existeix en el registre de noms."
+
+#~ msgid "Buffer overrun, dropping incoming data\n"
+#~ msgstr ""
+#~ "S'ha sobrepassat la memòria intermitja, s'estan descartant les dades "
+#~ "entrants\n"
+
+#~ msgid "pa_stream_drop() failed: %s\n"
+#~ msgstr "Ha fallat pa_stream_drop(): %s\n"
diff --git a/po/cs.po b/po/cs.po
index e7f3951..926823c 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-12 16:57+0100\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2008-10-19 22:31+0200\n"
"Last-Translator: Petr Kovar <pknbe at volny.cz>\n"
"Language-Team: Czech <translation-team-cs at lists.sourceforge.net>\n"
@@ -17,6 +17,66 @@ msgstr ""
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
#, fuzzy
msgid "Failed to find original lt_dlopen loader."
@@ -152,38 +212,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:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr "NezdaÅila se analýza pÅÃkazového Åádku."
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, 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:458
+#: ../src/daemon/main.c:460
#, 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:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit nám udÄlil oprávnÄnà acquire-high-priority."
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit nám neudÄlil oprávnÄnà acquire-high-priority."
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit nám udÄlil oprávnÄnà acquire-real-time."
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit nám neudÄlil oprávnÄnà acquire-real-time."
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
#, fuzzy
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -194,46 +254,46 @@ msgstr ""
"zažádáno v konfiguraci. Nedisponujeme ovÅ¡em potÅebnými oprávnÄnÃmi:\n"
"Nejsme ve skupinÄ \""
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
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:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "ÃspÄÅ¡nÄ zvýšeno RLIMIT_RTPRIO"
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO selhalo: %s"
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr "Vzdávánà se CAP_NICE"
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
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:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "Démon nebÄžÃ"
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "Démon bÄžà jako PID %u"
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Zabità démona se nezdaÅilo: %s"
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -241,143 +301,143 @@ msgstr ""
"Tento program nenà urÄen ke spuÅ¡tÄnà pod superuživatelem (nenÃ-li zadáno --"
"system)."
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
#, fuzzy
msgid "Root privileges required."
msgstr "Jsou vyžadována oprávnÄnà superuživatele."
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "--start nepodporováno u systémových instancÃ."
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
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:682
+#: ../src/daemon/main.c:684
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:685
+#: ../src/daemon/main.c:687
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:690
+#: ../src/daemon/main.c:692
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:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr "NezdaÅilo se zÃskánà stdio."
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "pipe selhalo: %s"
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "fork() selhalo: %s"
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "read() selhalo: %s"
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "SpuÅ¡tÄnà démona selhalo."
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "SpuÅ¡tÄnà démona bylo úspÄÅ¡né."
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "Toto je PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "PÅekladový poÄÃtaÄ: %s"
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "PÅekladové CFLAGS: %s"
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "BÄžà na poÄÃtaÄi: %s"
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "Velikost stránky je %lu bajtů"
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "PÅeloženo s podporou Valgrind: ano"
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "PÅeloženo s podporou Valgrind: ne"
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "BÄžà v režimu valgrind: %s"
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "Optimalizované sestavenÃ: ano"
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "Optimalizované sestavenÃ: ne"
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "NezdaÅilo se zÃskánà ID poÄÃtaÄe"
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "ID poÄÃtaÄe je %s."
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "PoužÃván bÄhový adresáŠ%s."
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "PoužÃván stavový adresáŠ%s."
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "BÄžà v systémovém režimu: %s"
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() selhalo."
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
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:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -385,27 +445,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:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "pa_core_new() selhalo."
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "Selhalo spuÅ¡tÄnà démona."
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
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:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "SpuÅ¡tÄnà démona dokonÄeno."
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "VypÃnánà démona spuÅ¡tÄno."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "Démon ukonÄen."
@@ -1080,7 +1140,7 @@ msgstr "Selhala analýza dat cookie"
msgid "Failed to open configuration file '%s': %s"
msgstr "Selhalo otevÅenà konfiguraÄnÃho souboru \"%s\": %s"
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "Žádný soubor cookie nenahrán. Pokus o spojenà bez tohoto kroku."
@@ -1200,67 +1260,67 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr "pa_stream_connect_record() selhalo: %s\n"
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "Spojenà selhalo: %s\n"
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "NezdaÅilo se vyprázdnit proud: %s\n"
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr "Proud pÅehrávánà vyprázdnÄn.\n"
-#: ../src/utils/pacat.c:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr "VyprazdÅovánà spojenà se serverem.\n"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "ZÃskáno EOF.\n"
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain(): %s\n"
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "read() selhalo: %s\n"
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "write() selhalo: %s\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr "ZÃskán signál, ukonÄovánÃ.\n"
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr "NezdaÅilo se zÃskat latenci: %s\n"
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "Äas: %0.3f sekund; latence: %0.0f μs. \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr "pa_stream_update_timing_info() selhalo: %s\n"
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, fuzzy, c-format
msgid ""
"%s [options]\n"
@@ -1340,7 +1400,7 @@ msgstr ""
" Požadavek in bajty\n"
" Äas Požadavek Äas in bajty n"
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1351,88 +1411,89 @@ msgstr ""
"PÅeloženo s libpulse %s\n"
"Propojeno s libpulse %s\n"
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr "Neplatná mapa kanálů \"%s\"\n"
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr "Neplatné upÅesnÄnà latence \"%s\"\n"
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr "Neplatné upÅesnÄnà Äasu zpracovánà \"%s\"\n"
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr "Neplatné upÅesnÄnà vzorkovánÃ\n"
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr "Mapa kanálů se neshoduje s upÅesnÄnÃm vzorkovánÃ\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr "OtevÃránà proudu %s s upÅesnÄnÃm vzorkovánà \"%s\".\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr "nahrávánÃ"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr "pÅehrávánÃ"
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr "open(): %s\n"
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr "dup2(): %s\n"
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "PÅÃliÅ¡ mnoho argumentů.\n"
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() selhalo.\n"
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr "io_new() selhalo.\n"
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() selhalo.\n"
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() selhalo: %s"
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr "time_new() selhalo.\n"
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() selhalo.\n"
@@ -1462,7 +1523,7 @@ msgstr "NezdaÅilo se obnovenÃ: %s\n"
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "VAROVÃNÃ: Zvukový server nenà mÃstnÃ, nedojde k pozastavenÃ.\n"
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1790,7 +1851,7 @@ msgstr "Selhalo až s n"
msgid "Premature end of file\n"
msgstr "PÅedÄasný konec souboru\n"
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
@@ -1823,7 +1884,7 @@ msgstr ""
" s SERVER název z až až\n"
" n název NÃZEV Jak až zapnuto n"
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1834,66 +1895,66 @@ msgstr ""
"PÅeloženo s libpulse %s\n"
"Propojeno s libpulse %s\n"
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, fuzzy, c-format
msgid "Please specify a sample file to load\n"
msgstr "ProsÃm a soubor až n"
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr "Selhalo otevÅenà zvukového souboru.\n"
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, fuzzy, c-format
msgid "You have to specify a sample name to play\n"
msgstr "Vy až a název až n"
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, fuzzy, c-format
msgid "You have to specify a sample name to remove\n"
msgstr "Vy až a název až odstranit n"
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, fuzzy, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr "Vy až a cÃl rejstÅÃk a a cÃl n"
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, fuzzy, c-format
msgid "You have to specify a source output index and a source\n"
msgstr "Vy až a zdroj rejstÅÃk a a zdroj n"
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, fuzzy, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr "Vy až a modul název a n"
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, fuzzy, c-format
msgid "You have to specify a module index\n"
msgstr "Vy až a modul rejstÅÃk n"
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, fuzzy, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
"value.\n"
msgstr "Vy ne cÃl Vy až pÅi booleovská hodnota hodnota n"
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, fuzzy, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value.\n"
msgstr "Vy ne zdroj Vy až pÅi booleovská hodnota hodnota n"
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, fuzzy, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr "Vy až a cÃl rejstÅÃk a a cÃl n"
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr "Nezadán žádný platný pÅÃkaz.\n"
diff --git a/po/de.po b/po/de.po
index 43535c5..23e7190 100644
--- a/po/de.po
+++ b/po/de.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-17 08:45+0000\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2009-02-19 12:04+0100\n"
"Last-Translator: Fabian Affolter <fab at fedoraproject.org>\n"
"Language-Team: German <fedora-trans-de at redhat.com>\n"
@@ -18,6 +18,72 @@ msgstr ""
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Poedit-Language: German\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+#, fuzzy
+msgid "Analog Stereo"
+msgstr "Stereo"
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+#, fuzzy
+msgid "Analog Surround 4.0"
+msgstr "Surround 4.0"
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+#, fuzzy
+msgid "Analog Surround 4.1"
+msgstr "Surround 4.1"
+
+#: ../src/modules/alsa/alsa-util.c:573
+#, fuzzy
+msgid "Analog Surround 5.0"
+msgstr "Surround 5.0"
+
+#: ../src/modules/alsa/alsa-util.c:581
+#, fuzzy
+msgid "Analog Surround 5.1"
+msgstr "Surround 5.1"
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+#, fuzzy
+msgid "Analog Surround 7.1"
+msgstr "Surround 7.1"
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
msgstr "Ursprünglicher dlopen-Loader konnte nicht gefunden werden."
@@ -118,8 +184,7 @@ msgstr "GID von Benutzer '%s' und Gruppe '%s' stimmen nicht überein."
msgid "Home directory of user '%s' is not '%s', ignoring."
msgstr "Benutzerverzeichnis von Benutzer '%s' ist nicht '%s', ignoriere."
-#: ../src/daemon/main.c:201
-#: ../src/daemon/main.c:206
+#: ../src/daemon/main.c:201 ../src/daemon/main.c:206
#, c-format
msgid "Failed to create '%s': %s"
msgstr "Konnte '%s' nciht erzeugen: %s"
@@ -152,256 +217,256 @@ 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:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr "Parsen der Kommandzeile fehlgeschlagen."
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, 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."
+msgstr ""
+"Wir befinden uns in der Gruppe '%s', was Scheduling höchster Priorität "
+"ermöglicht."
-#: ../src/daemon/main.c:458
+#: ../src/daemon/main.c:460
#, 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."
+msgstr ""
+"Wir befinden uns in der Gruppe '%s', was Echtzeit-Scheduling ermöglicht."
-#: ../src/daemon/main.c:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "Richtlinien gewähren das Recht aquire-high-priority."
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "Richtlinien verweigern das Recht acquire-high-priority."
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "Richtlinien gewähren das Recht aquire-real-time."
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "Richtlinien verweigern das Recht acquire-real-time."
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
#, fuzzy
msgid ""
-"Called SUID root and real-time and/or high-priority scheduling was requested in the configuration. However, we lack the necessary privileges:\n"
+"Called SUID root and real-time and/or high-priority scheduling was requested "
+"in the configuration. However, we lack the necessary privileges:\n"
"We are not in group '"
msgstr ""
-"Konfiguration fordert Aufruf der SUID root und Echtzeit-Scheduling höchster Priorität. Allerdings fehlen die nötigen Rechte:\n"
+"Konfiguration fordert Aufruf der SUID root und Echtzeit-Scheduling höchster "
+"Priorität. Allerdings fehlen die nötigen Rechte:\n"
"Wir befinden uns nicht in der Gruppe '"
-#: ../src/daemon/main.c:507
-#, fuzzy
+#: ../src/daemon/main.c:532
msgid ""
-"', PolicyKit refuse to grant us the requested privileges and we have no increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
-"For enabling real-time/high-priority scheduling please acquire the appropriate PolicyKit privileges, or become a member of '"
-msgstr ""
-"' und PolicyKit verweigern diese Rechte. Verwerfe SUID wieder.\n"
-"Erlangen Sie die den Richtlinien entsprechenden Rechte, um Echtzeit-Scheduling zu aktivieren oder werden Sie Mitglied der Gruppe '"
-
-#: ../src/daemon/main.c:508
-msgid "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this user."
-msgstr "' oder erhöhen sie die RLIMIT_NICE/RLIMIT_RTPRIO-Ressourcenbegrenzungen für diesen Nutzer."
-
-#: ../src/daemon/main.c:530
-msgid "High-priority scheduling enabled in configuration but not allowed by policy."
+"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:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "RLIMIT_RTPRIO erfolgreich erhöht"
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO fehlgeschlagen: %s"
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr "Verwerfe CAP_NICE"
-#: ../src/daemon/main.c:576
-msgid "Real-time scheduling enabled in configuration but not allowed by policy."
+#: ../src/daemon/main.c:578
+msgid ""
+"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr "Echtzeit-Scheduling konfiguriert, jedoch nicht erlaubt."
-#: ../src/daemon/main.c:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "Daemon läuft nicht"
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "Daemon läuft als PID %u"
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Konnte Prozess nicht abbrechen: %s"
-#: ../src/daemon/main.c:667
-msgid "This program is not intended to be run as root (unless --system is specified)."
-msgstr "Dieses Programm sollte ohne die Option --system nicht als Administrator ausgeführt werden."
-
#: ../src/daemon/main.c:669
+msgid ""
+"This program is not intended to be run as root (unless --system is "
+"specified)."
+msgstr ""
+"Dieses Programm sollte ohne die Option --system nicht als Administrator "
+"ausgeführt werden."
+
+#: ../src/daemon/main.c:671
msgid "Root privileges required."
msgstr "Root-Berechtigungen benötigt."
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "--start nicht unterstützt für System-Instanzen."
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "System-Modus aktiv, jeodch --disallow-exit nicht gesetzt!"
-#: ../src/daemon/main.c:682
+#: ../src/daemon/main.c:684
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:685
+#: ../src/daemon/main.c:687
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "System-Modus aktiv, SHM-Modus gezwungenermaÃen deaktiviert!"
-#: ../src/daemon/main.c:690
+#: ../src/daemon/main.c:692
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "System-Modus aktiv, Exit-Idle-Time gezwungenermaÃen deaktiviert!"
-#: ../src/daemon/main.c:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr "Reservieren von STDIO fehlgeschlagen."
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "pipe fehlgeschlagen: %s"
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "fork() fehlgeschlagen: %s"
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "read() fehlgeschlagen: %s"
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "Start des Daemons fehlgeschlagen."
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "Start des Daemons erfolgreich."
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "Dies ist PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "Kompilier-Host: %s"
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Kompilier-CFLAGS: %s"
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "Laufe auf Host: %s"
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr "%u CPUs gefunden."
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "SeitengröÃe ist %lu Bytes."
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "Kompiliere mit Valgrind-Unterstützung: ja"
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "Kompiliere mit Valgrind-Unterstützung: nein"
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Läuft im Valgrind-Modus: %s"
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "Optimiertes Build: ja"
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "Optimiertes Build: nein"
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "Beziehen der Maschinen-ID fehlgeschlagen"
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "System- ID ist %s."
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "Nutze Laufzeit-Verzeichnis %s."
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "Nutze Zustands-Verzeichnis %s."
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "Laufe im System-Modus: %s"
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() fehlgeschlagen."
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Neue hochauslösende Timer verfügbar! Guten Appetit!"
-#: ../src/daemon/main.c:892
-msgid "Dude, your kernel stinks! The chef's recommendation today is Linux with high-resolution timers enabled!"
+#: ../src/daemon/main.c:894
+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:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "pa_core_new() fehlgeschlagen."
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "Konnte Daemon nicht initialisieren."
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Daemon verweigert Ausführung, da keine Module geladen."
-#: ../src/daemon/main.c:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "Start des Daemons abgeschlossen."
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "Herunterfahren des Daemon gestartet."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "Daemon beendet."
@@ -416,37 +481,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"
@@ -457,10 +533,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"
@@ -473,41 +551,54 @@ msgstr ""
" --dump-conf Zeige Standardkonfiguration\n"
" --dump-modules Zeige Liste verfügbarer Module\n"
" --dump-resample-methods Zeige verfügbare Resample-Methoden\n"
-" --cleanup-shm Cleanup stale shared memory segments\n"
-" --start Starte Daemon, falls noch nicht geschehen\n"
+" --cleanup-shm Cleanup stale shared memory "
+"segments\n"
+" --start Starte Daemon, falls noch nicht "
+"geschehen\n"
" -k --kill Laufenden Daemon beenden\n"
-" --check Prüfe laufende Daemone (gibt nur einen Exit-Code zurück)\n"
+" --check Prüfe laufende Daemone (gibt nur "
+"einen Exit-Code zurück)\n"
"\n"
"OPTIONS:\n"
" --system[=BOOL] Als systemweite Instanz ausführen\n"
" -D, --daemonize[=BOOL] Nach Start zum Daemon machen\n"
" --fail[=BOOL] Beenden, wenn Start fehlschlägt\n"
" --high-priority[=BOOL] Nutze höchste Priorität\n"
-" (Nur verfügbar als root, wenn SUID oder\n"
+" (Nur verfügbar als root, wenn SUID "
+"oder\n"
" mit erhöhtem RLIMIT_NICE)\n"
-" --realtime[=BOOL] Versuche, Echtzeit-Scheduling zu aktivieren\n"
-" (Nur verfügbar als root, wenn SUID oder\n"
+" --realtime[=BOOL] Versuche, Echtzeit-Scheduling zu "
+"aktivieren\n"
+" (Nur verfügbar als root, wenn SUID "
+"oder\n"
" mit erhöhtem RLIMIT_RTPRIO)\n"
-" --disallow-module-loading[=BOOL] Verbiete (Ent-)laden durch Nutzer angeforderter\n"
+" --disallow-module-loading[=BOOL] Verbiete (Ent-)laden durch Nutzer "
+"angeforderter\n"
" Module nach dem Start\n"
-" --disallow-exit[=BOOL] Verbiete Beenden auf Anfrage des Nutzers\n"
+" --disallow-exit[=BOOL] Verbiete Beenden auf Anfrage des "
+"Nutzers\n"
" --exit-idle-time=SECS Beende Daemon, wenn für diese Zeit \n"
" untätig\n"
-" --module-idle-time=SECS Entlade untätige Module nach dieser Zeit\n"
-" --scache-idle-time=SECS Entlade untätige automatisch geladene \n"
+" --module-idle-time=SECS Entlade untätige Module nach dieser "
+"Zeit\n"
+" --scache-idle-time=SECS Entlade untätige automatisch "
+"geladene \n"
" Samples nach dieser Zeit\n"
" --log-level[=STUFE] Grad der Ausführlichkeit angeben\n"
" -v Ausführliche Meldungen\n"
" --log-target={auto,syslog,stderr} Protokoll-Ziel angeben\n"
-" -p, --dl-search-path=PFAD Suchpfad für dynamisch freigegebene \n"
+" -p, --dl-search-path=PFAD Suchpfad für dynamisch "
+"freigegebene \n"
" Objekte (Plugins)\n"
" --resample-method=METHODE Nutze diese Resampling-Methode\n"
" (Siehe --dump-resample-methods für\n"
" mögliche Werte)\n"
" --use-pid-file[=BOOL] Eine PID-Datei erstellen\n"
-" --no-cpu-limit[=BOOL] CPU-Lastbegrenzung auf unterstützten\n"
+" --no-cpu-limit[=BOOL] CPU-Lastbegrenzung auf "
+"unterstützten\n"
" Systemen nicht installieren.\n"
-" --disable-shm[=BOOL] Keine Unterstützung für Shared Memory.\n"
+" --disable-shm[=BOOL] Keine Unterstützung für Shared "
+"Memory.\n"
"\n"
"STARTUP-SCRIPT:\n"
" -L, --load=\"MODUL-ARGUMENTE\" Plugin-Modul mit diesen Parametern \n"
@@ -527,8 +618,12 @@ msgid "--fail expects boolean argument"
msgstr "Option --fail erfordert bool'schen Wert"
#: ../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 erfordert Wert für Grad der Protokollierung (entweder numerisch im Bereich 0..4 or einen dieser: debug, info, notice, warn, error)."
+msgid ""
+"--log-level expects log level argument (either numeric in range 0..4 or one "
+"of debug, info, notice, warn, error)."
+msgstr ""
+"--log-level erfordert Wert für Grad der Protokollierung (entweder numerisch "
+"im Bereich 0..4 or einen dieser: debug, info, notice, warn, error)."
#: ../src/daemon/cmdline.c:281
msgid "--high-priority expects boolean argument"
@@ -552,7 +647,8 @@ msgstr "Option --use-pid-file erfordert bool'schen Wert"
#: ../src/daemon/cmdline.c:326
msgid "Invalid log target: use either 'syslog', 'stderr' or 'auto'."
-msgstr "Ungültiges Log-Ziel: Benutzen Sie entweder 'syslog', 'stderr' oder 'auto'."
+msgstr ""
+"Ungültiges Log-Ziel: Benutzen Sie entweder 'syslog', 'stderr' oder 'auto'."
#: ../src/daemon/cmdline.c:333
msgid "--log-time boolean argument"
@@ -692,8 +788,7 @@ msgstr "Root-Privilegien aufgeben."
msgid "Limited capabilities successfully to CAP_SYS_NICE."
msgstr "Fähigkeiten erfolgreich auf CAP_SYS_NICE reduziert."
-#: ../src/pulse/channelmap.c:103
-#: ../src/pulse/channelmap.c:804
+#: ../src/pulse/channelmap.c:103 ../src/pulse/channelmap.c:804
msgid "Mono"
msgstr "Mono"
@@ -897,12 +992,9 @@ msgstr "Oben Hinten Links"
msgid "Top Rear Right"
msgstr "Oben Hinten Rechts"
-#: ../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 "(ungültig)"
@@ -1051,8 +1143,7 @@ msgstr "%0.1f KB"
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() fehlgeschlagen"
@@ -1065,7 +1156,7 @@ msgstr "Parsen der Cookie-Daten fehlgeschlagen"
msgid "Failed to open configuration file '%s': %s"
msgstr "Konfigurationsdatei '%s' konnte nicht geöffnet werden: %s"
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "Verbindungsversuch ohne Cookie, da keines geladen."
@@ -1183,73 +1274,68 @@ msgstr "pa_stream_connect_playback() fehlgeschlagen: %s\n"
msgid "pa_stream_connect_record() failed: %s\n"
msgstr "pa_stream_connect_record() fehlgeschlagen: %s\n"
-#: ../src/utils/pacat.c:321
-#: ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758
-#: ../src/utils/paplay.c:183
+#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "Verbindungsfehler: %s\n"
-#: ../src/utils/pacat.c:342
-#: ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "Entleeren des Streams fehlgeschlagen: %s\n"
-#: ../src/utils/pacat.c:347
-#: ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr "Wiedergabe-Stream entleert.\n"
-#: ../src/utils/pacat.c:357
-#: ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr "Draining connection to server.\n"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "EOF empfangen.\n"
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain(): %s\n"
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "read() fehlgeschlagen: %s\n"
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "write() fehlgeschlagen: %s\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr "Signal empfangen, beende.\n"
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr "Erhalten der Latenz fehlgeschlagen: %s\n"
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "Zeit: %0.3f sec; Latenz: %0.0f usec. \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr "pa_stream_update_timing_info() fehlgeschlagen: %s\n"
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1262,27 +1348,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 [options]\n"
"\n"
@@ -1298,13 +1401,18 @@ msgstr ""
" -d, --device=DEVICE Name zu verbindender Sink/Quelle\n"
" -n, --client-name=NAME Rufname des Clients auf dem Server\n"
" --stream-name=NAME Rufname des Streams auf dem Server\n"
-" --volume=VOLUME Initiale (lineare) Lautstärke zwischen 0...65536 angeben\n"
+" --volume=VOLUME Initiale (lineare) Lautstärke "
+"zwischen 0...65536 angeben\n"
" --rate=SAMPLERATE Sample-Rate in Hz (Standard 44100)\n"
-" --format=SAMPLEFORMAT Ein Sample-Format von s16le, s16be, u8, float32le,\n"
-" float32be, ulaw, alaw, s32le, s32be (defaults to s16ne)\n"
-" --channels=CHANNELS Anzahl Kanäle, 1 für mono, 2 für stereo\n"
+" --format=SAMPLEFORMAT Ein Sample-Format von s16le, s16be, "
+"u8, float32le,\n"
+" float32be, ulaw, alaw, s32le, s32be "
+"(defaults to s16ne)\n"
+" --channels=CHANNELS Anzahl Kanäle, 1 für mono, 2 für "
+"stereo\n"
" (Standard ist 2)\n"
-" --channel-map=CHANNELMAP Diese geänderte Kanalzuordnung nutzen\n"
+" --channel-map=CHANNELMAP Diese geänderte Kanalzuordnung "
+"nutzen\n"
" --fix-format Sample-Format des mit Sink\n"
" verbundenen Streams nutzen.\n"
" --fix-rate Sample-Rate des mit Sink\n"
@@ -1313,11 +1421,13 @@ msgstr ""
" des mit Sink verbundenen\n"
" Streams nutzen.\n"
" --no-remix Kanäle nicht up-/down-mischen.\n"
-" --no-remap Kanäle nach Index statt Name zuordnen.\n"
+" --no-remap Kanäle nach Index statt Name "
+"zuordnen.\n"
" --latency=BYTES Diese Latenz verwenden.\n"
-" --process-time=BYTES Diese Prozesszeit pro Anfrage verwenden.\n"
+" --process-time=BYTES Diese Prozesszeit pro Anfrage "
+"verwenden.\n"
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1328,94 +1438,89 @@ msgstr ""
"Kompiliert mit libpulse %s\n"
"Gelinkt mit libpulse %s\n"
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr "Ungültige Kanal-Zuweisung '%s'\n"
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr "Ungültige Latenz-Angaben '%s'\n"
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr "Ungültige Prozesszeit-Angaben '%s'\n"
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr "Ungültige Sample-Angaben\n"
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr "Kanalzuordnung entspricht nicht Einstellungen des Samples\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr "Ãffne eine %s-Stream mit Sample-Angabe '%s'.\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr "aufnehmen"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr "abspielen"
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr "open(): %s\n"
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr "dup2(): %s\n"
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "Zu viele Argumente.\n"
-#: ../src/utils/pacat.c:757
-#: ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013
-#: ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() fehlgeschlagen.\n"
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr "io_new() fehlgeschlagen.\n"
-#: ../src/utils/pacat.c:784
-#: ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027
-#: ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() fehlgeschlagen.\n"
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_new() fehlgeschlagen: %s"
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr "time_new() fehlgeschlagen.\n"
-#: ../src/utils/pacat.c:810
-#: ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035
-#: ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() fehlgeschlagen.\n"
@@ -1445,8 +1550,7 @@ msgstr "Resume fehlgeschlagen: %s\n"
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "WARNUNG: Sound-Server läuft nicht lokal, nicht ausgesetzt.\n"
-#: ../src/utils/pasuspender.c:176
-#: ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1464,7 +1568,8 @@ 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 [options] ... \n"
@@ -1619,18 +1724,10 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:303
-#: ../src/utils/pactl.c:347
-#: ../src/utils/pactl.c:382
-#: ../src/utils/pactl.c:419
-#: ../src/utils/pactl.c:478
-#: ../src/utils/pactl.c:479
-#: ../src/utils/pactl.c:489
-#: ../src/utils/pactl.c:533
-#: ../src/utils/pactl.c:534
-#: ../src/utils/pactl.c:540
-#: ../src/utils/pactl.c:583
-#: ../src/utils/pactl.c:584
+#: ../src/utils/pactl.c:303 ../src/utils/pactl.c:347 ../src/utils/pactl.c:382
+#: ../src/utils/pactl.c:419 ../src/utils/pactl.c:478 ../src/utils/pactl.c:479
+#: ../src/utils/pactl.c:489 ../src/utils/pactl.c:533 ../src/utils/pactl.c:534
+#: ../src/utils/pactl.c:540 ../src/utils/pactl.c:583 ../src/utils/pactl.c:584
#: ../src/utils/pactl.c:591
msgid "n/a"
msgstr "k. A."
@@ -1821,8 +1918,7 @@ msgstr ""
"\tEigenschaften:\n"
"\t\t%s\n"
-#: ../src/utils/pactl.c:599
-#: ../src/utils/pactl.c:609
+#: ../src/utils/pactl.c:599 ../src/utils/pactl.c:609
#, c-format
msgid "Failure: %s\n"
msgstr "Fehlgeschlagen: %s\n"
@@ -1837,7 +1933,7 @@ msgstr "Hochladen des Sample fehlgeschlagen: %s\n"
msgid "Premature end of file\n"
msgstr "Dateiende ist zu früh aufgetreten\n"
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1857,8 +1953,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 [options] stat\n"
"%s [options] list\n"
@@ -1880,7 +1978,7 @@ msgstr ""
" -s, --server=SERVER Name des Zielservers\n"
" -n, --client-name=NAME Rufname des Clients auf dem Server\n"
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1891,62 +1989,71 @@ msgstr ""
"Kompiliert mit libpulse %s\n"
"Gelinkt mit libpulse %s\n"
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr "Geben Sie eine zu öffnende Sample-Datei an\n"
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr "Ãffnen der Audio-Datei fehlgeschlagen.\n"
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr "Sie müssen eine abzuspielende Sample-Datei angeben\n"
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr "Sie müssen eine zu löschende Sample-Datei angeben\n"
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr "Sie müssen einen Sink-Eingabe-Indexwert und einen Sink angeben\n"
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
-msgstr "Sie müssen eine Indexwert für die Quell-Ausgabe und eine Quelle angeben\n"
+msgstr ""
+"Sie müssen eine Indexwert für die Quell-Ausgabe und eine Quelle angeben\n"
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr "Sie müssen einen Modulnamen angeben und Argumente übergeben.\n"
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr "Sie müssen einen Indexwert für ein Modul angeben\n"
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, c-format
-msgid "You may not specify more than one sink. You have to specify a boolean value.\n"
-msgstr "Sie sollten nur eine Senke angeben. Sie müssen zumindest einen bool'schen Wert übergeben.\n"
+msgid ""
+"You may not specify more than one sink. You have to specify a boolean "
+"value.\n"
+msgstr ""
+"Sie sollten nur eine Senke angeben. Sie müssen zumindest einen bool'schen "
+"Wert übergeben.\n"
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, c-format
-msgid "You may not specify more than one source. You have to specify a boolean value.\n"
-msgstr "Sie sollten nur eine Quelle angeben. Sie müssen zumindest einen bool'schen Wert übergeben.\n"
+msgid ""
+"You may not specify more than one source. You have to specify a boolean "
+"value.\n"
+msgstr ""
+"Sie sollten nur eine Quelle angeben. Sie müssen zumindest einen bool'schen "
+"Wert übergeben.\n"
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr "Sie müssen einen Karten-Name/Indexwert und einen Profilnamen angeben\n"
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr "Kein gültiger Befehl angegeben.\n"
@@ -1958,14 +2065,16 @@ 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 Zeige aktuell mit X11-Anzeige verbundene PulseAudio-Daten (Standard)\n"
" -e Lokale PulseAudio-Daten an X11-Anzeige exportieren\n"
-" -i PulseAudio-Daten von X11-Anzeige in lokale Umgebungsvariablen und Cookie importieren.\n"
+" -i PulseAudio-Daten von X11-Anzeige in lokale Umgebungsvariablen und "
+"Cookie importieren.\n"
" -r PulseAudio-Daten von X11-Anzeige löschen\n"
#: ../src/utils/pax11publish.c:94
@@ -2051,14 +2160,12 @@ msgstr "Daemon antwortet nicht."
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"
@@ -2088,11 +2195,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"
@@ -2106,7 +2217,8 @@ msgstr ""
" -d, --device=DEVICE Name des Ziel-Sink\n"
" -n, --client-name=NAME Rufname des Clients auf dem Server\n"
" --stream-name=NAME Rufname des Streams auf dem Server\n"
-" --volume=VOLUME Initiale (lineare) Lautstärke zwischen 0...65536\n"
+" --volume=VOLUME Initiale (lineare) Lautstärke "
+"zwischen 0...65536\n"
" --channel-map=CHANNELMAP Diese Kanalzuordnung nutzen\n"
#: ../src/utils/paplay.c:255
@@ -2140,19 +2252,40 @@ msgstr "Kanal-Zuweisung stimmt mit Datei nicht überein.\n"
msgid "Using sample spec '%s'\n"
msgstr "Sampling-Angabe '%s' wird benutzt\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 "Fehler beim Zugriff auf Autostart -Sperre."
+#, fuzzy
+#~ msgid ""
+#~ "', PolicyKit refuse to grant us the requested privileges and we have no "
+#~ "increase RLIMIT_NICE/RLIMIT_RTPRIO resource limits.\n"
+#~ "For enabling real-time/high-priority scheduling please acquire the "
+#~ "appropriate PolicyKit privileges, or become a member of '"
+#~ msgstr ""
+#~ "' und PolicyKit verweigern diese Rechte. Verwerfe SUID wieder.\n"
+#~ "Erlangen Sie die den Richtlinien entsprechenden Rechte, um Echtzeit-"
+#~ "Scheduling zu aktivieren oder werden Sie Mitglied der Gruppe '"
+
+#~ msgid ""
+#~ "', or increase the RLIMIT_NICE/RLIMIT_RTPRIO resource limits for this "
+#~ "user."
+#~ msgstr ""
+#~ "' oder erhöhen sie die RLIMIT_NICE/RLIMIT_RTPRIO-Ressourcenbegrenzungen "
+#~ "für diesen Nutzer."
+
#~ msgid "Default sink name (%s) does not exist in name register."
#~ msgstr "Vorgabename für Sink (%s) existiert nicht im Namensregister."
+
#~ msgid "Buffer overrun, dropping incoming data\n"
#~ msgstr "Pufferüberlauf, verwerfe eingehende Daten\n"
+
#~ msgid "pa_stream_drop() failed: %s\n"
#~ msgstr "pa_stream_drop() fehlgeschlagen: %s\n"
+
#~ msgid "muted"
#~ msgstr "stumm"
+
#~ msgid ""
#~ "*** Autoload Entry #%u ***\n"
#~ "Name: %s\n"
@@ -2165,10 +2298,12 @@ msgstr "Fehler beim Zugriff auf Autostart -Sperre."
#~ "Typ: %s\n"
#~ "Modul: %s\n"
#~ "Argument: %s\n"
+
#~ msgid "sink"
#~ msgstr "Sink"
+
#~ msgid "source"
#~ msgstr "Quelle"
+
#~ msgid "socketpair(): %s"
#~ msgstr "socketpair(): %s"
-
diff --git a/po/el.po b/po/el.po
index 77d1397..262ecd5 100644
--- a/po/el.po
+++ b/po/el.po
@@ -6,7 +6,7 @@ msgid ""
msgstr ""
"Project-Id-Version: el\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-12 16:57+0100\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2008-08-22 19:40+0300\n"
"Last-Translator: Dimitris Glezos <dimitris at glezos.com>\n"
"Language-Team: Greek <fedora-trans-el at redhat.com>\n"
@@ -16,6 +16,66 @@ msgstr ""
"X-Generator: KAider 0.1\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
msgstr ""
@@ -149,221 +209,221 @@ msgstr ""
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr ""
-#: ../src/daemon/main.c:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr ""
-#: ../src/daemon/main.c:458
+#: ../src/daemon/main.c:460
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr ""
-#: ../src/daemon/main.c:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
"in the configuration. However, we lack the necessary privileges:\n"
"We are not in group '"
msgstr ""
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
msgid ""
"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr ""
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr ""
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr ""
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
msgid ""
"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr ""
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr ""
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr ""
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr ""
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
msgid "Root privileges required."
msgstr ""
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr ""
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:682
+#: ../src/daemon/main.c:684
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:687
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:690
+#: ../src/daemon/main.c:692
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr ""
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr ""
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr ""
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "ÎÏ
ÏÏ ÎµÎ¯Î½Î±Î¹ Ïο PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr ""
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr ""
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr ""
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr ""
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr ""
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr ""
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr ""
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr ""
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr ""
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr ""
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr ""
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -371,27 +431,27 @@ msgstr ""
"ÎικΠμοÏ
, ο ÏÏ
ÏÎ®Î½Î±Ï ÏοÏ
είναι για Ïα μÏάζα! Î ÏÏÏÏαÏη ÏοÏ
ÏÎµÏ ÏήμεÏα είναι "
"Linux με ενεÏγοÏοιημÎνα Ïα high-resolution timers!"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr ""
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr ""
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
-#: ../src/daemon/main.c:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr ""
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr ""
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr ""
@@ -1013,7 +1073,7 @@ msgstr ""
msgid "Failed to open configuration file '%s': %s"
msgstr ""
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr ""
@@ -1132,67 +1192,67 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr ""
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr ""
-#: ../src/utils/pacat.c:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr ""
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr ""
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr ""
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr ""
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr ""
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1245,7 +1305,7 @@ msgid ""
"per request in bytes.\n"
msgstr ""
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1253,88 +1313,89 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr ""
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr ""
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr ""
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr ""
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr ""
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr ""
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr ""
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr ""
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr ""
@@ -1364,7 +1425,7 @@ msgstr ""
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1638,7 +1699,7 @@ msgstr ""
msgid "Premature end of file\n"
msgstr ""
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1664,7 +1725,7 @@ msgid ""
"server\n"
msgstr ""
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1672,66 +1733,66 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr ""
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr ""
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr ""
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr ""
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr ""
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr ""
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr ""
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr ""
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
"value.\n"
msgstr ""
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value.\n"
msgstr ""
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr ""
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr ""
diff --git a/po/es.po b/po/es.po
index 042f167..baee21d 100644
--- a/po/es.po
+++ b/po/es.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-12 16:57+0100\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2009-01-16 09:25-0300\n"
"Last-Translator: daniel cabrera <h.daniel.cabrera at gmail.com>\n"
"Language-Team: Spanish <fedora-trans-es at redhat.com>\n"
@@ -16,6 +16,66 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
#, fuzzy
msgid "Failed to find original lt_dlopen loader."
@@ -151,37 +211,37 @@ 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:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr "Falló al analizar la lÃnea de comando."
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, 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:458
+#: ../src/daemon/main.c:460
#, 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:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit garantiza que se obtenga el privilegio de alta prioridad."
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit se niega a dar acceso al privilegio de alta prioridad."
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit garantiza el acceso al privilegio de tiempo real."
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit se niega a dar acceso al privilegio de tiempo real."
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
#, fuzzy
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -193,48 +253,48 @@ msgstr ""
"necesarios:\n"
"No estamos en el grupo '"
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
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:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "RLIMIT_RTPRIO incrementado en forma exitosa"
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "Fallo en RLIMIT_RTPRIO: %s"
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr "Abandonando CAP_NICE"
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
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:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "El demonio no está funcionando"
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "El demonio está funcionando como PID %u"
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "No se ha podido detener el demonio: %s"
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -242,149 +302,149 @@ msgstr ""
"Este programa no tiene por qué ser ejecutado como root (a menos que --system "
"sea especificado)."
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
#, fuzzy
msgid "Root privileges required."
msgstr "Se necesitan privilegios de usuario root."
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "--start no está soportado para las instancias del sistema."
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
"Ejecutándose en modo de sistema, ¡pero no se ha configurado --disallow-exit! "
-#: ../src/daemon/main.c:682
+#: ../src/daemon/main.c:684
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
"Ejecutándose en modo de sistema, ¡pero no se ha configurado --disallow-"
"module-loading!"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:687
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
"Ejecutándose en modo de sistema, ¡desactivando forzadamente el modo SHM!"
-#: ../src/daemon/main.c:690
+#: ../src/daemon/main.c:692
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
"Ejecutándose en modo de sistema, ¡desactivando forzadamente exit idle time!"
-#: ../src/daemon/main.c:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr "Fallo al intentar adquirir stdio."
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "Falló el pipe: %s"
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "Falló el fork(): %s"
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "Falló la operación read(): %s"
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "Falló el inicio del demonio. "
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "El demonio se inició exitosamente."
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "Esto es PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilación: %s"
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Compilación CFLAGS: %s"
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "Ejecutándose en el host: %s"
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "El tamaño de la página es de %lu bytes"
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "Soporte para compilar con Valgrind: si"
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "Soporte para compilar con Valgrind: no"
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Ejecutándose en modo valgrind: %s"
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "Build optimizado: si"
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "Build optimizado: no"
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "Fallo al intentar obtener el ID de la máquina"
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "El ID de la máquina es %s"
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "Utilizando directorio de tiempo de ejecución %s."
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "Utilizando directorio de estado %s."
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "Ejecutándose en modo de sistema: %s"
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "Ha fallado pa_pid_file_create()."
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
"¡Existen cronómetros de alta resolución fresquitos y disponibles! ¡Bon "
"appetit!"
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -392,29 +452,29 @@ msgstr ""
"¡Amigo, su kernel deja mucho que desear! ¡El plato que hoy recomienda el "
"chef es Linux con cronómetros de alta resolución activados! "
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "Falló pa_core_new()."
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "Fallo al intentar iniciar el demonio."
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
"El demonio se ha iniciado sin ningún módulo cargado, y por ello se niega a "
"funcionar."
-#: ../src/daemon/main.c:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "El demonio se inició completamente."
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "Comienza a apagarse el demonio."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "El demonio se ha apagado."
@@ -1123,7 +1183,7 @@ msgstr "Fallo al analizar los datos de la cookie"
msgid "Failed to open configuration file '%s': %s"
msgstr "Fallo al abrir el archivo de configuración '%s': %s"
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "No se ha cargado ninguna cookie. Intentando conectar de todos modos."
@@ -1242,67 +1302,67 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr "pa_stream_connect_record() falló: %s\n"
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "Error en la conexión: %s\n"
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "Error al drenar el flujo: %s\n"
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../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:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr "Drenando conexión con el servidor.\n"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "Hay EOF.\n"
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain(): %s\n"
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "read() falló: %s\n"
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "write() falló: %s\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr "Hay señal, saliendo (exiting).\n"
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr "No se pudo obtener latencia: %s\n"
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "Tiempo: %0.3f sec; Latencia: %0.0f usec. \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr "pa_stream_update_timing_info() falló: %s\n"
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1404,7 +1464,7 @@ msgstr ""
" --process-time=BYTES Solicitar los procesos de tiempo por "
"pedido especificados en bytes.\n"
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1415,88 +1475,89 @@ msgstr ""
"Compilado con libpulse %s\n"
"Linkeado con libpulse %s\n"
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr "Mapa de canales inválido '%s'\n"
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr "Especificación de latencia inválida '%s'\n"
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr "Especificación de tiempo de proceso inválida '%s'\n"
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr "Especificación de muestra inválida\n"
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr "El mapa del canal no se corresponde con la especificación de muestra\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr "Abriendo un %s flujo con las especificaciones de muestra '%s'.\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr "grabando"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr "playback"
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr "open() %s\n"
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr "dup2(): %s\n"
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "Demasiados argumentos.\n"
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() falló.\n"
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr "io_new() falló.\n"
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() falló.\n"
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() falló: %s"
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr "time_new() falló.\n"
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() falló.\n"
@@ -1526,7 +1587,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:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1896,7 +1957,7 @@ msgstr "Fallo al cargar muestra: %s\n"
msgid "Premature end of file\n"
msgstr "Fin prematuro del archivo\n"
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
@@ -1942,7 +2003,7 @@ msgstr ""
" -n, --client-name=NAME Cómo llamar a este cliente en el "
"servidor\n"
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1953,49 +2014,49 @@ msgstr ""
"Compilado con libpulse %s\n"
"Linked con libpulse %s\n"
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr "Por favor, especifique un archivo de muestra a cargar\n"
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr "Error al intentar abrir el archivo de sonido.\n"
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr "Debe especificar un nombre de muestra para ser escuchado\n"
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr "Debe especificar un nombre de muestra para ser eliminado\n"
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr ""
"Debe especificar un Ãndice para las entradas del destino y un destino\n"
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr ""
"Debe especificar un Ãndice para las salidas de la fuente, y una fuente\n"
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr "Debe especificar un nombre de módulo y los argumentos\n"
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr "Debe especificar un Ãndice de módulo\n"
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, fuzzy, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
@@ -2004,7 +2065,7 @@ msgstr ""
"No puede especificar más de un destino. Tiene que especificar al menos un "
"valor booleano.\n"
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, fuzzy, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
@@ -2013,13 +2074,13 @@ msgstr ""
"No puede especificar más de una fuente. Tiene que especificar al menos un "
"valor booleano.\n"
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, fuzzy, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr ""
"Debe especificar un Ãndice para las entradas del destino y un destino\n"
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr "No se ha especificadfo ningún comando válido.\n"
diff --git a/po/fi.po b/po/fi.po
index a949856..4306364 100644
--- a/po/fi.po
+++ b/po/fi.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: git trunk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-13 08:57+0200\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2009-02-13 08:57+0200\n"
"Last-Translator: Timo Jyrinki <timo.jyrinki at iki.fi>\n"
"Language-Team: Finnish <laatu at lokalisointi.org>\n"
@@ -15,6 +15,66 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
msgstr "Alkuperäisen ld_dlopen-lataimen löytäminen epäonnistui."
@@ -148,83 +208,83 @@ msgstr ""
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr ""
-#: ../src/daemon/main.c:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr ""
-#: ../src/daemon/main.c:458
+#: ../src/daemon/main.c:460
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr ""
-#: ../src/daemon/main.c:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
"in the configuration. However, we lack the necessary privileges:\n"
"We are not in group '"
msgstr ""
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
msgid ""
"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr ""
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr ""
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr ""
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
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:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "Taustaprosessi ei ole käynnissä"
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "Taustaprosessi käynnissä prosessitunnisteella %u"
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Taustaprosessin lopettaminen epäonnistui: %s"
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -232,144 +292,144 @@ msgstr ""
"Tätä ohjelmaa ei ole tarkoitettu suoritettavaksi pääkäyttäjänä (ellei --"
"system ole määritelty)."
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
msgid "Root privileges required."
msgstr "Pääkäyttäjän (root) oikeudet vaaditaan."
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr ""
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:682
+#: ../src/daemon/main.c:684
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:687
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:690
+#: ../src/daemon/main.c:692
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:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr ""
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr ""
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "Taustaprosessin käynnistys epäonnistui."
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "Taustaprosessin käynnistys onnistui."
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "Tämä on PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "Käännöksen isäntäkone: %s"
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Käännösaikaiset C-liput (CFLAGS): %s"
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "Käynnissä isäntäkoneella: %s"
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr "Löydettiin %u CPU:ta."
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "Sivun koko on %lu tavua"
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "Käännetty Valgrind-tuella: kyllä"
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "Käännetty Valgrind-tuella: ei"
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Käynnissä valgrind-tilassa: %s"
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "Optimoitu rakentaminen: kyllä"
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "Optimoitu rakentaminen: ei"
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "Konetunnisteen nouto epäonnistui"
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "Konetunniste on %s."
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "Käytetään ajonaikaista hakemistoa %s."
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "Käytetään tilahakemistoa %s."
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "Suoritetaan järjestelmätilassa: %s"
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr ""
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Korkean tarkkuuden ajastimet käytettävissä."
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -377,29 +437,29 @@ msgstr ""
"Hei, ytimesi on kehno! Linux korkean tarkkuuden ajastimien tuella on hyvin "
"suositeltava!"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr ""
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "Taustaprosessin alustus epäonnistui."
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
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:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "Taustaprosessin käynnistys valmis."
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "Taustaprosessin sulkeminen käynnistetty."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "Taustaprosessi lopetettu."
@@ -1021,7 +1081,7 @@ msgstr "Evästetietojen jäsennys epäonnistui"
msgid "Failed to open configuration file '%s': %s"
msgstr ""
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "Ei ladattua evästettä. Yritetään yhdistämistä ilman."
@@ -1140,67 +1200,67 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr ""
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "Yhteysvirhe: %s\n"
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr ""
-#: ../src/utils/pacat.c:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr ""
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr ""
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr ""
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr ""
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr "Latenssin selvittäminen epäonnistui: %s\n"
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "Aika: %0.3f s; latenssi: %0.0f μs. \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1253,7 +1313,7 @@ msgid ""
"per request in bytes.\n"
msgstr ""
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1261,88 +1321,89 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr ""
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr ""
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr ""
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr "nauhoitus"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr "toisto"
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr ""
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr ""
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "Liian monta argumenttia.\n"
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr ""
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr ""
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr ""
@@ -1372,7 +1433,7 @@ msgstr ""
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1746,7 +1807,7 @@ msgstr ""
msgid "Premature end of file\n"
msgstr "Ennenaikainen tiedoston päättyminen\n"
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1772,7 +1833,7 @@ msgid ""
"server\n"
msgstr ""
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1780,66 +1841,66 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr ""
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr ""
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr ""
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr ""
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr ""
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr ""
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr ""
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr ""
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
"value.\n"
msgstr ""
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value.\n"
msgstr ""
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr ""
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr ""
diff --git a/po/fr.po b/po/fr.po
index 2bfafec..3706e6b 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -10,7 +10,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio trunk\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-12 16:57+0100\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2008-10-18 20:34+0200\n"
"Last-Translator: Pablo Martin-Gomez <pablo.martin-gomez at laposte.net>\n"
"Language-Team: Français <fedora-trans-fr at redhat.com>\n"
@@ -19,6 +19,66 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=n>1;\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
#, fuzzy
msgid "Failed to find original lt_dlopen loader."
@@ -155,40 +215,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:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr "Ãchec lors de l'analyse de la ligne de commande"
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, 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:458
+#: ../src/daemon/main.c:460
#, 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:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit a accordé l'acquisition des permissions de haute priorité."
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit a refusé l'acquisition des permissions de haute priorité."
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit a accordé l'acquisition des permissions de temps réel."
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit a refusé l'acquisition des permissions de temps réel."
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
#, fuzzy
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -200,48 +260,48 @@ msgstr ""
"nécessaires :\n"
"nous ne somme pas dans le groupe "
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
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:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "Augmentation de RLIMIT_RTPRIO réussie"
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO a échoué : %s"
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr "Abandon de CAP_NICE"
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
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:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "Lé démon n'est pas lancé"
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "Le démon est lancé avec le PID %u"
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Impossible de tuer le démon : %s"
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -249,148 +309,148 @@ msgstr ""
"Le programme n'est pas conçu pour être lancé en tant que root (sauf si --"
"system est renseigné)."
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
#, fuzzy
msgid "Root privileges required."
msgstr "Les permissions root sont nécessaires."
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "--start n'est pas pris en charge pour les instances système."
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
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:682
+#: ../src/daemon/main.c:684
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:685
+#: ../src/daemon/main.c:687
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:690
+#: ../src/daemon/main.c:692
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:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr "Ãchec lors de l'acquisition de stdio."
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "Ãchec du tube : %s"
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "Ãchec de fork()Â : %s"
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "Ãchec de read()Â : %s"
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "Ãchec lors du démarrage du démon."
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "Démarrage du démon réussi."
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "Pulseaudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "Hôte de compilation : %s"
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS de compilation : %s"
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "Exécution sur l'hôte : %s"
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "La taille de la page est de %lu octets"
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "Compilé avec la prise en charge Valgrind : oui"
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "Compilé avec la prise en charge Valgrind : non"
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Exécution en mode valgrind : %s"
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "Construction optimisée : oui"
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "Construction optimisée : non"
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "Ãchec lors de l'obtention de l'ID de la machine"
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "L'ID de la machine est %s."
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "Utilisation du répertoire d'exécution %s."
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "Utilisation du répertoire d'état %s."
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "Exécution en mode système : %s"
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "Ãchec de pa_pid_file_create()."
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
"De nouvelles horloges à haute résolution sont disponibles ! Bon appétit !"
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -398,27 +458,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:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "Ãchec de pa_core_new()."
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "Ãchec lors de l'initialisation du démon"
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
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:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "Démarrage du démon effectué."
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "Fermeture du démon initiée."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "Démon terminé."
@@ -1127,7 +1187,7 @@ msgstr "Ãchec lors de l'analyse des données du cookie"
msgid "Failed to open configuration file '%s': %s"
msgstr "Ãchec lors de l'ouverture du fichier de configuration « %s » :%s"
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "Aucun cookie chargé. Tentative de connexion sans celui-ci."
@@ -1249,62 +1309,62 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr "Ãchec de pa_stream_connect_record()Â : %s\n"
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "Ãchec lors de la connexion : %s\n"
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "Ãchec lors du vidage du flux : %s\n"
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr "Flux de lecture vidé.\n"
-#: ../src/utils/pacat.c:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr "Vidage de la connexion au serveur.\n"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "EOF obtenu.\n"
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain()Â : %s\n"
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "Ãchec de read()Â : %s\n"
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "Ãchec de write()Â : %s\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr "Signal obtenu, fermeture.\n"
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr "Ãchec lors de l'obtention de la latence : %s\n"
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "Durée : %0.3f s ; Latency : %0.0f µs. \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr "Ãchec de pa_stream_update_timing_info()Â : %s\n"
@@ -1312,7 +1372,7 @@ msgstr "Ãchec de pa_stream_update_timing_info()Â : %s\n"
# downmix = par ex. convertir 5 canaux en 2 canaux
# upmixer = par ex. convertir 2 canaux en 5 canaux
# https://bugzilla.redhat.com/show_bug.cgi?id=460798
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1416,7 +1476,7 @@ msgstr ""
" --process-time=OCTETS Demande le temps de traitement "
"indiqué par requête en octets.\n"
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1427,89 +1487,90 @@ msgstr ""
"Compilé avec libpulse %s\n"
"Lié avec libpulse %s\n"
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr "Plan des canaux invalide « %s »\n"
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr "Spécification de latence invalide « %s »\n"
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr "Spécification de temps de traitement invalide « %s »\n"
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr "Spécification d'échantillon invalide\n"
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr ""
"Le plan des canaux ne correspond pas à la spécification d'échantillon\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr "Ouverture d'un flux %s avec une spécification d'échantillon « %s ».\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr "enregistrement"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr "lecture"
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr "open()Â : %s\n"
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr "dup2()Â : %s\n"
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "Trop de paramètres.\n"
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "Ãchec de pa_mainloop_new().\n"
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr "Ãchec de io_new().\n"
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "Ãchec de pa_context_new().\n"
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "Ãchec de pa_context_connect() : %s"
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr "Ãchec de time_new().\n"
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "Ãchec de pa_mainloop_run().\n"
@@ -1540,7 +1601,7 @@ msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
"AVERTISSEMENT : le serveur de son n'est pas local, suspension annulée.\n"
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1917,7 +1978,7 @@ msgstr "Ãchec lors de l'envoi de l'échantillon : %s\n"
msgid "Premature end of file\n"
msgstr "Fin prématurée du fichier\n"
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
@@ -1963,7 +2024,7 @@ msgstr ""
" -n, --client-name=NOM Définit le nom de ce client sur le "
"serveur\n"
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1974,48 +2035,48 @@ msgstr ""
"Compilé avec libpulse %s\n"
"Lié avec libpulse %s\n"
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr "Veuillez indiquer un fichier d'échantillon à charger\n"
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr "Ãchec lors de l'ouverture du fichier audio.\n"
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr "Vous devez indiquer un nom d'échantillon à lire\n"
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr "Vous devez indiquer un nom d'échantillon à supprimer\n"
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr ""
"Vous devez indiquer un index de sortie de destination et une destination\n"
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr "Vous devez indiquer un index de sortie de source et une source\n"
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr "Vous devez indiquer un nom de module et des paramètres.\n"
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr "Vous devez indiquer un index de module\n"
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, fuzzy, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
@@ -2024,7 +2085,7 @@ msgstr ""
"Vous ne pouvez pas indiquer plus d'une destination. Vous devez indiquer au "
"moins une valeur booléenne.\n"
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, fuzzy, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
@@ -2033,13 +2094,13 @@ msgstr ""
"Vous ne pouvez pas indiquer plus d'une source. Vous devez indiquer au moins "
"une valeur booléenne.\n"
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, fuzzy, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr ""
"Vous devez indiquer un index de sortie de destination et une destination\n"
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr "Aucune commande valide indiquée.\n"
diff --git a/po/pl.po b/po/pl.po
index 6967aed..0741c9f 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -5,7 +5,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pl\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-12 16:57+0100\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2009-02-05 22:09+0100\n"
"Last-Translator: Piotr DrÄ
g <piotrdrag at gmail.com>\n"
"Language-Team: Polish <pl at li.org>\n"
@@ -13,6 +13,72 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+#, fuzzy
+msgid "Analog Stereo"
+msgstr "Stereo"
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+#, fuzzy
+msgid "Analog Surround 4.0"
+msgstr "Surround 4.0"
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+#, fuzzy
+msgid "Analog Surround 4.1"
+msgstr "Surround 4.1"
+
+#: ../src/modules/alsa/alsa-util.c:573
+#, fuzzy
+msgid "Analog Surround 5.0"
+msgstr "Surround 5.0"
+
+#: ../src/modules/alsa/alsa-util.c:581
+#, fuzzy
+msgid "Analog Surround 5.1"
+msgstr "Surround 5.1"
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+#, fuzzy
+msgid "Analog Surround 7.1"
+msgstr "Surround 7.1"
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
msgstr ""
@@ -147,39 +213,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:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr "Analiza wiersza poleceÅ nie powiodÅa siÄ."
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, 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:458
+#: ../src/daemon/main.c:460
#, 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:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKit nadaÅ uprawnienie \"acquire-high-priority\"."
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKit odmówiŠnadania uprawnienia \"acquire-high-priority\"."
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKit nadaÅ uprawnienie \"acquire-real-time\"."
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKit odmówiŠnadania uprawnienia \"acquire-real-time\"."
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
"in the configuration. However, we lack the necessary privileges:\n"
@@ -190,48 +256,48 @@ msgstr ""
"uprawnieÅ:\n"
"Nie jesteÅmy w grupie \""
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
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:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "PomyÅlnie zwiÄkszono RLIMIT_RTPRIO"
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr "Oddawanie CAP_NICE"
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
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:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "Demon nie jest uruchomiony"
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "Demon jest uruchomiony jako PID %u"
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Zniszczenie demona nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -239,146 +305,146 @@ msgstr ""
"Ten program nie powinien byÄ uruchomiany jako root (chyba, że podano --"
"system)"
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
msgid "Root privileges required."
msgstr "Wymagane sÄ
uprawnienia roota."
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "--start nie jest obsÅugiwane przy uruchamianiu systemowym."
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
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:682
+#: ../src/daemon/main.c:684
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:685
+#: ../src/daemon/main.c:687
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Uruchamianie w trybie systemowym, wymuszanie wyÅÄ
czenia trybu SHM!"
-#: ../src/daemon/main.c:690
+#: ../src/daemon/main.c:692
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:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr "Uzyskanie standardowego wejÅcia/wyjÅcia nie powiodÅo siÄ"
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "potok nie powiódÅ siÄ: %s"
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "fork() nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "read() nie powiodÅo siÄ: %s"
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "Uruchomienie demona nie powiodÅo siÄ."
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "PomyÅlnie uruchomiono demona."
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "To jest PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "Komputer kompilacji: %s"
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "CFLAGS kompilacji: %s"
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "Uruchamianie na komputerze: %s"
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr "Znaleziono %u procesorów."
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "Rozmiar strony to %lu bajtów"
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "Skompilowano z obsÅugÄ
Valgrind: tak"
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "Skompilowano z obsÅugÄ
Valgrind: nie"
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Uruchamianie w trybie Valgrind: %s"
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "Budowanie optymalizowane: tak"
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "Budowanie optymalizowane: nie"
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "Uzyskanie identyfikatora komputera nie powiodÅo siÄ"
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "Identyfikator komputera to %s."
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "Używanie folderu wykonywania %s."
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "Używanie folderu stanu %s."
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "Uruchamianie w trybie systemowym: %s"
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() nie powiodÅo siÄ."
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Åwieże zegary o wysokiej rozdzielczoÅci! Smacznego!"
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -386,27 +452,27 @@ msgstr ""
"KoleÅ, twoje jÄ
dro Åmierdzi! Szef kuchni poleca dzisiaj Linuksa w wÅÄ
czonymi "
"zegarami o wysokiej rozdzielczoÅci!"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "pa_core_new() nie powiodÅo siÄ."
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "Zainicjowanie demona nie powiodÅo siÄ."
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "Uruchamianie demona bez żadnych wczytanych moduÅów, odmawianie pracy."
-#: ../src/daemon/main.c:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "ZakoÅczono uruchamianie demona."
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "Zainicjowano wyÅÄ
czenie demona."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "Demon zostaÅ zniszczony."
@@ -1108,7 +1174,7 @@ msgstr "Analiza danych ciasteczka nie powiodÅo siÄ"
msgid "Failed to open configuration file '%s': %s"
msgstr "Otwarcie pliku konfiguracji \"%s\" nie powiodÅo siÄ: %s"
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "Nie wczytano ciasteczka. Próbowanie poÅÄ
czenia siÄ bez niego."
@@ -1227,67 +1293,67 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr "pa_stream_connect_record() nie powiodÅo siÄ: %s\n"
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "PoÅÄ
czenie nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "Opróżnienie strumienia nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr "Opróżniono strumieŠodtwarzania.\n"
-#: ../src/utils/pacat.c:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr "Opróżnianie poÅÄ
czenia z serwerem.\n"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "Otrzymano EOF.\n"
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain(): %s\n"
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "read() nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "write() nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr "Otrzymano sygnaÅ, wyÅÄ
czanie.\n"
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr "Uzyskanie opóźnienia nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "Czas: %0.3f sekundy; opóźnienie: %0.0f usekundy. \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr "pa_stream_update_timing_info() nie powiodÅo siÄ: %s\n"
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1387,7 +1453,7 @@ msgstr ""
" --process-time=BAJTY Å»Ä
da okreÅlonego czasu procesu na "
"żÄ
danie w bajtach.\n"
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1398,88 +1464,89 @@ msgstr ""
"Skompilowane za pomocÄ
libpulse %s\n"
"Skonsolidowane za pomocÄ
libpulse %s\n"
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr "NieprawidÅowa mapa kanaÅów \"%s\"\n"
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr "NieprawidÅowe okreÅlenie opóźnienia \"%s\"\n"
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr "NieprawidÅowe okreÅlenie czasu procesu \"%s\"\n"
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr "NieprawidÅowe okreÅlenie próbki\n"
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr "Mapa kanaÅów nie zgadza siÄ z okreÅleniem próbki\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr "Otwieranie strumienia %s za pomocÄ
okreÅlenie próbki \"%s\".\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr "nagrywanie"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr "odtwarzanie"
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr "open(): %s\n"
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr "dup2(): %s\n"
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "Za dużo parametrów.\n"
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() nie powiodÅo siÄ.\n"
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr "io_new() nie powiodÅo siÄ.\n"
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() nie powiodÅo siÄ.\n"
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect() nie powiodÅo siÄ: %s"
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr "time_new() nie powiodÅo siÄ.\n"
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() nie powiodÅo siÄ.\n"
@@ -1510,7 +1577,7 @@ msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
"OSTRZEÅ»ENIE: serwer dźwiÄku nie jest lokalny, nie zostanie wstrzymany.\n"
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1895,7 +1962,7 @@ msgstr "UsuniÄcie próbki nie powiodÅo siÄ: %s\n"
msgid "Premature end of file\n"
msgstr "Przedwczesny koniec pliku\n"
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1940,7 +2007,7 @@ msgstr ""
" -s, --server=SERWER Nazwa serwera do poÅÄ
czenia siÄ\n"
" -n, --client-name=NAZWA Jak nazwaÄ tego klienta na serwerze\n"
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1951,47 +2018,47 @@ msgstr ""
"Skompilowane za pomocÄ
libpulse %s\n"
"Skonsolidowane za pomocÄ
libpulse %s\n"
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr "ProszÄ podaÄ plik próbki do wczytania\n"
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr "Otwarcie pliku dźwiÄkowego nie powiodÅo siÄ.\n"
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr "Należy podaÄ nazwÄ próbki do odtworzenia\n"
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr "Należy podaÄ nazwÄ próbki do usuniÄcia\n"
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr "Należy podaÄ indeks odpÅywu wejÅcia i odpÅyw\n"
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr "Należy podaÄ indeks źródÅa wyjÅcia i źródÅo\n"
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr "Należy podaÄ nazwÄ moduÅu i parametry.\n"
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr "Należy podaÄ indeks moduÅu\n"
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
@@ -1999,7 +2066,7 @@ msgid ""
msgstr ""
"Nie można podaÄ wiÄcej niż jednego odpÅywu. Należy podaÄ wartoÅÄ logicznÄ
.\n"
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
@@ -2007,12 +2074,12 @@ msgid ""
msgstr ""
"Nie można podaÄ wiÄcej niż jednego źródÅa. Należy podaÄ wartoÅÄ logicznÄ
.\n"
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr "Należy podaÄ nazwÄ karty/indeks i nazwÄ profilu\n"
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr "Nie podano prawidÅowego polecenia.\n"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 6a020fd..2e75cc4 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-12 16:57+0100\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2008-11-21 01:21-0300\n"
"Last-Translator: Henrique (LonelySpooky) Junior <lspooky at fedoraproject.org>\n"
"Language-Team: Brazilian-Portuguese <fedora-trans-pt_br at redhat.com>\n"
@@ -18,6 +18,66 @@ msgstr ""
"X-Poedit-Language: Brazilian Portuguese\n"
"X-Poedit-Country: Brazil\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
#, fuzzy
msgid "Failed to find original lt_dlopen loader."
@@ -153,37 +213,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:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr "Falha em interpretar a linha de comando."
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, 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:458
+#: ../src/daemon/main.c:460
#, 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:466
+#: ../src/daemon/main.c:468
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:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "O PolicyKit recusa a aquisição de privilégios de alta prioridade."
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
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:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "O PolicyKit recusa a aquisição de privilégios de tempo real."
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
#, fuzzy
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -195,48 +255,48 @@ msgstr ""
"necessários:\n"
"Não estamos no grupo'"
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
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:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "RLIMIT_RTPRIO aumentado com sucesso"
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO falhou: %s"
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr "Abandonando CAP_NICE"
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
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:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "O daemon não está em execução"
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "Daemon executando como PID %u"
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "Falha em encerrar o daemon: %s"
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -244,144 +304,144 @@ msgstr ""
"Este programa não é para ser executado como root (a não ser que --system "
"seja especificado)."
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
#, fuzzy
msgid "Root privileges required."
msgstr "Privilégios de rot são requeridos."
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "--start não tem suporte para instâncias de sistemas."
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
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:682
+#: ../src/daemon/main.c:684
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:685
+#: ../src/daemon/main.c:687
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "Executando no modo system, desabilitando forçadamente o modo SHM!"
-#: ../src/daemon/main.c:690
+#: ../src/daemon/main.c:692
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:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr "Falha em adquirir o stdio."
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "O pipe falhou: %s"
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "O fork() falhou: %s"
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "A operação read() falhou: %s"
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "Falha na partida do daemon."
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "Os daemons foram iniciados com sucesso."
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "Este é o PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "Host de compilação: %s"
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "Compilação CFLAGS: %s"
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "Executando no host: %s"
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "O tamanho da página é %lu bytes"
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "Compilado com suporte do Valgrind: sim"
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "Compilado com suporte do Valgrind: não"
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "Executando em modo valgrind: %s"
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "Build otimizado: sim"
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "Build otimizado: não"
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "Falha em obter o ID da máquina"
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "A ID da máquina é %s."
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "Usando o diretório de runtime %s."
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "Usando o diretório de estado %s."
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "Executando em modo do sistema: %s"
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() falhou."
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "Timers de alta resolução frequinhos disponÃveis! Bon appetit!"
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
@@ -389,28 +449,28 @@ msgstr ""
"Cara, teu kernel fede! A recomendação do chef hoje é Linux com timers de "
"alta resolução habilitados!"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "pa_core_new() falhou."
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "Falha em iniciar o daemon."
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
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:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "A partida dos Daemon está completa."
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "O encerramento do Daemon foi iniciado."
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "Daemon terminado."
@@ -1111,7 +1171,7 @@ msgstr "Falhou ao analisar os dados do cookie"
msgid "Failed to open configuration file '%s': %s"
msgstr "Falha em abrir o arquivo de configuração '%s': %s"
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "Nenhum cookie foi carregado. Tentativa de conexão sem eles."
@@ -1230,67 +1290,67 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr "pa_stream_connect_record() falhou: %s\n"
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "Falha na conexão: %s\n"
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "Falha em drenar o fluxo: %s\n"
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr "Drenado o fluxo de playback.\n"
-#: ../src/utils/pacat.c:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr "Drenando a conexão par ao servidor.\n"
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "Atingiu EOF.\n"
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain(): %s\n"
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "read() falhou: %s\n"
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "write() falhou: %s\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr "Sinal recebido, saindo (exiting).\n"
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr "Falhou em obter a latência: %s\n"
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "Tempo: %0.3f s; Latência: %0.0f us. \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr "Falha em pa_stream_update_timing_info(): %s\n"
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1387,7 +1447,7 @@ msgstr ""
" --process-time=BYTES Request the specified process time "
"per request in bytes.\n"
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1398,88 +1458,89 @@ msgstr ""
"Compilado com libpulse %s\n"
"Linkado com libpulse %s\n"
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr "Mapa de canal inválido '%s'\n"
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr "Especificação de latência inválida '%s'\n"
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr "Especificação do tempo do processo inválida '%s'\n"
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr "Especificação de amostragem inválida\n"
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr "O mapeamento do canal não casa com a especificação da amostragem\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr "Abrindo um %s fluxo com a especificação de amostragem '%s'.\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr "gravando"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr "playback"
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr "open(): %s\n"
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr "dup2(): %s\n"
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "Argumentos em excesso.\n"
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() falhou.\n"
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr "io_new() falhou.\n"
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() falhou.\n"
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_new() falhou: %s"
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr "time_new() falhou.\n"
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() falhou.\n"
@@ -1511,7 +1572,7 @@ msgstr ""
"AVISO: O servidor de som não é local, Sound server is not local, não está em "
"suspenso.\n"
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1877,7 +1938,7 @@ msgstr "Falha em carregar a amostra: %s\n"
msgid "Premature end of file\n"
msgstr "Fim prematuro do arquivo\n"
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
@@ -1922,7 +1983,7 @@ msgstr ""
" -n, --client-name=NAME Como chamar este cliente no "
"servidor \n"
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1933,48 +1994,48 @@ msgstr ""
"Compilado com libpulse %s\n"
"Linkado com libpulse %s\n"
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr "Por favor, especifique o arquivo de amostra a ser carregado\n"
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr "Falha em abrir o arquivo de som.\n"
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr "Você deve especificar um nome da amostra para ser executada\n"
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr "Você deve especificar um nome da amostra para ser removida\n"
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr ""
"Você tem que especificar a entrada para o destino (sink) e um destino(sink)\n"
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr "Você tem que especificar um Ãndice de saÃda da fonte e uma fonte\n"
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr "Você deve especificar um nome do módulo e seus argumentos\n"
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr "Você deve especificar um Ãndice de um módulo\n"
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, fuzzy, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
@@ -1983,7 +2044,7 @@ msgstr ""
"Você não pode especificar mais de um destino. Pelo menos um valor booleano "
"deve ser especificado.\n"
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, fuzzy, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
@@ -1992,13 +2053,13 @@ msgstr ""
"Você não pode especificar mais de uma fonte. Pelo menos um valor booleano "
"deve ser especificado.\n"
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, fuzzy, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr ""
"Você tem que especificar a entrada para o destino (sink) e um destino(sink)\n"
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr "Nenhum comando válido especificado.\n"
diff --git a/po/sv.po b/po/sv.po
index 03604ed..ce3fd73 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: pulseaudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-12 16:57+0100\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2008-09-05 18:24+0100\n"
"Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
"Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
@@ -15,6 +15,66 @@ msgstr ""
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
msgid "Failed to find original lt_dlopen loader."
msgstr ""
@@ -149,81 +209,81 @@ msgstr ""
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) misslyckades: %s"
-#: ../src/daemon/main.c:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr ""
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr ""
-#: ../src/daemon/main.c:458
+#: ../src/daemon/main.c:460
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr ""
-#: ../src/daemon/main.c:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr ""
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr ""
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
"in the configuration. However, we lack the necessary privileges:\n"
"We are not in group '"
msgstr ""
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
msgid ""
"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr ""
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO misslyckades: %s"
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr ""
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
msgid ""
"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr ""
-#: ../src/daemon/main.c:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr ""
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr ""
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr ""
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
@@ -231,168 +291,168 @@ msgstr ""
"Detta program är inte tänkt att köras som root (såvida inte --system har "
"angivits)."
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
#, fuzzy
msgid "Root privileges required."
msgstr "Root-behörighet krävs."
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "--start stöds inte för systeminstanser."
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
msgid "Running in system mode, but --disallow-exit not set!"
msgstr ""
-#: ../src/daemon/main.c:682
+#: ../src/daemon/main.c:684
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr ""
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:687
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr ""
-#: ../src/daemon/main.c:690
+#: ../src/daemon/main.c:692
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr ""
-#: ../src/daemon/main.c:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr ""
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "pipe misslyckades: %s"
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "fork() misslyckades: %s"
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "read() misslyckades: %s"
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr ""
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr ""
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "Detta är PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr ""
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr ""
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr ""
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr ""
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr ""
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr ""
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr ""
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr ""
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr ""
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr ""
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr ""
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr ""
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr ""
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr ""
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create() misslyckades."
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr ""
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr ""
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "pa_core_new() misslyckades."
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr ""
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr ""
-#: ../src/daemon/main.c:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr ""
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr ""
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr ""
@@ -1018,7 +1078,7 @@ msgstr ""
msgid "Failed to open configuration file '%s': %s"
msgstr "Misslyckades med att öppna konfigurationsfilen \"%s\": %s"
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr ""
@@ -1137,67 +1197,67 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr "pa_stream_connect_record() misslyckades: %s\n"
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "Anslutningsfel: %s\n"
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr ""
-#: ../src/utils/pacat.c:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr ""
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "Fick filslut.\n"
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain(): %s\n"
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "read() misslyckades: %s\n"
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "write() misslyckades: %s\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr ""
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr ""
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "Tid: %0.3f sec; Latens: %0.0f ms \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr "pa_stream_update_timing_info() misslyckades: %s\n"
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1250,7 +1310,7 @@ msgid ""
"per request in bytes.\n"
msgstr ""
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1258,88 +1318,89 @@ msgid ""
"Linked with libpulse %s\n"
msgstr ""
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr ""
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr ""
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr ""
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr ""
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr ""
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr ""
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr "open(): %s\n"
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr "dup2(): %s\n"
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "För många argument.\n"
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new() misslyckades.\n"
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr "io_new() misslyckades.\n"
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new() misslyckades.\n"
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, fuzzy, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_new() misslyckades.\n"
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr "time_new() misslyckades.\n"
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run() misslyckades.\n"
@@ -1369,7 +1430,7 @@ msgstr ""
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr ""
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1646,7 +1707,7 @@ msgstr ""
msgid "Premature end of file\n"
msgstr ""
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, c-format
msgid ""
"%s [options] stat\n"
@@ -1672,7 +1733,7 @@ msgid ""
"server\n"
msgstr ""
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1683,66 +1744,66 @@ msgstr ""
"Kompilerad med libpulse %s\n"
"Länkad med libpulse %s\n"
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr ""
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr "Misslyckades med att öppna ljudfil.\n"
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr ""
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr ""
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr ""
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr ""
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr ""
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr ""
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
"value.\n"
msgstr ""
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value.\n"
msgstr ""
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr ""
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
index b5f02fa..eb0fca2 100644
--- a/po/zh_CN.po
+++ b/po/zh_CN.po
@@ -9,7 +9,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PulseAudio\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-02-12 16:57+0100\n"
+"POT-Creation-Date: 2009-02-20 03:24+0100\n"
"PO-Revision-Date: 2009-01-24 12:47+0800\n"
"Last-Translator: çæ³½å½ <zak.zeguo.wang at gmail.com>\n"
"Language-Team: Chinese/Simplified\n"
@@ -17,6 +17,66 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
+#: ../src/modules/alsa/alsa-util.c:525
+msgid "Analog Mono"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:531
+msgid "Analog Stereo"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:537
+msgid "Digital Stereo (IEC958)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:543
+msgid "Digital Stereo (HDMI)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:550
+msgid "Analog Surround 4.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:557
+msgid "Digital Surround 4.0 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:565
+msgid "Analog Surround 4.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:573
+msgid "Analog Surround 5.0"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:581
+msgid "Analog Surround 5.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:589
+msgid "Digital Surround 5.1 (IEC958/AC3)"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:598
+msgid "Analog Surround 7.1"
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1577
+#, c-format
+msgid ""
+"snd_pcm_avail_update() returned a value that is exceptionally large: %lu "
+"bytes (%lu ms). Most likely this is an ALSA driver bug. Please report this "
+"issue to the ALSA developers."
+msgstr ""
+
+#: ../src/modules/alsa/alsa-util.c:1609
+#, c-format
+msgid ""
+"snd_pcm_mmap_begin() returned a value that is exceptionally large: %lu bytes "
+"(%lu ms). Most likely this is an ALSA driver bug. Please report this issue "
+"to the ALSA developers."
+msgstr ""
+
#: ../src/daemon/ltdl-bind-now.c:124
#, fuzzy
msgid "Failed to find original lt_dlopen loader."
@@ -152,37 +212,37 @@ msgstr "æ¤å¹³å°ä¸æ¯æsystem-wide模å¼ã"
msgid "setrlimit(%s, (%u, %u)) failed: %s"
msgstr "setrlimit(%s, (%u, %u)) 失败ï¼%s"
-#: ../src/daemon/main.c:429
+#: ../src/daemon/main.c:431
msgid "Failed to parse command line."
msgstr "åæå½ä»¤è¡å¤±è´¥ã"
-#: ../src/daemon/main.c:451
+#: ../src/daemon/main.c:453
#, c-format
msgid "We're in the group '%s', allowing high-priority scheduling."
msgstr "æ们å¨'%s'ç»ä¸ï¼å
许é«ä¼å
级è°åº¦ã"
-#: ../src/daemon/main.c:458
+#: ../src/daemon/main.c:460
#, c-format
msgid "We're in the group '%s', allowing real-time scheduling."
msgstr "æ们å¨'%s'ç»ä¸ï¼å
许å®æ¶è°åº¦ã"
-#: ../src/daemon/main.c:466
+#: ../src/daemon/main.c:468
msgid "PolicyKit grants us acquire-high-priority privilege."
msgstr "PolicyKitæäºæ们âè·åé«ä¼å
级âæéã"
-#: ../src/daemon/main.c:469
+#: ../src/daemon/main.c:471
msgid "PolicyKit refuses acquire-high-priority privilege."
msgstr "PolicyKitæç»âè·åé«ä¼å
级âæéã"
-#: ../src/daemon/main.c:474
+#: ../src/daemon/main.c:476
msgid "PolicyKit grants us acquire-real-time privilege."
msgstr "PolicyKitæäºæ们âè·åå®æ¶âæéã"
-#: ../src/daemon/main.c:477
+#: ../src/daemon/main.c:479
msgid "PolicyKit refuses acquire-real-time privilege."
msgstr "PolicyKitæç»æ们âè·åå®æ¶âæéã"
-#: ../src/daemon/main.c:506
+#: ../src/daemon/main.c:508
#, fuzzy
msgid ""
"Called SUID root and real-time and/or high-priority scheduling was requested "
@@ -192,211 +252,211 @@ msgstr ""
"æ¤é
ç½®éè¦è°ç¨SUID rootåå®æ¶ï¼é«ä¼å
级è°åº¦ãä½æ¯æ们没ææéçæéï¼\n"
"æ们ä¸å±è¯¥ç»"
-#: ../src/daemon/main.c:530
+#: ../src/daemon/main.c:532
msgid ""
"High-priority scheduling enabled in configuration but not allowed by policy."
msgstr "é
ç½®ä¸å·²å¯ç¨é«ä¼å
级è°åº¦ï¼ä½çç¥æªå
许ã"
-#: ../src/daemon/main.c:559
+#: ../src/daemon/main.c:561
msgid "Successfully increased RLIMIT_RTPRIO"
msgstr "æé«RLIMIT_RTPRIOæåã"
-#: ../src/daemon/main.c:562
+#: ../src/daemon/main.c:564
#, c-format
msgid "RLIMIT_RTPRIO failed: %s"
msgstr "RLIMIT_RTPRIO失败ï¼%s"
-#: ../src/daemon/main.c:569
+#: ../src/daemon/main.c:571
msgid "Giving up CAP_NICE"
msgstr "æ£å¨æ¾å¼CAP_NICE"
-#: ../src/daemon/main.c:576
+#: ../src/daemon/main.c:578
msgid ""
"Real-time scheduling enabled in configuration but not allowed by policy."
msgstr "é
ç½®ä¸å·²å¯ç¨å®æ¶è°åº¦ï¼ä½çç¥æªå
许ã"
-#: ../src/daemon/main.c:637
+#: ../src/daemon/main.c:639
msgid "Daemon not running"
msgstr "åå°ç¨åºæ²¡æè¿è¡"
-#: ../src/daemon/main.c:639
+#: ../src/daemon/main.c:641
#, c-format
msgid "Daemon running as PID %u"
msgstr "åå°ç¨åºæ£å¨è¿è¡ï¼PID %u"
-#: ../src/daemon/main.c:649
+#: ../src/daemon/main.c:651
#, c-format
msgid "Failed to kill daemon: %s"
msgstr "ææ»åå°ç¨åºå¤±è´¥ï¼%s"
-#: ../src/daemon/main.c:667
+#: ../src/daemon/main.c:669
msgid ""
"This program is not intended to be run as root (unless --system is "
"specified)."
msgstr "ä¸åºä»¥root身份è¿è¡æ¬ç¨åºï¼é¤éæå® --systemï¼ã"
-#: ../src/daemon/main.c:669
+#: ../src/daemon/main.c:671
#, fuzzy
msgid "Root privileges required."
msgstr "éè¦rootæéã"
-#: ../src/daemon/main.c:674
+#: ../src/daemon/main.c:676
msgid "--start not supported for system instances."
msgstr "ç³»ç»å®ä¾ä¸æ¯æ --startã"
-#: ../src/daemon/main.c:679
+#: ../src/daemon/main.c:681
msgid "Running in system mode, but --disallow-exit not set!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼ä½æ¯ --disallow-exit æªè®¾å®ï¼"
-#: ../src/daemon/main.c:682
+#: ../src/daemon/main.c:684
msgid "Running in system mode, but --disallow-module-loading not set!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼ä½æ¯ --disallow-module-loading æªè®¾å®ï¼"
-#: ../src/daemon/main.c:685
+#: ../src/daemon/main.c:687
msgid "Running in system mode, forcibly disabling SHM mode!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼å¼ºå¶ç¦ç¨SHM模å¼ï¼"
-#: ../src/daemon/main.c:690
+#: ../src/daemon/main.c:692
msgid "Running in system mode, forcibly disabling exit idle time!"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼å¼ºå¶ç¦ç¨éåºç©ºé²æ¶é´ï¼"
-#: ../src/daemon/main.c:717
+#: ../src/daemon/main.c:719
msgid "Failed to acquire stdio."
msgstr "è·åstdio失败ã"
-#: ../src/daemon/main.c:723
+#: ../src/daemon/main.c:725
#, c-format
msgid "pipe failed: %s"
msgstr "管é失败ï¼%s"
-#: ../src/daemon/main.c:728
+#: ../src/daemon/main.c:730
#, c-format
msgid "fork() failed: %s"
msgstr "fork()失败ï¼%s"
-#: ../src/daemon/main.c:742
+#: ../src/daemon/main.c:744
#, c-format
msgid "read() failed: %s"
msgstr "read()失败ï¼%s"
-#: ../src/daemon/main.c:748
+#: ../src/daemon/main.c:750
msgid "Daemon startup failed."
msgstr "åå°ç¨åºå¯å¨å¤±è´¥ã"
-#: ../src/daemon/main.c:750
+#: ../src/daemon/main.c:752
msgid "Daemon startup successful."
msgstr "åå°ç¨åºå¯å¨æåã"
-#: ../src/daemon/main.c:820
+#: ../src/daemon/main.c:822
#, c-format
msgid "This is PulseAudio %s"
msgstr "è¿æ¯ PulseAudio %s"
-#: ../src/daemon/main.c:821
+#: ../src/daemon/main.c:823
#, c-format
msgid "Compilation host: %s"
msgstr "ç¼è¯ä¸»æºï¼%s"
-#: ../src/daemon/main.c:822
+#: ../src/daemon/main.c:824
#, c-format
msgid "Compilation CFLAGS: %s"
msgstr "ç¼è¯CFLAGSï¼%s"
-#: ../src/daemon/main.c:825
+#: ../src/daemon/main.c:827
#, c-format
msgid "Running on host: %s"
msgstr "æ£å¨ä¸»æºä¸è¿è¡ï¼%s"
-#: ../src/daemon/main.c:828
+#: ../src/daemon/main.c:830
#, c-format
msgid "Found %u CPUs."
msgstr ""
-#: ../src/daemon/main.c:830
+#: ../src/daemon/main.c:832
#, c-format
msgid "Page size is %lu bytes"
msgstr "页é¢å¤§å°ä¸º%luåè"
-#: ../src/daemon/main.c:833
+#: ../src/daemon/main.c:835
msgid "Compiled with Valgrind support: yes"
msgstr "ç¼è¯å¯ç¨Valgrindæ¯æï¼æ¯"
-#: ../src/daemon/main.c:835
+#: ../src/daemon/main.c:837
msgid "Compiled with Valgrind support: no"
msgstr "ç¼è¯å¯ç¨Valgrindæ¯æï¼å¦"
-#: ../src/daemon/main.c:838
+#: ../src/daemon/main.c:840
#, c-format
msgid "Running in valgrind mode: %s"
msgstr "æ£å¨ä»¥valgrind模å¼è¿è¡ï¼%s"
-#: ../src/daemon/main.c:841
+#: ../src/daemon/main.c:843
msgid "Optimized build: yes"
msgstr "ä¼åçæï¼æ¯"
-#: ../src/daemon/main.c:843
+#: ../src/daemon/main.c:845
msgid "Optimized build: no"
msgstr "ä¼åçæï¼å¦"
-#: ../src/daemon/main.c:847
+#: ../src/daemon/main.c:849
msgid "Failed to get machine ID"
msgstr "è·åmachine ID失败"
-#: ../src/daemon/main.c:850
+#: ../src/daemon/main.c:852
#, c-format
msgid "Machine ID is %s."
msgstr "machine IDæ¯%sã"
-#: ../src/daemon/main.c:855
+#: ../src/daemon/main.c:857
#, c-format
msgid "Using runtime directory %s."
msgstr "æ£å¨ä½¿ç¨è¿è¡æ¶æ件夹%sã"
-#: ../src/daemon/main.c:860
+#: ../src/daemon/main.c:862
#, c-format
msgid "Using state directory %s."
msgstr "æ£å¨ä½¿ç¨ç¶ææ件夹%sã"
-#: ../src/daemon/main.c:863
+#: ../src/daemon/main.c:865
#, c-format
msgid "Running in system mode: %s"
msgstr "æ£å¨ä»¥ç³»ç»æ¨¡å¼è¿è¡ï¼%s"
-#: ../src/daemon/main.c:878
+#: ../src/daemon/main.c:880
msgid "pa_pid_file_create() failed."
msgstr "pa_pid_file_create()失败ã"
-#: ../src/daemon/main.c:890
+#: ../src/daemon/main.c:892
msgid "Fresh high-resolution timers available! Bon appetit!"
msgstr "æ°é²çé«å辨ç计æ¶å¨å¼é
äºï¼å个饱ï¼"
-#: ../src/daemon/main.c:892
+#: ../src/daemon/main.c:894
msgid ""
"Dude, your kernel stinks! The chef's recommendation today is Linux with high-"
"resolution timers enabled!"
msgstr "èå
ï¼ä½ çå
æ ¸çèï¼ç°å¨æµè¡çæ¯å¯ç¨äºé«å辩ç计åå¨çLinuxï¼"
-#: ../src/daemon/main.c:904
+#: ../src/daemon/main.c:906
msgid "pa_core_new() failed."
msgstr "pa_core_new()失败ã"
-#: ../src/daemon/main.c:965
+#: ../src/daemon/main.c:967
msgid "Failed to initialize daemon."
msgstr "åå°ç¨åºåå§å失败ã"
-#: ../src/daemon/main.c:970
+#: ../src/daemon/main.c:972
msgid "Daemon startup without any loaded modules, refusing to work."
msgstr "åå°ç¨åºå¯å¨æªå 载任ä½æ¨¡åï¼æç»å·¥ä½ã"
-#: ../src/daemon/main.c:983
+#: ../src/daemon/main.c:985
msgid "Daemon startup complete."
msgstr "åå°ç¨åºå¯å¨å®æã"
-#: ../src/daemon/main.c:989
+#: ../src/daemon/main.c:991
msgid "Daemon shutdown initiated."
msgstr "å¼å§å
³éåå°ç¨åºã"
-#: ../src/daemon/main.c:1010
+#: ../src/daemon/main.c:1009
msgid "Daemon terminated."
msgstr "åå°ç¨åºå·²ç»æ¢ã"
@@ -1075,7 +1135,7 @@ msgstr "cookieæ°æ®åæ失败"
msgid "Failed to open configuration file '%s': %s"
msgstr "æå¼é
ç½®æ件'%s'失败ï¼%s"
-#: ../src/pulse/context.c:523
+#: ../src/pulse/context.c:519
msgid "No cookie loaded. Attempting to connect without."
msgstr "没æå è½½cookieãå°è¯ä¸å è½½cookieè¿è¡è¿æ¥ã"
@@ -1194,67 +1254,67 @@ msgid "pa_stream_connect_record() failed: %s\n"
msgstr "pa_stream_connect_playback()失败ï¼%s\n"
#: ../src/utils/pacat.c:321 ../src/utils/pasuspender.c:159
-#: ../src/utils/pactl.c:758 ../src/utils/paplay.c:183
+#: ../src/utils/pactl.c:759 ../src/utils/paplay.c:183
#, c-format
msgid "Connection failure: %s\n"
msgstr "è¿æ¥å¤±è´¥ï¼%s\n"
-#: ../src/utils/pacat.c:342 ../src/utils/paplay.c:75
+#: ../src/utils/pacat.c:341 ../src/utils/paplay.c:75
#, c-format
msgid "Failed to drain stream: %s\n"
msgstr "æåºæµå¤±è´¥ï¼%s\n"
-#: ../src/utils/pacat.c:347 ../src/utils/paplay.c:80
+#: ../src/utils/pacat.c:346 ../src/utils/paplay.c:80
#, c-format
msgid "Playback stream drained.\n"
msgstr "æµææ¾å®æ¯ã\n"
-#: ../src/utils/pacat.c:357 ../src/utils/paplay.c:92
+#: ../src/utils/pacat.c:356 ../src/utils/paplay.c:92
#, c-format
msgid "Draining connection to server.\n"
msgstr ""
-#: ../src/utils/pacat.c:383
+#: ../src/utils/pacat.c:382
#, c-format
msgid "Got EOF.\n"
msgstr "æ¶å°EOFã\n"
-#: ../src/utils/pacat.c:389
+#: ../src/utils/pacat.c:388
#, c-format
msgid "pa_stream_drain(): %s\n"
msgstr "pa_stream_drain()ï¼%s\n"
-#: ../src/utils/pacat.c:399
+#: ../src/utils/pacat.c:398
#, c-format
msgid "read() failed: %s\n"
msgstr "read()失败ï¼%s\n"
-#: ../src/utils/pacat.c:431
+#: ../src/utils/pacat.c:430
#, c-format
msgid "write() failed: %s\n"
msgstr "write()失败ï¼%s\n"
-#: ../src/utils/pacat.c:452
+#: ../src/utils/pacat.c:451
#, c-format
msgid "Got signal, exiting.\n"
msgstr "æ¶å°ä¿¡å·ï¼æ£å¨éåºã\n"
-#: ../src/utils/pacat.c:466
+#: ../src/utils/pacat.c:465
#, c-format
msgid "Failed to get latency: %s\n"
msgstr "è·åä¼ è¾å»¶è¿å¤±è´¥ï¼%s\n"
-#: ../src/utils/pacat.c:471
+#: ../src/utils/pacat.c:470
#, c-format
msgid "Time: %0.3f sec; Latency: %0.0f usec. \r"
msgstr "æ¶é´ï¼%0.3fç§ï¼å»¶è¿ï¼%0.0f å¾®ç§ã \r"
-#: ../src/utils/pacat.c:491
+#: ../src/utils/pacat.c:490
#, c-format
msgid "pa_stream_update_timing_info() failed: %s\n"
msgstr "pa_stream_update_timing_info()失败ï¼%s\n"
-#: ../src/utils/pacat.c:504
+#: ../src/utils/pacat.c:503
#, c-format
msgid ""
"%s [options]\n"
@@ -1339,7 +1399,7 @@ msgstr ""
" --latency=BYTES 请æ±æå®åèæ°ç延è¿ã\n"
" --process-time=BYTES æ¯æ¬¡è¯·æ±æå®åèæ°çå¤çæ¶é´ã\n"
-#: ../src/utils/pacat.c:605
+#: ../src/utils/pacat.c:604
#, c-format
msgid ""
"pacat %s\n"
@@ -1350,88 +1410,89 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pacat.c:662
+#: ../src/utils/pacat.c:661
#, c-format
msgid "Invalid channel map '%s'\n"
msgstr "æ æçééæ å°æè¿°'%s'\n"
-#: ../src/utils/pacat.c:691
+#: ../src/utils/pacat.c:690
#, c-format
msgid "Invalid latency specification '%s'\n"
msgstr "æ æç延è¿è§æ ¼æè¿° %s'\n"
-#: ../src/utils/pacat.c:698
+#: ../src/utils/pacat.c:697
#, c-format
msgid "Invalid process time specification '%s'\n"
msgstr "æ æçå¤çæ¶é´æè¿° '%s'\n"
-#: ../src/utils/pacat.c:709
+#: ../src/utils/pacat.c:708
#, c-format
msgid "Invalid sample specification\n"
msgstr "æ æçéæ ·æè¿°\n"
-#: ../src/utils/pacat.c:714
+#: ../src/utils/pacat.c:713
#, c-format
msgid "Channel map doesn't match sample specification\n"
msgstr "ééæ å°ä¸éæ ·æè¿°ä¸å¹é
\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
#, c-format
msgid "Opening a %s stream with sample specification '%s'.\n"
msgstr "以éæ ·è§æ ¼'%s'æå¼%sæµã\n"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "recording"
msgstr "æ£å¨å½å¶"
-#: ../src/utils/pacat.c:721
+#: ../src/utils/pacat.c:720
msgid "playback"
msgstr "åæ¾"
-#: ../src/utils/pacat.c:729
+#: ../src/utils/pacat.c:728
#, c-format
msgid "open(): %s\n"
msgstr "open()ï¼%s\n"
-#: ../src/utils/pacat.c:734
+#: ../src/utils/pacat.c:733
#, c-format
msgid "dup2(): %s\n"
msgstr "dup2()ï¼%s\n"
-#: ../src/utils/pacat.c:744
+#: ../src/utils/pacat.c:743
#, c-format
msgid "Too many arguments.\n"
msgstr "åæ°è¿å¤ã\n"
-#: ../src/utils/pacat.c:757 ../src/utils/pasuspender.c:280
-#: ../src/utils/pactl.c:1013 ../src/utils/paplay.c:381
+#: ../src/utils/pacat.c:756 ../src/utils/pasuspender.c:280
+#: ../src/utils/pactl.c:1014 ../src/utils/paplay.c:381
#, c-format
msgid "pa_mainloop_new() failed.\n"
msgstr "pa_mainloop_new()失败ã\n"
-#: ../src/utils/pacat.c:778
+#: ../src/utils/pacat.c:777
#, c-format
msgid "io_new() failed.\n"
msgstr "io_new()失败ã\n"
-#: ../src/utils/pacat.c:784 ../src/utils/pasuspender.c:293
-#: ../src/utils/pactl.c:1027 ../src/utils/paplay.c:396
+#: ../src/utils/pacat.c:783 ../src/utils/pasuspender.c:293
+#: ../src/utils/pactl.c:1028 ../src/utils/paplay.c:396
#, c-format
msgid "pa_context_new() failed.\n"
msgstr "pa_context_new()失败ã\n"
-#: ../src/utils/pacat.c:792
+#: ../src/utils/pacat.c:791 ../src/utils/pactl.c:1034
+#: ../src/utils/paplay.c:404
#, c-format
msgid "pa_context_connect() failed: %s"
msgstr "pa_context_connect()失败ï¼%s"
-#: ../src/utils/pacat.c:803
+#: ../src/utils/pacat.c:802
#, c-format
msgid "time_new() failed.\n"
msgstr "time_new()失败ã\n"
-#: ../src/utils/pacat.c:810 ../src/utils/pasuspender.c:301
-#: ../src/utils/pactl.c:1035 ../src/utils/paplay.c:407
+#: ../src/utils/pacat.c:809 ../src/utils/pasuspender.c:301
+#: ../src/utils/pactl.c:1039 ../src/utils/paplay.c:410
#, c-format
msgid "pa_mainloop_run() failed.\n"
msgstr "pa_mainloop_run()失败ã\n"
@@ -1461,7 +1522,7 @@ msgstr "æ¢å¤å¤±è´¥ï¼%s\n"
msgid "WARNING: Sound server is not local, not suspending.\n"
msgstr "è¦åï¼éæ¬å°å£°é³æå¡å¨ï¼ä¸ä¼æèµ·ã\n"
-#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:764
+#: ../src/utils/pasuspender.c:176 ../src/utils/pactl.c:765
#: ../src/utils/paplay.c:191
#, c-format
msgid "Got SIGINT, exiting.\n"
@@ -1827,7 +1888,7 @@ msgstr "ä¸ä¼ éæ ·å¤±è´¥ï¼%s\n"
msgid "Premature end of file\n"
msgstr "æ件è¿æ©ç»æ\n"
-#: ../src/utils/pactl.c:770
+#: ../src/utils/pactl.c:771
#, fuzzy, c-format
msgid ""
"%s [options] stat\n"
@@ -1871,7 +1932,7 @@ msgstr ""
" -s, --server=SERVER è¦è¿æ¥çæå¡å¨å\n"
" -n, --client-name=NAME æ¤å®¢æ·ç«¯å¨æå¡å¨ä¸çå称\n"
-#: ../src/utils/pactl.c:822
+#: ../src/utils/pactl.c:823
#, c-format
msgid ""
"pactl %s\n"
@@ -1882,66 +1943,66 @@ msgstr ""
"Compiled with libpulse %s\n"
"Linked with libpulse %s\n"
-#: ../src/utils/pactl.c:861
+#: ../src/utils/pactl.c:862
#, c-format
msgid "Please specify a sample file to load\n"
msgstr "请æå®è¦å è½½çéæ ·æ件\n"
-#: ../src/utils/pactl.c:883
+#: ../src/utils/pactl.c:884
#, c-format
msgid "Failed to open sound file.\n"
msgstr "æå¼å£°é³æ件失败ã\n"
-#: ../src/utils/pactl.c:895
+#: ../src/utils/pactl.c:896
#, c-format
msgid "You have to specify a sample name to play\n"
msgstr "ä½ å¿
é¡»æå®è¦ææ¾çéæ ·å\n"
-#: ../src/utils/pactl.c:907
+#: ../src/utils/pactl.c:908
#, c-format
msgid "You have to specify a sample name to remove\n"
msgstr "ä½ å¿
é¡»æå®è¦å é¤çéæ ·å\n"
-#: ../src/utils/pactl.c:915
+#: ../src/utils/pactl.c:916
#, c-format
msgid "You have to specify a sink input index and a sink\n"
msgstr "ä½ å¿
é¡»æå®é³é¢åºå£ç´¢å¼åé³é¢åºå£\n"
-#: ../src/utils/pactl.c:924
+#: ../src/utils/pactl.c:925
#, c-format
msgid "You have to specify a source output index and a source\n"
msgstr "ä½ å¿
é¡»æå®é³é¢å
¥å£è¾åºç´¢å¼åé³é¢å
¥å£\n"
-#: ../src/utils/pactl.c:938
+#: ../src/utils/pactl.c:939
#, c-format
msgid "You have to specify a module name and arguments.\n"
msgstr "å¿
é¡»æå®æ¨¡ååååæ°ã\n"
-#: ../src/utils/pactl.c:958
+#: ../src/utils/pactl.c:959
#, c-format
msgid "You have to specify a module index\n"
msgstr "å¿
é¡»æå®æ¨¡åç´¢å¼\n"
-#: ../src/utils/pactl.c:968
+#: ../src/utils/pactl.c:969
#, fuzzy, c-format
msgid ""
"You may not specify more than one sink. You have to specify a boolean "
"value.\n"
msgstr "ä¸å¯æå®å¤ä¸ªé³é¢åºå£ãå¿
é¡»æå®è³å°ä¸ä¸ªå¸å°å¼ã\n"
-#: ../src/utils/pactl.c:981
+#: ../src/utils/pactl.c:982
#, fuzzy, c-format
msgid ""
"You may not specify more than one source. You have to specify a boolean "
"value.\n"
msgstr "ä¸å¯æå®å¤ä¸ªé³é¢å
¥å£ãå¿
é¡»æå®è³å°ä¸ä¸ªå¸å°å¼ã\n"
-#: ../src/utils/pactl.c:993
+#: ../src/utils/pactl.c:994
#, fuzzy, c-format
msgid "You have to specify a card name/index and a profile name\n"
msgstr "ä½ å¿
é¡»æå®é³é¢åºå£ç´¢å¼åé³é¢åºå£\n"
-#: ../src/utils/pactl.c:1008
+#: ../src/utils/pactl.c:1009
#, c-format
msgid "No valid command specified.\n"
msgstr "æªæå®ææçå½ä»¤ã\n"
--
hooks/post-receive
PulseAudio Sound Server
More information about the pulseaudio-commits
mailing list